Что такое 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 для диска:
1 | 10K RPM Fibre Channel Disk: 130 IOPS |
ПРИМЕЧАНИЕ. Для расчета фактического IOPS для диска требуется следующая информация: Average latency
, Average seek time
. Эту информацию можно получить от производителя
Вычислим максимальный IOPS для диска
Для примера возьмем диск: Seagate ST500DM002-1BC142
1 | Average latency (avgLatency): 4.16ms или 0.00416s |
Чтобы вычислить IOPS используем уравнение:
1 | IOPS = 1/(avgLatency + avgSeek) |
Итого, максимальный IOPS - 79.
Вычисляем максимальное значение IOPS для дискового массива
В примечании к разработке системы хранения, вычисление производительности дисковой системы имеет решающее значение для работы данной системы. Большинство систем используют RAID для обеспечения избыточности хранилища. В этом разделе описывается, как вычисляются IOPS для RAID-массивов.
Максимальное значение IOPS для чтения
Вычисление максимального значения IOPS чтения (maxReadIops) для RAID-массива:
maxReadIops = numDisks * diskMaxIops
Соответственно для массива из 4 дисков максимальное значение IOPS чтения будет следующим:
1 | maxReadIops = 4 * 79 |
Максимальное значение IOPS для записи
Вычисление максимального значения IOPS записи (maxWriteIops) - это совсем другое в отношении RAID-массивов. RAID-массивы имеют штраф на запись, а тип RAID-массива определяет серьёзность штрафа. Этот штраф является результатом избыточности, которую предоставляет RAID, поскольку массив обязательно должен записывать данные на несколько дисков/локаций для обеспечения целостности данных.
Штраф на запись RAID-массива
Наиболее распространенные типы RAID и их штрафы на запись определяются в следующей таблице:
RAID Type | Write Penalty |
---|---|
RAID 1 | 2 |
RAID 5 | 4 |
RAID 6 | 6 |
RAID 10 | 2 |
Чтобы вычислить максимальное значение IOPS записи (maxWriteIops) для заданного RAID-массива, разделим максимальное значение IOPS чтения (maxReadIops) на штраф за запись RAID-массива (raidWritePenalty): maxWriteIops = maxReadIops / raidWritePenalty
Используя наш пример с 4-мя дисками и конфигурацией RAID 10, получаем следующие значения:
1 | maxWriteIops = 316 / 2 |
Итого, для нашего примера, максимальное значение IOPS на запись для массива RAID 10 - 158.
Проектирование для производительности
Простое вычисление максимального количества IOPS для чтения и записи для существующего или будущего RAID-массива недостаточно. Для обеспечения последовательной и устойчивой производительности необходимо определить требования к производительности для системы, чтобы определить лучшее решение для диска. Минимальный требуемый IOPS должен быть определен таким образом, чтобы можно было приобрести необходимое количество дисков с требуемой скоростью.
Для начала необходимо знать требования к производительности (например, чтение и запись IOPS) для данной системы или приложения. Эта информация может быть получена из документации поставщика или программного обеспечения.
Вычисление минимально необходимого IOPS
Предположим, что у нас есть приложение, которое требует 600 Read IOPS
и300 Write IOPS
. Дисковый массив собран в RAID 5.
Чтобы вычислить минимальное количество IOPS (minReqdIops), добавьте количество требуемых IOPS чтения (reqdReadIops) к сумме количества требуемых IOPS записи (reqdWriteIops) и штрафа RAID (raidWritePenalty): minReqdIops = reqdReadIops + (reqdWriteIops * raidWritePenalty)
В нашем примере:
1 | minReqdIops = 600 + (300 * 4) |
Минимальное количество IOPS, необходимое для обеспечения уровня производительности для нашего примера - 1800.
ПРИМЕЧАНИЕ. Этот расчет определяет минимальное количество IOPS, необходимое для соответствия спецификации производительности. Это означает, что дисковый массив НЕ должен работать ниже этого уровня производительности.
Вычисляем минимальное количество дисков для RAID-массива
Как только минимальное количество требуемых IOPS определено, очень легко определить минимальное количество и скорость дисков, необходимых для создания RAID-массива для удовлетворения требований к производительности.
Минимальное количество дисков по скорости диска
Минимальное количество дисков, необходимых для выполнения нашего требования к производительности (minNumDiskMinPerf), рассчитывается следующим образом: minNumDisksMinPerf = minReqdIops / maxIopsByDiskSpeed
Используя информацию из расчета минимально необходимых IOPS выше и предполагая, что мы хотим создать массив из 10 000 RPM-дисков (~125-150 IOPS), вычисление минимального количества дисков, которое будет соответствовать нашим минимальным требованиям к производительности (minNumDisksMinPerf) 1800 IOPS (minReqdIops) выглядит следующим образом:
1 | minNumDisksMinPerf = 1800 / 130 |
Минимальное количество дисков 10 000 RPM, необходимых для удовлетворения наших требований к производительности, - 14.
Минимальное количество дисков по типу RAID
Тип RAID определяет минимальное количество дисков для удовлетворения требований типа RAID. Например, для RAID 5 всегда требуется как минимум 3 диска. Для RAID 10 всегда требуется как минимум 4 диска.
Для любых массивов, требующих большого количества дисков, используйте множитель в приведенной ниже таблице, чтобы определить правильное количество дисков для соответствия требованиям типа RAID:
Тип RAID | Количество дисков | RAID множитель |
---|---|---|
RAID5 | 3 | N/A |
RAID10 | 4 | 4 |
После вычисления количества дисков по скорости, определяем минимальное количество дисков, требуемых по типу RAID.
В примере, когда 10K RPM-диски были выбраны для построения массива, расчет показывает, что требуется не менее 14 дисков. Если тип RAID будет 5, 14 дисков будет достаточным. Однако, если тип RAID будет равен 10, минимальное количество дисков, требуемых этим типом RAID, будет 8, поскольку множитель для RAID 10 равен 4.
Программы для измерения IOPS
IOmeter — тест IOPS
IOzone — тест IOPS
FIO — тест IOPS
CrystalDiskMark — тест IOPS
SQLIO — набор тестов для расчета производительности (IOPS, MB, Latency) под сервера БД
wmarow — калькулятор RAID по производительности IOPS