Тестирование локальной производительности
Обзор
Для тестирования используются следующие паттерны:
- Пять минут последовательного чтения и/или записи с размером блока 4К и глубиной очереди 64.
- Пять минут последовательного чтения и/или записи с размером блока 1М и глубиной очереди 64.
- Пять минут случайного чтения и/или записи с размером блока 4К и глубиной очереди 64.
- Пять минут случайного чтения и/или записи с размером блока 1М и глубиной очереди 64.
Тестирование производится при помощи бенчмарка «Flexible I/O Tester» (далее – FIO) последоватльным запуском двух скриптов: fio-test и fio-parser (см. листинг скриптов в главе Приложение. Скрипты локального нагрузочного тестирования).
Подробное описание параметров см. на официальном сайте fio.
Для тестирования используются следующие параметры 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 с требуемыми характеристиками.
-
Убедитесь, что логирование отключено:
$ rdcli param driver show | grep log_level
Значение log_level должно быть 0.
Чтобы отключить логирование, выполните
$ rdcli param driver modify -l 0
-
Узнайте имя устройства LUN:
$ lsblk
Устройство LUN будет иметь имя вида lrvm_<lun_name>.
-
Запустите fio-test:
$ ./fio-test </dev/lun_for_test> > out.txt
Продолжительность тестирования - 20 минут.
-
Запустите fio-parser:
$ ./fio-parser out.txt > out.csv
Аппаратное тестирование
- Тестирование дисков, подключенных через встроенную корзину.
- Тестирование дисков, подключенных через внешнюю корзину.
Для аппаратного тестирования дисков используйте следующую конфигурацию 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 – средняя пропускная способность потоков в МБ при записи.