Вихід Multikernel Linux: новий підхід до багатоядерних систем

Вихід Multikernel: новий підхід до Linux для багатоядерних систем

Майже через рік після того, як проект Multikernel опублікував свій код ядра Linux і надіслав свої перші патчі на рецензію, команда вперше зробила доступним своє дерево ядра Multikernel Linux. Це випуск базується на Linux 7.0 і помічений як v7.0-mk2 у дереві ядер проекту. Наразі офіційно підтримується тільки x86_64.

Що таке Multikernel?

Якщо ви про нього не чули, Multikernel є новим підходом до використання Linux на великих багатоядерних системах. Замість того, щоб одне ядро Linux керувало всім, він дозволяє кільком окремим ядрам Linux працювати паралельно на одному і тому ж обладнанні.

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

Гнучкість ресурсів у Multikernel

Ресурси не прив’язані на місці. Проект стверджує, що ви можете вимкнути інстанси, повернути їх процесори, пам’ять і пристрої назад до хоста, а потім запустити нові інстанси з іншим ядром за потреби.

Latency under KVM, relative to multikernel
Затримка під KVM у порівнянні з multikernel

Порівняння ефективності Multikernel з KVM

З виходом проект також поділився порівняннями продуктивності, показуючи, де його підхід “безпосередньої роботи з апаратним забезпеченням” може перевершити традиційну віртуалізацію. В одній серії тестів lmbench Multikernel порівнювали з добре налаштованою віртуальною машиною KVM. Обидва використовували одне і те ж ядро, два процесорних ядра і 1 ГБ пам’яті на системі Intel Xeon Gold 5418Y.

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

Наприклад, тести показали, що переключення контексту між двома процесами зайняло 1.37 мікросекунд з Multikernel, у порівнянні з 3.42 мікросекунди у стандартному гостьовому середовищі KVM. Затримка в каналах складала 3.24 мікросекунди проти 7.06, а затримка сокета Unix – 4.81 проти 7.48 мікросекунд.

Однак розробники зазначають, що ці цифри не означають, що Multikernel завжди в кілька разів швидший за KVM. Багато відмінностей походять від того, як управляються непризначені віртуальні процесори.

Майбутнє Multikernel: підтримка нових архітектур

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

Для додаткових деталей ви можете знайти код джерела Multikernel Linux на GitHub. Проект також пропонує інструкцію для початківців для тих, хто хоче спробувати цю технологію.