Multikernel Linux: первое общедоступное дерево ядер на основе Linux 7.0
Спустя почти год после того, как проект Multikernel поделился своим кодом ядра Linux и отправил первые патчи на проверку, команда впервые сделала общедоступным дерево Multikernel Linux. Эта версия построена на базе Linux 7.0 и обозначена как v7.0-mk2 в дереве ядра проекта. В настоящее время официально поддерживается только архитектура x86_64.
Если вы не слышали о мультиядре, то знайте, что это новый способ использования Linux в больших многоядерных системах. Вместо того чтобы запускать все процессы в одном ядре Linux, можно запустить несколько отдельных ядер Linux параллельно на одном и том же оборудовании.
Основная идея проста. Один экземпляр Linux выступает в роли хоста и управляет пулом процессоров, памяти и PCI-устройств. Он может разделить эти ресурсы на отдельные группы и запустить в каждой группе другое ядро Linux. В отличие от виртуальных машин, эти дополнительные ядра не работают на гипервизоре. Каждый из них получает собственные физические процессоры, память и устройства и работает непосредственно на аппаратном обеспечении.
Ресурсы также не привязаны к конкретному месту. В проекте говорится, что можно выключать инстансы, возвращать их процессоры, память и устройства на хост, а затем при необходимости запускать новые инстансы с другим ядром.

Задержка при использовании KVM по сравнению с мультиядерным режимом
В этом релизе проект также опубликовал результаты сравнительного тестирования производительности, демонстрирующие, в каких случаях подход с использованием «голого железа» может превзойти традиционную виртуализацию. В одном из наборов тестов lmbench мультиядерный режим сравнивался с хорошо настроенной виртуальной машиной KVM. В обоих случаях использовалась одна и та же сборка ядра, два ядра процессора и 1 ГБ памяти в двухпроцессорной системе Intel Xeon Gold 5418Y.
Результаты показали практически одинаковую задержку и пропускную способность памяти, что вполне логично, учитывая эффективность современной аппаратной виртуализации. Более заметные различия проявились в задачах, требующих большого количества переходов и пробуждений процессора.
Например, тесты показали, что переключение контекста двух процессов в Multikernel занимало 1,37 микросекунды по сравнению с 3,42 микросекунды в гостевой системе KVM по умолчанию. Задержка при передаче данных по конвейеру составила 3,24 микросекунды по сравнению с 7,06, а задержка при передаче данных через сокет Unix — 4,81 микросекунды по сравнению с 7,48.
Однако разработчики отмечают, что эти цифры не означают, что Multikernel всегда в несколько раз быстрее KVM. Большая часть различий связана с тем, как управляются простаивающие виртуальные процессоры. В стандартной настройке KVM для пробуждения простаивающего виртуального процессора необходимо выйти из виртуальной машины и снова войти в нее. Multikernel, в свою очередь, напрямую управляет физическими ядрами процессора.
Недостаток этого подхода в том, что для хоста эти ядра процессора выглядят как полностью задействованные и потребляют больше энергии. В рамках проекта было зафиксировано увеличение энергопотребления примерно на 19 Вт. Предоставление гостевой системе большего контроля над управлением питанием процессора также снизило задержку, но все равно потребовало компромисса в плане энергопотребления и ресурсов.
Разработчики говорят, что в этом первом публичном релизе больше всего внимания было уделено тестированию x86_64. Поддержка других архитектур может появиться позже. Архитектурно-специфичные интерфейсы уже разделены с прицелом на будущие порты, но ни один из них пока официально не поддерживается.
Более подробную информацию можно найти в объявлении. Исходный код Multikernel Linux доступен на GitHub. В рамках проекта также предлагается руководство по началу работы для всех, кто хочет опробовать эту технологию.
Авторство изображения: Multikernel Project
Редактор: AndreyEx