Раздел находится в RAID1 с использованием программного RAID.
Command line used: iozone -s 190g -r 300k -O -b test_file
OPS Mode. Output is in operations per second.
random random bkwd record stride
KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread
199229440 300 240 234 254 253 58 127 100 6539 91 234 234 254 254
Таким образом, для блоков размером 300К произвольное чтение с использованием одного потока составило 58 операций в секунду или около 17 МБ / с.
Но когда я попробовал 5 потоков, каждый из которых считал блоки по 300К, неожиданно для меня это сработало быстрее, хотя я ожидал большего произвольного доступа:
OPS Mode. Output is in operations per second.
Command line used: iozone -s 80g -r 300k -O -l5 -u 5 -F test_file1 test_file2 test_file3 test_file4 test_file5
Children see throughput for 5 random readers = 69.27 ops/sec
Parent sees throughput for 5 random readers = 69.27 ops/sec
Min throughput per process = 13.81 ops/sec
Max throughput per process = 13.89 ops/sec
Avg throughput per process = 13.85 ops/sec
Кто-нибудь знает, какие политики чтения / кеширования в ОС Linux или на жестких дисках делают 5 потоков, читающих случайные блоки 300 КБ быстрее, чем 1 поток, читающий случайные 300 КБ блоков?
Что тут удивительного?
1 поток означает команду, ожидание, чтение, цикл. Здесь есть элемент ожидания - задержка.
Множественные потоки устраняют это и - позволяют более оптимизировать диски благодаря организации очереди нескольких команд. То, что вы получаете больше IOPS с 3 потоками, совсем не удивительно.
Это raid1, поэтому записи идут на оба диска, но чтение может быть удовлетворено одним, поэтому с большим количеством потоков я бы ожидал лучшей производительности. Но это может быть лучше всего с потоками, равными количеству дисков в рейде 1 (или части рейда 1 в рейде 10).