Как тестировать диск через fio
fio — стандартный инструмент, которым измеряют реальную производительность диска. Покажем готовые команды для случайных и последовательных операций, объясним каждый флаг и научим читать вывод, чтобы понять, что за диск вам достался.
Содержание
Зачем тестировать диск и что даёт fio
['После заказа VPS полезно проверить диск на деле, а не верить описанию тарифа. fio (Flexible I/O tester) моделирует любую нагрузку: случайное или последовательное чтение и запись, разный размер блока, разную глубину очереди. В отличие от простых утилит вроде hdparm, он показывает именно то, что важно серверу — случайные IOPS и латентность.', 'Установка занимает секунды:', 'sudo apt update && sudo apt install -y fio', 'Тесты создают временный файл в текущей папке. Запускайте их в разделе, где есть свободное место, и удаляйте файл после теста.']
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS на NVMeКлючевые флаги fio
['Прежде чем запускать, разберём параметры — от них зависит, что именно вы измеряете.', '- --rw — режим: randread, randwrite (случайные), read, write (последовательные), randrw (смешанный).
- --bs — размер блока: 4k для баз, 1M для линейной нагрузки.
- --direct=1 — обход кэша ОС, тест реального диска, а не памяти.
- --iodepth — глубина очереди: 1 для латентности, 32-64 для максимума IOPS.
- --numjobs — число параллельных потоков нагрузки.
- --runtime + --time_based — длительность теста в секундах.
--direct=1 критичен: без него вы измеряете скорость кэша в RAM, а не диска, и получите нереально красивые цифры.']
Тест случайного чтения — главный для баз
['Случайное чтение блоками 4К — нагрузка, максимально похожая на работу базы данных. Именно она показывает реальный потолок IOPS диска.', 'fio --name=randread --filename=./fiotest --size=1G \\\n --rw=randread --bs=4k --direct=1 --ioengine=libaio \\\n --iodepth=64 --numjobs=1 --runtime=30 --time_based\nrm -f ./fiotest', 'В выводе главное — строка вида read: IOPS=250k, BW=980MiB/s. IOPS — число операций в секунду, BW — пропускная способность. На NVMe вы увидите сотни тысяч IOPS, на SATA SSD — десятки тысяч, на HDD — сотни. Ниже в блоке clat указана латентность — задержка операции в микросекундах.']
Тест записи и смешанной нагрузки
['Запись тестируют отдельно — она обычно тяжелее чтения. Осторожно: тест записи нагружает диск реально, не запускайте его на важных данных.', '# случайная запись 4к\nfio --name=randwrite --filename=./ft --size=1G \\\n --rw=randwrite --bs=4k --direct=1 --ioengine=libaio \\\n --iodepth=64 --numjobs=1 --runtime=30 --time_based\n\n# смешанная нагрузка 70/30 чтение/запись — как у реального сервиса\nfio --name=mixed --filename=./ft --size=1G \\\n --rw=randrw --rwmixread=70 --bs=4k --direct=1 \\\n --ioengine=libaio --iodepth=32 --runtime=30 --time_based\nrm -f ./ft', 'Смешанный тест (randrw) ближе всего к реальности: сервер редко только читает или только пишет. Соотношение 70/30 типично для веб-приложения с базой.']
Тест латентности и последовательной скорости
['Чтобы измерить честную задержку одной операции, ставят глубину очереди 1 — так видно, за сколько диск отвечает без накопления запросов.', '# латентность одиночной операции\nfio --name=lat --filename=./ft --size=512M --rw=randread \\\n --bs=4k --direct=1 --ioengine=libaio --iodepth=1 \\\n --runtime=20 --time_based\n\n# последовательное чтение большими блоками — максимальные МБ/с\nfio --name=seqread --filename=./ft --size=2G --rw=read \\\n --bs=1M --direct=1 --ioengine=libaio --iodepth=16 \\\n --runtime=20 --time_based\nrm -f ./ft', 'При iodepth=1 задержка NVMe — десятки микросекунд, у HDD — миллисекунды, разница в сотни раз. Последовательный тест блоками 1М покажет максимальную линейную скорость в МБ/с.']
Как читать вывод и делать выводы
['Соберём воедино, на что смотреть. В выводе fio ключевые поля:', '- IOPS — число операций в секунду, главный показатель для баз и веба.
- BW (bandwidth) — пропускная способность в МБ/с, важна для линейных задач.
- clat / lat — задержка операции, чем меньше и стабильнее, тем лучше.
- percentiles — 99-й перцентиль латентности показывает худшие случаи, а не среднее.
Частые ошибки при тестировании
['- Забыть --direct=1 — измеряете кэш в RAM, а не диск, цифры завышены в разы.
- Тестировать блоком 1M и радоваться МБ/с — для сервера важны случайные 4к IOPS.
- Слишком маленький --size — тест целиком влезает в кэш, результат нереальный.
- Запускать тест записи на боевых данных — fio реально пишет на диск, используйте отдельный файл.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS на NVMeЧастые вопросы
Зачем нужен флаг --direct=1 в fio?
Он заставляет fio обходить кэш операционной системы и тестировать реальный диск. Без него вы измеряете скорость RAM и получаете завышенные цифры.
Какой тест fio показывает производительность базы?
Случайное чтение и запись блоками 4к (--rw=randread/randwrite --bs=4k) или смешанный randrw. Именно так работает СУБД под нагрузкой.
Какие IOPS считаются хорошими?
NVMe выдаёт сотни тысяч случайных IOPS, SATA SSD — десятки тысяч, HDD — лишь сотни. Для базы данных нужен NVMe.