В прошлом году мы обсуждали в блоге предложение от 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,18 раза), а время отклика базовых системных вызовов, таких как операции чтения и записи, увеличивается более чем на 25%.
По сравнению с традиционными контейнерами Docker, Multikernel обеспечивает превосходную защиту, поскольку, так как контейнеры используют одно и то же ядро хоста, уязвимость на уровне ядра, сбой или перегрузка внутренних блокировок затрагивают все экземпляры. В экосистеме Multikernel каждая среда имеет собственное независимое ядро ; то есть, если один экземпляр терпит критический сбой, другие продолжают работать без изменений, гарантируя изолированную среду, идеально подходящую для запуска всего, от веб-серверов до ресурсоемких задач обучения ИИ (машинного обучения) на одном и том же оборудовании.
Динамическое назначение и оркестровка с помощью Kerf
В многоядерной Linux используется ядро хоста , которое управляет большим пулом ресурсов (процессорами, оперативной памятью и устройствами PCI). Используя существующую структуру дерева устройств (доступную по адресу /sys/fs/multikernel/), ядро формирует этот пул и запускает «дочерние ядра» через собственную подсистему kexec_file_load(). Благодаря возможностям горячего подключения (hotplug) в Linux эти ресурсы могут динамически перемещаться между экземплярами без необходимости перезагрузки сервера, обеспечивая предсказуемую и настраиваемую в реальном времени производительность.
Для организации этой экосистемы разработчики представили инструмент командной строки Kerf . Эта утилита управляет всем жизненным циклом экземпляров, используя дополнительные модули с открытым исходным кодом. Один из них — Lazy CMA, который выделяет непрерывную физическую память во время выполнения без необходимости предварительной настройки.
Другой важный компонент — DAXFS, модуль, позволяющий экземплярам напрямую совместно использовать файловые системы в памяти; благодаря этому Kerf может загружать дочернее ядро непосредственно внутри образа контейнера Docker, используя его файловую систему без необходимости в слоях эмуляции и применяя дескрипторы в памяти для сетевого соединения без копирования данных.
Стоит отметить, что этот первый релиз прошёл интенсивные тесты стабильности в условиях 5-уровневой страничной организации памяти и активного KASLR, демонстрируя, что восстановление ресурсов полностью безопасно даже при сбое дочернего ядра.
Благодаря возможности разделения рабочих нагрузок, которые конфликтуют из-за системных блокировок (например, большое количество процессов отмены или переименования в одном и том же кэше), между отдельными ядрами, синхронизированными с физическими процессорными сокетами, Multikernel Linux демонстрирует способность масштабироваться за пределы барьера производительности, накладываемого единым монолитным ядром, открывая новую эру в консолидации серверов и высокопроизводительных облачных вычислениях.
Наконец, если вас интересует более подробная информация, вы можете найти ее по следующей ссылке.