Projektet NetBSDs utvecklare om skapandet av en ny hypervisor och den dÀrtill relaterade virtualiseringsstacken, som redan ingÄr i den experimentella grenen NetBSD-current och kommer att erbjudas i den stabila utgÄvan av NetBSD 9. NVMM Àr för nÀrvarande begrÀnsad till att stödja arkitekturen x86_64 och tillhandahÄller tvÄ backend-alternativ för att utnyttja hÄrdvaruvirtualiseringsmekanismer: x86-SVM med stöd för AMDs CPU-virtualiseringsutvidgningar och x86-VMX för Intel CPU. I sin nuvarande form Àr det möjligt att köra upp till 128 virtuella maskiner pÄ en vÀrd, dÀr varje kan tilldelas upp till 256 virtuella processorkÀrnor (VCPU) och 128 GB RAM.
NVMM inkluderar en drivrutin som arbetar pÄ kÀrnnivÄ och koordinerar Ätkomst till hÄrdvaruvirtualiseringsmekanismer, samt Libnvmm-stacken som körs i anvÀndarrummet. Interaktionen mellan kÀrnkomponenter och anvÀndarrummet sker via IOCTL. En utmÀrkande egenskap hos NVMM, som skiljer det frÄn hypervisorer som KVM, och Bhyve, Àr att endast det minimi nödvÀndiga antalet kapslingslager runt hÄrdvaruvirtualiseringsmekanismerna körs pÄ kÀrnnivÄ, medan all kod för hÄrdvaru-emulering har flyttats ut frÄn kÀrnan till anvÀndarrummet. Denna metod minskar mÀngden kod som körs med förhöjda privilegier och minskar risken för att hela systemet komprometteras vid attacker pÄ sÄrbarheter i hypervisorn. Dessutom förenklas felsökning och fuzzing-testning av projektet avsevÀrt.
Libnvmm i sig innehÄller dock ingen emuleringsfunktion, utan tillhandahÄller endast ett API för att integrera stöd för NVMM i befintliga emulerare, till exempel QEMU. API:t omfattar funktioner som att skapa och köra en virtuell maskin, tilldela minne till gÀstsystemet samt distribution av VCPU. För att öka sÀkerheten och minska potentiella attackvektorer tillhandahÄller libnvmm endast de funktioner som uttryckligen begÀrts - som standard anropas inte avancerade hanterare automatiskt och kan i allmÀnhet inte tillÀmpas om de inte behövs. NVMM strÀvar efter att anvÀnda enkla lösningar utan att bli komplicerad och lÄta anvÀndaren kontrollera sÄ mÄnga aspekter av driften som möjligt.
Den kÀrnoperativa delen av NVMM Àr starkt integrerad med NetBSD-kÀrnan och möjliggör prestandaförbÀttringar genom att minska antalet kontextbyten mellan gÀstat operativsystem och vÀrdmiljö. PÄ anvÀndarutrymmets sida försöker libnvmm att aggregera typiska in-/utdataoperationer och undvika oönskade systemanrop. Systemet för minnesallokering baseras pÄ pmap-subsystemet, vilket möjliggör att sidor av gÀstsystemens minne kan bytas ut till vÀxlingsutrymme vid minnesbrist i systemet. NVMM Àr fritt frÄn globala lÄsningar och skalar vÀl, vilket gör att olika CPU-kÀrnor kan anvÀndas samtidigt för att köra olika virtuella gÀstmaskiner.
En lösning baserad pĂ„ QEMU har tagits fram som anvĂ€nder NVMM för att aktivera hĂ„rdvaruÂvirtualiseringsmekanismer. Arbete pĂ„gĂ„r för att inkludera de beredda patcherna i den huvudsakliga versionen av QEMU. Kombinatören QEMU+NVMM kan redan framgĂ„ngsrikt köra gĂ€stsystem med FreeBSD, OpenBSD, Linux, Windows XP/7/8.1/10 och andra operativsystem pĂ„ x86_64-system med AMD- och Intel-processorer (sjĂ€lva NVMM Ă€r inte kopplad till nĂ„gon specifik arkitektur, till exempel kan den fungera pĂ„ ARM64-system om motsvarande backend skapas). Bland vidare anvĂ€ndningsomrĂ„den för NVMM nĂ€mns Ă€ven sandbox-isolering av specifika applikationer.
KĂ€lla: opennet.ru
