Тестирование дисковой подсистемы в Linux с fio и ioping
| Уровень сложности | Лёгкий |
| Права 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 |
| 1С | IOPS |
| Почтовый сервер | IOPS |
| Home Assistant с историей датчиков | IOPS |
Скорость в MB/s ≠ производительность
Многие администраторы запускают:
dd if=/dev/zero of=test.img bs=1G count=1 oflag=direct
И видят:
После чего делают вывод: «Диск очень быстрый».
На практике это лишь тест последовательной записи большого файла. Он почти ничего не говорит о производительности базы данных или веб-сервера. Многие специалисты считают dd слишком упрощённым инструментом для оценки реальной нагрузки, поскольку он измеряет в основном последовательный доступ и может не отражать типичные серверные сценарии.
Быстрый тест через dd
Если нужно получить примерное представление о скорости записи:
dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct
Пример результата:
Проверка чтения:
dd if=testfile of=/dev/null bs=1G iflag=direct
После теста файл можно удалить:
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
Именно эти значения обычно интересуют администраторов больше всего.
Как понять результаты
Пример:
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 .
Пример вывода:
Средняя задержка: 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. Именно эти инструменты позволяют увидеть реальную картину и понять, способен ли ваш сервер справиться с предполагаемой нагрузкой.





