Twórcy projektu NetBSD
NVMM zawiera sterownik działający na poziomie jądra systemu i koordynujący dostęp do mechanizmów wirtualizacji sprzętu, a także stos Libnvmm działający w przestrzeni użytkownika. Interakcja między komponentami jądra a przestrzenią użytkownika odbywa się poprzez IOCTL. Cechą NVMM odróżniającą go od hypervisorów takich jak KVM jest
Jednak sam Libnvmm nie zawiera funkcji emulatora, a jedynie zapewnia API, które pozwala zintegrować obsługę NVMM z istniejącymi emulatorami, na przykład QEMU. Interfejs API obejmuje takie funkcje, jak tworzenie i uruchamianie maszyny wirtualnej, przydzielanie pamięci systemowi gościa i przydzielanie jednostek VCPU. Aby poprawić bezpieczeństwo i ograniczyć możliwe wektory ataków, libnvmm udostępnia tylko funkcje, które są jawnie wymagane — domyślnie złożone procedury obsługi nie są wywoływane automatycznie i mogą w ogóle nie być używane, jeśli można ich uniknąć. NVMM stara się zachować prostotę, bez zbytniego skomplikowania i pozwalając ci kontrolować jak najwięcej aspektów swojej pracy.
Część NVMM na poziomie jądra jest dość ściśle zintegrowana z jądrem NetBSD i pozwala na poprawę wydajności poprzez zmniejszenie liczby przełączeń kontekstu pomiędzy systemem gościa a środowiskiem hosta. Po stronie przestrzeni użytkownika libnvmm próbuje agregować typowe operacje we/wy i unikać niepotrzebnego wykonywania wywołań systemowych. System alokacji pamięci oparty jest na podsystemie pmap, który pozwala na eksmisję stron pamięci gościa do partycji wymiany w przypadku braku pamięci w systemie. NVMM jest wolny od globalnych blokad i dobrze się skaluje, co pozwala na jednoczesne używanie różnych rdzeni procesora do uruchamiania różnych maszyn wirtualnych gości.
Przygotowano rozwiązanie oparte na QEMU, które wykorzystuje NVMM do umożliwienia mechanizmów wirtualizacji sprzętu. Trwają prace nad włączeniem przygotowanych poprawek do głównej struktury QEMU. Kombinacja QEMU+NVMM już jest
Źródło: opennet.ru