Scott Finley University of Wisconsin – Madison CS 736 Project

advertisement
Scott Finley
University of Wisconsin – Madison
CS 736 Project


Basic, default Linux file system
Almost exactly the same as FFS
◦ Disk broken into “block groups”
◦ Super-block, inode/block bitmaps, etc.




New from the ground up
Reliability as #1 goal
Reevaluate conventional OS structure
Leverage advances of the last 20 years
◦ Languages and compilers
◦ Static analysis of whole system




Implement Ext2 on Singularity
Focus on read support with caching
Investigate how Singularity design impact FS
integration
Investigate performance implications

I have a Ext2 “working” on Singularity
◦ Reading fully supported
◦ Caching improves performance!
◦ Limited write support

Singularity design
◦ Garbage collection hurts performance
◦ Reliability is good: I couldn’t crash it.
1.
2.
3.
Singularity Details
Details of my Ext2 implementation
Results

Everything is written in C#
◦ Small pieces of kernel (< 5%) in assembly and C++
as needed


Kernel and processes are garbage collected
No virtual machine
◦ Compiled to native code

Very aggressive optimizing compiler


Singularity is a micro kernel
Everything else is a SIP
◦ “Software Isolated Process”

No hardware based memory isolation
◦ SIP “Object Space” isolation guaranteed by static
analysis and safe language (C#)
◦ Context switches are much faster





All SIP communication is via message
channels
No shared memory
Messages and data passed via Exchange Heap
Object ownership is tracked
Zero copy data passing via pointers

Application creates buffer in ExHeap
App
File System
Empty
Buffer
Exchange Heap
Disk Driver

Application send read request to file system
◦ File system owns the buffer
App
File System
Empty
Buffer
Exchange Heap
Disk Driver

File system sends read request to driver
◦ Driver owns the buffer
App
File System
Empty
Buffer
Exchange Heap
Disk Driver

Driver fills buffer and replies to file system
App
File System
Full Buffer
Exchange Heap
Disk Driver

File system replies to application
App
File System
Full Buffer
Exchange Heap
Disk Driver

Application consumes the buffer
App
File System
Exchange Heap
Disk Driver




Ext2Control: Command line application
Ext2ClientManager: Manages mount points
Ext2FS: Core file system functionality
Ext2Contracts: Defines communication





System service (SIP) launched at boot
Accessible at known location in /dev directory
Does “Ext2 stuff”
Operates on Ext2 volumes and mount points
Exports “Mount” and “Unmount”
◦ Would also provide “Format” if implemented

300 lines of code




Command line application
Allows Ext2 Client Manger interface access
Not used by other applications
500 lines of code


Core Ext2 file system.
Separate instance (SIP) for each mount point.
◦ Exports “Directory Service Provider” interface

Clients open files and directories by attaching
a communication channel
◦ Internally paired with an Inode.


Reads implemented, Writes in progress
2400 Lines of code

1.
2.
3.
4.
Client wants to read file “/mnt/a/b.txt”
◦ Ext2 mounted at “/mnt”
App --CH0-->SNS: <Bind,“/mnt/a/b.txt”,CH1>
App<--CH0-- SNS: <Reparse, “/mnt”>
App --CH0-->SNS: <Bind,”/mnt”,CH1>
App<--CH0-- SNS: <AckBind>
8.
App --CH1-->Ext2Fs:
App<--CH1-- Ext2Fs:
App --CH2-->Ext2Fs:
App<--CH2-- Ext2Fs:
9.
…
5.
6.
7.
<Bind,“/a/b.txt”,CH2>
<AckBind>
<Read, Buff, BOff, FOff>
<ReadAck, Buff>
1.
2.
3.


Inodes: Used on every access
Block Numbers: Very important for large files
Data Blocks: Naturally captures others
All use LRU replacement
Large files unusable without caching
◦ 8300X faster reading 350 MB file






Athlon 64 3200, 1 GB RAM
Disk: 120GB, 7200 RPM, 2 MB buffer, PATA
Measured sequential reads
Varied read buffer size from 4 KB to 96 MB
Timed each request
File sizes ranged from 13 MB to 350 MB
350MB File Sequential Read
35
30
Read Speed (MB/S)
25
Linux
Average
4 KB
20
8 KB
16 KB
64 KB
15
256 KB
1 MB
8 MB
10
64 MB
96 MB
Cold
5
0
2,048
8,192
32,768
131,072
524,288
2,097,152
Buffer Size (Bytes)
8,388,608
33,554,432
134,217,728
200 Sequential 16 KB Buffer Reads of 350 MB
File
35
30
Read Speed (MB/s)
25
20
15
10
5
0
Time

Linux is faster
◦ Not clear that this is fundamental

Performance is not horrible
◦ “Good enough” objective met
◦ Garbage collection hurts, but not “too bad”

Not sensitive to file size



System programming in a modern language
System programming with no crashes
Micro kernel is feasible
◦ Hurts feature integration: mmap, cache sharing
◦ Clean, simple interfaces
13 MB File Sequential Read
35
30
Read Speed (MB/S)
25
Linux
Average
4 KB
20
8 KB
16 KB
64 KB
15
256 KB
1 MB
8 MB
10
64 MB
96 MB
Cold
5
0
2,048
8,192
32,768
131,072
524,288
2,097,152
Buffer Size (Bytes)
8,388,608
33,554,432
134,217,728
64 KB Buffer Reads of 350 MB File
35
30
Read Speed (MB/s)
25
20
15
10
5
0
Time
64 MB Buffer Reads of 350 MB File
30
Read Speed (MB/s)
25
20
15
10
5
0
Time
Average Sequential Read Speeds
30
Read Speed (MB/s)
25
20
15
13 MB File
350 MB File
10
5
0
2,048
8,192
32,768
131,072
524,288
2,097,152
Buffer Size
8,388,608
33,554,432 134,217,728
Download