Check out the new USENIX Web site. next up previous
Next: I/O Processing Up: Data Layout Previous: Physical Storage

Logical Storage

The logical storage can viewed as a collection of logical stripes. The logical to physical translation is done by the driver, so that the user's view of the data does not change even as the stripes undergo change of state. A logical stripe can be in any of the following states:

Invalid No backing store is allocated for this type of logical stripe. Initially all the logical stripes belong to this type.

RAID1 Two physical stripes of different polarity provide backing store for a declustered RAID1 logical stripe. Due to the way stripe units are numbered in a stripe, this ensures that the mirrors always come from different columns. The parity stripe units of the physical stripes backing a RAID1 logical stripe are left unused. This leads to some of the storage going unused but it keeps the data structures and the mechanisms simple.

RAID5 A single physical stripe provides backing store for a RAID5 logical stripe.

cRAID5 The data of this stripe is compressed and stored in a physical stripe. Since a compressed stripe is smaller than the uncompressed one, a full physical stripe is not necessary for providing the backing store for the compressed data. The unused region of the physical stripe can be backing store for some other compressed stripes. Since the compressed data is stored in RAID5 format, we can sustain single disk failures. Since the unit of allocation is at sub stripe level, an allocation bitmap is stored persistently on the disk.

An allocation bitmap is used to maintain the allocation status of physical stripes. The logical to physical translation table and the allocation bitmap are persistent structures stored on private partitions3 which are read into the main memory at the time of loading the driver which is a loadable kernel module. When changes to these data structures need to be persistent, like logical stripe type or allocation status of a physical stripe, the on-disk copies of those specific entries are updated.

With out compression, it is sufficient to know if a physical stripe is acting as backing store for any logical stripe or not. Introducing compression requires us to be able to address storage in smaller units than stripes. For the sake of simplicity, we set the number of individually allocatable subunits within a stripe to a power of 2 (2n) before the creation of device; the granularity of compression is thus set to stripe size/2n. Once the device is created, this cannot be changed.

If a logical stripe is backed by a cRAID5 stripe, the translation table gives the index into the compression table where the information of the backing physical stripe is stored. The latter includes the physical stripe that contains the backing store for the logical stripe, the actual size after compression and the offset of the allocation unit in the physical stripe.


next up previous
Next: I/O Processing Up: Data Layout Previous: Physical Storage
Dr K Gopinath
2000-04-25