RAID-масиви на NVMe

RAID-масиви на NVMe
У цій статті ми розповімо про різні способи організації RAID-масивів, а також покажемо один із перших апаратних RAID-контролерів із підтримкою NVMe.

Вся різноманітність застосувань технології RAID зустрічається у серверному сегменті. У клієнтському сегменті найчастіше використовується виключно програмний RAID0 або RAID1 на два диски.

У цій статті буде короткий огляд технології RAID, невелика інструкція створення RAID-масивів за допомогою трьох різних інструментів і порівняння продуктивності віртуальних дисків при використанні кожного зі способів.

Що таке RAID?

Вікіпедія дає вичерпне визначення технології RAID:

RAID (Англ. Надлишковий масив незалежних дисків — надлишковий масив незалежних (самостійних) дисків) — технологія віртуалізації даних для об'єднання кількох фізичних дискових пристроїв у логічний модуль для підвищення стійкості до відмов і продуктивності.

Конфігурація дискових масивів і технології, що використовуються при цьому, залежать від обраного рівня RAID (RAID level). Рівні RAID стандартизовані у специфікації Common RAID Disk Data Format. Вона описує безліч рівнів RAID, проте найпоширенішими вважають RAID0, RAID1, RAID5 і RAID6.

RAID0, або Смуги, - це рівень RAID, який поєднує два або більше фізичних дисків в один логічний. Обсяг логічного диска у своїй дорівнює сумі обсягів фізичних дисків, які входять у масив. На цьому рівні RAID немає надмірності, а вихід з ладу одного диска може призвести до втрати всіх даних у віртуальному диску.

Рівень RAID1, або Mirrorстворює ідентичні копії даних на двох і більше дисках. Об'єм віртуального диска при цьому не перевищує обсяг мінімального з фізичних дисків. Дані на віртуальному диску RAID1 будуть доступні, поки хоча один фізичний диск з масиву працює. Використання RAID1 додає надмірності, але є досить дорогим рішенням, оскільки в масивах з двох і більше дисків доступний лише один обсяг.

Рівень RAID5 вирішує проблему дорожнечі. Для створення масиву з рівнем RAID5 необхідно як мінімум 3 диски, масив стійкий до виходу з ладу одного диска. Дані RAID5 зберігаються блоками з контрольними сумами. Немає суворого поділу на диски з даними та диски з контрольними сумами. Контрольні суми в RAID5 – це результат операції XOR, застосованої до N-1 блоків, кожен із яких узятий зі свого диска.

Хоча RAID-масиви підвищують надмірність та надають резервування, вони не підходять для зберігання резервних копій.

Після короткого екскурсу за видами RAID-масивів можна переходити до пристроїв та програм, які дозволяють збирати та використовувати дискові масиви.

Види RAID-контролерів

Існує два способи створити та використовувати RAID-масиви: апаратний та програмний. Ми розглянемо такі рішення:

  • Linux Software RAID.
  • Intel® Virtual RAID On CPU.
  • LSI MegaRAID 9460-8i.

Зазначимо, що рішення Intel працює на чіпсеті, через що виникає питання, апаратне це рішення або програмне. Так, наприклад, гіпервізор VMWare ESXi вважає VROC програмним та не підтримує офіційно.

Linux Software RAID

Програмні RAID-масиви в сімействі ОС Linux - досить поширене рішення як у клієнтському сегменті, так і серверному. Все, що потрібно для створення масиву - утиліта mdadm і кілька блокових пристроїв. Єдина вимога, яка пред'являє Linux Software RAID до накопичувачів, - бути блоковим пристроєм, доступним системі.

Відсутність витрат на обладнання та програмне забезпечення – очевидна перевага даного способу. Linux Software RAID організує дискові масиви ціною процесорного часу. Список підтримуваних рівнів RAID та стан поточних дискових масивів можна переглянути у файлі mdstat, що знаходиться в корені procfs:

root@grindelwald:~# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid10] 
unused devices: <none>

Підтримка рівнів RAID додається підключенням відповідного модуля ядра, наприклад:

root@grindelwald:~# modprobe raid456
root@grindelwald:~# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] 
unused devices: <none>

