The calculation of parity is performed by all drives being written to at once. At position one each bit is read from each drive. An Exclusive-OR operation is performed on these bits and a value is calculated. This value is written to the parity drive. The speed of these calculations is constrained by the speed at which the data can be obtained from the individual data drives. This speed is determined by the speed of the drives themselves or the data bus to which they are attached.
Most unRAID systems being built today place the hard disks on a PCIe bus to prevent the data bus slowing the parity calculation, therefore the speed of the drives themselves becomes the limiting factor. Most systems utilize a mixture of disk sizes. These smaller drives have lower areal density and thus lower data read rates. During parity calculation these small drives slow down parity calculation until they are read from completely. Because the data read rate is a function of the areal density, the read rate at the inner tracks of a hard disk is much lower than those at the outside. This degradation is about a factor of two on the disks we tend to use in unRAID.
We can reduce and sometimes eliminate the reduction in parity calculation speed by shifting the smaller drives until the end of the parity calculation. To do this would of course require a change to the way the unRAID software. Smaller drives would have an offset added to their first address such that the last bit on all drives would occur at the same time, unlike now where the first bit is aligned. In my calculations this would speed up my parity calculations by twenty percent. I have a mixture of 1T. and 2T. drives, some 7200 and some 5400-5900. In no case would this ever decrease performance of the parity calculation. If all drives are of equal size, then parity would of course be the same as it is now.
This would require a software change on Tom’s part. The major downsize is that the parity disk would be different between two different versions of the software. Downgrading UnRAID release versions would not be possible without a parity recalculation. A couple of things could be done to help alleviate the transition. Write out the parity creating method on the parity disk itself; warn the user if this signature is not recognized. Allow users to opt in to this parity creation method, so they will only invoke it once they know the risks. I for one would jump at the chance to decrease parity check times. I just spent several hundred dollars upgrading because my parity calculation times were getting out of hand. Now I want that last little bit.
Scott