Тестирование дисковой подсистемы на VDS/VPS (fio)
Тестирование диска — это не копирование файлов и не запуск dd в рабочей системе. Корректная проверка должна исключать влияние пользовательской ОС, кешей, фоновых процессов и нагрузки. Поэтому все тесты ниже выполняются в режиме Rescue с использованием fio.
Зачем нужен режим Rescue
- Исключает влияние установленной ОС клиента, драйверов, файловых систем и настроек.
- Исключает влияние процессов внутри сервера (панели, базы, игровые ядра, антивирусы и т.д.).
- Позволяет получать результаты, относящиеся именно к инфраструктуре хостинга.
Почему именно fio
fio позволяет точно контролировать тип нагрузки, размер блока, глубину очереди, обход кеша ОС и получать детальную статистику по задержкам и пропускной способности. Тесты вида “скорость скачивания/копирования”, “CrystalDiskMark внутри VM”, “dd” и т.п. не являются корректным подтверждением проблем инфраструктуры.
Этап 1. Подготовка тестового файла (50 ГБ)
ИЗМЕНИТЕ РАЗМЕР ДИСКА ТЕСТИРУЕМОГО ДИСКА (size=50G) НА НУЖНЫЙ В КАЖДОМ ИЗ ТЕСТОВ, ЕСЛИ 50ГБ ИЗ ПРИМЕРА БОЛЬШЕ ЧЕМ У ВАШЕГО ТАРИФА, ЛИБО МЕСТА НА ДИСКЕ НЕДОСТАТОЧНО. НО ДЛЯ ТЕСТИРОВАНИЯ НЕОБХОДИМО НЕ МЕНЕЕ 10 ГБ
Перед основными тестами создаётся файл фиксированного размера. Это исключает влияние аллокации и фрагментации во время последующих проверок.
fio --name=prep_50g \
--filename=/root/fio_50g.test \
--size=50G \
--rw=write \
--bs=1M \
--ioengine=libaio \
--iodepth=64 \
--direct=1 \
--numjobs=1 \
--group_reporting
Что показывает этот тест
- Реальную скорость последовательной записи большого объёма данных.
- Стабильность записи (без “провалов” и ошибок).
- Нагрузку на дисковую подсистему (обычно
utilблизко к 100%).
Этап 2. Смешанная нагрузка (read + write) на основании созданного файла
Это наиболее приближённый к реальности тест, имитирующий работу приложений: часть данных читается, часть — записывается. Важно выполнять тест по уже созданному файлу (из этапа 1).
fio --name=nvme_rw_50g \
--filename=/root/fio_50g.test \
--size=50G \
--rw=readwrite \
--bs=128k \
--ioengine=libaio \
--iodepth=64 \
--direct=1 \
--runtime=60 \
--time_based \
--numjobs=1 \
--group_reporting
Что показывает этот тест
- Поведение диска при одновременном чтении и записи.
- Реальные задержки (latency), а не “пиковые цифры”.
- Насколько стабильно держится скорость на протяжении 60 секунд.
Этап 3. Чистая последовательная запись
Тест максимальной (практической) пропускной способности записи. Используется большой блок и увеличенная глубина очереди.
fio --name=nvme_write_50g \
--filename=/root/fio_50g.test \
--size=50G \
--rw=write \
--bs=1M \
--ioengine=libaio \
--iodepth=128 \
--direct=1 \
--numjobs=1 \
--group_reporting
Что показывает этот тест
- Пиковую скорость записи дисковой подсистемы.
- Эффективность очередей и контроллера (RAID/массива/виртуализации).
- Поведение latency при высокой нагрузке (рост задержек при высокой iodepth — нормален).
Этап 4. Чистое последовательное чтение
Тест максимальной скорости чтения по подготовленному файлу.
fio --name=nvme_read_50g \
--filename=/root/fio_50g.test \
--size=50G \
--rw=read \
--bs=1M \
--ioengine=libaio \
--iodepth=128 \
--direct=1 \
--numjobs=1 \
--group_reporting
Что показывает этот тест
- Пиковую скорость чтения дисковой подсистемы.
- Стабильность чтения на больших объёмах.
- Отсутствие ошибок чтения и “аномальных” задержек.
Как интерпретировать результаты (кратко)
- BW — пропускная способность (MiB/s, MB/s). Это основной показатель скорости.
- IOPS — операций ввода/вывода в секунду. Важно для мелких блоков, но в этих тестах вторично.
- clat/lat percentiles — задержки (percentile 95/99 важнее “среднего”).
- util — загрузка устройства. Значения ~95–100% обычно означают, что тест реально упирается в диск.
- err=0 — ошибок нет. При ошибках тест считается некорректным и требует расследования.
Что обязательно приложить в тикет по проблемам диска
- Подтверждение, что тесты выполнены в режиме Rescue.
- Полный вывод команд
fio(не вырезки). - Указание времени запуска тестов (дата/время сервера).
- Краткое описание проблемы: что именно “медленно” и в каком сценарии (например: запись больших файлов, распаковка, база данных и т.д.).
Важно
Результаты тестов, выполненные вне Rescue (в установленной ОС клиента), могут быть искажены настройками системы, фоновыми процессами, кешами и приложениями.
