Programiści projektu NetBSD powstanie nowego hipernadzorcy i związanego z nim stosu wirtualizacji, które zostały już włączone do eksperymentalnej gałęzi NetBSD-current i będą oferowane w stabilnym wydaniu NetBSD 9. NVMM jest na razie ograniczony do architektury x86_64 i oferuje dwa backendy do wykorzystania sprzętowych mechanizmów wirtualizacji: x86-SVM z obsługą rozszerzeń wirtualizacji CPU AMD oraz x86-VMX dla CPU Intel. W obecnej formie możliwy jest start do 128 maszyn wirtualnych na jednym hoście, z każdą z nich mogącą mieć przydzielone do 256 wirtualnych rdzeni procesora (VCPU) i 128 GB RAM.
NVMM zawiera sterownik działający na poziomie jądra systemu, który koordynuje dostęp do sprzętowych mechanizmów wirtualizacji oraz stos Libnvmm działający w przestrzeni użytkownika. Interakcja między komponentami jądra a przestrzeni użytkownika odbywa się przez IOCTL. Cechą NVMM, która odróżnia go od takich hipernadzorców jak KVM, i Bhyve, jest to, że na poziomie jądra wykonywany jest tylko minimalny zestaw obwiązek wokół sprzętowych mechanizmów wirtualizacji, podczas gdy cały kod emulacji sprzętu został przeniesiony z jądra do przestrzeni użytkownika. Takie podejście pozwala na zmniejszenie objętości kodu wykonywanego z podwyższonymi uprawnieniami, co obniża ryzyko kompromitacji całego systemu w razie ataków na luki w hipernadzorcy. Ponadto znacząco upraszcza to debugowanie oraz testy typu fuzzing.
Libnvmm sam w sobie nie zawiera funkcji emulatora, lecz jedynie udostępnia API, które pozwala na integrację wsparcia NVMM w istniejących emulatorach, na przykład w QEMU. API obejmuje takie funkcje, jak tworzenie i uruchamianie maszyny wirtualnej, przydzielanie pamięci systemowi gościnnemu oraz rozdzielanie VCPU. Aby zwiększyć bezpieczeństwo i zmniejszyć możliwe wektory ataku, libnvmm udostępnia tylko wyraźnie żądane funkcje — domyślnie złożone procesory nie są wywoływane automatycznie i mogą w ogóle nie być stosowane, jeśli można się bez nich obejść. NVMM stara się stosować proste rozwiązania, nie popadając w złożoności i umożliwiając kontrolę jak największej liczby aspektów działania.
Część NVMM działająca na poziomie jądra jest mocno zintegrowana z jądrem NetBSD, co pozwala na zwiększenie wydajności dzięki zmniejszeniu liczby przełączeń kontekstu między gościnnym systemem operacyjnym a środowiskiem gospodarza. Po stronie przestrzeni użytkownika libnvmm dąży do agregacji typowych operacji we/wy i nie odwołuje się do wywołań systemowych, jeśli nie jest to konieczne. System przydzielania pamięci oparty jest na podsystemie pmap, co pozwala na przenoszenie stron pamięci systemów gościnnych do obszaru wymiany w przypadku niedoboru pamięci w systemie. NVMM jest wolny od globalnych blokad i dobrze skalowalny, umożliwiając jednoczesne wykorzystanie różnych rdzeni CPU do realizacji różnych maszyn wirtualnych gości.
Na bazie QEMU opracowano rozwiązanie, które wykorzystuje NVMM do aktywacji sprzętowych mechanizmów wirtualizacji. Trwają prace nad włączeniem przygotowanych łat do głównej wersji QEMU. Połączenie QEMU+NVMM już udanie uruchamia systemy gościnne z FreeBSD, OpenBSD, Linux, Windows XP/7/8.1/10 oraz innymi systemami na platformach x86_64 z procesorami AMD i Intel (sam NVMM nie jest powiązany z określoną architekturą, np. przy stworzeniu odpowiedniego backendu może działać na systemach ARM64). Z obszarów dalszego zastosowania NVMM zauważa się również izolację piaskownicową poszczególnych aplikacji.
Źródło: opennet.ru
