A fork takes a request from a source process and breaks it up into individual requests for each disk of the array, calculates the number of parity requests that are needed, and forwards these requests to the disks. A fork will first calculate the number of parity requests that are needed by calculating the parity destination for each request. Duplicate requests are found by comparing the parity request for the current message to the request for the last message.
The current model is for a RAID Level 5 Disk Array with left-symmetric parity placement. RAID Level 5 distributes the parity information across the disk array, so no disk contains the entire parity information. The left-Symmetric parity placement policy places the parity information for the n parity stripes units in a round-robin fashion starting from the last disk. An example for 4 disks is shown below.
| 0 | 1 | 2 | P | | 3 | 4 | P | 5 | | 6 | P | 7 | 8 | | P | 9 | 10 | 11 | | 12 | 13 | 14 | P |
Each number represents a stripe unit, and P represents parity information. Each row represents a stripe of data along with the parity information. Each column represents the data on a single disk.
The fork requires the following information to be passed into its constructor:
NOTE: The last two items are used determine by the fork to determine
disk identifiers for routing the requests. Figure
illustrates a typical RAID example. The example has 16 sources routing
requests through a single fork to 10 different disks.