Собираем систему хранения с NVMe RAID
Идеи передовых серверов хранения данных спотыкаются о построение RAID-массивов из NVMe-накопителей: с помощью трехрежимных (tri-mode) аппаратных RAID-контроллеров, полупрограммным Intel VROC или программными утилитами. Tri-mode контроллеры пропускают запросы I/O через стек SAS, ограничивают совокупную полосу доступа 8-16 линиями PCIe и противоречат исходной цели NVMe - убрать посредников между CPU и накопителями. Intel VROC специфичен, привязан к платформам и показывает невысокую продуктивность. Программные массивы под Linux собирают утилитой MDRAID, в ZFS-хранилищах - встроенным менеджером томов, но, как справедливо замечено в обзоре программных массивов из NVMe-устройств, cтандартных средств недостаточно для демонстрации возможностей NVMe.
Выбор программного ядра и базовой платформы
Пример специализированной ОС под системы хранения на SSD - RAIDIX 5.x на основе программного модуля RAIDIX ERA. Производительность NVMe раскрывает использование параллельных вычислений без блокировок (lockless-архитектуры). Благодаря размещению данных на векторных регистрах многоядерных CPU достигается быстрый расчет контрольных сумм, без просадки производительности под смешанной нагрузкой и в режиме восстановления массива.
Cерверу хранения на NVMe SSD нужна подходящая база. Под задачу годится однопроцессорная платформа ASUS RS500A-E10-RS12-U с AMD EPYC 7xx2P: есть запас по ядрам CPU и RAM, в 1U помещается до 12 накопителей U.2 (SFF NVMe SSD) – таких как Western Digital Ultrastar DC SN640. У SSD этой линейки емкость от 800GB до 7.68TB, что уверенно покрывает запросы «горячего» хранения.
Наш сервер получился таким:
Цели и подготовка
Нас интересует скорость отклика сервера хранения с NVMe RAID под управлением RAIDIX и производительность обмена данными c инициатором. Так как количество SSD невелико, создали RAID 5, на нем сформировали 4 LUN - чтобы иметь возможность распределения нагрузки на хранилище. Выбрали интерфейс Ethernet 40 Gb/s, с агрегацией портов (MPIO) на адаптерах Mellanox - для повышения пропускной способности канала. Mellanox поддерживает RDMA, прямое обращение к данным удалённого устройства без привлечения ОС клиента и хранилища. Активировали протокол iSER (iSCSI extensions for RDMA) – он позволяет передавать данные непосредственно в буферы SCSI и из них, без создания промежуточных копий. Исключаются накладные расходы на TCP/IP.
Тесты и результаты
Задержки обращения и производительность NVMe RAID на коротких запросах мы оценивали тестовой утилитой fio, пропускную способность в многопоточном доступе – fio и frametest.
Тест fio удобен охватом профилей нагрузок. Наши метрики:
- IOPs в произвольном доступе блоками 4k, при соотношении запросов чтения и записи 0/100, 30/70, 50/50, 70/30, 100/0;
- задержки (latency) на тех же операциях;
- пропускная способность (throughput) при обращении блоками 1М и глубиной очереди 1…32.
Произвольный доступ дал такую картину:
R/W, % |
KIOPS |
Latency, ms |
0 / 100 |
374 |
0.34 |
30 / 70 |
343 |
0.37 |
50 / 50 |
388 |
0.33 |
70 / 30 |
477 |
0.27 |
100 / 0 |
550 |
0.23 |
Около полумиллиона IOPS при среднем времени отклика меньше 1 мс – очень приличный показатель. Профиль нагрузок 30/70 характерен для виртуальной среды, 70/30 – для OLTP-приложений.
Оценки пропускной способности:
Скорость ~12ГБ/с получена в полнодуплексном режиме сетевых карт, на смешанном паттерне с преобладанием чтения. На практике нет чисто произвольной или последовательной нагрузки, есть смешанная. Мы теперь хотя бы знаем пределы достижимой производительности нашего сервера с NVMe RAID.
Утилита frametest моделирует параллельную рабочую нагрузку с большим размером блока данных. Ее используют для оценки пригодности системы хранения под работу с видео высокого разрешения –хранилище должно обслуживать множественные обращения с низкими задержками на стабильно высокой скорости, без провалов («гребенки») и потери кадров.
Тест чтения/записи несжатого видео 4К в четыре потока. Одна папка, 5000 кадров, размер кадра 50МБ:
|
Чтение |
Запись |
Data rate |
8780.10 MB/s |
7593.97 MB/s |
Frame rate |
180.3 fps |
156.0 fps |
Записали видео в четыре разные папки для тестов чтения. Чтение из четырех папок одновременно, четыре потока 4К:
|
Data rate |
Frame rate |
#1 |
2226.29 MB/s |
45.7 fps |
#2 |
2214.44 MB/s |
45.5 fps |
#3 |
2239.55 MB/s |
46.0 fps |
#4 |
2226.84 MB/s |
45.7 fps |
Кому?
Высокая производительность сервера хранения на NVMe RAID с четностью – большое подспорье в виртуальной среде и транзакционных приложениях, с их смешанными нагрузками. Стабильно высокая потоковая производительность, без провалов при отказах и восстановлении массива, неоценима в медийных приложениях.