Тестирование локальной производительности

Обзор

: В DC-системе запускайте тесты на узле, на котором активен RAID с тестируемым LUN.

Для тестирования используются следующие паттерны:

  • Пять минут последовательного чтения и/или записи с размером блока 4К и глубиной очереди 64.
  • Пять минут последовательного чтения и/или записи с размером блока 1М и глубиной очереди 64.
  • Пять минут случайного чтения и/или записи с размером блока 4К и глубиной очереди 64.
  • Пять минут случайного чтения и/или записи с размером блока 1М и глубиной очереди 64.

Тестирование производится при помощи бенчмарка «Flexible I/O Tester» (далее – FIO) последоватльным запуском двух скриптов: fio-test и fio-parser (см. листинг скриптов в главе Приложение. Скрипты локального нагрузочного тестирования).

Подробное описание параметров см. на официальном сайте fio.

: В скрипте fio-test не меняйте порядок параметров, т.к. от него зависит работа скрипта fio-parser.

Для тестирования используются следующие параметры fio:

  • blocksize => [ "4k", "1m" ]

    прочие возможные значения [ "4k", "8k", "16k", "32k", "64k", "128k", "256k", "512k", "1m" ]

  • rw => [ "randrw", "rw" ]

    прочие возможные значения [ "read", "write", "randread", "randwrite", “rw”, “randrw” ]

  • rwmixread => [ "0", "30", "50", "70", "100" ]

    прочие возможные значения [ "0", "5", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55", "60", "65", "70", "75", "80", "85", "90", "95", "100" ]

  • direct => [ 1 ]
  • ioengine => [ "libaio" ]
  • iodepth=> [ "64" ]

    прочие значения [ "1", "4", "8", "32", "64" ]

  • runtime => [ 60 ]
  • numjobs => [ "32" ]

    прочие значения [ "1", "8", "32" ]

  • bwavgtime => [ 100000 ]

Тестирование IOPS, времени отклика и пропускной способности

: Все данные на тестируемом LUN будут удалены.

Чтобы локально протестировать производительность LUN рекомендуемым способом:

  1. Создайте LUN с требуемыми характеристиками.
  2. Убедитесь, что логирование отключено:

    $ rdcli param driver show | grep log_level

    Значение log_level должно быть 0.

    Чтобы отключить логирование, выполните

    $ rdcli param driver modify -l 0
  3. Узнайте имя устройства LUN:

    $ lsblk

    Устройство LUN будет иметь имя вида lrvm_<lun_name>.

  4. Запустите fio-test:

    $ ./fio-test </dev/lun_for_test> > out.txt

    Продолжительность тестирования - 20 минут.

  5. Запустите fio-parser:

    $ ./fio-parser out.txt > out.csv

Аппаратное тестирование

: Все данные на тестируемых дисках будут удалены, в том числе метаданные RAID.
  • Тестирование дисков, подключенных через встроенную корзину.
  • Тестирование дисков, подключенных через внешнюю корзину.

Для аппаратного тестирования дисков используйте следующую конфигурацию fio:

[global]
ioengine=libaio
direct=1
group_reporting

numjobs=32
iodepth=1
bs=1M
runtime=1800s
ramp_time=5s
rw=randrw
offset_increment=10G

rwmixread=50
rwmixwrite=50

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

$ echo -e "\n" >> fio.cfg; counter=0; for disk in `lsblk -r|grep "3.7T"|awk '{ print $1 }'`; do echo \[disk$counter\]; ((counter=counter+1)); echo filename=/dev/$disk; done >> fio.cfg

В этом примере файл конфигурации называется «fio.cfg» и в него добавляются все диски из lsblk с размером 3.7 T.

Интерпретация результатов

Значения столбцов:

  • blocksize – размер блока;
  • iodepth – глубина очереди;
  • numjobs – количество потоков;
  • rw – тип нагрузки (последовательные или случайные чтение/запись);
  • rwmixread – соотношение количества команд чтения к количеству команд записи (при 0 только запись, при 100 только чтение, другие значения для смешанной нагрузки);
  • r_iops – IOPS при чтении;
  • r_maxlat_usec – максимальная задержка в микросекундах при чтении;
  • r_avglat_usec – средняя задержка в микросекундах при чтении;
  • w_iops – IOPS при записи;
  • w_maxlat_usec – максимальная задержка в микросекундах при записи;
  • w_avglat_usec – средняя задержка в микросекундах при записи;
  • r_aggrb_MB – средняя пропускная способность потоков в МБ при чтении;
  • w_aggrb_MB – средняя пропускная способность потоков в МБ при записи.