Определение простыми словами
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.