Das Projekt NetBSD entwickelt einen neuen Hypervisor NVMM

Entwickler des NetBSD-Projekts haben bekannt gegeben über die Schaffung eines neuen Hypervisors und des damit verbundenen Virtualisierungsstacks, der bereits Bestandteil des experimentellen Zweigs NetBSD-current ist und im stabilen Release von NetBSD 9 angeboten werden wird. 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-CPU-Virtualisierungs-Erweiterungen und x86-VMX für Intel-CPUs. In der aktuellen Form können auf einem Host bis zu 128 virtuelle Maschinen gestartet werden, von denen jede bis zu 256 virtuelle CPU-Kerne (VCPU) und 128 GB RAM zugewiesen bekommen kann.

NVMM umfasst einen Treiber, der auf Systeme verbleibenden Hardware-Virtualisierungsmechanismen und eine Benutzerraum-Bibliothek, die Libnvmm, koordiniert. Die Interaktion zwischen den Komponenten des Kernels und des Benutzerraums erfolgt über IOCTL. Das Besondere an NVMM, das es von Hypervisoren wie KVM unterscheidet, HAXM und Bhyve ist, dass auf Kernel-Ebene nur die minimal erforderlichen Wrapper um die Hardware-Virtualisierungsmechanismen ausgeführt werden, während der gesamte Code zur Emulation von Hardware aus dem Kernel in den Benutzerraum verschoben wurde. Dieser Ansatz ermöglicht es, den Umfang des Codes, der mit erhöhten Rechten ausgeführt wird, zu reduzieren und das Risiko einer Kompromittierung des gesamten Systems im Falle von Angriffen auf Schwachstellen im Hypervisor zu verringern. Darüber hinaus wird das Debugging und Fuzzing-Testing des Projekts erheblich vereinfacht.

Dabei enthält Libnvmm selbst keine Emulatorfunktion und bietet lediglich eine API, die die Integration der NVMM-Unterstützung in bestehende Emulatoren, wie QEMU, ermöglicht. Die API umfasst Funktionen wie die Erstellung und den Betrieb einer virtuellen Maschine, die Zuweisung von Speicher an das Gastsystem und die Verteilung von VCPU. Um die Sicherheit zu erhöhen und mögliche Angriffsvektoren zu minimieren, stellt libnvmm nur ausdrücklich angeforderte Funktionen bereit — standardmäßig werden komplexe Handler nicht automatisch aufgerufen und können allgemein nicht verwendet werden, wenn sie nicht benötigt werden. NVMM versucht, sich mit einfachen Lösungen zu begnügen, ohne in Komplikationen zu verfallen, und ermöglicht es, möglichst viele Aspekte des Betriebs zu steuern.

Das Projekt NetBSD entwickelt einen neuen Hypervisor NVMM

Der auf Kernel-Ebene arbeitende Teil von NVMM ist eng mit dem NetBSD-Kernel integriert und ermöglicht eine Leistungssteigerung durch die Verringerung der Kontextwechsel zwischen dem Gastbetriebssystem und der Hostumgebung. Auf der Nutzerebene versucht libnvmm, typische Ein-/Ausgabeoperationen zu aggregieren und ohne Not auf Systemaufrufe zu verzichten. Das Systemspeicherzuweisungssystem basiert auf der pmap-Subsystem, was es ermöglicht, die Arbeitsspeicherseiten von Gastbetriebssystemen bei speicherknappen Zuständen in den Swap-Bereich auszulagern. NVMM kommt ohne globale Sperren aus und skalierbar gut, sodass verschiedene CPU-Kerne gleichzeitig für die Ausführung unterschiedlicher virtueller Maschinen genutzt werden können.

Basierend auf QEMU wurde eine Lösung vorbereitet, die NVMM verwendet, um Hardwarevirtualisierungsmechanismen zu aktivieren. Es wird daran gearbeitet, die vorbereiteten Patches in den Hauptbestand von QEMU aufzunehmen. Die Kombination QEMU+NVMM kann bereits das Öffnen eines Links in einem neuen Tab oder in einem neuen Container. erfolgreich Gastbetriebssysteme wie FreeBSD, OpenBSD, Linux, Windows XP/7/8.1/10 und andere Betriebssysteme auf x86_64-Systemen mit AMD- und Intel-Prozessoren starten (NVMM ist nicht an eine bestimmte Architektur gebunden und kann beispielsweise bei Erstellung eines entsprechenden Backends auch auf ARM64-Systemen arbeiten). Im weiteren Anwendungsbereich wird auch die Sandbox-Isolierung einzelner Anwendungen hervorgehoben.

Das Projekt NetBSD entwickelt einen neuen Hypervisor NVMM

Quelle: opennet.ru

60GB SSD 8Gb DDR4