NetBSD-Projektentwickler ĂŒber die Erstellung eines neuen Hypervisors und des zugehörigen Virtualisierungsstacks, die bereits im experimentellen NetBSD-Current-Zweig enthalten sind und in der stabilen Version von NetBSD 9 angeboten werden. NVMM beschrĂ€nkt sich derzeit auf die UnterstĂŒtzung der x86_64-Architektur und stellt zwei Backends fĂŒr bereit Aktivierung von Hardware-Virtualisierungsmechanismen: x86-SVM mit UnterstĂŒtzung fĂŒr AMD- und x86-VMX-CPU-Virtualisierungserweiterungen fĂŒr Intel-CPUs. In der aktuellen Form ist es möglich, bis zu 128 virtuelle Maschinen auf einem Host zu betreiben, denen jeweils bis zu 256 virtuelle Prozessorkerne (VCPU) und 128 GB RAM zugewiesen werden können.
NVMM umfasst einen Treiber, der auf Systemkernelebene ausgefĂŒhrt wird und den Zugriff auf Hardware-Virtualisierungsmechanismen koordiniert, sowie einen Libnvmm-Stack, der im Benutzerbereich ausgefĂŒhrt wird. Die Interaktion zwischen Kernel-Komponenten und Benutzerraum erfolgt ĂŒber IOCTL. Ein Merkmal von NVMM, das es von Hypervisoren wie KVM unterscheidet, ist und Bhyve besteht darin, dass auf Kernel-Ebene nur der minimal erforderliche Satz an Bindungen rund um Hardware-Virtualisierungsmechanismen durchgefĂŒhrt wird und der gesamte Hardware-Emulationscode aus dem Kernel in den Benutzerbereich verschoben wird. Mit diesem Ansatz können Sie die Menge des mit erhöhten Rechten ausgefĂŒhrten Codes reduzieren und das Risiko einer GefĂ€hrdung des gesamten Systems bei Angriffen auf Schwachstellen im Hypervisor verringern. DarĂŒber hinaus wird das Debuggen und Fuzzing-Testen des Projekts spĂŒrbar vereinfacht.
Allerdings enthĂ€lt Libnvmm selbst keine Emulatorfunktionen, sondern stellt lediglich eine API bereit, die es ermöglicht, NVMM-UnterstĂŒtzung in bestehende Emulatoren, beispielsweise QEMU, zu integrieren. Die API umfasst Funktionen wie das Erstellen und Starten einer virtuellen Maschine, die Zuweisung von Speicher fĂŒr das Gastsystem und die Zuweisung von VCPUs. Um die Sicherheit zu verbessern und mögliche Angriffsvektoren zu reduzieren, stellt libnvmm nur Funktionen bereit, die explizit angefordert werden â komplexe Handler werden standardmĂ€Ăig nicht automatisch aufgerufen und dĂŒrfen ĂŒberhaupt nicht verwendet werden, wenn sie vermieden werden können. NVMM versucht, die Dinge einfach zu halten, ohne zu kompliziert zu werden, und Ihnen die Kontrolle ĂŒber so viele Aspekte Ihrer Arbeit wie möglich zu ermöglichen.
Der Kernel-Level-Teil von NVMM ist ziemlich eng in den NetBSD-Kernel integriert und ermöglicht eine verbesserte Leistung, indem die Anzahl der Kontextwechsel zwischen dem Gastbetriebssystem und der Host-Umgebung reduziert wird. Auf der User-Space-Seite versucht libnvmm, allgemeine I/O-VorgĂ€nge zu aggregieren und unnötige Systemaufrufe zu vermeiden. Das Speicherzuweisungssystem basiert auf dem pmap-Subsystem, das es Ihnen ermöglicht, Gastspeicherseiten auf die Swap-Partition zu verlagern, falls im System Speichermangel herrscht. NVMM ist frei von globalen Sperren und lĂ€sst sich gut skalieren, sodass Sie gleichzeitig verschiedene CPU-Kerne verwenden können, um verschiedene virtuelle Gastmaschinen auszufĂŒhren.
Es wurde eine QEMU-basierte Lösung vorbereitet, die NVMM verwendet, um Hardware-Virtualisierungsmechanismen zu ermöglichen. Derzeit wird daran gearbeitet, die vorbereiteten Patches in die Hauptstruktur von QEMU einzubinden. Die QEMU+NVMM-Kombination gibt es bereits Gastsysteme erfolgreich mit FreeBSD und OpenBSD ausfĂŒhren Linux, Windows XP/7/8.1/10 und andere Betriebssysteme auf x86_64-Systemen mit AMD- und Intel-Prozessoren (NVMM selbst ist nicht an eine bestimmte Architektur gebunden; mit dem entsprechenden Backend kann es beispielsweise auch auf ARM64-Systemen ausgefĂŒhrt werden). Weitere Anwendungsbereiche fĂŒr NVMM sind das Sandboxing einzelner Anwendungen.
Source: opennet.ru
