Проект NetBSD развивает новый гипервизор NVMM

Разработчики проекта NetBSD объявили о создании нового гипервизора и связанного с ним стека виртуализации, которые уже включены в состав экспериментальной ветки NetBSD-current и будут предложены в стабильном релизе NetBSD 9. NVMM пока ограничен поддержкой архитектуры x86_64 и предоставляет два бэкенда для задействования аппаратных механизмов виртуализации: x86-SVM с поддержкой расширений виртуализации CPU AMD и x86-VMX для CPU Intel. В текущем виде возможен запуск на одном хосте до 128 виртуальных машин, каждой из которых может выделять до 256 виртуальных процессорных ядер (VCPU) и 128 Гб ОЗУ.

NVMM включает драйвер, работающий на уровне ядра системы и координирующий доступ к аппаратным механизма виртуализации, и стек Libnvmm, выполняемый в пространстве пользователя. Взаимодействие компонентов ядра и пространства пользователя осуществляется через IOCTL. Особенностью NVMM, отличающей его от таких гипервизоров, как KVM, HAXM и Bhyve, является то, что на уровне ядра выполняется только минимальной необходимый набор обвязок вокруг аппаратных механизмов виртуализации, а весь код эмуляции оборудования вынесен из ядра в пространство пользователя. Подобный подход позволяет сократить объем кода, выполняемого с повышенными привилегиями, и снизить риск компрометации всей системы в случае атак на уязвимоcти в гипервизоре. Кроме того, заметно упрощается отладка и fuzzing-тестирование проекта.

При этом Libnvmm сам по себе не содержит функции эмулятора, а лишь предоставляет API, позволяющий интегрировать поддержку NVMM в существующие эмуляторы, например, в QEMU. API охватывает такие функции как создание и запуск виртуальной машины, выделение памяти гостевой системе, распределение VCPU. Для повышения безопасности и снижения возможных векторов атаки libnvmm предоставляет только явно запрошенные функции — по умолчанию сложные обработчики не вызываются автоматически и вообще могут не применяться, если без них можно обойтись. NVMM пытается обходиться простыми решениями, не впадая в усложнения и позволяя контролировать как можно больше аспектов работы.

Работающая на уровне ядра часть NVMM достаточно плотно интегрирована с ядром NetBSD, и позволяет добиться повышения производительности за счёт сокращения числа переключения контекста между гостевой ОС и хост-окружением. На стороне пространства пользователя libnvmm старается агрегировать типовые операции ввода-вывода и без необходимости не обращаться к системным вызовам. Система выделения памятью основана на подсистеме pmap, что позволяет вытеснять страницы памяти гостевых систем в раздел подкачки в случае нехватки памяти в системе. NVMM избавлен от глобальных блокировок и хорошо масштабируется, позволяя одновременно использовать разные ядра CPU для выполнения разных гостевых виртуальных машин.

На базе QEMU подготовлено решение, использующее NVMM для задействования аппаратных механизмов виртуализации. Ведётся работа по включению подготовленных патчей в основной состав QEMU. Связка QEMU+NVMM уже позволяет успешно запускать гостевые системы с FreeBSD, OpenBSD, Linux, Windows XP/7/8.1/10 и другими ОС на системах x86_64 с процессорами AMD и Intel (сам NVMM не привязан к определённой архитектуре, например, при создании соответствующего бэкенда сможет работать на системах ARM64). Из областей дальнейшего применения NVMM также отмечается sandbox-изоляция отдельных приложений.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.