|From:||"Thomas E. Spanjaard" <tgen@xxxxxxxxxxxxx>|
|Date:||Wed, 21 Feb 2007 23:47:41 +0000|
The physical storage backing a filesystem is broken up into large 1MB-4GB segments (64MB is a typical value). Each segment is self-identifying and contains its own header, data table, and record table. The operating system glues together filesystems and determines availability based on the segments it finds.
- The data table consists of pure data, laid out linearly in the forward direction within the segment. Data blocks are variable-sized entities containing pure data, with no other identifying information, suitable for direct DMA. The segment header has a simple append index for the data table.
- The record table consists of fixed-sized records and a reference to data in the data table. The record table is built backwards from the end of the segment.
Record destruction creates holes in both the data table and the record
table. Any holes adjacent to the data table append point or the record
table prepend point are immediately recovered by adjusting the appropriate indices in the segment header. The operating system may
cache a record of non-adjacent holes (in memory) and reuse the space,
and can also generate an in-memory index of available holes on the
fly when space is very tight (which requires scanning the record table),
but otherwise the recovery of any space not adjacent to the data table
append point requires a performance reorganization of the segment.
Cheers, -- Thomas E. Spanjaard email@example.com
Description: OpenPGP digital signature