Vývojáři projektu NetBSD vytvoření nového hypervisoru a souvisejícího virtuálního stacku, které jsou již zahrnuty ve experimentální větvi NetBSD-current a budou nabízeny v stabilní verzi NetBSD 9. NVMM zatím podporuje pouze architekturu x86_64 a poskytuje dva backendy pro využití hardwarových mechanismů virtualizace: x86-SVM s podporou rozšíření virtualizace CPU AMD a x86-VMX pro CPU Intel. V aktuální podobě je možné spustit na jednom hostiteli až 128 virtuálních strojů, z nichž každému může být přiděleno až 256 virtuálních procesorových jader (VCPU) a 128 GB RAM.
NVMM zahrnuje ovladač, který pracuje na úrovni jádra systému a koordinuje přístup k hardwarovým mechanismům virtualizace, a stack Libnvmm, vykonávaný v uživatelském prostoru. Interakce mezi komponenty jádra a uživatelského prostoru se provádí prostřednictvím IOCTL. Zvláštností NVMM, která ho odlišuje od hypervisorů jako KVM, a Bhyve, je to, že na úrovni jádra se provádí pouze minimální nezbytná sada obalů kolem hardwarových mechanismů virtualizace, zatímco celý kód emulace hardwaru je přesunut z jádra do uživatelského prostoru. Tento přístup umožňuje snížit objem kódu vykonávaného s vyššími oprávněními a snižuje riziko kompromitace celého systému v případě útoků na zranitelnosti v hypervisoru. Navíc se výrazně zjednodušuje ladění a fuzzingové testování projektu.
Přitom Libnvmm sama o sobě neobsahuje funkci emulátoru, ale jen poskytuje API, které umožňuje integrovat podporu NVMM do existujících emulátorů, například do QEMU. API pokrývá funkce jako vytvoření a spuštění virtuálního stroje, přidělování paměti hostitelské systémě a rozdělení VCPU. Pro zvýšení bezpečnosti a snížení možných vektorů útoku libnvmm poskytuje pouze explicitně požadované funkce — ve výchozím nastavení složité obslužné rutiny nejsou automaticky volány a mohou být zcela vynechány, pokud je možné se bez nich obejít. NVMM se snaží spoléhat na jednoduchá řešení, aniž by se dostávala do složitosti a umožňuje kontrolovat co nejvíce aspektů činnosti.
Jádro NVMM je těsně integrováno s jádrem NetBSD a umožňuje zlepšení výkonu tím, že se snižuje počet přepnutí kontextu mezi hostitelským prostředím a virtuálním operačním systémem. Na straně uživatelského prostoru se knihovna libnvmm snaží agregovat běžné operace vstupu a výstupu a bez nutnosti se neobracet na systémové volání. Systém správy paměti je založen na subsystému pmap, což umožňuje vyhledávat stránky paměti hostujících systémů na stránkovací oddíl v případě nedostatku paměti v systému. NVMM se zbavuje globálních zámků a dobře se škáluje, což umožňuje současné využití různých jader CPU pro provoz různých hostujících virtuálních strojů.
Na bázi QEMU bylo připraveno řešení, které využívá NVMM pro aktivaci hardwarových mechanismů virtualizace. Pracuje se na zahrnutí připravených patchů do hlavního jádra QEMU. Propojení QEMU+NVMM již úspěšně spouštět hostitelské systémy s FreeBSD, OpenBSD, Linux, Windows XP/7/8.1/10 a dalšími systémy na architekturách x86_64 s procesory AMD a Intel (NVMM není vázán na konkrétní architekturu, například při vytvoření příslušného backendu může fungovat i na systémech ARM64). V oblastech dalších aplikací NVMM se také zdůrazňuje sandboxová izolace jednotlivých aplikací.
Zdroj: opennet.ru
