RAID-5 Hardware and Software Methods Compared

Methodology

When creating RAID-5 storage for testing, I used all available space on the disks and stipulated a stripe size of 64 KiB. For Windows/SW, there is no way to specify the stripe size, but I have read unsubstantiated claims that the stripe size is 64 KiB. For Ubuntu/HW and Windows/HW, I used the LSI storcli64 utility to create the array and configure it to use a cached I/O policy with an always-on write-back cache, physical disk cache, and adaptive read-ahead.

I tested on Ubuntu using fio performing I/O directly on the device.

I tried several versions of the Windows port of fio but could not get it to work with Storage Spaces without the process ignoring the end of the test interval, becoming unkillable, and requiring a reboot. Instead, I performed all tests on Windows using DiskSpd. I created a file for DiskSpd that filled up the entire test volume on an exFAT file system. In the case of Storage Spaces, the software is aware of what blocks on the virtual disk contain data (i.e., have been written to since creation) and so I filled the file with random data before testing. Otherwise, read tests of any kind would measure throughput at several gigabytes per second.

When a new array initialized its parity after creation, I waited until it was complete before testing.

I tested six different I/O patterns. Each test was preceded by 15 seconds of no activity, a 30-second ramp-up, and a 300-second test interval. Each set of six tests was performed 20 times. Each I/O pattern is named and described as follows:

I/O PatternDescription
randread4kiRandom reads of 4 KiB at 4 KiB boundaries with queue depth of 64 from two threads
randread64ki Random reads of 64 KiB at 64 KiB boundaries with queue depth of 64 from two threads
randwrite4kiRandom writes of 4 KiB at 4 KiB boundaries with queue depth of 64 from two threads
randwrite64kiRandom writes of 64 KiB at 64 KiB boundaries with queue depth of 64 from two threads
seqreadA sequential read of 4 MiB blocks with queue depth 16 from a single thread
seqwriteA sequential write of 4 MiB blocks with queue depth 16 from a single thread
I/O Patterns

Continue to the next page for a discussion of the test results.

Leave a comment

Your email address will not be published. Required fields are marked *