Monday, September 8, 2008

A Fast File System For UNIX

This paper traced the creation of FFS, a newer implementation of the UNIX file system. A few layout features of this file system include cylinder groups, an available block bitmap (replacing the old system's free list), a static number of inodes per cylinder group, and larger block sizes. The added benefit of larger block sizes is being able to keep big files together on a cylinder and hence having fewer seeks. However, since UNIX typically uses lots of little files, this scheme also causes lots of wasted space (up to 45%). This wasted space led to the technique of splitting blocks into fragments.

In terms of layout, the top level goals are to minimize seek latency and to promote larger data transfers; the authors wanted to increase locality, but they also wanted to spread unrelated data to different cylinder groups. Blocks are allocated with the idea of keeping them "rotationally optimal." In order to localize files, there is a requisite free space reserve of blocks that must be kept unallocated. Because of the new system's larger block size, both reads and writes are faster than in the old system. Reads are sped up, but writes are slower than reads because they require longer allocation for the larger blocks. The idea of pre-allocating block batches to a file sounds like a good way to improve write performance, and the creators of the DEMOS file system felt the same way, but these authors did not deem it worth their time to handle something accounting for 10% of a write system call.

No comments: