Тестирование дисковой подсистемы на 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 (в установленной ОС клиента), могут быть искажены настройками системы, фоновыми процессами, кешами и приложениями.

Помог ли вам данный ответ? 0 Пользователи нашли это полезным (0 голосов)