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