Check out the new USENIX Web site. next up previous
Next: Implementation of Migration Up: Further Details of Linux Previous: Declustered RAID1 I/O Handling

RAID5 I/O Handling

I/O handling depends on whether it is a partial stripe I/O or full stripe I/O, so we discuss them separately.

Full stripe I/O Parity is computed from the data, and then data and parity both are written by breaking the stripe I/O into second level stage I/Os corresponding to each buffer in the stripe. We also need to invalidate the cache buffers corresponding the stripe undergoing I/O before writing the data to disk (see section 4.2.2).

Partial stripe I/O Partial stripe writes are a bit more involved than full stripe writes. To improve performance, a partial stripe write is handled in two ways:

1: Read-Modify-Write: This type of I/O handling is used when the size of update is less than half the stripe length. The buffers in stripe units that are going to be overwritten are read, then the parity is computed by xoring the old data, old parity and new data. The new parity and data are written to the disk by creating second level stage I/Os for each of the buffer involved.

2: Reconstruction-Writes: This type of I/O handling is used when the size of update is more than half the stripe length. Stripe units that are not going to be written are read in from the disk. The parity is computed by xoring the data read and data to be written. The new parity and data are written in similar way to Read-Modify-Write I/O.


next up previous
Next: Implementation of Migration Up: Further Details of Linux Previous: Declustered RAID1 I/O Handling
Dr K Gopinath
2000-04-25