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

    Общий рейтинг статьи: 0 (проголосовало 0 )
    Опубликовано:  [просмотров 732]


    Тестирование производительности аппаратных решений - один из ключевых моментов построения высокопроизвродительных 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-массива не стоит, но и проседания производительности так же не обнаружено и, следовательно, имеет смысл использовать программные массивы для повышения степени надежности дисковых хранилищ.


    Обсуждение статьи
    Вопрос нашего пользователяsize=32m вы серьезно? Что можно протестировать на таком малом объеме? А clat зачем вырезали из вывода?
    Ответ на комментарийДаже на таком объеме понятно, что толку от них в плане производительности нет.

    Ваш комментарий: