До основного вмісту

Бенчмарк виділеного сервера: fio, sysbench, iperf3

Виділені сервери · 24.09.2026
Ілюстрація до статті «Бенчмарк виділеного сервера: fio, sysbench, iperf3»

Бенчмарк виділеного сервера: fio, sysbench, iperf3

Диски вимірюють утилітою fio з прямим вводом-виводом і профілем, схожим на ваше навантаження; процесор і пам'ять — sysbench; канал — iperf3 до вузла в тій самій країні. Заміри роблять до перенесення проєкту, на порожньому сервері, і зберігають як еталон: без базової цифри будь-яка майбутня скарга на «сервер гальмує» нерозв'язна.

  • fio без --direct=1 вимірює сторінковий кеш ядра і показує фантастичні числа, не пов'язані з диском.
  • Тестовий файл має бути більшим за обсяг оперативної пам'яті щонайменше вдвічі, інакше дані осядуть у кеші.
  • Випадковий запис блоком 4k — єдина цифра, що передбачає поведінку СУБД.

Підготовка: що зробити до першого тесту

Перевірте, що масив не відновлюється, диски не перегріті, а на сервері немає стороннього навантаження. Усе це спотворює результат сильніше, ніж різниця між моделями накопичувачів.

# Debian/Ubuntu
apt-get install -y fio sysbench iperf3 ioping hdparm
# RHEL, AlmaLinux, Rocky
dnf install -y epel-release
dnf install -y fio sysbench iperf3 ioping hdparm

# масив не в ребілді і не деградував
cat /proc/mdstat

Диски: fio

Чотири профілі закривають практично всі задачі. Випадкове читання і запис блоком 4k моделюють базу даних, послідовні — резервне копіювання і віддачу відео.

# випадкове читання 4k, глибина черги 32
fio --name=randread --filename=/mnt/test/fio.tmp --size=32G \
    --rw=randread --bs=4k --iodepth=32 --numjobs=4 --direct=1 \
    --ioengine=libaio --runtime=120 --time_based --group_reporting

# випадковий запис 4k — головна цифра для СУБД
fio --name=randwrite --filename=/mnt/test/fio.tmp --size=32G \
    --rw=randwrite --bs=4k --iodepth=32 --numjobs=4 --direct=1 \
    --ioengine=libaio --runtime=120 --time_based --group_reporting

# змішане навантаження 70/30 зі звітом за затримками
fio --name=mixed --filename=/mnt/test/fio.tmp --size=32G \
    --rw=randrw --rwmixread=70 --bs=4k --iodepth=16 --numjobs=4 \
    --direct=1 --ioengine=libaio --runtime=180 --time_based \
    --group_reporting --percentile_list=50:95:99:99.9 2>&1 | tee fio-mixed.log

Дивіться не на середню швидкість, а на IOPS і на перцентилі затримки. Середня затримка 0,3 мс при 99-му перцентилі 40 мс означає регулярні підвисання, які користувач помітить, а середнє — ні. Швидкий контроль затримки без навантаження дає ioping -c 20 /mnt/test.

Процесор і пам'ять: sysbench

sysbench вимірює обчислення на цілих числах і пропускну здатність пам'яті. Для багатоядерних Xeon запускайте стільки потоків, скільки логічних ядер показує nproc.

# один потік: порівняння продуктивності на ядро
sysbench cpu --cpu-max-prime=20000 --threads=1 --time=60 run

# усі ядра
sysbench cpu --cpu-max-prime=20000 --threads=$(nproc) --time=60 run

# пропускна здатність пам'яті на запис
sysbench memory --memory-block-size=1M --memory-total-size=100G \
    --memory-oper=write --threads=$(nproc) run

Канал: iperf3

Канал міряють до публічного сервера iperf3 у тій самій країні, що й майданчик. Один потік майже ніколи не вибирає гігабіт, тому запускають 8 і більше паралельних з'єднань.

# прийом: 8 потоків, 30 секунд
iperf3 -c SERVER -P 8 -t 30

# віддача з сервера у ваш бік
iperf3 -c SERVER -P 8 -t 30 -R

Отримане число звіряйте з характеристикою тарифу: на виділених серверах ZevsHost базові конфігурації в Німеччині йдуть на 100 Мбіт/с, у Франції — 500 Мбіт/с, конфігурації Pro і Enterprise — 1 Гбіт/с. Що означають unlimited і ліміт у 30 ТБ, розібрано у статті про канал сервера і трафік.

Що чим вимірювати

ПідсистемаІнструментКлючова метрикаКоли цифра погана
Диск, випадкове навантаженняfio randread/randwrite 4kIOPS і затримка на 99-му перцентиліNVMe віддає менше ніж 50 000 IOPS на читання
CPU, один потікsysbench cpu --threads=1events per secondрозбіжність з еталоном понад 15%
CPU, усі ядраsysbench cpu --threads=nprocevents per secondмасштабування гірше за 60% від числа ядер
Каналiperf3 -P 8Гбіт/с в обидва бокименше ніж 80% заявленої смуги

Параметр --filename у fio приймає і блоковий пристрій. Вказавши --filename=/dev/sdb з профілем запису, ви затрете розділи і дані на цьому диску без жодного запитання, а на дзеркалі зміна поїде одразу на обидва накопичувачі. Завжди тестуйте через файл усередині змонтованої файлової системи: mkdir -p /mnt/test і --filename=/mnt/test/fio.tmp. Друге джерело сміттєвих цифр — тест поверх ребілду, що триває, або живого продакшену: перед запуском переконайтеся, що cat /proc/mdstat не містить рядка recovery, а vmstat 1 5 показує id близько 100. Як влаштований ребілд, описано у статті про заміну диска в масиві.

Як тлумачити результат

Цифри читають у порівнянні з еталоном тієї самої машини.

  • Просідання випадкового запису в рази при нормальному читанні — зазвичай кеш контролера пішов у write-through або SSD вичерпав SLC-буфер.
  • CPU в один потік нижче за еталон при нормальному багатопотоковому — увімкнене енергозбереження або обмеження частоти в прошивці.

Заміри зручно знімати одразу під час приймання виділеного сервера і складати в той самий файл, що й конфігурацію. Розбір вузьких місць за підсистемами продовжує стаття про профілювання продуктивності Linux.

Коротко

  • fio завжди з --direct=1 і файлом удвічі більшим за обсяг оперативної пам'яті.
  • Головна дискова метрика для бази даних — IOPS на випадковому записі 4k і 99-й перцентиль затримки.
  • Бенчмарк без збереженого еталона втрачає сенс: знімайте базові значення на порожньому сервері.
← Назад до бази знань Поставити питання підтримці