Check out the new USENIX Web site. next up previous
Next: I/O Handling Up: Implementation Previous: Changes to Kernel

Data Structures

Maptable The maptable is a data structure used for logical to physical translation, and maintaining access information. This is read into the main memory at driver loading time. Whenever an entry changes its type, it is flushed to stable storage but access information updates do not result in flushing. The entries of this data structure are 64bit long, containing fields for the type of the stripe, the physical stripes backing the stripe, the access information and an advisory bit to note if there is an access currently active on the stripe (see figure 8). The size of the maptable is equal to the number of logical stripes in the configuration.

Allocation Bitmap This is used to maintain the allocation status of physical stripes. Since the unit of allocation is smaller than the size of the stripe with cRAID5, we have a bit for each allocation unit of storage.

Compression Table This table stores the metadata of each of the compressed stripe. For each compressed stripe, we need to know the stripe number which provides the backing store for the compressed data. Also, since the allocation of backstore is not done in units of bytes but in some units of sectors, we need to store the exact number of bytes which the compressed stripe occupies. This is required for the decompression algorithm. Also since the allocation is done in units smaller than the stripe size, we need to know which units are occupied by this compressed data. But since the allocation is contiguous, we need to store the offset of the first unit within the stripe. We can always calculate the number of units, from the size of the compressed stripe. Thus the structure of the compressed table entry is as shown in the figure 9.

Access Log When enabled, all the accesses to the device driver are logged in an in-memory access log which is a circular array of access entries. Each entry consists of two fields; the starting sector number and the size of the access in number of sectors. This can be enabled on a per instance basis. This access log can be accessed from an application to keep track of the accesses to the driver.


next up previous
Next: I/O Handling Up: Implementation Previous: Changes to Kernel
Dr K Gopinath
2000-04-25