NetBSD projekti arendajad uue hüperviisoriga ja sellega seotud virtualiseerimistarkvara loomise kohta, mis on juba kaasatud NetBSD eksperimenteerimisharu NetBSD-current ja pakutakse stabiliseeritud versioonis NetBSD 9. NVMM toetab praegu ainult x86_64 arhitektuuri ja pakub kahte tagapinda, et kasutada ära riistvara virtualiseerimise mehhanisme: x86-SVM, mis toetab AMD CPU virtualiseerimise laiendusi, ja x86-VMX Intel CPU-le. Praegu on võimalik ühel hostil käitada kuni 128 virtuaalmasinat, millest igaühele võib eraldada kuni 256 virtuaalset protsessorituuma (VCPU) ja 128 GB RAM-i.
NVMM sisaldab draiverit, mis töötab süsteemi kernelitasemel ja koordineerib ligipääsu riistvara virtualiseerimise mehhanismidele, samuti Libnvmm kihti, mis töötab kasutajaruumi. Kernelite ja kasutajaruumide komponentide vaheline suheldamine toimub IOCTL kaudu. NVMM eripära, mis eristab seda hüperviisoritest nagu KVM, Bhyve'i tuum, mis tähendab, et sisemuses töötab ainult minimaalne vajalik kiht virtuaalmasinate riistvaraga seotud mehhanismide ümber, samas kui kogu seadme emuleerimise kood on viidud välja tuuma kasutaja ruumi. Selline lähenemine võimaldab vähendada kõrgete privileegidega töötava koodi hulka ja vähendada kogu süsteemi kompromiteerimise riski hüperviisori haavatavuste rünnakute korral. Samuti on projekti silumine ja fuzzing-testaamine oluliselt lihtsustatud.
Samal ajal ei sisalda Libnvmm ise emuleerimise funktsiooni, vaid pakub API-d, mis võimaldab integreerida NVMM-i toe olemasolevatesse emulaatoritesse, näiteks QEMU-sse. API hõlmab selliseid funktsioone nagu virtuaalmasina loomine ja käivitamine, külg süsteemile mälu eraldamine, VCPU jaotamine. Turvalisuse suurendamiseks ja võimalike rünnakute sihtmärkide vähendamiseks pakub libnvmm ainult selgesõnaliselt nõutud funktsioone — vaikeväärtusena ei kutsuta automaatselt keerulisi töötlejaid ja neid võib üldse mitte kasutada, kui saab ilma nendeta hakkama. NVMM püüab jääda lihtsate lahenduste juurde, vältides keerukusi ja võimaldades hallata võimalikult paljusid tööaspekte.
Ydroot tasandil NVMM-i element on tihedalt integreeritud NetBSD tuumaga ning võimaldab suurendada jõudlust, vähendades konteksti vahetuste arvu külalisoperatsiooni ja hostkeskkonna vahel. Kasutuseruumis püüab libnvmm koondada tüüpilisi sisend-väljundoperatsioone ja vältida süsteemikõnesid vajaduse korral. Mälu eraldamise süsteem põhineb pmap alamsüsteemil, võimaldades külalisüsteemide mälu lehtede vahetamist vahetuse juhul, kui süsteemis on mälu puudus. NVMM on vabastatud globaalsetest lukustustest ja skaleerub hästi, võimaldades samal ajal erinevate protsessorituumade kasutamist erinevate külaliste virtuaalmasinate käitamiseks.
QEMU baasil on arendatud lahendust, mis kasutab NVMM-i riistvaraliste virtualiseerimise mehhanismide aktiveerimiseks. Tööd käiakse ettevalmistatud plaastrite integreerimiseks QEMU põhikoosseisu. QEMU+NVMM kombinatsioon juba õnnestub käivitada külalissüsteeme FreeBSD, OpenBSD, Linux, Windows XP/7/8.1/10 ja teiste operatsioonisüsteemide x86_64 süsteemides, kasutades AMD ja Intel protsessoreid (ise NVMM ei ole seotud konkreetse arhitektuuriga; näiteks saab vastava backend'i loomisel töötada ARM64 süsteemides). NVMM-i edasise rakenduse valdkondades on samuti märgitud rakenduste sandkast-eraldatus.
Allikas: opennet.ru
