Програмний NVMe RAID: просто та швидко

23.12.2021 | Сховища

Перехід серверів на 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) для навантажень з довільним та послідовним доступом:

Тип тесту

Глибина черги команд (QD)

Число завдань (NJ)

Розмір тестового блоку

Читання та запис із довільним доступом

1 та 8

1, 8, 24, 64

Послідовне читання та запис

1 та 8

1, 8, 24, 64

128К

Чотири 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

Перезавантажуємо систему. Перевіряємо змонтований 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

Зберемо 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.

Порівняли RAID 5 під mdadm і ERA на послідовних операціях введення-виводу, з розміром блоку 128К.

Продуктивність читання приблизно однакова, за швидкістю запису RAIDIX ERA помітно перевершує опонента.

Що з того?

Взагалі, порівнювати показники різних реалізацій NVMe RAID ми не збиралися - таких тестів вистачає . Продуктивності навіть скромних програмних масивів із чотирьох SSD досить масовим додаткам – і це серйозний аргумент у розмиванні стереотипів. Дотримуючись принципу ощадливості (бритва Оккама: «не слід множити те, що існує без необхідності»), в серверах з локальними NVMe-дисками можна обходитися без апаратних контролерів. Тим більше, коли альтернатива безкоштовна.

За NVMe майбутнє немає сумнівів. Порятунок від RAID-контролерів у серверах – частина шляху до цього, програмно-визначуване майбутнє. Інструменти є.