У цій статті розглянемо способи тестування продуктивності 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

fio утилита тести iops в linux centos

Першу перевірку я запустив на масиві з двох SSD дисків і результати вийшли гарні:

READ: bw=328MiB/s (344MB/s), 328MiB/s-328MiB/s (344MB/s-344MB/s), io=6141MiB (6440MB), run=18721-18721msec
WRITE: bw=110MiB/s (115MB/s), 110MiB/s-110MiB/s (115MB/s-115MB/s), io=2051MiB (2150MB), run=18721-18721msec
  • читання: ~ 328 МБ / с, 83000 IOPS
  • запис: ~ 110 МБ / с, 28000 IOPS

Так як ми запустили тест на читання / запис, показники по окремих перевірок, будуть трохи вище.

Для порівняння, я заміряв швидкість на звичайному SATA диску:

iops sata диска

  • читання ~ 1,7 МБ / с, 430 IOPS
  • запис ~ 0,5 МБ / с, 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.

iops ssd диска на випадкові операції читання

Як раніше я вже говорив, швидкість по окремим вимірам буде вище:

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

fio тестування iops диска на random запис в linux

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]
rw=randread
size=8G
filename=/tmp/testfio
ioengine=libaio
iodepth=4
invalidate=1
direct=1
[bgread]
rw=randread
iodepth=64

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

# fio read.fio

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

[global]
rw=randwrite
size=8G
filename=/tmp/testfio
ioengine=libaio
iodepth=4
invalidate=1
direct=1
[bgwrite]
rw=randwrite
iodepth=64

Перевірка latency диска за допомогою ioping

Крім IOPS є ще один важливий параметр, що характеризує якість вашої дискової підсистеми – latency. Латентність – це час затримки виконання запиту введення / виводу і характеризують час доступу до системи зберігання (вимірюється в мілісекундах). Чим вище latency, тим більше доводиться чекати вашому додатку даних від дискової підсистеми. Для типових систем зберігання значення latency більше 20 мс вважаються поганими.

Для перевірки latency диска використовується утиліта йопінг:

# 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)
......................
4 KiB <<< /tmp/ (ext4 /dev/md126p5): request=11 time=368.9 us (slow)
................
4 KiB <<< /tmp/ (ext4 /dev/md126p5): request=19 time=176.3 us (fast)
4 KiB <<< /tmp/ (ext4 /dev/md126p5): request=20 time=356.9 us
--- /tmp/ (ext4 /dev/md126p5) ioping statistics ---
19 requests completed in 5.67 ms, 76 KiB read, 3.35 k iops, 13.1 MiB/s
generated 20 requests in 19.0 s, 80 KiB, 1 iops, 4.21 KiB/s
min/avg/max/mdev = 176.3 us / 298.7 us / 368.9 us / 45.7 us

Середнє значення 298,7 США (Мікросекунд), тобто середня latency диска в нашому випадку 0,3 мс, Що дуже добре.

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

Таким чином, ви можете провести тестування навантаження дискової підсистеми на серверах до запуску проекту і отримати максимальну продуктивність. Звичайно такий тест не дає гарантій, що дисковий масив або диск буде постійно гарантувати таку продуктивність, але на початковому етапі це тест, який обов’язково потрібно виконати. Методика тестування IOPS в Windows описана в цій статті.

Leave a Reply

Your email address will not be published. Required fields are marked *