NetBSD projektfejlesztők egy új hypervisor létrehozásáról és a hozzá tartozó virtualizációs veremről, amelyek már benne vannak a kísérleti NetBSD-current ágban, és a NetBSD 9 stabil kiadásában lesznek elérhetők. Az NVMM jelenleg az x86_64 architektúra támogatására korlátozódik, és két háttérrendszert biztosít hardveres virtualizációs mechanizmusok engedélyezése: x86-SVM AMD támogatással és x86-VMX CPU virtualizációs bővítmények Intel CPU-khoz. Jelenlegi formájában akár 128 virtuális gép futtatására van lehetőség egy gazdagépen, amelyek mindegyikéhez legfeljebb 256 virtuális processzormag (VCPU) és 128 GB RAM foglalható.
Az NVMM tartalmaz egy illesztőprogramot, amely a rendszermag szintjén fut, és koordinálja a hardveres virtualizációs mechanizmusokhoz való hozzáférést, valamint egy Libnvmm-vermet, amely a felhasználói térben fut. A kernel összetevői és a felhasználói terület közötti interakció az IOCTL-n keresztül történik. Az NVMM egy olyan tulajdonsága, amely megkülönbözteti az olyan hipervizoroktól, mint a KVM és Bhyve, hogy kernel szinten csak a minimálisan szükséges kötéskészlet kerül végrehajtásra a hardver virtualizációs mechanizmusok körül, és az összes hardveremulációs kód kikerül a kernelből a felhasználói térbe. Ez a megközelítés lehetővé teszi a megnövelt jogosultságokkal végrehajtott kódok mennyiségének csökkentését, és csökkenti annak kockázatát, hogy a hypervisor sebezhetőségei elleni támadások esetén az egész rendszert veszélyeztetik. Ezenkívül a projekt hibakeresése és fuzzing tesztelése észrevehetően leegyszerűsödik.
Maga a Libnvmm azonban nem tartalmaz emulátor funkciókat, csak olyan API-t biztosít, amely lehetővé teszi az NVMM támogatás integrálását a meglévő emulátorokba, például a QEMU-ba. Az API olyan funkciókat fed le, mint a virtuális gép létrehozása és elindítása, memória lefoglalása a vendégrendszer számára és VCPU-k kiosztása. A biztonság javítása é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 az összetett kezelők nem hívódnak automatikusan, és egyáltalán nem használhatók, ha elkerülhetők. Az NVMM igyekszik egyszerűvé tenni a dolgokat anélkül, hogy túl bonyolulttá válna, és lehetővé teszi, hogy a munkája lehető legtöbb aspektusát irányítsa.
Az NVMM kernelszintű része meglehetősen szorosan integrálva van a NetBSD rendszermaggal, és jobb teljesítményt tesz lehetővé a vendég operációs rendszer és a gazdagép környezet közötti kontextusváltások számának csökkentésével. A felhasználói tér oldalán a libnvmm megpróbálja összesíteni a gyakori I/O műveleteket, és elkerülni a szükségtelen rendszerhívásokat. A memóriafoglalási rendszer a pmap alrendszeren alapul, amely lehetővé teszi a vendég memórialapok kiürítését a swap partícióba, ha a rendszerben memóriahiány van. Az NVMM jól mentes a globális zárolásoktól és skálázásoktól, ami lehetővé teszi, hogy egyidejűleg különböző CPU-magokat használjon különböző vendég virtuális gépek futtatásához.
Elkészült egy QEMU-alapú megoldás, amely NVMM-et használ a hardver virtualizációs mechanizmusainak lehetővé tételére. Folyamatban van a munka annak érdekében, hogy az elkészített javításokat beépítsék a QEMU fő szerkezetébe. A QEMU+NVMM kombináció már sikeresen futtathat vendégrendszereket FreeBSD-vel, OpenBSD-vel, Linux, Windows XP/7/8.1/10 és más operációs rendszerek x86_64 rendszereken AMD és Intel processzorokkal (maga az NVMM nincs egy adott architektúrához kötve; például a megfelelő háttérrendszerrel ARM64 rendszereken is futtatható). Az NVMM további alkalmazásai közé tartozik az egyes alkalmazások sandboxolása.
Forrás: opennet.ru
