Multikernel, чудова утиліта для запуску кількох ядер без віртуалізації

Ключові моменти:
  • Багатоядерний Linux дозволяє запускати незалежні ядра одночасно на голому залізі.
  • Базується на ядрі Linux 7.0, використовує CONFIG_MULTIKERNEL та наразі підтримує архітектуру x86_64.
  • Це усуває накладні витрати на віртуалізацію (гіпервізори KVM), забезпечуючи швидше перемикання контексту в 2,5 рази.
  • На відміну від контейнерів, екземпляри не використовують спільне ядро, що запобігає впливу збоїв або вразливостей на весь сервер.
  • Використовуйте інструмент Kerf разом із модулями Lazy CMA та DAXFS для динамічного керування ресурсами та завантаження образів Docker.

Багатоядерний Linux

Минулого року ми обговорювали тут, у блозі, пропозицію від ByteDance (творця TikTok) щодо утиліти під назвою Parker (PARTITIONED KERnel) – експериментальної технології , яка дозволяє одночасно запускати кілька ядер Linux. А тепер, трохи більше ніж через півтора року, вийшла нова публічна утиліта з цього проєкту під назвою «Multikernel Linux (mklinux-v7.0-mk2)».

Ця розробка представляє спеціалізований варіант ядра Linux, який дозволяє одночасне виконання кількох незалежних екземплярів ядра на одному фізичному сервері. Працюючи безпосередньо на голому залізі, ця технологія повністю усуває потребу в гіпервізорах або рівнях віртуалізації, надаючи кожному екземпляру прямий доступ до виділеної пам'яті, процесора та пристроїв.

ByteDance-Parker-багатоядерний
Пов'язана стаття:
Паркер: Нова технологія, яка дозволяє запускати кілька ядер Linux без віртуалізації

Базований на нещодавно випущеному ядрі Linux 7.0, проект дозволяє ввімкнути цю функцію через параметр конфігурації CONFIG_MULTIKERNEL . Якщо цей параметр вимкнено, результуюче ядро ​​буде точно таким самим і поводиться як стандартний Linux 7.0. Наразі ця перша версія (v7.0-mk2) підтримує виключно архітектури x86_64 і розроблена для подолання розриву в продуктивності та безпеці між традиційною віртуалізацією та ізоляцією контейнерів.

Ізоляція без зниження продуктивності

Найбільшою проблемою віртуалізації є «податок» на продуктивність, який стягують гіпервізори. Натомість, багатоядерний Linux усуває переходи виходу віртуальної машини , перетворення пам'яті другого рівня та накладні витрати, що генеруються моделями пристроїв.

Згідно з даними про продуктивність, опублікованими після тестування на процесорах Xeon Gold 5418Y (Sapphire Rapids), багатоядерна система демонструє значне збільшення швидкості виконання порівняно з гостьовими системами KVM. Наприклад, перемикання контексту між процесами відбувається в 2,5 рази швидше, затримка каналу зменшується більш ніж вдвічі (2,18x), а базові системні виклики, такі як операції читання та запису, отримують приріст часу відгуку більш ніж на 25%.

Порівняно з традиційними контейнерами Docker, Multikernel пропонує кращий захист, оскільки, оскільки контейнери використовують одне й те саме ядро ​​хоста, вразливість на рівні ядра, паніка або внутрішнє перенасичення блокувань впливають на всіх орендарів. В екосистемі Multikernel кожне середовище має своє власне незалежне ядро ; тобто, якщо один екземпляр зазнає критичного збою, інші продовжують працювати без змін, гарантуючи ізольоване середовище, ідеальне для запуску всього, від веб-серверів до інтенсивних навчальних навантажень штучного інтелекту (машинного навчання) на одному й тому ж обладнанні.

Динамічне призначення та оркестрація за допомогою Kerf

Багатоядерний Linux працює з використанням ядра хоста , яке керує великим пулом ресурсів (процесорів, оперативної пам'яті та пристроїв PCI). Використовуючи існуючу деревоподібну структуру пристроїв (доступну за адресою /sys/fs/multikernel/), ядро ​​виділяє цей пул та запускає "дочірні ядра" через власну підсистему kexec_file_load(). Завдяки можливостям гарячого підключення Linux ці ресурси можна динамічно переміщувати між екземплярами без необхідності перезавантаження сервера, забезпечуючи передбачувану та регульовану в режимі реального часу продуктивність.

Для оркестрування цієї екосистеми розробники представили інструмент командного рядка Kerf . Ця утиліта керує всім життєвим циклом екземплярів, спираючись на додаткові модулі з відкритим кодом. Одним з них є Lazy CMA, який виділяє безперервну фізичну пам'ять під час виконання без необхідності будь-якої попередньої конфігурації.

Іншим стовпом є DAXFS, модуль, який дозволяє екземплярам спільно використовувати файлові системи безпосередньо в пам'яті; завдяки цьому Kerf може завантажувати дочірнє ядро ​​безпосередньо всередині образу контейнера Docker, використовуючи його файлову систему без необхідності шарів емуляції та використовуючи дескриптори в пам'яті для мережевого з'єднання без копіювання даних.

Варто зазначити, що цей перший реліз пройшов інтенсивні тести на стабільність за умов 5-рівневої архітектури підкачки та активного KASLR, демонструючи, що відновлення ресурсів є повністю безпечним навіть у разі збою дочірнього ядра.

Дозволяючи розподіляти робочі навантаження, що конфліктували через системні блокування (наприклад, велику кількість процесів від’єднання або перейменування в одному кеші), між окремими ядрами, узгодженими з фізичними сокетами процесорів, багатоядерний Linux демонструє здатність масштабуватися за межі бар’єру продуктивності, що накладається одним монолітним ядром, відкриваючи нову еру в консолідації серверів та високопродуктивних хмарних обчисленнях.

Зрештою, якщо ви зацікавлені дізнатися більше, ви можете знайти деталі за наступним посиланням.


Додати як пріоритетне джерело в Google