Протокол NVMe придумали, чтобы убрать посредников между SSD и CPU. Без аппаратных RAID-контроллеров серверы получаются производительнее, проще, дешевле.
Перевод серверов на NVMe SSD сдерживает не цена накопителей, а консерватизм пользователей и бремя привычной программной инфраструктуры. Ограничения (и самоограничения) мешают добиваться продуктивности дискового ввода-вывода в серверах приложений и баз данных – ведь источником производительности являются не контроллеры RAID, а ресурсы современных многоядерных процессоров и широких шин доступа к данным на скоростных носителях.
Ведущие поставщики серверного оборудования не обсуждают массовое применение NVMe SSD в серверах еще и потому, что с их точки зрения для производительного хранения нужно покупать (дорогостоящие) системы хранения и не забивать себе голову рукоделием. А мы попробуем.
Объективно, организация дисков в массив является самой сложной проблемой хранения. Для NVMe SSD доступны следующие решения:
• Аппаратные трехрежимные (Tri-Mode) RAID-контроллеры (Broadcom, Microchip, Areca)
• Полу-программный Intel VROC
• Программный RAID средствами базовых ОС (Linux, Windows)
• Сторонние коммерческие или бесплатные программные сборки (например, RAIDIX ERA)
•
Аппаратные RAID-контроллеры плохи тем, что пропускают поток данных через стек SAS и узкое горло шины (8-16 линий PCIe). При этом стоят немалых денег и неудобны в подключении. Intel VROC требует аппаратных ключей (поди найди) и не дает выигрыша в производительности. Программный RAID уменьшает число потенциальных точек отказа в сервере и зависимость от железа. Насколько он выгоден и производителен, зависит от реализации массива: RAID 10 «расточителен», RAID 5 и 6 «тупят». Но варианты маневра есть.
Как сделать быстро и наименее затратно?
Сравним два программных NVMe RAID: созданный стандартной утилитой Linux mdadm и собранный RAIDIX ERA.
RAIDIX ERA – управляющая утилита, работающая поверх ядра Linux и предоставляющая массив NVMe приложениям сервера в виде блочного устройства. Может использоваться с локальными дисками и удаленными накопителями (NVMe JBOF). Задействует расширенное поле регистров CPU для параллельных вычислений – что мобилизует ресурсы процессора, щадит оперативную память и минимально просаживает производительность в режиме смешанной нагрузки. Лицензия RAIDIX ERA бесплатна для 4 накопителей, это усилило интерес к продукту.
Тестовое ложе
Под установку нескольких NVMe нужна платформа U.2-ready. Мы взяли такую: https://servers.asus.com/products/servers/rack-servers/RS500A-E10-RS12U#Specifications, под один AMD EPYC.
Конфигурация стенда:
• AMD EPYC 7413P 24 cores 2.65GHz
• ASUS RS500A-E10-RS12-U
• 4 x DDR4-3200 32GB reg Samsung {M393A4G40AB3-CWEGQ}
• 240GB M.2 NVMe SSD Kingston DC1000B {SEDC1000BM8/240G} boot SSD
• 4 x 960 GB SSD WD Ultrastar SN640 {0TS1849} U.2 SSD
• Ubuntu 18.04
• RAIDIX ERA 3.4
Производительность дисковой системы замеряли утилитой fio (Flexible I/O tester) для нагрузок с произвольным и последовательным доступом:
Четыре NVMe собирали в массивы уровней RAID 10 и RAID 5.
Создание RAID-массива утилитой mdadm
Проверка дисков:
cat /proc/mdstat
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
Видим 4 NVMe SSD. Проверяем наличие разделов на этих дисках (нам не нужны прежние метаданные):
fdisk –l
Диски чисты. Собираем их в RAID10:
sudo mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1
Контролировать процесс создания массива можно, просматривая содержимое файла /proc/mdstat:
cat /proc/mdstat
Видны скорость формирования массива и время до его окончания.
Формирование закончено, RAID md0 сформирован:
Создаем и монтируем файловую систему ext4:
sudo mkfs.ext4 -F /dev/md0
Создаем точку монтирования:
sudo mkdir -p /mnt/md0
Монтируем файловую систему:
sudo mount /dev/md0 /mnt/md0
Проверяем доступность и объемы дисков:
df -h -x devtmpfs -x tmpfs
Чтобы обеспечить автоматическую сборку массива при загрузке, необходимо изменить файл /etc/mdadm/mdadm.conf. Подключить файл и обновить начальную файловую систему RAM возможно командами:
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
sudo update-initramfs -u
Автоматического монтирования при загрузке можно добиться, добавив новые параметры в файл etc / fstab:
echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab
Перегружаем систему. Проверяем cмонтированный RAID:
df -h
Детальная информация о RAID-массиве по команде:
mdadm -D /dev/md0
Массив RAID5 создается точно так же, для начала надо удалить с дисков следы прошлого.
Демонтаж и останов массива:
umount /dev/md0
mdadm -S /dev/md0
Затираем диски:
dd if=/dev/zero of=/dev/nvme0n1 bs=1M count=1024
dd if=/dev/zero of=/dev/nvme1n1 bs=1M count=1024
dd if=/dev/zero of=/dev/nvme2n1 bs=1M count=1024
dd if=/dev/zero of=/dev/nvme3n1 bs=1M count=1024
Далее проверяем доступность дисков для создания RAID и повторяем все описанные шаги.
RAID-массив можно собрать и по-другому, из графической оболочки Webmin.
Создание RAID-массива утилитой RAIDIX ERA
Cоберем RAID 10. Проверяем диски:
lsblk
Создаем RAID:
eraraid create -n ERA10 -l 10 -d /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1 -bs 512
eraraid show
init_progress – прогресс инициализации: от 0% до 100%.
Используя параметр –e, можно посмотреть расширенную информацию о RAID-массиве:
Инициализация RAID заняла намного меньше времени, чем при использовании mdadm.
Создаем точку монтирования:
sudo mkdir -p /mnt/era
Устанавливаем файловую систему xfs:
sudo mkfs.xfs /dev/era_ERA10
Монтируем файловую систему:
sudo mount /dev/era_ERA10 /mnt/era
Проверяем доступность и объем дисков:
df -h -x devtmpfs -x tmpfs
RAID 5 строится аналогично RAID 10.
Выборочные тесты
Контрольный прогон RAID-массивов из четырех NVMe SSD показал их более чем пристойную производительность – при том, что для построения использовались бесплатные утилиты, без тонких настроек.
Все RAID 10 даже при больших нагрузках произвольного доступа работают с задержками ниже 1 мс. Чем выше интенсивность операций – тем больше раскрывается потенциал RAIDIX ERA.
Cравнили RAID 5 под mdadm и ERA на последовательных операциях ввода-вывода, c размером блока 128К.
Производительность чтения примерно одинакова, по скорости записи RAIDIX ERA заметно превосходит оппонента.
Что с того?
Вообще говоря, сравнивать показатели различных реализаций NVMe RAID мы не собирались – таких тестов хватает. Производительности даже скромных программных массивов из четырех SSD достаточно массовым приложениям – и это серьезный аргумент в размывании стереотипов. Следуя принципу бережливости (бритва Оккама: «не следует множить сущее без необходимости»), в серверах с локальными NVMe-дисками можно обходиться без аппаратных контроллеров. Тем более когда альтернатива бесплатна.
За NVMe будущее, нет сомнений. Избавление от RAID-контроллеров в серверах – часть пути в это, программно-определяемое будущее. Инструменты есть.
Про DCIM у забезпеченні успішної роботи ІТ-директора