Програмний NVMe 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) для навантажень з довільним та послідовним доступом:
Тип тесту |
Глибина черги команд (QD) |
Число завдань (NJ) |
Розмір тестового блоку |
Читання та запис із довільним доступом |
1 та 8 |
1, 8, 24, 64 |
4К |
Послідовне читання та запис |
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-контролерів у серверах – частина шляху до цього, програмно-визначуване майбутнє. Інструменти є.