Ускорение работы md raid1

Создавая в линуксе raid1 ожидается, что скорость вырастет в 2 раза — из-за параллельного чтения с обеих (или со всех) дисков зеркала. К сожалению, это не так. Для последовательного чтения одним потоком используется только один диск.

Device: rrqm/s   wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sdb   43077.00 0.00 1387.00 14.00 355712.00 106.00 253.97 1.31 0.94 0.71 98.80
sda   0.00     0.00    0.00      14.00   0.00        106.00 7.57 0.01 0.86 0.86 1.20
md0   0.00     0.00    44464.00 0.00 355712.00 0.00 8.00 0.00 0.00 0.00 0.00

Для того, чтобы добиться таки увеличения производительности — можно сделать хак — создать raid10 вместо raid1, разбив диски дополнительно на две части (допустим это будут sda2, sda3, sdb2 и sdb3)
Порядок разделов в рейдах важен!
mdadm --create /dev/md1 --level=1 -n2 --chunk=256 /dev/sda2 /dev/sdb3 
mdadm --create /dev/md2 --level=1 -n2 --chunk=256 /dev/sdb2 /dev/sda3
mdadm --create /dev/md0 --level=0 -n2 --chunk=256 /dev/md1 /dev/md2


Теперь для полного счастья увеличиваем read-ahead дисков
blockdev --setra 512 /dev/sda
blockdev --setra 512 /dev/sdb

И получаем скорость около 2х при чтении =)