A NetBSD projekt fejlesztői a új hipervizor és az ahhoz kapcsolódó virtualizációs réteg létrehozásáról, amely már be van építve a NetBSD-current kísérleti ágba, és a NetBSD 9 stabil kiadásában is elérhető lesz. Az NVMM egyelőre csak az x86_64 architektúra támogatásával rendelkezik, és két backendet kínál a hardveres virtualizációs mechanizmusok kihasználására: x86-SVM az AMD CPU virtualizációs kiterjesztésével és x86-VMX az Intel CPU esetében. A jelenlegi formájában egy gazdagépen akár 128 virtuális gép is futtatható, mindegyikük számára legfeljebb 256 virtuális processzormagot (VCPU) és 128 GB RAM-ot biztosítva.
Az NVMM tartalmaz egy drivert, amely a rendszer kernel szintjén működik, és koordinálja a hardveres virtualizációs mechanizmusokhoz való hozzáférést, valamint a Libnvmm stack-et, amely felhasználói módban fut. Az kernel és a felhasználói tér közötti interakció IOCTL-on keresztül történik. Az NVMM sajátossága, amely megkülönbözteti más hipervizoroktól, mint pl. a KVM, és Bhyve, az, hogy a kernel szintjén csak a szükséges minimális interfész fut a hardveres virtualizációs mechanizmusok körül, míg az összes hardveremulátor kód átkerült a felhasználói térbe. Ez a megközelítés csökkenti a magas privilegizáltságú kódban végrehajtott kód mennyiségét, és csökkenti a teljes rendszer kompromittálásának kockázatát a hipervizor sebezhetőségeiben történt támadások esetén. Ezen kívül jelentősen egyszerűsíti a projekt hibakeresését és fuzzing tesztelését.
Ugyanakkor a Libnvmm önállóan nem tartalmaz emulátor funkciókat, hanem egy API-t biztosít, amely lehetővé teszi az NVMM támogatás integrálását meglévő emulátorokba, mint például a QEMU. Az API olyan funkciókat ölel fel, mint például a virtuális gép létrehozása és indítása, a memória kiosztása a vendég rendszer számára, a VCPU elosztása. A biztonság növelése és a lehetséges támadási vektorok csökkentése érdekében a libnvmm csak kifejezetten kért funkciókat biztosít — alapértelmezés szerint a bonyolult kezelők nem hívódnak meg automatikusan, és egyáltalán nem alkalmazhatók, ha nélkülük is megoldható a probléma. Az NVMM arra törekszik, hogy egyszerű megoldásokat alkalmazzon, elkerülve a bonyolult megoldásokat, és lehetővé téve a lehető legtöbb munkafolyamat ellenőrzését.
A mag következő szintjén működő NVMM szoros integrációban áll a NetBSD kernelével, lehetővé téve a teljesítmény növelését a vendég operációs rendszer és a gazda környezet közötti kontextusváltások számának csökkentésével. A felhasználói térben a libnvmm megpróbálja aggregálni a tipikus bemeneti-kimeneti műveleteket, és szükségtelenül nem hívja meg a rendszerszolgáltatásokat. A memóriaallokáló rendszer a pmap alrendszeren alapul, lehetővé téve a vendég rendszerek memóriájának lapjainak eltávolítását a swap területre memóriahiány esetén. Az NVMM mentes a globális zárolásoktól és jól skálázható, lehetővé téve, hogy különböző CPU magokat használjanak különböző vendég virtuális gépek futtatására.
A QEMU alapjaira építve létrehoztak egy megoldást, amely az NVMM-et használja a hardveres virtualizációs mechanizmusok aktiválására. Dolgoznak az elkészített javítások QEMU fő állományába való integrálásán. A QEMU + NVMM már sikeresen képes vendég rendszerek indítására FreeBSD, OpenBSD, Linux, Windows XP/7/8.1/10 és más operációs rendszerek alatt az x86_64 rendszereken AMD és Intel processzorokkal (az NVMM nem kötődik egy adott architektúrához, például a megfelelő háttér létrehozásakor ARM64 rendszereken is működhet). A NVMM további alkalmazási területei közé tartozik az alkalmazások sandbox-izolációja.
Forrás: opennet.ru
