Planetahost VPS
Перейти к основному контенту

Тестирование дисковой подсистемы в Linux с fio и ioping

intro-speed-iops-latency-disk-linux-planetahost.png

Подробности урока

Уровень сложности Лёгкий
Права root Требуются
Требования Терминал Linux
Категория Установка ПО
Совместимость с ОС Debian, Ubuntu, RHEL
Примерное время чтения 15 мин.

Введение

Когда сайт начинает «тормозить», база данных отвечает с задержкой, а сервер внезапно уходит в высокий Load Average, многие первым делом проверяют процессор и память. Однако очень часто настоящая причина скрывается в дисковой подсистеме.

Особенно актуально это для VPS и виртуальных серверов, где производительность хранилища напрямую влияет на работу приложений, баз данных, почтовых сервисов и резервного копирования.

В этой статье разберёмся:

  • что такое IOPS;
  • чем они отличаются от скорости чтения и записи;
  • как правильно измерить производительность диска;
  • почему обычный dd не всегда показывает реальную картину;
  • какие показатели считаются хорошими для разных задач.
Что такое IOPS?

IOPS (Input/Output Operations Per Second) - это количество операций ввода-вывода, которое накопитель способен выполнить за одну секунду.

Проще говоря:

  • HDD может выполнять сотни операций в секунду;
  • SATA SSD - десятки тысяч;
  • NVMe SSD - сотни тысяч и даже миллионы операций в секунду.

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

Задача Что важнее
Хранение видеоархива Скорость чтения
Резервное копирование Скорость записи
MySQL / PostgreSQL IOPS
IOPS
Почтовый сервер IOPS
Home Assistant с историей датчиков IOPS
Скорость в MB/s ≠ производительность

Многие администраторы запускают:

dd if=/dev/zero of=test.img bs=1G count=1 oflag=direct

И видят:

изображение.png

После чего делают вывод: «Диск очень быстрый».

На практике это лишь тест последовательной записи большого файла. Он почти ничего не говорит о производительности базы данных или веб-сервера. Многие специалисты считают dd слишком упрощённым инструментом для оценки реальной нагрузки, поскольку он измеряет в основном последовательный доступ и может не отражать типичные серверные сценарии.

Быстрый тест через dd

Если нужно получить примерное представление о скорости записи:

dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct

Пример результата:

изображение.png

Проверка чтения:

dd if=testfile of=/dev/null bs=1G iflag=direct

изображение.png

После теста файл можно удалить:

rm -f testfile

Этот метод подходит только для быстрой проверки пропускной способности.

Работа с FIO

Для серьёзного тестирования используют утилиту fio (Flexible I/O Tester). Она позволяет имитировать реальную нагрузку:

  • случайное чтение;
  • случайную запись;
  • смешанные операции;
  • работу нескольких потоков;
  • различные размеры блоков;
  • очереди запросов.

Именно поэтому большинство хостинг-провайдеров и системных администраторов используют fio.

Установка fio

Debian / Ubuntu:

apt update
apt install fio

RHEL:

yum install fio

или:

dnf install fio
Измеряем реальные IOPS

Самый популярный тест:

fio --randrepeat=1 \
    --ioengine=libaio \
    --direct=1 \
    --name=test \
    --filename=/tmp/fio-test \
    --bs=4k \
    --iodepth=64 \
    --size=4G \
    --rw=randrw \
    --rwmixread=75 \
    --time_based \
    --runtime=60 \
    --group_reporting

Тест создаёт файл размером 4 ГБ и выполняет случайные операции чтения и записи блоками по 4 КБ.

Подробнее описание каждого ключа команды:

  • --randrepeat=1 - включает повторяемость случайных операций (для стабильных и сравнимых результатов)
  • --ioengine=libaio - использует асинхронный I/O Linux (параллельные операции с диском)
  • --direct=1 - отключает кеш ОС, тест идёт напрямую в диск
  • --name=test - имя теста (метка в выводе fio)
  • --filename=/tmp/fio-test - файл, на котором выполняется тест нагрузки
  • --bs=4k - размер блока операций (4 KB, типично для БД и I/O нагрузки)
  • --iodepth=64 - глубина очереди I/O (сколько операций одновременно обрабатывается)
  • --size=4G - размер тестового файла
  • --rw=randrw - смешанный режим: случайное чтение и запись
  • --rwmixread=75 - 75% операций чтение, 25% запись
  • --time_based - тест идёт по времени, а не по объёму данных
  • --runtime=60 - длительность теста 60 секунд
  • --group_reporting - объединяет вывод результатов в общий итог

В выводе будут строки вида:

(R) read: IOPS=83000
(W )write: IOPS=26800

Именно эти значения обычно интересуют администраторов больше всего.

Как понять результаты

изображение.png

Пример:

read: IOPS=80300
write: IOPS=26800

Общая производительность (условно суммарно):

~107100 IOPS

Это значит, что диск в текущих условиях способен обрабатывать примерно 107 тысяч операций ввода-вывода в секунду,

Таблица сравнения для разных дисков:

Тип накопителя Типичные IOPS
HDD 7200 RPM 75–200
SAS 10K 150–300
SAS 15K 200–400
SATA SSD 10 000–100 000
NVMe SSD 100 000–1 000 000+

Значения сильно зависят от размера блока, глубины очереди и характера нагрузки.

Задержка важнее, чем кажется

Иногда два диска показывают одинаковые IOPS, но сервер на одном работает заметно быстрее. Причина - задержка (Latency).

Задержка показывает, сколько времени проходит между запросом и получением данных.

Пример для разных типов накопителей:

Устройство Задержка
HDD 5–15 мс
SATA SSD 0.1–1 мс
NVMe SSD менее 0.1 мс

Чем ниже задержка - тем быстрее работают базы данных и приложения.

Проверка задержки через ioping

Установка:

apt install ioping

или

yum install ioping

Тест:

ioping -c 20 .

Пример вывода:

изображение.png

Средняя задержка: 506 мкс = 0.506 мс. Это хороший результат для рабочего NVMe диска.

Какие показатели считать хорошими?

Для современных серверов на NVMe дисках обычно ожидают:

Показатель Хороший результат
Последовательное чтение 500–3000+ MB/s
Последовательная запись 500–3000+ MB/s
Random Read (Чтение) IOPS 20 000–100 000+
Random Write (Запись) IOPS 10 000–80 000+
Задержка менее 1 мс

Для баз данных желательно ориентироваться не только на MB/s, но и на IOPS с задержкой.

Заключение

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

Если необходимо быстро проверить диск, то достаточно dd. Но для объективной оценки производительности используйте fio и ioping. Именно эти инструменты позволяют увидеть реальную картину и понять, способен ли ваш сервер справиться с предполагаемой нагрузкой.