Udviklerne af NetBSD-projektet om oprettelsen af en ny hypervisor og det tilknyttede virtualiseringsstack, som allerede er inkluderet i den eksperimentelle gren af NetBSD-current og vil blive tilbudt i den stabile udgave af NetBSD 9. NVMM er endnu begrænset til understøttelse af x86_64-arkitektur og giver to backend-løsninger for udnyttelse af hardwarevirtualiseringsmekanismer: x86-SVM med understøttelse af AMD's CPU-virtualiseringsextensioner og x86-VMX for Intel CPU'er. I sin nuværende form muliggør det kørsel af op til 128 virtuelle maskiner på én vært, hvor hver kan tildeles op til 256 virtuelle CPU-kerner (VCPU) og 128 GB RAM.
NVMM inkluderer en driver, der fungerer på kerneniveau og koordinerer adgangen til hardwarevirtualiseringsmekanismer, samt Libnvmm-stakken, som udføres i brugerrum. Interaktionen mellem kernelkomponenterne og brugerrumos komponenter sker gennem IOCTL. En særlig egenskab ved NVMM, der adskiller det fra hypervisorer som KVM, og Bhyve, er, at kun det minimalt nødvendige bindeled omkring hardwarevirtualiseringsmekanismerne udføres på kerneniveau, mens al hardwareemulationskode er flyttet fra kernen til brugerrum. Denne tilgang reducerer mængden af kode, der kører med forhøjede privilegier, og mindsker risikoen for kompromittering af hele systemet i tilfælde af angreb på sårbarheder i hypervisoren. Derudover forenkles debugging og fuzzing-testning af projektet betydeligt.
Libnvmm indeholder selv ingen emuleringsfunktioner, men giver blot et API, der muliggør integration af NVMM-understøttelse i eksisterende emulatorer, eksempelvis QEMU. API'et dækker funktioner som oprettelse og kørsel af virtuelle maskiner, tildeling af hukommelse til gæstesystemet og distribution af VCPU. For at øge sikkerheden og reducere mulige angrebsvinkler tilbyder libnvmm kun de eksplicit anmodede funktioner — som standard opfordres komplekse behandlere ikke automatisk, og de må slet ikke anvendes, hvis de ikke er nødvendige. NVMM forsøger at klare sig med enkle løsninger uden at blive unødigt kompliceret og muliggør kontrol over så mange aspekter af driften som muligt.
Den kernniveau-del af NVMM er tæt integreret med kernen i NetBSD og muliggør forbedret ydeevne ved at reducere antallet af kontekstskift mellem gæste-OS og værtsmiljøet. På brugerrumssiden forsøger libnvmm at aggregere typiske input/output-operationer og undgå systemopkald unødvendigt. Hukommelsesallokeringssystemet er baseret på pmap-subsystemet, hvilket gør det muligt at udveksle hukommelsessider fra gæstesystemer til swap i tilfælde af hukommelsesmangel i systemet. NVMM undgår globale låse og skalerer godt, hvilket muliggør samtidig brug af forskellige CPU-kerner til at køre forskellige gæste virtuelle maskiner.
Der er udviklet en løsning baseret på QEMU, der bruger NVMM til at udnytte hardwarevirtualiseringsmekanismer. Der arbejdes på at inkludere de forberedte patches i hovedversionen af QEMU. Kombinationen QEMU+NVMM kan allerede succesfuldt køre gæstesystemer med FreeBSD, OpenBSD, Linux, Windows XP/7/8.1/10 og andre OS på x86_64-systemer med AMD og Intel-processorer (selve NVMM er ikke bundet til en bestemt arkitektur, eksempelvis kan det fungere på ARM64-systemer ved at oprette en tilsvarende backend). Blandt de fremtidige anvendelsesområder nævnes også sandbox-isolering af enkelte applikationer.
Kilde: opennet.ru
