Как измерить IOPS?
Несколько способов измерения производительности диска или дискового массива.
Измерение случайных IOPS с помощью FIO
FIO - популярный инструмент для измерения IOPS на сервере Linux.
Достаточно гибкий и простой инструмент в пользовании.
В статье будет рассмотрено несколько вариантов проверки, а именно случайное чтение, случайная запись и их комбинация блоками по 4Кб с многопоточностью.
Установка в CentOS/RHEL
1 | yum install epel-release -y && yum install fio -y |
Установка в Debian/Ubuntu
1 | apt-get install fio |
Тест случайных операций на чтение/запись
Данный тест создаст файл размером 4Гб и выполнит чтение и запись 4Кб с использованием разделения 75%/25% в файле, причем одновременно будет выполняться 64 операции. На каждые 3 операции чтения - одна операция на запись.
1 | fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=fiotest --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75 |
Результат выполнения команды будет приблизительно следующим:
1 | fiotest: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64 |
Исходя из полученной информации делаем вывод, что наш диск в среднем выполняет 32115 операций на чтение и 10709 на запись. (Соотношение 3/1)
1 | read : io=3071.7MB, bw=128462KB/s, iops=32115, runt= 24485msec |
Тест случайных операций на чтение
Для измерения количества случайных операций на чтение выполняем следующую команду:
1 | fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=fiotest --bs=4k --iodepth=64 --size=4G --readwrite=randread |
Результат выполнения команды будет приблизительно следующим:
1 | test: (g=0): rw=randread, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64 |
Результаты теста показывают 55763 операций чтения в секунду, что очень хорошо для локального SSD.
1 | read : io=4096.0MB, bw=223054KB/s, iops=55763, runt= 18804msec |
Тест случайных операций на запись
Для измерения количества случайных операций на запись выполняем следующую команду:
1 | fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=fiotest --bs=4k --iodepth=64 --size=4G --readwrite=randwrite |
Результат выполнения команды будет приблизительно следующим:
1 | test: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64 |
Результаты теста показывают 28660 операций на запись в секунду.
1 | write: io=4096.0MB, bw=114642KB/s, iops=28660, runt= 36586msec |
Последним аспектом оценки производительности диска является измерение задержки по отдельным запросам. Один из способов выяснить это - воспользоваться утилитой ioping.
1 | # ioping -c 10 . |
Среднее значение задержки 138.8 us (микросекунд), что в целом очень хорошо! Если данный параметр будет превышать несколько миллисекунд, то с диском или дисковым массивом наблюдаются проблемы. Необходимо провести диагностику и найти “узкое место”, либо источник проблемы.
Измерение IOPS с помощью CrystalDiskMark в Windows
CrystalDiskMark - небольшая бесплатная программа, предназначенная для сравнительного тестирования быстродействия жестких дисков. Позволяет измерить скорость чтения и записи данных.
Загружаем и запускаем утилиту:
В программе представлено несколько тестов:
- Sequential Tests (последовательная запись и чтение)
- 4K Q8T8 (случайное чтение/запись блоков по 4Kб с глубиной 8 в 8 поток)
- 4K Q1T1 (случайное чтение/запись блоков по 4Kб с глубиной 1 в 1 поток)
- 4K QD32T1 (случайное чтение/запись блоков по 4Kб с глубиной 32 в 1 поток)
Запустим выполнение всех тестов и посмотрим на результат.
Посмотрим среднее количество IOPS на примере теста 4K Q8T8, для этого наведите курсор на значение и во всплывающей подсказке будет отображено количество IOPS.