We're observing poor file read IO results that we'd like to better understand. We can use fio to write 100 files with a sustained aggregate throughput of ~700MB/s. When we switch the test to read instead of write, the aggregate throughput is only ~55MB/s. The drop seems related to the number of files since the throughput for read and write are comparable for a single file then diverge proportionally as we increase the number of files.
The test server has 24 CPU cores, 48GB of memory, and is running CentOS 6.0. The disk hardware is a RAID 6 array with 12 disks and a Dell H800 controller. This device is partitioned with ext4 using the default settings.
Increasing the readahead (using blockdev) improves the read throughput significantly but it still doesn't match write speed. For instance, increasing the readahead from 128KB to 1M improved the read throughput to ~145MB/s.
Below are iostat results for the read case:
$ iostat -mx 2 avg-cpu: %user %nice %system %iowait %steal %idle 0.06 0.00 0.15 4.06 0.00 95.73 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util sda 0.00 0.00 524.00 0.00 73.12 0.00 285.77 27.07 51.70 1.90 99.70
and write case:
$ iostat -mx 2 avg-cpu: %user %nice %system %iowait %steal %idle 0.73 0.00 4.98 2.92 0.00 91.37 Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util sda 0.00 195040.50 0.00 3613.00 0.00 776.79 440.32 137.23 37.88 0.28 100.00
One oddity is that rrqm/s is at 0.0 for the read case.
Is this a known performance issue in our OS/disk/filesystem configuration? If so, how can we tell? If not, what tools or tests can we use to further isolate the issue?