IOPS, VDI, IOMETER — Часть 5
RAID Penalty. Важная вещь при расчете требуемых IOPS. Да, многие из вас видели перепосты с Википедии с подсчетом IOPS, там не супер удобно написано, да и информация устарела. Особенно жалко, что в ней маловато информации по SSD, хотя, это очень актуально сейчас.
Таблицы по RAID Penalty, которые я нашел в интернете (почти все), это RAID 0/1/5/10, как-будто, других не бывает. Да, многие уже не используются, часть из них редкие, но таблицу постараюсь наполнить максимально возможными типами.

Отлично, с прелюдиями закончили, пора приступать к делу. Что такое penalty (пенальти)? Скажем так, это величина снижающая дисковую производительность, в зависимости от того, сколько дополнительных операций вынужден проделать RAID-контроллер (не важно железный или софтовый) прежде, чем данные будут записаны в целостности.
Рассматривать пенальти мы будем только для операций записи, т.к. операции чтения идут с каждого диска. Значение пенальти зависит от количества операций чтения блока, записи блока, подсчета контрольных сумм и др. Есть отклонения связанные с RAID-Cache, дополнительными фичами некоторых контроллеров, количества групп которые вы решили собрать, количества дисков которые вы решили отдать под четность (к примеру, в N+M) и прочее.
Тип RAID | Пенальти |
RAID 0 | 1 |
RAID 1 | 2 |
RAID 1E | 2 |
Triple Mirror | 3 |
RAID 3 | 4 |
RAID 4 | 4 |
RAID 5 | 4 |
RAID 5E | 4 |
RAID 5EE | 4 |
RAID 50 | 4 |
RAID 51 | 10 |
RAID 6 | 6 |
RAID 60 | 6 |
RAID 61 | 12 |
RAID 10 | 2 |
RAID-DP | 2 |
RAID-TEC | 3 |
RAID-Z0 | 1 |
RAID-Z1 | 4 |
RAID-Z2 | 6 |
RAID-Z3 | 8 |
RAID 7 | 4 |
RAID 7.3 | — |
RAID N+M | — |
Сценарии подсчета IOPS
Ага, дальше у нас идет многим известная формула подсчета IOPS в сферическом ваккуме, но важнее, вторая формула, которая зависит от первой. Это первый сценарий подсчета, исходя из того, сколько у нас есть дисков.
1. Сферические IOPS = Дисковые IOPS * Количество дисков
2. Реальные IOPS = (Сферические IOPS * % Операций записи) / (RAID Penalty) + (Сферические IOPS * % Операций чтения)
Пример возьмем для 10k SAS HDD, т.к. 15k уже вышли из оборота и их заменили на SSD. Возьмем 30 дисков. Число с потолка взял, т.к. в зависимости от типа RAID, у вас будет разное кол-во дисков на полке, разные возможности RAID-контроллеров, разные ограничения у каждой железки и вендора, а еще есть SDS…
Исходя из таблицы, один 10k SAS HDD выдает, в среднем, 140 IOPS. И нагрузку возьмем 70% чтения / 30% записи, как самую классическую для БД и многих серверных задач.
Сферические IOPS = 140 * 30 = 4200 IOPS
RAID 1 — Реальные IOPS = (4200 * 0.3) / 2 + (4200 * 0.7) = 3570 IOPS
RAID 5 — Реальные IOPS = (4200 * 0.3) / 4 + (4200 * 0.7) = 3255 IOPS
RAID 6 — Реальные IOPS = (4200 * 0.3) / 6 + (4200 * 0.7) = 3150 IOPS
RAID 10 — Реальные IOPS = (4200 * 0.3) / 2 + (4200 * 0.7) = 3570 IOPS
Отлично, как видно, тут разница не очень большая. А теперь, давайте, глянем профиль нагрузки под логирование, 100% записи.
Сферические IOPS = 140*30 = 4200 IOPS
RAID 1 — Реальные IOPS = (4200 * 1) / 2 + (4200 * 0) = 2100 IOPS
RAID 5 — Реальные IOPS = (4200 * 1) / 4 + (4200 * 0) = 1050 IOPS
RAID 6 — Реальные IOPS = (4200 * 1) / 6 + (4200 * 0) = 700 IOPS
RAID 10 — Реальные IOPS = (4200 * 1) / 2 + (4200 * 0) = 2100 IOPS
А вот тут, уже сильно видно разницу в типе RAID, и как сильно влияет пенальти.
В интернете есть много интерактивных калькуляторов для подсчета IOPS (хотя, с этими формулами, они вам будут не нужны), так что, я не буду расписывать формулы для каждого RAID, циферку, думаю, осилите подставить сами 🙂
Сценарий второй. Вычисление наоборот. Высчитывание сколько нам надо дисков, учитывая тип RAID который вы запланировали, профиль нагрузки и планируемые IOPS.
Итоговое Количество дисков = (Реальные IOPS Чтения + (Реальные IOPS Записи * RAID Penalty)) / IOPS Выбранных Дисков
Берем пример, мы хотим 7000 IOPS. Берем такие же два профиля нагрузки, как брали выше и такие же диски 10k SAS HDD.
70% от 7000 IOPS = 4900 IOPS Чтения и 30% от 7000 = 2100 IOPS Записи. запоминаем эти цифры.
RAID 1 — Реальные IOPS = (4900 + (2100 * 2)) / 140 = 65 дисков
RAID 5 — Реальные IOPS = (4900 + (2100 * 4)) / 140 = 95 дисков
RAID 6 — Реальные IOPS = (4900 + (2100 * 6)) / 140 = 125 дисков
RAID 10 — Реальные IOPS = (4900 + (2100 * 2)) / 140 = 65 дисков
И второй тест, 100% записи.
0% от 7000 IOPS = 0 IOPS Чтения и 100% от 7000 = 7000 IOPS Записи. запоминаем эти цифры.
RAID 1 — Реальные IOPS = (0 + (7000 * 2)) / 140 = 100 дисков
RAID 5 — Реальные IOPS = (0 + (7000 * 4)) / 140 = 200 дисков
RAID 6 — Реальные IOPS = (0 + (7000 * 6)) / 140 = 300 дисков
RAID 10 — Реальные IOPS = (0 + (7000 * 2)) / 140 = 100 дисков
Вот такие пирожки, вот так катастрофически падает производительность. Но такие кошмарики, когда для жалких 7000 IOPS нам надо покупать стойку набитую дисками, можно обойти SSD’шками. Это сэкономит денег не только на том, что не надо покупать десяток СХДшек, но еще на технических работах с ними (обновлениями, прошивками), на электропитании (мы же помним, что на стойку дают 5-6 КВт?), на охлаждении всего этого добра, да и место в стойке занимает, айпишники . И вместо десятка СХД, можно купить парочку, набитую SSD’шками, которые дадут ту же производительность при таких же, или, даже, меньших затратах.