Categories: CentOSlinuxUbuntu

Тестирование IOPS дисков в Linux

В этой статье рассмотрим способы тестирования производительности IOPS дисков или дискового массива в Linux. IOPS (input/output operations per second) – количество операций ввода-вывода, выполняемые системой хранения данных за одну секунду (это может быть как один диск, RAID массив или LUN на системе хранения). Условно IOPS можно считать количество блоков, которые успевает считаться или записаться на носитель.

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

Установка утилиты fio для тестирования IOPS в Linux

Для замера производительности IOPS дисков в Linux можно использовать утилиту fio (утилита доступна для CentOS в репозитории EPEL ). Соотвественно для установки fio в RHEL, CentOS используется пакетный менеджер yum (dnf):

# yum install epel-release -y
# yum install fio -y

Либо apt-get в Debian, Ubuntu :

# apt-get install fio

Затем вам нужно определить диски для тестирования. Тестирование выполняется путев выполнения операций записи/чтения в той директории, в которую примонтирован диск или LUN.

Измерение производительности дисков в IOPS с помощью fio

Выполним несколько видов тестирования производительности IOPS диска в различных сценариях нагрузки на диск (реждим тестирования, который нужон выбрать зависит от логики размещенного приложения и общей архитектуры проекта).

Тест случайных операций на чтение/запись

При запуске такого теста, будет создан файл размером 8 Гб. Затем утилита fio выполнит чтение/запись блока 4КБ (стандартный размер блока) с разделением на 75/25% по количеству операций чтения и записи и замерит производительность. Команда выглядит следующим образом:

# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio --bs=4k --iodepth=64 --size=8G --readwrite=randrw --rwmixread=75

Первую проверку я запустил на массиве из двух SSD дисков и результаты получились хорошие:

READ: bw=328MiB/s (344MB/s), 328MiB/s-328MiB/s (344MB/s-344MB/s), io=6141MiB (6440MB), run=18721-18721msec_x000D_WRITE: bw=110MiB/s (115MB/s), 110MiB/s-110MiB/s (115MB/s-115MB/s), io=2051MiB (2150MB), run=18721-18721msec
  • Чтение : ~ 328MiB/s, 83000 IOPS
  • Запись : ~ 110MiB/s, 28000 IOPS

Так как мы запустили тест на чтение/запись, показатели по отдельным проверкам, будут чуть выше.

Для сравнения, я замерил скорость на обычном SATA диске:

  • Чтение ~ 1.7 MiB/s, 430 IOPS
  • Запись ~ 0.5 MiB/s, 143 IOPS

Для HDD диска результаты, конечно гораздо хуже, чем для SSD.

Тест случайных операций на чтение

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

# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio --bs=4k --iodepth=64 --size=8G --readwrite=randread

Команда поменялась в самом конце на --readwrite=randread .

Как ранее я уже говорил, скорость по отдельным замерам будет выше:

READ: bw=584MiB/s (612MB/s), 584MiB/s-584MiB/s (612MB/s-612MB/s), io=8192MiB (8590MB), run=14027-14027msec, IOPS - 150000

Если запустить тест только на чтение, разница со смешанным тестом достигает (200-250 MiB/s и 67000 IOPS), что достаточно ощутимо.

Тест случайных операций на запись

Для замера производительности диска для случайных операций записи, выполните команду:

# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=fiotest --bs=4k --iodepth=64 --size=8G --readwrite=randwrite

WRITE: bw=331MiB/s (347MB/s), 331MiB/s-331MiB/s (347MB/s-347MB/s), io=8192MiB (8590MB), run=24767-24767msec, IOPS 84700

Производительность операций записи на хороших SSD дисках тоже очень высокая. Как и в случае с чтением, разница со смешанным тестом достигает 200-250 MiB/s, а в IOPS 56000.

Если опираться на официальную документацию по дискам от производителя (это SSD диски от Intel), можно смело сказать, что в данном случае они не обманули.

Тестирование производительности дисков с помощью файлов.

Утилита fio позволяет проверять диски не только с помощью интерактивного запуска команд, но и запускать заранее подготовленные конфигурационные файлы для тестов. Чтобы воспользоваться данным вариантом, создайте файл:

# nano read.fio

И добавьте в него содержимое:

[global]_x000D_rw=randread_x000D_size=8G_x000D_filename=/tmp/testfio_x000D_ioengine=libaio_x000D_iodepth=4_x000D_ invalidate=1_x000D_direct=1_x000D_[bgread]_x000D_rw=randread_x000D_iodepth=64_x000D_

Теперь запустите тест:

# fio read.fio

Данный тест замерит скорость чтения диска. Чтобы выполнить проверку производительности для операций записи, используйте такой конфиг:

[global]_x000D_rw=randwrite_x000D_size=8G_x000D_filename=/tmp/testfio_x000D_ioengine=libaio_x000D_iodepth=4_x000D_invalidate=1_x000D_direct=1_x000D_[bgwrite]_x000D_rw=randwrite_x000D_iodepth=64

Проверка latency диска с помощью ioping

Помимо IOPS есть еще один важный параметр, характеризующий качество вашей дисковой подсистемы – latency. Latency – это время задержки выполнения запроса ввода/вывода и характеризуют время доступа к системе хранения (измеряется в миллисекундах). Чем выше latency, тем больше приходится ждать вашему приложения данных от дисковой подсистемы. Для типовых систем хранения значения latency более 20 мс считаются плохими.

Для проверки latency диска используется утилита ioping :

# yum install ioping -y

# apt-get install ioping

Запустите тест latency для диска (выполняется 20 запросов):

# ioping -c 20 /tmp/

4 KiB <<< /tmp/ (ext4 /dev/md126p5): request=1 time=1.55 ms (warmup)_x000D_......................_x000D_4 KiB <<< /tmp/ (ext4 /dev/md126p5): request=11 time=368.9 us (slow)_x000D_................_x000D_4 KiB <<< /tmp/ (ext4 /dev/md126p5): request=19 time=176.3 us (fast)_x000D_4 KiB <<< /tmp/ (ext4 /dev/md126p5): request=20 time=356.9 us_x000D_--- /tmp/ (ext4 /dev/md126p5) ioping statistics ---_x000D_19 requests completed in 5.67 ms, 76 KiB read, 3.35 k iops, 13.1 MiB/s_x000D_generated 20 requests in 19.0 s, 80 KiB, 1 iops, 4.21 KiB/s_x000D_min/avg/max/mdev = 176.3 us / 298.7 us / 368.9 us / 45.7 us_x000D_

Среднее значение 298.7 us (микросекунд), т.е. средняя latency диска в нашем случае 0.3 ms , что очень хорошо.

Значение latency может быть указано в us (микросекундах) или в ms (миллисекундах). Т.е. для получения из us значения в ms нужно разделить его на 1000.

Таким образом, вы можете провести нагрузочное тестирование дисковой подсистемы на вашем сервере до запуска проекта и получить максимальную производительность. Конечно такой тест не дает гарантий, что дисковый массив или диск будет постоянно гарантировать такую производительность, но на начальном этапе это тест, который обязательно нужно выполнить. Методика тестирования IOPS в Windows описана в этой статье .

admin

Share
Published by
admin

Recent Posts

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

2 месяца ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

2 месяца ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

2 месяца ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

2 месяца ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…

2 месяца ago

Как управлять журналами событий из командной строки

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

2 месяца ago