Программный RAID раскрывает возможности NVMe для enterprise-задач
Основные положения
Появление протокола NVMe расширило горизонты возможностей для систем хранения данных. Новые накопители не только сохраняют все полезные свойства традиционных SSD, но и демонстрируют совершенно новый уровень производительности и времени отклика.
Благодаря своим характеристикам NVMe-накопители являются отличным решением для многих передовых технологий. Многомерная аналитика, комплексные системы планирования ресурсов предприятия, машинное обучение и автономные производственные цепочки по-прежнему требуют серьезных долгосрочных инвестиций, но теперь их внедрение становится значительно проще и доступнее.
При этом повсеместное распространение NVMe-накопителей имеет ряд объективных ограничений, с которыми сталкиваются все производители СХД и системные интеграторы. Для enterprise-сегмента критически важным является отказоустойчивость массива и использование технологии NVMe-oF для его сетевого подключения к клиентам.
Существующие программные и аппаратные технологии создания отказоустойчивых массивов либо используют чрезмерную избыточность в виде зеркалирования, либо теряют до 65% производительности при работе в RAID 5 или RAID 6. При этом далеко не все из них имеют возможность реализовать функционал сетевого доступа к накопителям через NVMe-oF.
RAIDIX ERA является программным массивом, который разрабатывался с учетом всех особенностей NVMe. Благодаря ряду технологических инноваций и внимательному отношению к возможностям нового протокола, наш программный RAID способен продемонстрировать в RAID 6 до 97% суммарной производительности накопителей, обеспечивая минимальное время задержки даже в условиях смешанных нагрузок.
В этом документе мы рассмотрим основные особенности протокола NVMe, оценим его сильные стороны и недостатки, расскажем о возможностях RAIDIX ERA и сценариях его использования с различными типами прикладных приложений.
Возможности и ограничения протокола NVMe
Протокол NVMe (Non-Volatile Memory Express) — это первый протокол, созданный специально для работы с твердотельными накопителями. Традиционные SAS и SATA разрабатывались с учетом сложной механики жесткого диска. Эти протоколы используют большое количество служебных команд, необходимых для корректного управления подвижными элементами и их бесперебойную работу.
Для flash-памяти такие команды обычно сложны и избыточны. SAS и SATA протоколы обращаются к данным на SSD по процедуре работы с жесткими дисками, которая не учитывает физические особенности flash-памяти. Протокол NVMe, наоборот, опирается на эти особенности и использует их для достижения максимальной производительности.
Высокая скорость и низкая задержка
VMe работает на основе интерфейса PCIe. Протокол использует набор PCIe команд, с помощью которых приложения взаимодействуют с центральным процессором. Благодаря этому между накопителем и CPU нет уровня HBA, который увеличивает data path за счет преобразования SAS/SATA команды в PCIe.
Рисунок 1. Сравнение программных интерфейсов AHCI и NVMe
Помимо этого контроллер NVMe-накопителя поддерживает до 65 тысяч очередей передачи данных в процессор, каждая из которых может содержать более 65 тысяч команд. В SATA/SAS интерфейсах возможна лишь одна очередь с 32 или 254 командами соответственно.
Такие характеристики позволяют NVMe SSD снизить уровень задержки в два раза и в несколько раз увеличить скорость чтения и записи на случайных и смешанных нагрузках по сравнению с традиционными SSD. Благодаря этому NVMe-накопители являются основой для эффективной работы с требовательными бизнес-приложениями и такими технологиями как AI & ML, OLTP, Edge-computing и др.
NVMe-oF для сетевого доступа к данным
NVMe SSD имеет неоспоримые преимущества над SATA/SAS SSD при прямом размещении в сервере на шине PCIe. Но локальное использование накопителей подходит далеко не для всех бизнес-задач: при нем не выполняются минимальные требования по отказоустойчивости, и существуют ограничения по масштабированию и гибкости распределения ресурсов.
Поэтому технологию стоит оценивать также в контексте сетевого использования, где из-за распространения протоколов предыдущего поколения NVMe не может демонстрировать свою эффективность. Для решения этой задачи разработано расширение NVMe-oF (NVMe Over Fabric), которое позволяет использовать NVMe с транспортом Ethernet, Fiber Channel или InfiniBand.
NVMe-oF позволяет приложению на сервере взаимодействовать с внешним NVMe-массивом практически с локальным уровнем задержки. Технология предполагает также сохранение высокой производительности в сети, но на данным этапе это ограничивается возможностями сетевых адаптеров.
Поэтому для полноценного использования протокола NVMe в enterprise-сегменте важнейшим условием является поддержка NVMe-oF другими компонентами существующей инфраструктуры.
Программный RAID для NVMe
Если говорить про использование NVMe за пределами пользовательских устройств, то практически во всех сценариях требуется RAID-массив, обеспечивающий защиту данных при сбое диска. Эту цель можно достигнуть с помощью программных инструментов на уровне ОС или аппаратных RAID-контроллеров, к которым подключаются накопители. При этом, с учетом стоимости накопителей, разумным выбором будет RAID 5 или RAID 6.
Но в таком случае потребуются ресурсы на вычисление контрольных сумм и общая производительность массива будет существенно ниже суммарной производительности накопителей.
| 1 NVMe | 6 NVMe | 6 NVMe в RAID 6 |
| 800 000 IOps | 4 800 000 IOps | до 2 400 000 IOps |
В компании «Рэйдикс» мы разработали RAIDIX ERA — собственный программный RAID для NVMe и SSD, в котором расчет четности учитывает основные особенности нового протокола. Это позволяет обеспечить массиву до 97% суммарной производительности NVMe-накопителей.
| 1 NVMe | 6 NVMe | 6 NVMe в RAID 6 (RAIDIX ERA) |
| 800 000 IOps | 4 800 000 IOps | 4 600 000 IOps |
Быстрый RAID для Linux
RAIDIX ERA представляет собой модуль ядра Linux, который создает из накопителей массив и предоставляет его клиенту в виде блочного устройства. Поддержка POSIX API обеспечивает ему универсальность использования, устраняя необходимость модифицировать приложения или файловые системы.
RAIDIX ERA использует технологию параллелизации вычислений и lockless-архитектуру для снижения барьеров внутри массива, благодаря чему собранный RAID может демонстрировать скорость работы до 10M IOps и 55 GBps. Массив сохраняет высокую производительность и низкую задержку ( Рисунок 2. Скриншот терминала с результатами тестирования RAIDIX ERA
Сравнение RAIDIX ERA с другими решениями
Мы разрабатывали RAIDIX ERA с четким пониманием того, что продукт должен быть не только производительным, но и удобным для использования. Именно поэтому он свободно работает практически на любом серверном оборудовании, не привязан к какому-то определенному бренду накопителей и легко встраивается в состав уже существующего программно-аппаратного решения.
Также в RAIDIX ERA решена главная проблема программных массивов — чрезмерное потребление вычислительных ресурсов системы. При максимальной производительности массива нагрузка на CPU не превышает 20%, а для эффективной работы требуется менее 4 GB оперативной памяти. Также для более эффективного использования системы в RAIDIX ERA предусмотрена возможность выставления процента потребления RAM.
| Аппаратный RAID-контроллер | Программный RAID | RAIDIX ERA | |
| Производительность | Средняя | Средняя | Высокая |
| Приобретение оборудования | Да | Нет | Нет |
| Физический износ и моральное устаревание | Да | Нет | Нет |
| Неограниченное кол-во подключаемых накопителей | Нет | Да | Да |
| Поддержка NVMe-oF | Нет | Да | Да |
| Использование ресурсов RAM | — | Высокое | Низкое |
| Использование ресурсов CPU | — | Высокое | Низкое |
| Настройка приоритета использования вычислительных ресурсов | — | Нет | Да |
| Совместимость с различными серверными платформами | Нет | Да | Да |
| Совместимость с накопителями любых производителей | Нет | Да | Да |
| Легкая интеграция в решение другого вендора | Нет | Опционально | Да |
Использование RAIDIX ERA для enterprise-приложений
RAIDIX ERA позволяет создавать из NVMe-накопителей быстрый массив с высокими показателями отказоустойчивости. Он хорошо подходит для работы с требовательными enterprise-приложениями, эффективность которых напрямую зависит от времени задержки и пропускной способности back-end инфраструктуры.
Базы данных для аналитики и исследований
Анализ больших массивов данных является ключевым аспектом эффективного управления в крупных современных предприятиях и при проведении масштабных фундаментальных исследований.
Большинство аналитических приложений для таких задач имеют характерный паттерн нагрузки на систему хранения: небольшие и регулярные запросы на запись и постоянные запросы на чтение больших блоков данных. За счет высокой пропускной способности (до 55 ГБ/с) RAIDIX ERA позволяет базам данных быстрее передавать аналитическим приложениям запрашиваемые массивы данных. Это повышает итоговую эффективность всего процесса и сокращает время получения аналитических результатов.
Обработка транзакций в режиме реального времени (OLTP)
OLTP-приложения являются одним из ключевых технологических решений в финансовом секторе, автоматизированных производственных цепочках крупных предприятий, системах учета и планирования ресурсов. С точки зрения инфраструктуры, для эффективной работы таких приложений требуется низкое время отклика и высокая скорость обработки множества мелких запросов.
NVMe-массив на базе RAIDIX ERA в качестве back-end устройства обеспечивает минимальное время отклика для транзакционных запросов и позволяет приложению выполнять большее количество операций в секунду. Помимо этого, он сохраняет высокую производительность даже в условиях интенсивных смешанных нагрузок.
Производство видео в разрешении 8K
Распространение разрешения 8K, технология HDR и повышение частоты кадров до 60 fps серьезно увеличили требования к технологическому оснащению пост-продакшн студий. Хранилище видеоматериала является в нем узким местом, от пропускной способности которого зависит не только комфорт и скорость работы команды, но и защита от возможной потери кадров при монтаже.
RAIDIX ERA используется в решениях для видеопроизводства в качестве подсистемы хранения, обеспечивая высокую скорость чтения и записи данных для одновременной работы с нескольких монтажных станций. Использование RAIDIX ERA позволяет устранить какие-либо задержки при совместном редактировании материала и предотвратить возможную потерю кадров при его обработке.
Edge-компьютинг в IoT
Периферийные вычисления или Edge-компьютинг представляет собой один из вариантов организации интернета вещей (IoT, Internet of Things). В нем вычислительные ресурсы распределенной системы размещаются в непосредственной близости от датчиков и сенсоров действующего объекта. Такая технология используется в беспилотных автомобилях и позволяет искусственному интеллекту получать сведения о дорожной ситуации с минимальной задержкой.
RAIDIX ERA применяется в беспилотных автомобилях в качестве компонента вычислительной платформы. ПО управляет NVMe-массивом и позволяет демонстрировать минимальный уровень задержки и высокую производительность даже с ограниченного количеств накопителей.
Заключение
Протокол NVMe работает на основе шины PCIe, используя более подходящий для flash-накопителей набор команд. Это дает возможность передавать данные через 65 тысяч параллельных потоков и избегать дополнительных барьеров при работе с запросами приложения.
Чтобы сохранить максимум производительности NVMe-накопителей в отказоустойчивом массиве, мы разработали RAIDIX ERA — программный RAID, который демонстрирует высокую скорость работы и низкую задержку даже в условиях интенсивной смешанной нагрузки. Продукт легко встраивается в программную среду существующих систем и способен работать с широким перечнем серверным платформ и накопителей.
Применение RAIDIX ERA в enterprise-сегменте открывает бизнесу доступ к преимуществам передовых технологий без лишних затрат на избыточную инфраструктуру. Для производителей СХД и системных интеграторов RAIDIX ERA является простым и доступным способом получить технологическое преимущество при создании производительных NVMe-решений.
Варианты создания RAID на NVMe SSD. Сравнение производительности
Этот раздел адресуется тем, кто планирует систему со скоростным хранилищем большой емкости. Когда требуемый объем содержит группу NVMe SSD, объединенных в RAID массив.
Рассмотрим варианты объединения NVMe SSD в RAID и производительность каждого решения.
Доступны четыре варианта построения системы:
— программный средствами ОС;
— программно-аппаратный Intel VROC;
— аппаратный контроллер Broadcom MegaRAID;
— программно-определяемое хранилище (SDS).
Сценарии использования накопителя или массива NVMe SSD накопителей приведены в отдельной заметке.
В общей «картине» системы хранения не стоит забывать, что скоростные возможности интерфейса — это важный, но только один из множества параметров, влияющих на общую производительность.
Корпоративное основное хранилище ОБЯЗАНО быть защищенным избыточностью — это не обсуждается. Другое дело — что цена (в широком смысле, не только «стоимость») защищенности должна рассматриваться в комплексе. Принцип всех времен и народов: «Быстро, дешево, надежно — выбери два из трех!» никто не отменял.
Варианты строительства RAID массива из накопителей NVMe существенно различаются по стоимости реализации и производительности.
В нашем случае, когда подсистема NVMe является скоростной частью системы хранения сервера или группы серверов, производительность ставится во главу угла. Иначе — зачем вообще городить огород?
Максимальную скорость NVMe накопители показывают при непосредственном подключении к хост-контроллеру.
Без особенных потерь происходит объединение накопителей в RAID0, базирующееся на драйверах хост-контроллера или функциях операционной системы.
Производительность в RAID0 растет практически пропорционально количеству накопителей.
Не удивительно, что накопители в RAID0 представляются в тестах производительности систем в маркетинговых материалах, поскольку позволяют показать «красивые» цифры.
Однако, в реальной жизни организациям чаще требуется основное хранилище с защитой от потери данных. А это значит — RAID1, 5, 6, 50, 60.
Итак, смотрим плюсы-минусы вариантов, приняв во внимание предыдущие рассуждения об требуемом уровне RAID.
Показатели производительности подсистемы NVMe
В разных тестах используются SSD различных производителей и разные платформы тестирования. Но информационная база сейчас не настолько обширна, чтобы собрать воедино данные по всем вариантам использования конкретного накопителя. Приходится пользоваться тем — что есть. Важно понимать качественные изменения параметров.
В качестве показателей производительности для NVMe SSD и подсистемы NVMe в целом принят ряд метрик, показывающих скоростные характеристики для различных сценариев нагрузки (параметры и методики их измерения описаны в спецификации SNIA):
— IOPS (Input/Output Operations Per Second) — количество операций ввода/вывода в секунду. Это показатель скорости системы на случайных коротких запросах. Он зависит от размера блока, внутреннего устройства накопителя и настроек хост-контроллера;
— средняя и максимальная задержка передачи. Время, затраченное подсистемой хранения на получение запроса и подготовку ответа. Во многом определяется внутренним устройством контроллера накопителя. Средняя задержка замеряется на блоках трех размеров (8KiB, 4KiB, 0.5KiB) и в трех соотношениях чтение/запись (100/0, 65/35, 0/100) при глубине очереди =1;
— пропускная способность системы. Показатель скорости последовательного чтения/записи. Измеряется на операциях с блоками большого размера — 128k и 1m. Этот параметр больше относится к тестированию накопителей и показывает максимальную скорость выдачи последовательных данных без ограничений со стороны интерфейса. В тестах пропускная способность рассматривается с точки зрения влияния на нее программного обеспечения.
Эти показатели относятся к «синтетическим» тестовым системам. Группа тестовых программ пытается привязать показатели производительности к реальному применению. Они эмулируют «средние по больнице» сценарии, например, для баз данных или нагрузку, создаваемую пулом виртуальных машин.
Отдельный NVMe SSD
Нам нужна отправная точка. Какая-то печка, от которой можно плясать.
Показатели тестов скорости Intel SSD DC D3700 Series взяты у коллег из Рэйдикс (https://habr.com/ru/company/raidix/blog/420837/).
Тестировался 800GB SSD в 2.5″ исполнении с интерфейсом PCIe 3.0 2×2. В основе — MLC технология флеш.
В таблице измерение IOPS 800GB Intel DC D3700 Series накопителя.
Значения IOPS убывают почти пропорционально размеру блока передаваемых данных (391 000 — 1 700). Генерируемый при этом поток данных, который является произведением этих величин, остается, практически, постоянным.
Динамика кривой убывания IOPS при увеличении доли запросов на запись (391 000 — 84 000) менее крутая, но приводит к снижению показателя в 4,6 раза. Это объясняется внутренней логикой и процессами чтения/записи собственно накопителя SSD и к интерфейсу не имеет отношения.
| Block size / R/W | 0/100 | 5/95 | 35/65 | 50/50 | 65/35 | 95/5 | 100/0 |
| 4k | 84 018 | 91 394 | 117 272 | 133 059 | 175 087 | 281 131 | 390 969 |
| 8k | 42 603 | 45 736 | 58 980 | 67 321 | 101 357 | 171 317 | 216 551 |
| 16k | 21 619 | 22 835 | 29 704 | 33 821 | 52 553 | 89 731 | 108 347 |
| 32k | 10 929 | 11 322 | 14 787 | 16 811 | 26 578 | 47 185 | 50 671 |
| 64k | 5 494 | 5 672 | 7 343 | 8 286 | 13 130 | 23 884 | 27 249 |
| 128k | 2 748 | 2 805 | 3 618 | 4 295 | 6 507 | 11 998 | 13 631 |
| 1m | 352 | 355 | 451 | 685 | 830 | 1 574 | 1 703 |
Для более наглядного представления, данные выведены в диаграмме:

Задержка также зависит от размера блока и соотношения Чтение/Запись, но масштаб изменений значительно меньше.
Средняя задержка накопителя 800GB Intel DC D3700 Series в зависимости от размера блока и доли запросов на чтение в миллисекундах:
| Block size/ R/W | 100/0 | 65/35 | 0/100 |
| 4k | 0,027 | 0,072 | 0,099 |
| 8k | 0,030 | 0,093 | 0,122 |
| 16k | 0,047 | 0,137 | 0,164 |

Максимальная задержка в миллисекундах:
| Block size/ R/W | 100/0 | 65/35 | 0/100 |
| 4k | 1,510 | 4,715 | 6,985 |
| 8k | 1,409 | 4,312 | 7,000 |
| 16k | 1,106 | 4,644 | 7,007 |
Пропускная способность подсистемы с одним NVMe SSD:
1MB последовательная запись — 634 MBps.
1MB последовательное чтение — 1707 MBps.
128kB последовательная запись — 620 MBps.
128kB последовательное чтение — 1704 MBps.
Теперь мы представляем как размер блока и соотношение Чтение/Запись влияют на скоростные показатели накопителя NVMe. В дальнейшем можно рассматривать сокращенные результаты испытаний (чтобы не загромождать обилием цифр), а в некоторых случаях оценочно экстраполировать результаты неполных испытаний на сочетание параметров, с которым тесты не проводились.
Группа из 12 NVMe SSD (JBOD)
Еще одна отправная точка — несколько накопителей не объединенных ни в какой массив. Она нужна для сравнения производительности. JBOD — группа накопителей без чередования (в отличие от RAID0), в котором единое логическое пространство распределено по жёстким дискам последовательно.
Сравнительные результаты по показателю IOPS для одного NVMe SSD и группы из 12 приведены в таблице и показаны на диаграмме ниже:
| Чтение/запись 4k | 0/100 | 5/95 | 35/65 | 50/50 | 65/35 | 95/5 | 100/0 |
| 12xNVMe | 1 363 079 | 1 562 345 | 1 944 105 | 2 047 612 | 2 176 476 | 3 441 311 | 4 202 364 |
| 1xNVMe | 84 018 | 91 394 | 117 272 | 133 059 | 175 087 | 281 131 | 390 969 |

Пропускная способность NVMe подсистемы из 12 накопителей практически линейно увеличивается пропорционально их числу:
1MБ последовательная запись — 8612 MBps.
1MБ последовательное чтение — 20481 MBps.
128Kб последовательная запись — 7500 MBps.
128Kб последовательное чтение — 20400 MBps.
Программные RAID средствами ОС и файловой системы
Стоимость решения: низкая (бесплатно).
ОС: Linux.
Производительность: приемлемая (RAID0, преимущественное чтение), невысокая-низкая (RAID5, 6, высокая доля записи).
Применение: хранилище временной информации, кэш системы, основное хранилище небольшой емкости с защитой зеркалом (RAID1, RAID10).
Производительность программных реализаций RAID массива рассмотрена в заметке «Сравнение производительности программных RAID«.
Решения, построенные на утилите mdadm операционной системы Linux и на встроенных средствах файловой системы ZFX самые дешевые. По производительности только RAID0 mdadm можно рекомендовать для использования в качестве кэш или временного накопителя и RAID6 mdadm для основного хранилища с 90-100% долей операций чтения.
Решение на Intel VROC
Стоимость решения: низкая.
ОС: Linux, Windows.
Производительность: средняя (RAID0, 1, 10), невысокая (RAID5).
Применение: хранилище временной информации, кэш системы, основное хранилище.
Это не очень дорогое (15 — 30 тысяч рублей) программное решение на уровне драйвера. Позволяет формировать RAID0, 1, 10 (стандартная конфигурация) или в том числе RAID5 (премиум).
На диаграмме ниже представлены результаты тестов системы из 24 NVMe SSD Ultrastar DC SN620, объединенных в RAID5 при помощи Intel VROC.

Показатель IOPS очень резко (в восемь раз) падает при соотношении Чтение/Запись 90/10. Еще в три раза — при увеличении доли записи до 30%.
Еще одно исследование производительности NVMe системы представлено на StorageReview
Испытывалась система с восемью Intel DC P4510 NVMe SSD под управлением Intel VROC.
В презентации другие системы координат и другое представление результатов.
Вывод, выведенный изданием: «Intel VROC реализован хорошо и обеспечивает ожидаемые результаты на хорошо спроектированной платформе».
При этом, правда, в резюме умалчиваются достижения в RAID5, поскольку они невысоки.
Ниже — один из слайдов с итогами теста «SQL 90-10» (чтение-запись)

RAID массив на SAS/SATA/NVMe контроллере
Стоимость решения: невысокая.
ОС: Linux, Windows.
Производительность: сравнима с решением на VROC.
Применение: основное хранилище с защитой (RAID5, RAID6).
Контроллеры Broadcom описаны в разделе Оборудование. MegaRAID допускает прямое подключение до 4 накопителей или большее количество через коммутатор. Его имеет смысл ставить в систему в двух случаях: 1) сервер не поддерживает NVMe интерфейс; 2) не хочется забирать мощности центральных процессоров для непрофильной загрузки.
Для реализации решения помимо собственно контроллера (30 — 70 тыс. руб.) требуется корпус или корзина в корпус для установки SSD выбранного форм-фактора (как правило, U.2, но есть решения даже для M.2 накопителей — корзины ICY DOCK, например) и набор соответствующих кабелей.
Тестов производительности контроллера Broadcom в паре с NVMe накопителями практически не опубликовано. Мы представляем сравнительные тесты с VROC: Сравнение производительности Tri-Mode Broadcom MegaRAID 9460-16i и Intel VROC.
Про уровень производительности новых контроллеров от самого производителя известно лишь очень общее: «задержка снижена на 50%, производительность увеличена на 60% по сравнению с предыдущим поколением контроллеров». (https://www.broadcom.com/solutions/enterprise-storage/nvme)
Программно-определяемое хранилище (SDS).
Стоимость решения: высокая.
ОС: Linux, Windows.
Производительность: высокая.
Применение: Масштабируемое основное хранилище большой емкости с защитой данных от потери. Высокоскоростное хранилище для группы серверов.
Программно-определяемое хранилище — отдельная обширная тема. Она рассматривается в разделе Программно-определяемое хранилище.
SDS использует мощности современных процессоров и распределение нагрузки между узлами. За счет этого SDS может показывать производительность, значительно превышающую возможности аппаратных дисковых контроллеров.
С учетом того, что аппаратных NVMe RAID контроллеров, мягко говоря, немного, приходится меряться с тем — что есть.
Есть сравнительные тесты RAIDIX ERA компании Рэйдикс с программными RAID на сервере с 12х Intel DC D3700 SSD (материалы Flash Memory Summit 2018)

RAIDZ (аналог RAID6 в файловой системе ZFS)
RAID6 средствами mdadm Linux
RAID5 средствами mdadm Linux
RAID6 средствами RAIDIX ERA
Суммарная предельная скорость 12 накопителей — аппаратный предел
Подробно тесты и результаты описаны в упоминавшемся уже отчете на habr, на основе которых мы сравнивали программные RAID.
На следующей диаграмме — сравнение того же RAIDIX ERA с Intel VROC на сервере с 24х Ultrastar DC SN620 3.2TB объединенных в RAID5.

RAIDIX ERA RAID5, 4k
Intel VROC RAID5, 4k
Некоторые тесты производительности различных решений на NVMe SSD приводятся в NVMe хранилище. Тесты производительности.



