Тестирование производительности жестких дисков и програмных raid-массивов в linux

HELP-ME-24.COM (Freelance Team), Черноусов Антон

Тестирование производительности аппаратных решений - один из ключевых моментов построения высокопроизвродительных Linux и Windows систем, производительность дисковой подсистемы как известно является одним из "узких горлышек" производительности всей системы. Сегодня мы проведем небольшой эксперимент в духе "разрушителей мифов", а именно попробуем понять имеет ли смысл собирать программные raid-массивы для повышения производительности или они имеют смысл только для повышения отказоустойчивости системы.

Тестирование производительности программных raid-массивов в Linux

Теоретически, использование дисковых массивов должно улучшить показатели скорости чтения/записи ,в зависимости от уровня массива, это справедливо для аппаратных raid-контроллеров и мы в этом неоднократно убеждались. Но аппаратные raid-контроллеры являются довольно дорогой игрушкой и на замену дорогим аппаратным решениям приходят программные реализации raid-массивов.

Сегодня нам необходимо проверить, даст ли использование программных raid-массивов в Linux какой бы то ни было прирост производительности, или придется довольствоваться лишь повышением отказоустойчивости за счет использования избыточных дисков в массиве. Для тестирования производительности дисковой подсистемы в Linux существует такая утилита как fio, при помощи этой утилиты мы можем проработать любой сценарий стрессовой нагрузки дисковой подсистемы. Стоит отметить, что если вы надумаете тестировать дисковую систему на виртуальной машине при оплате за IOPS, то сумма которую вам выставят за такое "тестирование" будет приличной.

Итак, вы предупреждены и мы можем рассмотреть сценарии тестирования, разобраться с показателями и проверить ,есть ли выгода от использования программного raid-массива. Как и в других заметках, начнем с установки необходимых пакетов:

# aptitude install fio

Параметром, который принимает команда fio является путь к конфигурационному файлу, в котором описаны параметры тестирования. Например:

# fio ./read-write-sdb.conf

Команда может работать как напрямую с дисковыми устройствами, так и с файлами. Режим тестирования ограничен лишь вашей фантазией. Я использовал вот такой конфигурационный файл:

[readtest-01]
blocksize=4k
filename=/dev/sdb
rw=randread
direct=1
buffered=0
ioengine=libaio
iodepth=3
size=32m


[writetest-01]
blocksize=4k
filename=/dev/sdb
rw=randwrite
direct=1
buffered=0
ioengine=libaio
iodepth=3
size=32m

В этом случае мы эмулируем три потока чтения и три потока записи (случайный нелинейный) объемом 32 мб. В тестировании принимают участие два жестких диска.

Первый (/dev/sda)

Model Family: Seagate Barracuda 7200.12
Device Model: ST3500413AS

Второй (/dev/sdb)

Model Family: Seagate Barracuda 7200.12
Device Model: ST3500418AS

Одинаковых дисков под рукой не оказалось, но в принципе они оба показали похожие результаты.

# fio ./read-write-sda.conf

Jobs: 1 (f=1): [r(1),_(1)] [100.0% done] [2760KB/0KB/0KB /s] [690/0/0 iops] [eta 00m:00s]
readtest-01: (groupid=0, jobs=1): err= 0: pid=4146: Tue Sep 27 18:03:42 2016
read : io=32768KB, bw=549577B/s, iops=134, runt= 61055msec
...
writetest-01: (groupid=0, jobs=1): err= 0: pid=4147: Tue Sep 27 18:03:42 2016
write: io=32768KB, bw=747781B/s, iops=182, runt= 44872msec
...

Run status group 0 (all jobs):
READ: io=32768KB, aggrb=536KB/s, minb=536KB/s, maxb=536KB/s, mint=61055msec, maxt=61055msec
WRITE: io=32768KB, aggrb=730KB/s, minb=730KB/s, maxb=730KB/s, mint=44872msec, maxt=44872msec

Disk stats (read/write):
sda: ios=8093/8192, merge=0/0, ticks=193208/134224, in_queue=327432, util=99.90%

# fio ./read-write-sdb.conf

fio-2.2.10
Starting 2 processes
Jobs: 1 (f=1): [r(1),_(1)] [100.0% done] [1120KB/0KB/0KB /s] [280/0/0 iops] [eta 00m:00s]
readtest-01: (groupid=0, jobs=1): err= 0: pid=4227: Tue Sep 27 18:10:04 2016
read : io=32768KB, bw=531765B/s, iops=129, runt= 63100msec
...
writetest-01: (groupid=0, jobs=1): err= 0: pid=4229: Tue Sep 27 18:10:04 2016
write: io=32768KB, bw=745223B/s, iops=181, runt= 45026msec
...

Run status group 0 (all jobs):
READ: io=32768KB, aggrb=519KB/s, minb=519KB/s, maxb=519KB/s, mint=63100msec, maxt=63100msec
WRITE: io=32768KB, aggrb=727KB/s, minb=727KB/s, maxb=727KB/s, mint=45026msec, maxt=45026msec

Disk stats (read/write):
sdb: ios=8217/8192, merge=0/0, ticks=210092/134616, in_queue=344748, util=99.90%

Как я уже говорил, диски показали практически идентичную производительность, и теперь мы соберем программный дисковый массив и запустим аналогичный тест для дискового массива. Для сборки дискового массива из двух дисков используется следующая команда:

# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda /dev/sdb

Создание дискового массива займет довольно много времени и вы можете контролировать процесс создания массива командой:

# cat /proc/mdstat

По завершении создания дискового массива выполним тест для программного дискового массива:

# fio ./read-write-md0.conf

fio-2.2.10
Starting 2 processes
Jobs: 1 (f=1): [r(1),_(1)] [94.9% done] [2820KB/0KB/0KB /s] [705/0/0 iops] [eta 00m:03s]
readtest-01: (groupid=0, jobs=1): err= 0: pid=5571: Tue Sep 27 20:13:37 2016
read : io=32768KB, bw=603942B/s, iops=147, runt= 55559msec
...
writetest-01: (groupid=0, jobs=1): err= 0: pid=5572: Tue Sep 27 20:13:37 2016
write: io=32768KB, bw=741403B/s, iops=181, runt= 45258msec
...

Run status group 0 (all jobs):
READ: io=32768KB, aggrb=589KB/s, minb=589KB/s, maxb=589KB/s, mint=55559msec, maxt=55559msec
WRITE: io=32768KB, aggrb=724KB/s, minb=724KB/s, maxb=724KB/s, mint=45258msec, maxt=45258msec

Disk stats (read/write):
md0: ios=8078/8192, merge=0/0, ticks=0/0, in_queue=0, util=0.00%, aggrios=4153/8198, aggrmerge=0/0, aggrticks=84910/82620, aggrin_queue=167520, aggrutil=92.42%
sda: ios=4350/8198, merge=0/0, ticks=78216/83652, in_queue=161848, util=91.42%
sdb: ios=3956/8198, merge=0/0, ticks=91604/81588, in_queue=173192, util=92.42%

В результате проведенного эксперимента мы выяснили, что ожидать прироста производительности дисковой подсистемы от программного raid-массива не стоит, но и проседания производительности так же не обнаружено и, следовательно, имеет смысл использовать программные массивы для повышения степени надежности дисковых хранилищ.

Оставьте комментарий

Вы должны быть вошедший в чтобы отправить комментарий