Тест производительности HDD, SSD и NVMe SSD с помощью fio
21 Jul 2026, 15:00:13
Для измерения реальной производительности дисковых устройств в операционных системах семейства Linux используется утилита fio (Flexible I/O Tester). На данный момент она является стандартом индустрии среди системных администраторов. Утилита выполняет два действия: имитирует реальную нагрузку на заданном устройстве и измеряет необходимые метрики.С помощью fio возможно воссоздать разные типы нагрузки:
- Случайное чтение или запись
- Последовательное чтение или запись
- Многопоточную работу
- Смешанную нагрузку в заданной пропорции
Установка fio
Утилита fio давно завоевала хорошую репутацию и присутствует в системных репозиториях многих Linux-дистрибутивов. Все команды в статье выполняются на выделенном сервере от компании Virterion.com от имени пользователя root. Если вы работаете в системе под обычным пользователем, вам может потребоваться использовать sudo для выполнения команд.Debian и Ubuntu
apt install fioRHEL, AlmaLinux, Rocky Linux
dnf install fioArch Linux
pacman -S fioFreeBSD
pkg install fioПроверка установленной версии:
fio --version
Запуск тестов
Преимущество fio в том, что мы сами можем задать тип и интенсивность нагрузки. Сейчас мы рассмотрим некоторые варианты тестов, в том числе проверим диск на соответствие заявленным производителем характеристикам.Сперва необходимо создать директорию, в которую утилита будет записывать файлы для работы. Эта директория должна быть на тестируемом диске. Создать её можно стандартной командой:
mkdir /fioСлучайное чтение
Многие производители указывают четыре типа параметров производительности, которым соответствует устройство: максимальное количество операций случайного чтения и записи, скорость последовательного чтения и записи.Начнём с первого, поскольку для рабочего сервера именно количество IOPS зачастую является узким местом.
Заявленные производителем характеристики:

Команда под эти же параметры (размер блока 4k, случайное чтение, очередь в 32 запроса):
fio --name=4k-rnd-read --rw=randread --directory=/fio --direct=1 --bs=4k --ioengine=libaio --iodepth=32 --runtime=60 --numjobs=1 --time_based --size=5G- --name=4k-rnd-read - наименование теста
- --rw=randread - тип теста (randread - случайное чтение)
- --directory=/fio - рабочая директория
- --direct=1 - прямая работа с диском, обход кэширования системы
- --bs=4k - размер блока
- --ioengine=libaio - механизм взаимодействия с ядром системы
- --iodepth=32 - глубина очереди
- --runtime=60 - время на выполнение теста
- --numjobs=1 - количество потоков теста
- --time_based - завершить тест по истечении заданного времени
- --size=5G - размер тестового файла

Разберём некоторые отображаемые результаты:
| IOPS=96.9k | количество операций чтения в секунду (как видим, эта характеристика полностью соответствует заявленной) |
| BW=379MiB/s | пропускная способность (397 MB/s) |
| 22.2GiB/60001msec | прочитано 22.2 ГиБ данных за 60 секунд теста |
| slat (Submission Latency) | время, затраченное процессором на подготовку запроса |
| clat (Completion Latency) | время от отправки запроса в драйвер до получения ответа от диска |
| lat (Total Latency) | фактическое время получения данных (slat + clat) |
| clat percentiles | процент запросов, выполненных в указанную задержку (в примере 90% запросов были выполнены в 404 мкс., 50% - 318 мкс.) |
| IO depths | глубина очереди (в примере все 100% времени очередь составляла 32 запроса) |
| Disk stats (read/write) | статистика из самой ОС |
| ios=5808259/56 | количество выполненных операций чтения/записи |
| ticks=1883947/34 | суммарное время операций чтения/записи |
| util=60.67% | утилизация диска (процент времени, когда диск был активен) |
Случайная запись
Команда для тестирования случайной записи:fio --name=4k-rnd-write --rw=randwrite --directory=/fio --direct=1 --bs=4k --ioengine=libaio --iodepth=32 --runtime=60 --numjobs=1 --time_based --size=5G- --name=4k-rnd-write - наименование теста
- --rw=randwrite - тип теста (randwrite - случайная запись)
- --directory=/fio - рабочая директория
- --direct=1 - прямая работа с диском, обход кэширования системы
- --bs=4k - размер блока
- --ioengine=libaio - механизм взаимодействия с ядром системы
- --iodepth=32 - глубина очереди
- --runtime=60 - время на выполнение теста
- --numjobs=1 - количество потоков теста
- --time_based - завершить тест по истечении заданного времени
- --size=5G - размер тестового файла

