Почти через год после того, как проект Multikernel открыл код ядра Linux и отправил первые патчи на проверку, команда впервые опубликовала дерево Multikernel Linux. Выпуск основан на Linux 7.0 и в дереве ядра проекта имеет метку v7.0-mk2. Сейчас официально поддерживается только архитектура x86_64.

Multikernel можно считать новым подходом к использованию Linux на крупных многоядерных системах. Вместо одного ядра Linux, которое управляет всеми ресурсами, он позволяет нескольким отдельным ядрам Linux работать бок о бок на одном и том же оборудовании.

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

Ресурсы также не закреплены на постоянной основе. Разработчики проекта отмечают, что экземпляры можно останавливать, возвращать их процессоры, память и устройства хост-системе, а затем при необходимости запускать новые экземпляры с другим ядром.

Задержка под KVM относительно multikernel
Задержка под KVM относительно multikernel

Вместе с этим выпуском проект также опубликовал сравнения производительности, которые показывают, в каких сценариях подход с запуском на голом железе может превосходить традиционную виртуализацию. В одной серии тестов 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. Значительная часть разницы связана с тем, как обрабатываются простаивающие виртуальные процессоры. В стандартной конфигурации KVM пробуждение простаивающего vCPU требует выхода из виртуальной машины и повторного входа в неё. Multikernel же управляет физическими ядрами процессора напрямую.

Недостаток в том, что для хост-системы эти процессорные ядра выглядят полностью занятыми и потребляют больше энергии. В этой конфигурации проект зафиксировал потребление примерно на 19 Вт выше. Расширение контроля гостевой системы над управлением питанием процессора также снижало задержки, но по-прежнему требовало компромиссов по энергопотреблению и ресурсам.

Для первого публичного выпуска разработчики отмечают, что архитектура x86_64 протестирована лучше всего. Поддержка других архитектур может появиться позже. Архитектурно-зависимые интерфейсы уже вынесены отдельно с расчётом на будущие порты, но официально другие архитектуры пока не поддерживаются.

Дополнительные сведения приведены в анонсе. Исходный код Multikernel Linux опубликован на GitHub. Проект также предлагает руководство по началу работы для всех, кто хочет попробовать технологию.

Изображение: Multikernel Project