IOPS (Input/Output Operations Per Second) – это число операций чтения и записи, которые диск успевает выполнить за одну секунду. Чем выше IOPS, тем быстрее работают приложения, которые часто обращаются к диску мелкими порциями данных.
Для обычного сайта-визитки IOPS почти не важен, а вот для баз данных и нагруженных сервисов он часто оказывается узким местом раньше, чем процессор или память.
На что влияет IOPS
Высокий IOPS в первую очередь важен для задач с большим числом мелких обращений к диску:
- базы данных MySQL, PostgreSQL и MongoDB;
- нагруженные веб-серверы и интернет-магазины;
- почтовые серверы;
- системы кэширования и очередей.
Для потокового видео, бэкапов и раздачи больших файлов важнее не IOPS, а линейная скорость чтения и записи, потому что данные идут сплошным потоком.
От чего зависит IOPS
На результат влияют три главных фактора.
Тип накопителя
NVMe-диски дают в разы больше IOPS, чем обычные SATA SSD, и несопоставимо больше, чем жёсткие диски HDD. На серверах F3 Cloud используются NVMe SSD.
Размер блока
Чем мельче блок, тем больше операций помещается в секунду. Поэтому максимальный IOPS измеряют блоком 4 КБ – это типичный размер обращения базы данных.
Характер доступа
Случайные обращения вразнобой по всему диску тяжелее последовательных. Базы данных создают именно случайную нагрузку.
Бэкапы и стриминг создают последовательную.
Два разных числа
IOPS и линейная скорость в МБ/с измеряют разное. Диск может выдавать огромную скорость на последовательном чтении и заметно меньший IOPS на случайных мелких операциях. При выборе сервера под базу данных смотрите именно на случайный IOPS блоком 4 КБ.
Как измерить IOPS в Linux
Для измерения используют утилиту fio. Установите её.
apt update && apt install -y fiodnf install -y fioТест создаёт временный файл
fio запишет на диск файл указанного размера, в примерах ниже это 2 ГБ. Убедитесь, что на диске есть свободное место, и запускайте тест в рабочей папке, например в /root. После теста удалите файл fiotest.
Измерьте случайный IOPS на чтение. Это главная цифра для баз данных.
fio --name=randread --filename=fiotest --ioengine=libaio --direct=1 \
--rw=randread --bs=4k --iodepth=32 --numjobs=1 --size=2G \
--runtime=60 --time_based --group_reportingРазберём ключи команды:
--rw=randread– случайное чтение. Для записи используйтеrandwrite, для смешанной нагрузкиrandrw;--bs=4k– размер блока 4 КБ;--direct=1– читаем мимо кэша, чтобы видеть реальную работу диска, а не память;--iodepth=32– сколько запросов держим в очереди одновременно;--runtime=60 --time_based– тест идёт ровно 60 секунд.
Как прочитать результат
В выводе fio найдите строку, которая начинается со слова read или write. Первым в ней указан IOPS.
read: IOPS=85.2k, BW=333MiB/s (349MB/s)IOPS=85.2k – это и есть число операций в секунду.BW – линейная скорость за то же время.
Ниже в блоке lat fio покажет задержку. Чем она меньше, тем отзывчивее диск.
Что ещё посмотреть
Быстро оценить текущую нагрузку на диск, не запуская тест, помогает iostat из пакета sysstat.
# Устанавливаем, если пакета ещё нет
apt install -y sysstat
# Обновляем статистику каждую секунду, колонки r/s и w/s - это операции в секунду
iostat -dx 1Так вы увидите реальную нагрузку от своих приложений в колонках r/s и w/s, а в колонке %util – насколько диск загружен.
Наши ресурсы
Telegram-канал: https://t.me/f3cloud_news
Сайт хостинга: https://f3cloud.com