Усі операції з дисковими масивами проводяться через утиліту командного рядка mdadm. Складання дискового масиву проводиться в одну команду:

mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/nvme1n1 /dev/nvme2n1

Після виконання цієї команди в системі з'явиться блоковий пристрій /dev/md0, який представляє з тебе віртуальний диск.

Intel® Virtual RAID On CPU

RAID-масиви на NVMeIntel® VROC Standard Hardware Key
Intel® Virtual RAID On CPU (VROC) – це програмно-апаратна технологія для створення RAID-масивів на базі чіпсетів Intel®. Ця технологія доступна в основному для материнських плат із підтримкою процесорів Intel Xeon Scalable. За промовчанням VROC недоступний. Для його активації необхідно встановити ліцензійний апаратний ключ VROC.

Стандартна ліцензія VROC дозволяє створювати дискові масиви з 0, 1 та 10 рівнями RAID. Преміальна версія розширює цей перелік підтримкою RAID5.

Технологія Intel® VROC у сучасних материнських платах працює спільно з Intel® Volume Management Device (VMD), яка забезпечує можливість гарячої заміни для накопичувачів з інтерфейсом NVMe.

RAID-масиви на NVMeIntel® VROC зі стандартною ліцензією Налаштування масивів здійснюється через Setup Utility під час завантаження сервера. На вкладці Advanced з'являється пункт Intel® Virtual RAID on CPU, де можна налаштувати дискові масиви.

RAID-масиви на NVMeСтворення масиву RAID1 на двох накопичувачах
Технологія Intel VROC має свої «козирі в рукаві». Дискові масиви, зібрані за допомогою VROC, сумісні з Linux Software RAID. Це означає, що стан масивів можна відстежувати /proc/mdstat, а адмініструвати - через mdadm. Ця "особливість" офіційно підтримується Intel. Після складання RAID1 у Setup Utility можна спостерігати синхронізацію накопичувачів в ОС:

root@grindelwald:~# cat /proc/mdstat 
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md126 : active raid1 nvme2n1[1] nvme1n1[0]
      1855832064 blocks super external:/md127/0 [2/2] [UU]
      [>....................]  resync =  1.3% (24207232/1855832064) finish=148.2min speed=205933K/sec
      
md127 : inactive nvme1n1[1](S) nvme2n1[0](S)
      10402 blocks super external:imsm
       
unused devices: <none>

Зазначимо, що через mdadm не можна збирати масиви на VROC (зібрані масиви будуть Linux SW RAID), але можна міняти в них диски та розбирати масиви.

LSI MegaRAID 9460-8i

RAID-масиви на NVMeЗовнішній вигляд контролера LSI MegaRAID 9460-8i
RAID-контролер є самостійним апаратним рішенням. Контролер працює лише з накопичувачами, підключеними безпосередньо до нього. Цей RAID-контролер підтримує до 24 накопичувачів з інтерфейсом NVMe. Саме підтримка NVMe виділяє цей контролер з багатьох інших.

RAID-масиви на NVMeГоловне меню апаратного контролера
При використанні режиму UEFI налаштування контролера інтегруються до Setup Utility. У порівнянні з VROC меню апаратного контролера виглядає значно складніше.

RAID-масиви на NVMeСтворення RAID1 на двох дисках
Пояснення налаштування дискових масивів на апаратному контролері є досить тонкою темою та може стати приводом для повноцінної статті. Тут ми просто обмежимося створенням RAID0 і RAID1 з налаштуваннями за замовчуванням.

Диски, підключені до апаратного контролера, не видно операційній системі. Натомість контролер «маскує» всі RAID-масиви під SAS-накопичувачі. Накопичувачі, підключені до контролера, але не входять до складу дискового масиву, не будуть доступні ОС.

root@grindelwald:~# smartctl -i /dev/sda
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-48-generic] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Vendor:               AVAGO
Product:              MR9460-8i
Revision:             5.14
Compliance:           SPC-3
User Capacity:        1,999,844,147,200 bytes [1.99 TB]
Logical block size:   512 bytes
Rotation Rate:        Solid State Device
Logical Unit id:      0x000000000000000000000000000000
Serial number:        00000000000000000000000000000000
Device type:          disk
Local Time is:        Sun Oct 11 16:27:59 2020 MSK
SMART support is:     Unavailable - device lacks SMART capability.

