Разработчици на проекта NetBSD за създаването на нов хипервизор и свързан стек за виртуализация, който вече е включен в експерименталната версия NetBSD-current и ще бъде предложен в стабилната версия NetBSD 9. NVMM в момента е ограничен до поддръжка на архитектура x86_64 и предоставя два бекенда за активиране на хардуерните механизми за виртуализация: x86-SVM с поддръжка за разширения на виртуализацията на AMD и x86-VMX за Intel. В текущия си вид е възможно да се стартират до 128 виртуални машини на един хост, като на всяка от тях могат да бъдат предоставени до 256 виртуални процесорни ядра (VCPU) и 128 ГБ RAM.
NVMM включва драйвер, работещ на ядрото на системата и координиращ достъпа до хардуерните механизми на виртуализацията, и стек Libnvmm, който се изпълнява в потребителското пространство. Взаимодействието между компонентите на ядрото и потребителското пространство се осъществява чрез IOCTL. Характерната черта на NVMM, която го отличава от хипервизори като KVM, и Bhyve, е, че на ниво ядро се изпълнява само минималният необходим комплект обвивки около хардуерните механизми за виртуализация, докато целият код за еймулация на оборудването е изнесен от ядрото в потребителското пространство. Този подход позволява значително намаляване на обема на кода, който се изпълнява с повишени привилегии, и намалява риска от компрометиране на цялата система в случай на атаки на уязвимости в хипервизора. Освен това отстраняването на грешки и 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-изолацията на отделни приложения.
Източник: opennet.ru
