IOPS. Что такое и как его посчитать?

IOPS используется для определения производительности диска или дискового массива.

IOPS означает Input/Output (operations) Per Second, количество “операций ввода/вывода в секунду”. Величина измеряет объем работы за определенный промежуток времени. По сути, IOPS это количество блоков, которое успевает считаться или записаться на носитель. Чем больше размер блока, тем меньше кусков, из которых состоит файл, и тем меньше будет IOPS, так как на чтение куска большего размера будет затрачиваться больше времени.

“Операция ввода/вывода” - это просто некая часть работы дисковой подсистемы, которая совершается в ответ на запрос хост-сервера и/или некоторых внутренних процессов. Обычно это чтение или запись с различными подкатегориями, например “чтение” (read), “повторное чтение” (re-read), “запись” (write), “перезапись” (re-write), “произвольный тип доступа” (random), “последовательный тип доступа” (sequential) и размер оперируемого блока данных.

Основными измеряемыми величинами являются операции линейного (последовательного) и произвольного (случайного) доступа.

Под линейными операциям чтения/записи, при которых части файлов считываются последовательно, одна за другой, подразумевается передача больших файлов (более 128 К). При произвольных операциях данные читаются случайно из разных областей носителя, обычно они ассоциируются с размером блока 4 Кбайт.

В зависимости от вида операции, этот размер может варьироваться от байт до килобайт и даже нескольких мегабайт. Существует множество типов ввода/вывода и многозадачная и многохостовая система почти никогда не использует какой-то один. Виртуализация только добавляет разнообразия к паттернам ввода/вывода.

Никакая система хранения не может показывать максимальные значения IOPS безотносительно к характеру операций ввода/вывода, значений latency и размеру блоков.

Latency это мера того, сколько времени занимает выполнение одного запроса ввода/вывода, с точки зрения приложения.

Значительные объемы I/O wait это признак того, что источник проблем - хранилище (существуют и другие источники задержек, CPU и сеть - это обычные примеры). Даже в случае хороших показателей latency, если вы видите большое количество I/O waits - это значит, что приложение хотело бы больше скорости от системы хранения.

Определение производительности дисковой системы - это часто игнорируемый аспект проектирования систем. Поскольку дисковая система является самой медленной средой на компьютере, она должна быть одной из ПЕРВЫХ компонентов, спецификация которых правильно определена.

Приложения которые интенсивно используют операции на запись являются хорошими кандидатами для RAID 10, тогда как приложения которые интенсивно используют операции на чтение могут быть размещены на RAID 5.

IOPS используются для определения производительности диска или дискового массива. Для примера можно считать, что максимальный IOPS для диска:

10K RPM Fibre Channel Disk: 130 IOPS
15K RPM Fibre Channel Disk: 180 IOPS

ПРИМЕЧАНИЕ. Для расчета фактического IOPS для диска требуется следующая информация: Average latency, Average seek time. Эту информацию можно получить от производителя

Для примера возьмем диск: Seagate ST500DM002-1BC142

Average latency (avgLatency): 4.16ms или 0.00416s
Average seek time (avgSeek): 8.5ms или 0.0085s

Чтобы вычислить IOPS используем уравнение:

IOPS = 1/(avgLatency + avgSeek)
IOPS = 1/(0.00416 + 0.0085) = 78,9889415

Итого, максимальный IOPS - 79.

В примечании к разработке системы хранения, вычисление производительности дисковой системы имеет решающее значение для работы данной системы. Большинство систем используют RAID для обеспечения избыточности хранилища. В этом разделе описывается, как вычисляются IOPS для RAID-массивов.

Вычисление максимального значения IOPS чтения (maxReadIops) для RAID-массива:

maxReadIops = numDisks * diskMaxIops

Соответственно для массива из 4 дисков максимальное значение IOPS чтения будет следующим:

maxReadIops = 4 * 79
maxReadIops = 316

Вычисление максимального значения IOPS записи (maxWriteIops) - это совсем другое в отношении RAID-массивов. RAID-массивы имеют штраф на запись, а тип RAID-массива определяет серьёзность штрафа. Этот штраф является результатом избыточности, которую предоставляет RAID, поскольку массив обязательно должен записывать данные на несколько дисков/локаций для обеспечения целостности данных.

Наиболее распространенные типы RAID и их штрафы на запись определяются в следующей таблице:

