Entwickler des NetBSD-Projekts über die Entwicklung eines neuen Hypervisors und des dazugehörigen Virtualisierungstacks, der bereits in den experimentellen Branch von NetBSD-current integriert ist und mit der stabilen Version NetBSD 9 angeboten werden soll. NVMM unterstützt derzeit nur die Architektur x86_64 und bietet zwei Backends zur Nutzung der Hardware-Virtualisierungsmechanismen: x86-SVM mit Unterstützung für AMD Virtualisierungs-Erweiterungen und x86-VMX für Intel-CPUs. Aktuell können auf einem Host bis zu 128 virtuelle Maschinen betrieben werden, denen jeweils bis zu 256 virtuelle Prozessor-Kerne (VCPU) und 128 GB RAM zugewiesen werden können.
NVMM umfasst einen Treiber, der auf Systemkernel-Ebene arbeitet und den Zugriff auf die Hardware-Virtualisierungsmechanismen koordiniert, sowie den Libnvmm-Stack, der im Benutzermodus ausgeführt wird. Die Interaktion zwischen den Komponenten des Kernels und des Benutzermodus erfolgt über IOCTL. Ein bemerkenswertes Merkmal von NVMM, das ihn von Hypervisoren wie KVM unterscheidet, Bhyve bietet auf Kernel-Ebene nur die minimal erforderlichen Bindings um die Hardware-Virtualisierungsmechanismen an, während der gesamte Code zur Emulation von Hardware aus dem Kernel in den Benutzerspeicher verschoben wird. Dieser Ansatz reduziert die Menge an Code, der mit erhöhten Rechten ausgeführt wird, und verringert das Risiko einer Kompromittierung des gesamten Systems im Falle von Angriffen auf Schwachstellen im Hypervisor. Darüber hinaus vereinfacht sich das Debugging und das Fuzzing-Testing des Projekts erheblich.
Libnvmm enthält von sich aus keine Emulatorfunktion, sondern bietet lediglich eine API, die die Integration von NVMM-Unterstützung in bestehende Emulatoren wie QEMU ermöglicht. Die API umfasst Funktionen wie die Erstellung und den Betrieb virtueller Maschinen, die Zuweisung von Speicher an die Gastbetriebssysteme und die Verteilung von VCPU. Um die Sicherheit zu erhöhen und potenzielle Angriffsflächen zu reduzieren, stellt libnvmm ausschließlich die ausdrücklich angeforderten Funktionen bereit – standardmäßig werden komplexe Handler nicht automatisch aufgerufen und können insgesamt ungenutzt bleiben, wenn sie nicht benötigt werden. NVMM legt Wert auf einfache Lösungen, ohne unnötige Komplikationen und ermöglicht die Kontrolle über möglichst viele Aspekte des Betriebs.
Der in der Kernel-Ebene arbeitende Teil von NVMM ist eng mit dem NetBSD-Kernel integriert und ermöglicht eine Leistungssteigerung durch die Reduzierung der Kontextwechsel zwischen dem Gastsystem und der Host-Umgebung. Im Benutzerspeicherraum versucht libnvmm, typische Ein- und Ausgabeoperationen zu aggregieren und ohne Notwendigkeit keine Systemaufrufe durchzuführen. Das Speichermanagement basiert auf dem pmap-Subsystem, was es ermöglicht, Seiten des Gastsystems in den Swap-Bereich auszulagern, wenn der verfügbare Speicher der Host-Maschine knapp wird. NVMM ist von globalen Locks befreit und skaliert gut, wodurch verschiedene CPU-Kerne zur Ausführung unterschiedlicher Gast-VMs gleichzeitig genutzt werden können.
Basierend auf QEMU wurde eine Lösung entwickelt, die NVMM nutzt, um die Hardware-Virtualisierungsmechanismen zu aktivieren. Es wird daran gearbeitet, die vorbereiteten Patches in den Hauptbestand von QEMU aufzunehmen. Die Verbindung aus QEMU+NVMM ist bereits Ermöglichen Sie erfolgreich das Starten von Gastbetriebssystemen wie FreeBSD, OpenBSD, Linux, Windows XP/7/8.1/10 und anderen Betriebssystemen auf x86_64-Systemen mit AMD- und Intel-Prozessoren (das NVMM selbst ist nicht an eine spezifische Architektur gebunden; zum Beispiel kann es bei Erstellung des entsprechenden Backends auf ARM64-Systemen betrieben werden). Auch in Bezug auf Anwendungsbereiche wird NVMM für die Sandbox-Isolierung einzelner Anwendungen hervorgehoben.
Quelle: opennet.ru