Основные показатели:
| IOPS=80.5k | количество операций записи в секунду |
| BW=315MiB/s | скорость записи (330 МБ/с) |
| 18.4GiB/60001msec | записано 18.4 ГиБ за 60 секунд |
| slat | время на подготовку запроса процессором |
| clat | задержка на обработку запроса самим диском |
| clat percentiles | какое количество запросов в процентном соотношении было выполнено за то или иное время |
| IO depths | глубина очереди (в примере все 100% времени очередь составляла 32 запроса) |
Другие показатели: время задержки, утилизация устройства вполне нормальные для SATA SSD этого класса.
Последовательное чтение
Для измерения максимальной линейной скорости и пропускной способности накопителя используются тесты последовательного чтения и последовательной записи. Команда для запуска теста последовательного чтения:fio --name=seq-read --rw=read --directory=/fio --ioengine=libaio --bs=1M --size=5G --iodepth=32 --numjobs=1 --direct=1 --runtime=60 --time_based- --name=seq-read - наименование теста
- --rw=read - тип теста (read - последовательное чтение)
- --directory=/fio - рабочая директория
- --direct=1 - прямая работа с диском, обход кэширования системы
- --bs=1M - размер блока
- --ioengine=libaio - механизм взаимодействия с ядром системы
- --iodepth=32 - глубина очереди
- --runtime=60 - время на выполнение теста
- --numjobs=1 - количество потоков теста
- --time_based - завершить тест по истечении заданного времени
- --size=5G - размер тестового файла

Важные показатели:
| IOPS=521 | количество операций чтения в секунду во время теста |
| BW=522MiB/s | скорость чтения (547 MB/s) |
| 30.6GiB/60063msec | прочитано 30.6 ГиБ за 60 секунд |
| clat | задержка выполнения |
| clat percentiles | какое количество запросов в процентном соотношении было выполнено за то или иное время |
| ios=61515/229 | количество операций чтения/записи |
| ticks=3731315 | диск был активен ~3.73 секунды |
| in_queue=3746449 | общее время в очереди |
| util=90.91% | утилизация диска за время теста |
Последовательная запись
Команда для тестирования скорости последовательной записи:fio --name=seq-write --rw=write --directory=/fio --bs=1M --ioengine=libaio --size=5G --iodepth=32 --numjobs=1 --direct=1 --runtime=60 --time_based- --name=seq-write - наименование теста
- --rw=write - тип теста (write - последовательная запись)
- --directory=/fio - рабочая директория
- --direct=1 - прямая работа с диском, обход кэширования системы
- --bs=1M - размер блока
- --ioengine=libaio - асинхронный ввод-вывод
- --iodepth=32 - глубина очереди
- --runtime=60 - время на выполнение теста
- --numjobs=1 - количество потоков теста
- --time_based - завершить тест по истечении заданного времени
- --size=5G - размер тестового файла

Все поля и их значения такие же, как и при последовательном чтении. Самый интересный показатель - непосредственно скорость записи (407 MB/s). Сильно отличается от заявленной (520 MB/s), но не зря производитель указал две звёздочки у этой характеристики:

Если смотреть в общем, то 407 MB/s последовательной записи для SATA SSD этого класса - хороший показатель.