[Tux3] Design note: Metablocks

Daniel Phillips phillips at phunq.net
Fri Feb 6 00:51:15 PST 2009

The Tux3 disk superblock is now 96 bytes in size including magic number.  
Do we have any plans for the other 4000 bytes?  Yes: we will fill the 
bulk of the disksuper with pointers to "metablocks".  A metablock is 
like a superblock, except it is stored at some arbitrary place on the 
volume and it only contains data that may vary per delta commit.  Any 
fields that are set just once at mkfs time will remain in the normal 
disk superblock.

Metablocks are reserved in the allocation bitmap and distributed roughly 
evenly across the entire volume.  (We may not actually represent these 
allocations in otherwise empty bitmap blocks, to avoid creating 
hundreds of bitmap blocks at mkfs time.)

The notion of metablocks addresses three issues:

  * When a pointer to the beginning of the log chain must be stored,
    it can always be stored in a fairly nearby location.  In other
    words, if we have 500 metablocks, the maximum time required to
    seek to the closest one is 1/500th of the average seek time for
    a single spindle.

  * Atomic update: overwriting the superblock risks damaging the
    filesystem if the write is interrupted when partially completed.
    We avoid that by never choosing the last written metablock as
    the location for the next.

  * We avoid constantly overwriting the superblock, which might be
    beneficial for some flash devices.

The main benefit is avoiding seeking on delta commit.

On startup, a naive strategy is to search all the metablocks to find the 
most recently written.  A better strategy is to store the location of 
the most recently written metablock in a known location (e.g., the 
first or second metablock) and only search all the metablocks after an 
unplanned interruption, as determined by a flag set at a known 

Metablocks themselves only need a few bytes of data each, maybe 100.  
The rest of a metablock may serve as an array of pointers to currently 
outstanding log blocks, in order to reduce the number seek time 
required to load all the log blocks at startup.

Except for the atomic update aspect, metablocks are purely an 
optimization for rotating media.  As such, we are in no hurry to 
implement them, which allows some time to refine the concept. 
Suggestions are welcome.

For now, to store a pointer to the most recent commit we will just 
mindlessly overwrite the disk superblock.  That will be inefficient 
(but not very) and risky (but not very).  It will do for now.



Tux3 mailing list
Tux3 at tux3.org

More information about the Tux3 mailing list