Проект Multikernel Linux позволит одновременно выполнять несколько экземпляров ядра Linux

Команда разработчиков сделала общедоступным репозиторий проекта Multikernel Linux. Он позволяет одновременно выполнять несколько экземпляров ядра Linux.

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

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

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

В этом релизе проект также поделился результатами сравнения производительности, демонстрирующими, где подход с использованием «голого железа» может превзойти традиционную виртуализацию. В одном из наборов тестов lmbench многоядерный режим сравнивался с хорошо настроенной виртуальной машиной KVM. Оба использовали одну и ту же сборку ядра, два ядра ЦП и 1 ГБ памяти на двухпроцессорной системе Intel Xeon Gold 5418Y. Результаты показали почти одинаковую задержку памяти и пропускную способность, что логично, учитывая эффективность современной аппаратной виртуализации. Более существенные различия проявились в задачах, требующих большого количества переходов и пробуждений ЦП.

Например, тесты показали, что переключение контекста между двумя процессами заняло 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 создан компанией Multikernel Technologies, основанной и возглавляемой сопровождающим в ядре Linux подсистему управления трафиком Конгом Вангом. Для запуска и управления ядрами в Multikernel предложен усовершенствованный вызов kexec, который в отличие от классического kexec не ограничивается заменой работающего ядра и позволяет запускать дополнительные экземпляры ядра, выполняемые параллельно. Для мониторинга и отладки запущенных экземпляров ядра реализован интерфейс «/proc/multikernel», а для обмена сообщениями между ядрами и координации работы предложен коммуникационный фреймворк Multikernel IPI.

Источник: habr.com

0 0 голоса
Рейтинг новости
1
0
Подписаться
Уведомить о
0 комментариев