Тестирование скорости диска и IOPS в Linux: утилиты fio и dd для новичков
Почему дисковая подсистема тормозит весь сервер
Очень часто сервер имеет мощный процессор и большой объем RAM, но сайты работают медленно, а запросы к базам данных висят секундами. Причина кроется в низкой скорости операций ввода-вывода (IOPS — Input/Output Operations Per Second).
- Высокий показатель
%wa(iowait) в утилитеtopилиhtop(выше 15–20%). - Задержки при записи логов и транзакций баз данных.
- Очереди дисковых операций в отчете команды
iostat -x 1.
Типичные показатели производительности накопителей
| Тип накопителя | Случайный IOPS (4K Read/Write) | Задержка (Latency) |
|---|---|---|
| HDD (7200 rpm) | ~75 – 150 IOPS | ~10 – 20 мс |
| SATA SSD | ~50 000 – 90 000 IOPS | ~0.5 – 1 мс |
| NVMe SSD (PCIe 4.0) | ~500 000 – 1 000 000+ IOPS | ~0.02 – 0.05 мс |
Методика измерения скорости диска с помощью fio
Устаревшая команда dd измеряет только линейную запись больших файлов. Для реального тестирования баз данных используется индустриальный стандарт — утилита fio.
- Шаг 1. Установка утилиты fio:
sudo apt update && sudo apt install fio -y - Шаг 2. Тест случайного чтения (Random Read IOPS — показатель для баз данных):
fio --name=randread --ioengine=libaio --iodepth=32 --rw=randread --bs=4k --direct=1 --size=1G --numjobs=1 --runtime=30 --group_reporting - Шаг 3. Тест случайной записи (Random Write IOPS):
fio --name=randwrite --ioengine=libaio --iodepth=32 --rw=randwrite --bs=4k --direct=1 --size=1G --numjobs=1 --runtime=30 --group_reporting - Шаг 4. Быстрый тест линейной скорости записи через dd:
dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct # Обязательно удалите проверочный файл: rm -f testfile randread* randwrite*
На что смотреть в результатах fio: Ищите строку IOPS=... и значение lat (msec/usec). Для комфортной работы СУБД MySQL/PostgreSQL случайный IOPS на запись должен составлять не менее 5 000–10 000 операций/сек.
Частые вопросы (FAQ)
Что означает параметр --direct=1 в тестах fio?
Он отключает кэширование операций операционной системой в RAM, заставляя утилиту обращаться напрямую к физическому накопителю.
Почему тест скорости на виртуальном хостинге (VPS) показывает нестабильные результаты?
На дешевых VPS физический диск делится между «соседями» по серверу (Noisy Neighbors). В моменты пиковой нагрузки чужих виртуальных машин ваш IOPS может падать.
Как в реальном времени посмотреть, какой процесс нагружает диск?
Установите утилиту iotop (sudo apt install iotop -y) и запустите sudo iotop -o. Она покажет процессы, выполняющие реальную запись/чтение.
Что такое I/O wait в выводе top?
Это процент времени, в течение которого процессор простаивает без работы, ожидая ответа от медленного диска.