Хорошо известно
Хорошо известно, что RAID-6[3] значительно медленнее RAID-1. Многие сейчас вдумчиво покачали головами, мол да, разумеется, в шестом пенальти на запись равно шести, а в десятом двум, это же в три раза меньше IOPSов. Некоторые даже вспомнят, что расчет двух четностей - задача нетривиальная, требующая сложных и "дорогостоящих" вычислений.
"По сравнению с RAID 10 и RAID 5 технология RAID 6 представляет собой уровень RAID с самой низкой производительностью. Хотя при нормальных условиях скорость чтения для всех этих уровней примерно одинакова, продолжительность записи сильно отличается."
"...повысив надежность, данный массив существенно потерял в производительности настолько, что многие поставщики не рекомендуют его использование кроме как для хранения холодных данных."
Ну да. Такое.
Ожидания
"Что делает RAID-контроллер, когда RAID-контроллер делает запись"
© Х.Мураками
А делает контроллер вот что:
Write Penalty | RAID-0 | RAID-1 | RAID-5 | RAID-6 |
1 | Записать данные | Записать данные | Считать данные | Считать данные |
2 | Записать данные еще раз | Считать четность | Считать четность №1 | |
3 | Записать данные | Считать четность №2 | ||
4 | Записать четность | Записать данные | ||
5 | Записать четность №1 | |||
6 | Записать четность №2 |
NB: Четность №1 != Четность №2
Если второй блок четности будет копией первого, то RAID-6 не сможет пережить отказ двух дисков. Ведь потеряв два бита данных невозможно восстановить их с помощью одного бита четности, пусть и продублированного. Поэтому в RAID-6 четность считается довольно хитрым образом.
Understanding RAID-6 With Junior High Math (oracle.com)
тут описан P+Q, один из возможных методов реализации RAID-6, но есть и другие, такие как двойная четность, например
Запись в RAID идет блоками фиксированного размера, стрипами[4]. Стрипы одной RAID-группы образуют страйп. Стрипы в страйпе "складываются" специальным образом, что дает в результате блок четности. Изменение стрипа порождает необходимость перерасчета четности. А для этого нужно считать старую четность, считать старые данные, "вычесть" старые данные из старой четности, "прибавить" к ней новые данные, и записать измененные блоки обратно.
Вот вам и шесть операций вместо одной.
Про стрипы и страйпы
Оба слова, стрип (strip) и страйп (stripe), переводятся на русский как "полоска". Но есть нюанс. Полосы на флаге России - это страйпы. Если же флаг порезать на три цветные части, то страйпы станут стрипами.
УК РФ ст. 329, Надругательство над Государственным гербом Российской Федерации или Государственным флагом Российской Федерации наказывается ограничением свободы на срок до одного года, либо принудительными работами на тот же срок, либо арестом на срок от трех до шести месяцев, либо лишением свободы на срок до одного года.
Честно, это знание никак не облегчает понимание терминологии RAID, даже для носителей языка. Особенно тяжело китайцам.
-- У нас есть 14 несовместимых между собой стандартов, нужно изобрести один универсальный!
(через некоторое время)
-- У нас есть 15 несовместимых между собой стандартов!
HP | HP/HPE | DELL/EMC | Huawei | |
Блок | stripe | strip | strip | data block |
Размер блока | stripe size | strip size | strip size | stripe depth |
Набор блоков | full stripe | stripe | stripe | stripe |
Количество блоков в наборе | set size | set size | - | configuration |
Количество блоков в наборе | - | - | stripe width | - |
Получается, что при заметной доли операций записи RAID-6 будет всегда медленнее своих конкурентов. Ощутимо медленнее. Логично? Логично.
Реальность
В реальности производительность RAID1, RAID5 и RAID6 на одном и том же наборе дисков зачастую оказывается довольно близкой, и вот по каким причинам[5]:
Операции чтения и записи в массиве происходят параллельно (данные и четность);
Операции записи могут быть отложены (хост получает подтверждение уже после попадания данных в кэш);
Кэширование, откладывание записи и параллелизация операций (и/или просто удачное совпадение размеров блока) дают возможность работать "полным страйпом";
Технологии "распределенного RAID" позволяют лучше распределять ввод-вывод по дискам.
В качестве примера рассмотрим что-то полезное в быту. Например, имитацию операции Merge в Veeam B&R на одном и том же наборе дисков, но с разным уровнем RAID.
Параметры теста
IO pattern:
random 50/50;
block size 512KB, full random fill;
alignment 4KB;
Backend:
24x6TB NL-SAS
Название массива говорить не буду, этo не рекламный пост, сравнимые цифры можно получить на любой entry-level железке от нормального вендора.
Формулы[7] обещают, что RAID1 будет на 28% быстрее (что само по себе не особо и круто) и это даже без учета сложностей расчета четности:
Functional IOPS = (Raw IOPS * Write % / RAID Penalty) + (Raw IOPS * Read %)
Raw IOPS = Disk Speed IOPS * Number of disks
А на практике разница исчезающе мала, всего около 5%[6] (нагрузка в обоих случаях уперлась в производительность backend, т.е. единичных дисков):
RAID10 | RAID6 | |
IOPS | 39 | 37 |
Bandwidth (MB/s) | 20 | 19 |
Latency (ms) | 25 | 27 |
Про окно бэкапа
Отсюда следует, что при восьмичасовом окне мерджинга (рабочий день, когда задания резервного копирования точно не выполняются) и с описанным массивом в роли точки хранения резервных копий, можно позволить себе минимум (без учета сжатия/дедупликации) 500ГБ новых данных в сутки.
Выводы делайте сами.
Оговорки
Я знаю, что такое worst case. Я даже видел вживую один массив, честно собранный в расчете на worst case. В нем было три слоя: SSD, SAS и NL-SAS, а так же лицензия на автотиринг. И, когда этот автотиринг включили, обнаружилось, что данные НИКОГДА не покидают слой NL-SAS. Им и так хорошо. Вот это по настоящему worst case был.
Я знаю, что RAID10 всё равно быстрее. И иногда критично быстрее.
Везде в тексте статьи под RAID1 и RAID6 подразумевается их расширение до RAID10 и RAID6+ в том или ином виде.
В тексте используется терминология, принятая в DELL и HPE.
Вопрос скорости восстановления тут не затрагивается, хотя и он решается, благодаря распределенному RAID (когда spare-диск физически отсутствует, а его ёмкость распределяется по всем дискам в пуле).
При произвольной 100% записи блоком 64к разница заметнее, но и там преимущество RAID10 составило всего 20% против расчетных 300%.
Возможно корректнее было бы сделать расчет для каждой RAID-6 группы в массиве и сложить результаты вместе, но так никто не делает.