RAID TypeWrite Penalty
RAID 12
RAID 54
RAID 66
RAID 102

Чтобы вычислить максимальное значение IOPS записи (maxWriteIops) для заданного RAID-массива, разделим максимальное значение IOPS чтения (maxReadIops) на штраф за запись RAID-массива (raidWritePenalty): maxWriteIops = maxReadIops / raidWritePenalty

Используя наш пример с 4-мя дисками и конфигурацией RAID 10, получаем следующие значения:

maxWriteIops = 316 / 2
maxWriteIops = 158

Итого, для нашего примера, максимальное значение IOPS на запись для массива RAID 10 - 158.

Простое вычисление максимального количества IOPS для чтения и записи для существующего или будущего RAID-массива недостаточно. Для обеспечения последовательной и устойчивой производительности необходимо определить требования к производительности для системы, чтобы определить лучшее решение для диска. Минимальный требуемый IOPS должен быть определен таким образом, чтобы можно было приобрести необходимое количество дисков с требуемой скоростью.

Для начала необходимо знать требования к производительности (например, чтение и запись IOPS) для данной системы или приложения. Эта информация может быть получена из документации поставщика или программного обеспечения.

Предположим, что у нас есть приложение, которое требует 600 Read IOPS и 300 Write IOPS. Дисковый массив собран в RAID 5.

Чтобы вычислить минимальное количество IOPS (minReqdIops), добавьте количество требуемых IOPS чтения (reqdReadIops) к сумме количества требуемых IOPS записи (reqdWriteIops) и штрафа RAID (raidWritePenalty): minReqdIops = reqdReadIops + (reqdWriteIops * raidWritePenalty)

В нашем примере:

minReqdIops = 600 + (300 * 4)
minReqdIops = 1800

Минимальное количество IOPS, необходимое для обеспечения уровня производительности для нашего примера - 1800.

ПРИМЕЧАНИЕ. Этот расчет определяет минимальное количество IOPS, необходимое для соответствия спецификации производительности. Это означает, что дисковый массив НЕ должен работать ниже этого уровня производительности.

Как только минимальное количество требуемых IOPS определено, очень легко определить минимальное количество и скорость дисков, необходимых для создания RAID-массива для удовлетворения требований к производительности.

Минимальное количество дисков по скорости диска

Минимальное количество дисков, необходимых для выполнения нашего требования к производительности (minNumDiskMinPerf), рассчитывается следующим образом: minNumDisksMinPerf = minReqdIops / maxIopsByDiskSpeed

Используя информацию из расчета минимально необходимых IOPS выше и предполагая, что мы хотим создать массив из 10 000 RPM-дисков (~125-150 IOPS), вычисление минимального количества дисков, которое будет соответствовать нашим минимальным требованиям к производительности (minNumDisksMinPerf) 1800 IOPS (minReqdIops) выглядит следующим образом:

minNumDisksMinPerf = 1800 / 130
minNumDisksMinPerf = 14

Минимальное количество дисков 10 000 RPM, необходимых для удовлетворения наших требований к производительности, - 14.

Минимальное количество дисков по типу RAID

Тип RAID определяет минимальное количество дисков для удовлетворения требований типа RAID. Например, для RAID 5 всегда требуется как минимум 3 диска. Для RAID 10 всегда требуется как минимум 4 диска.

Для любых массивов, требующих большого количества дисков, используйте множитель в приведенной ниже таблице, чтобы определить правильное количество дисков для соответствия требованиям типа RAID:

Тип RAIDКоличество дисковRAID множитель
RAID53N/A
RAID1044

После вычисления количества дисков по скорости, определяем минимальное количество дисков, требуемых по типу RAID.

В примере, когда 10K RPM-диски были выбраны для построения массива, расчет показывает, что требуется не менее 14 дисков. Если тип RAID будет 5, 14 дисков будет достаточным. Однако, если тип RAID будет равен 10, минимальное количество дисков, требуемых этим типом RAID, будет 8, поскольку множитель для RAID 10 равен 4.

IOmeter — тест IOPS
IOzone — тест IOPS
FIO — тест IOPS
CrystalDiskMark — тест IOPS
SQLIO — набор тестов для расчета производительности (IOPS, MB, Latency) под сервера БД
wmarow — калькулятор RAID по производительности IOPS