IOPS — что это, как измерить, нормы для SSD и HDD | Глоссарий FREEHOSTING

IOPS

Input/Output Operations Per Second
IOPS — IOPS — количество операций ввода-вывода в секунду, которое выдаёт диск или массив. Главная метрика для баз данных и виртуализации, важнее линейной скорости в МБ/с при случайной нагрузке.

Определение простыми словами

IOPS (Input/Output Operations Per Second) — сколько операций чтения или записи носитель успевает обслужить за секунду. Метрика особенно важна на случайном доступе мелкими блоками: именно так работают СУБД, виртуальные машины и веб-сервера с активной нагрузкой.

IOPS зависит от размера блока (4 КБ — стандарт для замеров), типа операции (чтение/запись/смесь), глубины очереди (queue depth) и количества потоков. Один и тот же диск может показать 100 тыс IOPS на чтении блоками 4К с глубиной 32 и всего 5 тыс на записи блоками 64К с глубиной 1. Поэтому в спецификациях всегда указывают условия теста.

Сравнение типов носителей

Носитель IOPS чтение IOPS запись Где применяют
HDD 7200 RPM 80-150 80-150 Архивы, бэкапы
SATA SSD 50-100 тыс 30-90 тыс Веб, средние БД
NVMe SSD 500 тыс — 1 млн 200-700 тыс Высоконагруженные БД
Enterprise NVMe 1.5 млн+ 500 тыс+ OLTP, ML, аналитика

Кейсы использования

  • Подбор VPS под PostgreSQL: смотрим не на ГБ/с, а на гарантированный IOPS со стороны провайдера.
  • Анализ узкого места: если CPU и сеть свободны, а отклик вырос — упёрлись в IOPS дисковой подсистемы.
  • Виртуализация: один гипервизор с десятком виртуалок суммарно требует кратно больше IOPS, чем одна машина — отсюда выбор RAID 10 на SSD.
  • Расчёт стоимости: облачные провайдеры берут плату не только за объём, но и за гарантированный IOPS (Provisioned IOPS).
  • Негативный сценарий: тест dd показывает 500 МБ/с — продавец говорит «быстрый диск». На случайной записи 4К тот же диск даёт 200 IOPS, и БД встаёт колом. Всегда замеряйте через fio с реалистичной нагрузкой.

Технические детали

Замер IOPS на Linux через fio — стандартный инструмент:

apt install fio

# Случайное чтение блоками 4К, глубина очереди 32
fio --name=randread 
    --filename=/mnt/test.bin 
    --rw=randread 
    --bs=4k 
    --size=4G 
    --iodepth=32 
    --numjobs=4 
    --runtime=60 
    --time_based 
    --group_reporting

# Случайная запись (имитация БД)
fio --name=randwrite 
    --filename=/mnt/test.bin 
    --rw=randwrite 
    --bs=4k 
    --size=4G 
    --iodepth=32 
    --numjobs=4 
    --runtime=60 
    --time_based 
    --sync=1 
    --group_reporting

В выводе ищите строку iops= — это и есть искомая метрика. Параметр sync=1 имитирует поведение СУБД с fsync после каждой транзакции и сильно режет цифры. Связку с LVM и RAID учитывайте при интерпретации: накладные расходы могут срезать 10-30% IOPS.

Частые вопросы

Что важнее — IOPS или МБ/с?

Зависит от задачи. Для копирования больших файлов и видеомонтажа — МБ/с. Для БД, виртуализации и веб-серверов — IOPS на случайном доступе мелкими блоками.

Сколько IOPS нужно для среднего сайта на WordPress?

Обычно хватает 1-3 тыс IOPS. Если сайт под нагрузкой и БД не помещается в память — закладывайте 5-10 тыс с запасом.

Почему dd не показывает реальный IOPS?

dd делает линейную запись большими блоками с одним потоком. Для замера IOPS нужен инструмент со случайным доступом и глубиной очереди — fio или ioping.