Незважаючи на маскування під SAS-накопичувачі, масиви з NVMe працюватимуть на швидкості PCIe. Однак така особливість дозволяє завантажуватися з NVMe у Legacy.

Тестовий стенд

Кожен із способів організації дискових масивів має свої фізичні плюси та мінуси. Але чи є різниця у продуктивності при роботі з дисковими масивами?

Для досягнення максимальної справедливості всі тести будуть проведені на тому самому сервері. Його конфігурація:

  • 2x Intel Xeon 6240;
  • 12x DDR4-2666 16 GB;
  • LSI MegaRAID 9460-8i;
  • Intel® VROC Standard Hardware Key;
  • 4x Intel SSD DC P4510 U.2 2TB;
  • 1x Samsung 970 EVO Plus M.2 500GB.

Тестовані виступають P4510, з яких одна половина підключена до материнської плати, а друга - до RAID-контролера. На M.2 встановлено операційну систему Ubuntu 20.04, а тести виконуватимуться за допомогою версії 3.16.

Тестування

Насамперед перевіримо затримки під час роботи з диском. Тест виконується в один потік розмір блоку 4 КБ. Кожен тест триває 5 хвилин. Перед початком для відповідного блокового пристрою виставляється none як планувальник I/O. Команда fio виглядає так:

fio --name=test --blocksize=4k --direct=1 --buffered=0 --ioengine=libaio  --iodepth=1 --loops=1000 --runtime=300  --rw=<mode> --filename=<blkdev>

З результатів fio ми беремо clat 99.00%. Результати наведено у таблиці нижче.

Випадкове читання, мкс
Випадковий запис, мкс

Диск
112
78

Linux SW RAID, RAID0
113
45

VROC, RAID0
112
46

LSI, RAID0
122
63

Linux SW RAID, RAID1
113
48

VROC, RAID1
113
45

LSI, RAID1
128
89

Крім затримок при зверненні до даних, хочеться побачити продуктивність віртуальних накопичувачів та порівняти з продуктивністю фізичного диска. Команда для запуску fio:

fio --name=test --blocksize=4k --direct=1 --buffered=0 --ioengine=libaio  --loops=1000 --runtime=300  --iodepth=<threads> --rw=<mode> --filename=<blkdev>

Продуктивність вимірюється у кількості операцій введення-виведення. Результати представлені у таблиці нижче.

Випадкове читання 1 потік, IOPS
Випадковий запис 1 потік, IOPS
Випадкове читання 128 потоків, IOPS
Випадковий запис 128 потоків, IOPS

Диск
11300
40700
453000
105000

Linux SW RAID, RAID0
11200
52000
429000
232000

VROC, RAID0
11200
52300
441000
162000

LSI, RAID0
10900
44200
311000
160000

Linux SW RAID, RAID1
10000
48600
395000
147000

VROC, RAID1
10000
54400
378000
244000

LSI, RAID1
11000
34300
229000
248000

Легко помітити, що використання апаратного контролера дає збільшення затримок та просідання за продуктивністю порівняно з програмними рішеннями.

Висновок

Використання апаратних рішень для створення дискових масивів із двох дисків виглядає нераціонально. Тим не менш, існують завдання, де використання RAID-контролерів є виправданим. З появою контролерів з підтримкою інтерфейсу NVMe у користувачів з'являється можливість використовувати більш швидкі SSD у проектах.

RAID-масиви на NVMe

Тільки зареєстровані користувачі можуть брати участь в опитуванні. Увійдіть, будь ласка.

Ви використовуєте RAID-рішення?

  • 29,6%Так, апаратні рішення32

  • 50,0%Так, програмні рішення54

  • 16,7%Ні18

  • 3,7%RAID не потрібен4

Проголосували 108 користувачів. Утрималися 14 користувачів.

Джерело: habr.com

Додати коментар або відгук