Стаття написана Нірмалою Сундарараджан з Dell EMC HPC та AI Innovation Lab у листопаді 2019 року
Готові рішення Dell EMC для високопродуктивного зберігання даних HPC BeeGFS
У таблицях 1 і 2 описано апаратні характеристики сервера керування та сервера метаданих/сховища відповідно. У таблиці 3 описані версії програмного забезпечення, що використовуються для рішення.
Таблиця 1 Конфігурація PowerEdge R640 (сервер керування) | |
---|---|
Сервер | Dell EMC PowerEdge R640 |
Процесор | 2x Intel Xeon Gold 5218 з тактовою частотою 2,3 ГГц, 16 ядер |
Пам'ять | 12 модулів пам'яті DDR4 DDR4 зі швидкістю 2666 МТ/с - 96 ГБ |
Локальні диски | 6 жорстких дисків по 300 ГБ 15 К/ХВ SAS 2.5 дюйма |
RAID-контролер | Вбудований RAID-контролер PERC H740P |
Поза управлінням діапазоном | iDRAC9 Enterprise з контролером життєвого циклу |
Живлення | Два блоки живлення потужністю 1100 Вт |
Версія BIOS | 2.2.11 |
Операційна система | CentOS™ 7.6 |
Версія ядра | 3.10.0-957.27.2.el7.x86_64 |
Таблиця 2 Конфігурація PowerEdge R740xd (сервери метаданих і зберігання даних) | |
---|---|
Сервер | Dell EMC PowerEdge R740xd |
Процесор | 2x процесор Intel Xeon Platinum 8268 @ 2.90 ГГц, 24 ядра |
Пам'ять | 12 модулів пам'яті DDR4 по 32 ГБ пам'яті 2933 МТ/с - 384 ГБ |
Картка BOSS | 2 твердотільні накопичувачі M.2 SATA ємністю 240 ГБ у RAID 1 для ОС |
Локальні диски | 24x Dell Express Flash NVMe P4600 1,6 ТБ 2,5" U.2 |
Картка Mellanox EDR | 2x Картка EDR Mellanox ConnectX-5 (слоти 1 і 8) |
Поза управлінням діапазоном | iDRAC9 Enterprise з контролером життєвого циклу |
Живлення | Два блоки живлення потужністю 2000 Вт |
Таблиця 3 Конфігурація програмного забезпечення (сервери метаданих і сховища) | |
---|---|
BIOS | 2.2.11 |
CPLD | 1.1.3 |
Операційна система | CentOS™ 7.6 |
Версія ядра | 3.10.0-957.el7.x86_64 |
iDRAC | 3.34.34.34 |
Інструмент управління системами | OpenManage Server Administrator 9.3.0-3407_A00 |
Мелланокс ОФЕД | 4.5-1.0.1.0 |
Твердотільні накопичувачі NVMe | QDV1DP13 |
* Інструмент Intel ® Data Center | 3.0.19 |
BeeGFS | 7.1.3 |
Графіна | 6.3.2 |
InfluxDB | 1.7.7 |
Бенчмарк IOzone | 3.487 |
У наведеному вище прикладі показані дві різні файлові системи, змонтовані на одному клієнті. Для цього тестування в якості клієнтів було використано 32 вузли C6420.$ cat /etc/beegfs/beegfs-mounts.conf
/mnt/beegfs-medium /etc/beegfs/beegfs-client-medium.conf
/mnt/beegfs-small /etc/beegfs/beegfs-client-small.conf
На малюнку 8 показаний тестовий стенд, де виділені підключення InfiniBand до зони NUMA. Кожен сервер має два IP-канали, і трафік через зону NUMA 0 передається інтерфейсом IB0, а трафік через зону NUMA 1 обробляється інтерфейсом IB1.# cat /proc/sys/kernel/numa_balancing
0
Таблиця 4 Конфігурація клієнта | |
---|---|
Клієнтів | 32 обчислювальні вузли Dell EMC PowerEdge C6420 |
BIOS | 2.2.9 |
Процесор | 2x процесор Intel Xeon Gold 6148 @ 2.40 ГГц з 20 ядрами на процесор |
Пам'ять | 12 модулів пам'яті DDR4 DDR4 зі швидкістю 2666 МТ/с - 192 ГБ |
Картка BOSS | 2 завантажувальні диски M.2 об'ємом 120 ГБ у RAID 1 для ОС |
Операційна система | Red Hat Enterprise Linux Server випуск 7.6 |
Версія ядра | 3.10.0-957.el7.x86_64 |
З'єднання | 1x Картка EDR Mellanox ConnectX-4 |
Версія OFED | 4.5-1.0.1.0 |
Для оцінки послідовних читань і записів використовувався бенчмарк IOzone в режимі послідовного читання і запису. Ці випробування проводилися на кількох потоках, починаючи з 1 потоку і збільшуючи степені 2, до 1024 потоків. При кожному підрахунку потоків було згенеровано однакову кількість файлів, оскільки цей тест працює з одним файлом на потік або з N клієнтів на N файл (N-N). Процеси були розподілені між 32 фізичними клієнтськими вузлами за круговою або циклічною системою, щоб запити були рівномірно розподілені та відбувалося балансування навантаження. Було обрано сукупний розмір файлу 8 ТБ, який був порівну розподілений між кількістю потоків у кожному тесті. Сукупний розмір файлу був обраний досить великим, щоб мінімізувати наслідки кешування як з серверів, так і з клієнтів BeeGFS. IOzone було запущено в комбінованому режимі запису з подальшим читанням (-i 0, -i 1), щоб дозволити йому координувати межі між операціями. Для цього тестування та результатів ми використовували розмір запису 1 МіБ для кожного запуску. Команди, що використовуються для послідовних N-N тестів, наведені нижче:
Послідовний запис і читання: iozone -i 0 -i 1 -c -e -w -r 1m -i -s $Size -t $Thread -+n -+m /шлях/до/списку ниток
Кеші ОС також скидалися або очищалися на клієнтських вузлах між ітераціями, а також між тестами запису та читання, виконуючи команду:
# sync && echo 3 > /proc/sys/vm/drop_caches
Кількість страйпів за замовчуванням для Beegfs дорівнює 4. Однак розмір фрагмента та кількість цілей у файлі можна налаштувати для кожного каталогу. Для всіх цих тестів розмір страйпу BeeGFS був обраний як 2 МБ, а кількість страйпів - 3, оскільки у нас є три цілі для кожної зони NUMA, як показано нижче:
$ beegfs-ctl --getentryinfo --mount=/mnt/beegfs /mnt/beegfs/benchmark --verbose
EntryID: 0-5D9BA1BC-1
Ідентифікатор батьків: корінь
Вузол метаданих: node001-numa0-4 [ID: 4]
Деталі візерунка смуги:
+ Тип: Розмір фрагмента RAID0
+: 2M
+ Кількість об'єктів зберігання: бажано:
3+ Накопичувальний басейн: 1 (За замовчуванням)
Шлях до хешу inode: 7/5E/0-5D9BA1BC-1
Прозорі величезні сторінки були відключені, а на серверах метаданих і сховищ діють наступні параметри налаштування:
- vm.dirty_background_ratio = 5
- vm.dirty_ratio = 20
- vm.min_free_kbytes = 262144
- vm.vfs_cache_pressure = 50
- vm.zone_reclaim_mode = 2
- kernel.numa_balancing = 0
Крім перерахованого вище, використовувалися наступні варіанти тюнінгу BeeGFS:
На рисунку 9 ми бачимо, що пікова продуктивність читання становить 132 ГБ/с при 1024 потоках, а пікова швидкість запису становить 121 ГБ/с при 256 потоках. Кожен накопичувач може забезпечити пікову продуктивність читання 3,2 ГБ/с і пікову продуктивність запису 1,3 ГБ/с, що дозволяє теоретично досягти піку 422 ГБ/с для читання та 172 ГБ/с для запису. Однак тут обмежуючим фактором є мережа. Загалом у нас є 11 посилань InfiniBand EDR для серверів зберігання даних у налаштуваннях. Кожен канал може забезпечити теоретичну пікову продуктивність 12,4 ГБ/с, що дозволяє теоретично досягти пікової продуктивності 136,4 ГБ/с. Досягнута пікова продуктивність читання та запису становить 97% та 89% відповідно від теоретичної пікової продуктивності.
Продуктивність однопотокового запису становить ~3 ГБ/с, а читання – ~3 ГБ/с. Ми спостерігаємо, що продуктивність запису масштабується лінійно, досягає піку в 256 потоків, а потім починає знижуватися. При меншій кількості потоків продуктивність читання та запису однакова. Тому що до 8 потоків у нас є 8 клієнтів, які пишуть по 8 файлів у 24 цілях, а це означає, що не всі цілі сховища використовуються повністю. У нас є 33 цілі зберігання даних у системі, і, отже, для повного використання всіх серверів потрібно щонайменше 11 потоків. Продуктивність зчитування реєструє стійке лінійне зростання зі збільшенням кількості паралельних потоків, і ми спостерігаємо майже однакову продуктивність на 512 і 1024 потоках.
Ми також спостерігаємо, що продуктивність читання нижча, ніж при записі для кількості потоків від 16 до 128, а потім продуктивність читання починає масштабуватися. Це пов'язано з тим, що в той час як операція читання PCIe є операцією без проводки, що вимагає як запиту, так і завершення, операція запису PCIe є операцією «вистрілив і забув». Після того, як пакет рівня транзакцій передається канальному рівню даних, операція завершується. Операція запису — це операція «Розміщено», яка складається лише із запиту.
Пропускна здатність зчитування зазвичай нижча, ніж пропускна здатність запису, оскільки для читання потрібно дві транзакції замість одного запису для того самого обсягу даних. PCI Express використовує модель розділених транзакцій для зчитування. Зчитувана транзакція включає в себе наступні етапи:
Пропускна здатність зчитування залежить від затримки між моментом видачі запиту на зчитування та часом, необхідним заповнювачу для повернення даних. Однак, коли програма видає достатню кількість запитів на читання, щоб покрити цю затримку, то пропускна здатність максимізується. Ось чому, хоча продуктивність читання менша, ніж у записів від 16 до 128 потоків, ми вимірюємо збільшену пропускну здатність, коли кількість запитів збільшується. Нижча пропускна здатність вимірюється, коли запитувач чекає завершення, перш ніж видавати наступні запити. Більш висока пропускна здатність реєструється, коли видається кілька запитів на амортизацію затримки після повернення перших даних.
Для оцінки випадкової продуктивності вводу-виводу використовувався IOzone у випадковому режимі. Тести проводилися на кількості потоків від 4 до 1024 потоків. Опція прямого вводу-виводу (-I) використовувалася для запуску IOzone, щоб всі операції обходили буферний кеш і потрапляли безпосередньо на диск. Було використано кількість страйпів BeeGFS 3 та розмір фрагмента 2 МБ. Розмір запиту 4KiB використовується в IOzone. Продуктивність вимірюється в операціях введення-виведення в секунду (IOPS). Кеш ОС скидався між запусками на серверах BeeGFS, а також клієнтах BeeGFS. Команда, яка використовується для виконання випадкових записів і читань, наведена нижче:
Випадкове читання і запис: iozone -i 2 -w -c -O -I -r 4K -s $Size -t $Thread -+n -+m /шлях/до/списку ниток
Малюнок 10: Продуктивність випадкового читання та запису за допомогою IOzone із сукупним розміром
файлу 8 ТБ Випадковий запис досягає піку ~3,6 мільйона IOPS при 512 потоках, а випадковий запис досягає піку ~3,5 мільйона IOPS при 1024 потоках, як показано на малюнку 10. Як продуктивність запису, так і читання показують вищу продуктивність, коли є більша кількість запитів вводу-виводу. Це пов'язано з тим, що стандарт NVMe підтримує до 64K черги вводу/виводу та до 64K команд на чергу. Цей великий пул черг NVMe забезпечує більш високий рівень паралельності введення-виведення, і тому ми спостерігаємо IOPS, що перевищує 3 мільйони.
У цьому блозі оголошується про випуск рішення Dell EMC High Performance BeeGFS Storage Solution і висвітлюються його експлуатаційні характеристики. Рішення має пікову продуктивність послідовного читання та запису ~132 ГБ/с та ~121 ГБ/с відповідно, а випадкові записи досягають піку при ~3,6 мільйона IOPS, а випадкові зчитування – ~3,5 мільйона IOPS.
Цей блог є першою частиною "BeeGFS Storage Solution", який був розроблений з акцентом на скретч-простір з високою продуктивністю. Слідкуйте за оновленнями 2 частини серії блогів, в якій буде описано, як можна масштабувати рішення, збільшуючи кількість серверів для збільшення продуктивності та потужності. У частині 3 серії блогів будуть обговорюватися додаткові можливості BeeGFS і висвітлюватися використання "StorageBench", бенчмарку вбудованих цілей зберігання даних BeeGFS.
У рамках наступних кроків пізніше ми опублікуємо офіційний документ із продуктивністю метаданих і продуктивністю IOR від N потоків до 1 файлу, а також з додатковими подробицями щодо міркувань дизайну, налаштування та конфігурації.