Вводная
Мы сравниваем показатели производительности массива из 12 дисков с интерфейсом NVMe, объединенных в RAID0 и RAID6 силами встроенных в операционную систему Linux и файловую систему ZFS средств.
Исходные данные взяты из результатов испытаний компании RAIDIX https://habr.com/ru/company/raidix/blog/420837/ .
Коллеги из Рэйдикс в собственных целях исследовали производительность программных RAID. Здесь мы используем их результаты.
Испытывались массивы RAID0 и RAID6 из 12 дисков 800GB Intel DC D3700 Series. Не столь важно — что тестируемые накопители по нынешним мерками не самые последние — мы сравниваем поведение одних и тех же SSD в разных условиях.
Программный RAID силами встроенной Linux утилиты mdadm
mdadm — встроенная стандартная утилита создания RAID массива дисков. Позволяет создать JBOD, RAID0, 1, 5, 6 уровня. Немного больше информации о mdadm — на странице описания системного ПО.
Испытывались массивы RAID0 и RAID6 из 12 дисков 800GB Intel DC D3700 Series.
Результаты тестов производительности программного RAID0 mdadm
IOPS.
Обслуживание RAID0 mdadm «съедает» порядка 30% суммарной производительности при случайном доступе объединенных в массив NVMe SSD.
Кривая зависимости IOPS от соотношения доли запросов на запись повторяет кривую, которую показывает одиночный накопитель и группа не объединенных накопителей. Отсюда делаем вывод — что mdadm, помимо упомянутых 30% накладных расходов, не привносит дополнительных задержек в процесс чтения и записи информации на диски при объединении их в RAID0.
Диаграмма ниже более информативна для оценки влияния программного массива на производительность. В ней значения замеров IOPS соотнесены с расчетными значениями для группы дисков, не объединенных в RAID. Данные для диаграммы приблизительные, расчетные, так что значение >1 пусть Вас не смущает.
Из стройной картины резко выпадают замеры IOPS на блоках 1m — при 100% чтении значение IOPS в два раза ниже ожидаемого. При этом, параметр «приходит в норму» при 95 и 100% записи.
Тесты задержек повторяют уровень, показанный одиночным накопителем.
Пропускная способность системы из 12 накопителей в RAID0 mdadm:
1MБ последовательная запись — 7820 MBPS.
1MБ последовательное чтение — 20418 MBPS.
128Kб последовательная запись — 7622 MBPS.
128Kб последовательное чтение — 20380 MBPS.
На больших блоках пропускная способность NVMe подсистемы под управлением mdadm в RAID0 примерно соответствует суммарной пропускной способности накопителей.
Результаты тестов производительности программного RAID6 mdadm
IOPS.
Динамика изменения IOPS в RAID6 mdadm видна на диаграмме:
Наблюдаем падение показателя в 3..6 раз при 5% доле чтения в запросах и еще в 6..7 раз при увеличении этой доли до 35%. И это — при пиковом значении 1,9 млн IOPS, что составляет 2/3 от значения в RAID0 и примерно 1/2 от суммарного показателя накопителей. Дальнейшее увеличение доли записи происходит с плавным уменьшением IOPS. Некоторое увеличение производительности RAID6 mdadm происходит с увеличением размера блока.
Диаграмма относительных значений IOPS сформирована также на расчетных данных:
Средняя задержка примерно в три раза больше, чем у одиночного накопителя (миллисекунд).
Block size/ R/W | 100/0 | 65/35 | 0/100 |
---|---|---|---|
4k | 0.106 | 0.146 | 0.193 |
8k | 0.127 | 0.187 | 0.267 |
16k | 0.169 | 0.282 | 0.426 |
Максимальная задержка выровнялась в разных режимах. Резкого разброса между чтением и записью нет. Максимальное ее значение, при этом, осталось на уровне, показанном для одиночного накопителя.
Block size/ R/W | 100/0 | 65/35 | 0/100 |
---|---|---|---|
4k | 4.232 | 4.542 | 6.131 |
8k | 3.590 | 4.520 | 6.247 |
16k | 4.140 | 5.586 | 5.407 |
Пропускная способность.
На запись пропускная способность составляет примерно 10% от достижений RAID0 и суммарной производительности накопителей.
На чтение — сохраняет уровень на больших блоках и падает в два раза на коротких.
1MБ последовательная запись — 890 MBPS.
1MБ последовательное чтение — 18800 MBPS.
128Kб последовательная запись — 870 MBPS.
128Kб последовательное чтение — 10400 MBPS.
Тесты производительности программного RAID файловой системы ZFS
Немного больше информации о файловой системе ZFS — на странице описания системного ПО.
Результаты тестов IOPS RAIDZ2 (аналог RAID6) приведены на диаграмме
Пиковый уровень 76 000 IOPS RAIDZ2 показывает на блоках 4k, 8k, 16k на чтении. Дальнейшее увеличение размера блока приводит к пропорциональному снижению IOPS.
5% запросов на запись снижает IOPS на 40%, 35% записи — еще на 60% до 16 000 IOPS. Далее — ровная полка вплоть до 100% записи.
На относительной диаграмме (ниже) видно увеличение производительности RAIDZ2 с увеличением размера блока с одновременным ростом доли записи.
После некоторых уточнений, коллеги поменяли параметры ZFS и провели повторные тесты. Одновременно с увеличением скорости на чтение (140 850 против 76 315) на блоках 4k, скорость записи снизилась (13 704 против 15 720). Кривая стала плавнее. Но это не изменило кардинально общий результат.
Задержки.
Средняя задержка (в мс) очень ровная во всех режимах, сравнима с уровнем, полученным для RAID6 mdadm:
Block size/ R/W | 100/0 | 65/35 | 0/100 |
---|---|---|---|
4k | 0.218 | 0.255 | 0.333 |
8k | 0.226 | 0.259 | 0.330 |
16k | 0.233 | 0.180 | 0.114 |
Максимальная задержка в 15 — 70 раз больше, чем показывает один накопитель.
Block size/ R/W | 100/0 | 65/35 | 0/100 |
---|---|---|---|
4k | 84.402 | 69.972 | 90.55 |
8k | 104.737 | 86.611 | 91.621 |
16k | 105.658 | 86.219 | 108.219 |
Пропускная способность на запись на 30% больше, чем у решения на mdadm. На чтение — в два раза ниже.
1MБ последовательная запись — 1150 MBPS.
1MБ последовательное чтение — 5500 MBPS.
128Kб последовательная запись — 1100 MBPS.
128Kб последовательное чтение — 5300 MBPS.
Сравнительные результаты тестов производительности программных RAID
Для наглядности приводим сведенные на одной диаграмме результаты замеров IOPS с 4k блоком, рассмотренные выше.
Три варианта RAID сравниваем с потенциально возможным — 12 накопителями.
Результаты получились не очень.
RAID0 в Linux mdadm показывает себя относительно неплохо, но без защиты в качестве основного хранилища его по-серьезному никто не рискнет использовать.
RAID6 в Linux mdadm можно использовать для хранилища с ярко выраженной нагрузкой на чтение, причем большими блоками.
ZFS RAIDZ2 так снижает показатель IOPS и увеличивает задержку, что вообще теряется смысл использования NVMe. С таким же успехом можно оставаться в поле SAS/SATA SSD.
Альтернатива встроенному бесплатному ПО для создания защищенного массива — ряд продуктов для создания программно-определяемого хранилища (Software Defined Storage, SDS). Это — отдельная тема, рассматривается в соответствующем разделе.