Zum Inhalt springen

Kernel-based Virtual Machine

aus Wikipedia, der freien Enzyklopädie
Skriptfehler: Ein solches Modul „WLink“ ist nicht vorhanden.

colspan="2" class="notheme" style="text-align:center; background:#Vorlage:Standardfarbe; color:#202122;" | Logo der Kernel-based Virtual Machine
Datei:Kvm running various guests.png
Mehrere Gastsysteme auf einem Linux-Rechner
Basisdaten

Hauptentwickler KVM-Entwicklergemeinschaft
Entwickler ursprünglich Qumranet
Erscheinungsjahr 2006
Aktuelle Version Skriptfehler: Ein solches Modul „Wikidata“ ist nicht vorhanden.
(Skriptfehler: Ein solches Modul „Wikidata“ ist nicht vorhanden.)
Aktuelle Vorabversion Skriptfehler: Ein solches Modul „Wikidata“ ist nicht vorhanden.
(Skriptfehler: Ein solches Modul „Wikidata“ ist nicht vorhanden.)
Betriebssystem Linux
Programmier­sprache C
Kategorie Hypervisor
Lizenz GNU GPL, Version 2
www.linux-kvm.org

Die Kernel-based Virtual Machine (KVM) ist eine Komponente des Linux-Kernels zur Virtualisierung von Computersystemen. Sie ermöglicht es dem Kernel, als Hypervisor mehrere virtuelle Maschinen auszuführen. Dabei nutzt KVM die Virtualisierungsfunktionen der Prozessorhardware. Die 2006 vorgestellte Software ist seit Version 2.6.20 Bestandteil des Linux-Kernels.<ref name="kvm-projekt">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. KVM-Projekt; ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

KVM stellt eine Schnittstelle für Programme im Userspace bereit, die virtuelle Maschinen anlegen und steuern. Häufig wird es mit QEMU kombiniert: KVM übernimmt insbesondere die hardwaregestützte Ausführung des Gastcodes, während QEMU das Modell des virtuellen Rechners einschließlich vieler Geräte bereitstellt.<ref name="qemu-einfuehrung">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref> Weitere Programme nutzen die KVM-Schnittstelle beispielsweise für kleine, auf einzelne Arbeitslasten zugeschnittene virtuelle Maschinen, sogenannte MicroVMs.<ref name="firecracker">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Firecracker-Projekt; ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

Geschichte und Entwicklung[Bearbeiten]

KVM entstand bei dem israelischen Unternehmen Qumranet unter Federführung von Avi Kivity. Dieser stellte das Projekt am 19. Oktober 2006 auf der Linux Kernel Mailing List vor.<ref name="ankuendigung">Avi Kivity: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Skriptfehler: Ein solches Modul „DateTime“ ist nicht vorhanden.; ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref> Im Februar 2007 erschien Linux 2.6.20 mit integrierter KVM-Unterstützung.<ref name="linux-2620">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Skriptfehler: Ein solches Modul „DateTime“ ist nicht vorhanden.; ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref><ref name="kvm-projekt" /> Am 4. September 2008 gab Red Hat die Übernahme von Qumranet bekannt.<ref name="qumranet">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Red Hat, Skriptfehler: Ein solches Modul „DateTime“ ist nicht vorhanden.; ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

Im Mai 2011 gründeten BMC Software, Eucalyptus Systems, HP, IBM, Intel, Red Hat und SUSE die Open Virtualization Alliance. Der Verband sollte die Verbreitung offener Virtualisierungstechniken, insbesondere KVM, fördern und Unternehmen über deren Einsatz informieren. Seine Aufgaben ergänzten die Arbeit der bestehenden Entwicklergemeinschaften.<ref name="ova">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Open Virtualization Alliance, Skriptfehler: Ein solches Modul „DateTime“ ist nicht vorhanden.; ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

Die Weiterentwicklung von KVM erfolgt im Rahmen des Linux-Kernel-Projekts. Dessen Maintainer-Verzeichnis weist sowohl Zuständigkeiten für das gemeinsame KVM-Subsystem als auch für einzelne Prozessorarchitekturen aus.<ref name="maintainers">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref> KVM wird mit dem Linux-Kernel veröffentlicht; der früher gesondert entwickelte QEMU-KVM-Zweig ging in QEMU auf. Seit QEMU 1.3 ist dessen Userspace-Komponente Bestandteil des QEMU-Hauptprojekts.<ref name="kvm-projekt" /> Der KVM-Kernelcode steht unter der GNU General Public License, Version 2.<ref name="kvm-lizenz">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

Außerhalb von Linux entstanden ebenfalls Portierungen. Das FreeBSD-Projekt berichtete 2007 über eine Portierung als ladbares Kernelmodul mit angepasstem QEMU.<ref name="freebsd">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. The FreeBSD Project; ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref> Joyent stellte 2011 eine KVM-Portierung für das auf illumos beruhende SmartOS vor.<ref name="smartos">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

Architektur[Bearbeiten]

Datei:Kernel-based Virtual Machine.svg
Zusammenwirken von KVM im Linux-Kernel und Programmen im Userspace

Kernel und Userspace[Bearbeiten]

Auf x86-Systemen besteht KVM aus dem gemeinsamen Kernelmodul kvm.ko und einer prozessorspezifischen Komponente: kvm-intel.ko für Intel VT-x beziehungsweise kvm-amd.ko für AMD-V.<ref name="kvm-projekt" /> Die Schnittstelle zum Userspace ist über die Gerätedatei /dev/kvm zugänglich. Mit ioctl-Aufrufen kann ein Programm eine virtuelle Maschine und deren virtuelle Prozessoren anlegen, Speicherbereiche zuordnen und Code des Gastes ausführen. Die Schnittstelle unterscheidet Operationen für das gesamte Subsystem, einzelne virtuelle Maschinen, virtuelle Prozessoren und Geräte.<ref name="kvm-api">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

Auf dem realen Rechner (Host) werden virtuelle Maschinen durch Linux-Prozesse und virtuelle Prozessoren durch Threads repräsentiert. Für die Zuteilung von Rechenzeit verwendet KVM den Linux-Scheduler. Auch die Speicherverwaltung und weitere Betriebssystemfunktionen des Hosts werden für die Virtualisierung genutzt.<ref name="redhat-kvm">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Red Hat, Skriptfehler: Ein solches Modul „DateTime“ ist nicht vorhanden.; ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref> Abhängig von Architektur und Konfiguration stellt KVM außerdem Gerätemodelle im Kernel bereit, etwa für Interrupt-Controller.<ref name="kvm-api" />

QEMU[Bearbeiten]

QEMU ergänzt diese Infrastruktur um virtuelle Rechnerplattformen, Speichergeräte, Netzwerkschnittstellen und weitere Peripherie. Es kann Geräte emulieren, paravirtualisierte Geräte bereitstellen oder geeignete physische Geräte an einen Gast durchreichen. QEMU unterstützt auch andere Hypervisoren. Mit dem Tiny Code Generator (TCG) kann QEMU außerdem Prozessoren vollständig in Software emulieren, wodurch vom Host abweichende Prozessorarchitekturen im Gast möglich sind.<ref name="qemu-about">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref><ref name="qemu-einfuehrung" />

Hardwareunterstützte Virtualisierung[Bearbeiten]

KVM nutzt die Unterstützung der Virtualisierung durch den Prozessor des Hosts. Bei der x86-Virtualisierung ist das Intel VT-x oder AMD-V. Der Prozessor des Hosts führt den Code des Gastes unmittelbar aus. Deshalb setzt KVM eine zum Host kompatible Prozessorarchitektur des Gastes voraus.<ref name="kvmtool">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. kvmtool-Projekt; ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref> KVM bildet die aus Sicht des Gastes physischen Speicheradressen auf den Speicher des Hosts ab. Bei der x86-Architektur nutzt KVM dafür die Second Level Address Translation von Intel (Extended Page Tables) und AMD (Rapid Virtualization Indexing).

Speicherverwaltung[Bearbeiten]

Die Speicherverwaltungen von KVM und Linux kooperieren, sodass beispielsweise große Speicherseiten und das Verschieben von Speicherseiten unterstützt werden. Das Erfassen veränderter Speicherseiten ermöglicht die Übertragung des Gastzustands bei einer Live-Migration.<ref name="kvm-mmu">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

Unterstützte Plattformen und Gastsysteme[Bearbeiten]

KVM wurde zunächst für die x86-Architektur entwickelt. Die Kernel-Schnittstelle unterstützt auch weitere Architekturen, darunter Arm64, PowerPC, IBM Z, RISC-V und LoongArch. Welche Funktionen verfügbar sind, unterscheidet sich nach Architektur und Hardware; Programme können Erweiterungen der KVM-Schnittstelle zur Laufzeit abfragen.<ref name="kvm-api" />

Mit einer passenden virtuellen Rechnerplattform können unter anderem unveränderte Linux- und Windows-Systeme als Gäste betrieben werden.<ref name="kvm-projekt" /> Die Auswahl des Gastsystems hängt außer von der Prozessorarchitektur auch von den bereitgestellten Geräten und deren Treiberunterstützung ab. QEMU bietet hierfür verschiedene Maschinenmodelle; andere KVM-nutzende Programme beschränken sich teilweise auf bestimmte Gasttypen und wenige virtuelle Geräte.<ref name="qemu-einfuehrung" /><ref name="firecracker" />

Funktionen[Bearbeiten]

Paravirtualisierte Ein- und Ausgabe[Bearbeiten]

Für die Ein- und Ausgabe kommen häufig Virtio-Geräte zum Einsatz. Virtio ist ein offener Standard für die Kommunikation zwischen Gerät und Treiber. Bei virtualisierten Geräten arbeitet ein Treiber im Gast mit einer Geräteimplementierung auf dem Host zusammen. Der Datenaustausch erfolgt wesentlich über gemeinsame Speicherbereiche und Warteschlangen, die Virtqueues. Dadurch muss nicht das Verhalten eines bestimmten physischen Geräts vollständig nachgebildet werden.<ref name="virtio">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

QEMU stellt zahlreiche Virtio-Geräte bereit. Teile der Geräteverarbeitung können auch außerhalb des QEMU-Prozesses ausgeführt werden; für Virtio-Geräte dient hierzu unter anderem die Schnittstelle vhost-user.<ref name="qemu-einfuehrung" /> Diese Paravirtualisierung der Ein- und Ausgabe lässt sich mit der hardwaregestützten Virtualisierung der Prozessoren kombinieren.

Durchreichen physischer Geräte[Bearbeiten]

Physische Geräte können einer virtuellen Maschine direkt zugewiesen werden, etwa um deren native Gerätetreiber zu nutzen oder den Aufwand der Geräteemulation zu vermeiden. Unter Linux stellt dafür insbesondere VFIO eine Schnittstelle bereit. Eine IOMMU begrenzt die Speicherbereiche, auf die ein zugewiesenes Gerät zugreifen darf. Welche Geräte sich getrennt zuweisen lassen, hängt unter anderem von der Isolation durch die Hardware und der Zuordnung zu IOMMU-Gruppen ab.<ref name="vfio">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

Live-Migration und Zustandsverwaltung[Bearbeiten]

In Verbindung mit QEMU und geeigneten Verwaltungswerkzeugen lassen sich laufende virtuelle Maschinen zwischen Hosts verschieben. Bei einer Live-Migration wird ein großer Teil des Zustands übertragen, während der Gast weiterläuft. Für die Übergabe des restlichen Zustands wird seine Ausführung kurz angehalten. Die dafür benötigte Zeit hängt von der Konfiguration und der zu übertragenden Datenmenge ab. QEMU stellt auch Funktionen zum Speichern und Wiederherstellen eines Gastzustands bereit; dabei müssen die virtuellen Geräte auf Quell- und Zielseite kompatibel sein.<ref name="migration">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref> In Verbindung mit QEMU und geeigneten Verwaltungswerkzeugen lassen sich laufende virtuelle Maschinen zwischen Hosts verschieben. Bei einer Live-Migration nach dem Precopy-Verfahren wird ein großer Teil des Zustands übertragen, während der Gast weiterläuft. Für die Übergabe des restlichen Zustands wird seine Ausführung kurz angehalten. Die dafür benötigte Zeit hängt von der Konfiguration und der zu übertragenden Datenmenge ab. QEMU stellt auch Funktionen zum Speichern und Wiederherstellen eines Gastzustands bereit; dabei müssen die virtuellen Geräte auf Quell- und Zielseite kompatibel sein.<ref name="migration">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

Verschachtelte Virtualisierung[Bearbeiten]

KVM unterstützt Nested Virtualization, also den Betrieb eines Hypervisors innerhalb einer virtuellen Maschine. Ein Gast kann dadurch selbst weitere Gäste ausführen. Einsatzgebiete sind beispielsweise Testumgebungen und Werkzeuge, die zum Erstellen von Systemabbildern eigene virtuelle Maschinen starten. Bei x86 ist die entsprechende KVM-Option seit Linux 4.20 für Intel- und AMD-Prozessoren standardmäßig aktiviert; Distributionen können andere Voreinstellungen wählen. Die tatsächliche Nutzbarkeit hängt außerdem von der Hardware und den dem Gast bereitgestellten Prozessorfunktionen ab.<ref name="nested">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

Programme zur Ausführung und Verwaltung[Bearbeiten]

Virtual Machine Monitors[Bearbeiten]

Neben QEMU verwenden mehrere eigenständige Virtual Machine Monitors (VMMs) d. h. Hypervisoren die KVM-Schnittstelle. Sie unterscheiden sich insbesondere darin, welche virtuellen Geräte, Gastsysteme und Verwaltungsfunktionen sie bereitstellen:

  • Firecracker ist auf MicroVMs für Serverless Computing und Containeranwendungen ausgerichtet. Sein Gerätemodell ist auf wenige Komponenten beschränkt. Das Projekt wurde bei Amazon Web Services unter anderem für AWS Lambda und AWS Fargate entwickelt.<ref name="firecracker" /><ref name="firecracker-readme">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>
  • Cloud Hypervisor ist ein in Rust entwickelter VMM mit Schwerpunkt auf Cloud-Arbeitslasten und paravirtualisierten Geräten. Er unterstützt neben KVM auch den Microsoft Hypervisor über MSHV.<ref name="cloud-hypervisor">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>
  • crosvm nutzt die KVM-Schnittstelle unter anderem im Android Virtualization Framework. Der ebenfalls in Rust geschriebene VMM verwendet Sandbox-Verfahren zur Begrenzung der Rechte seiner Geräteimplementierungen.<ref name="avf">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Android Open Source Project; ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>
  • kvmtool ist ein schlankes Werkzeug zum Ausführen von KVM-Gästen und dient auch als überschaubare Referenzimplementierung.<ref name="kvmtool" />

Verwaltungswerkzeuge und Plattformen[Bearbeiten]

Datei:Libvirt support.svg
Einordnung von KVM in die von libvirt unterstützten Virtualisierungstechniken

libvirt bietet eine Programmierschnittstelle und Dienste zur Verwaltung verschiedener Virtualisierungstechniken. Sein QEMU-Treiber unterstützt den Betrieb von QEMU mit KVM.<ref name="libvirt">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. libvirt-Projekt; ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref> Darauf bauen unter anderem das Kommandozeilenprogramm virsh, die Desktopoberfläche virt-manager und die Weboberfläche Cockpit Machines auf.<ref name="virsh">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. libvirt-Projekt; ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref><ref name="virt-manager">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. virt-manager-Projekt; ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref><ref name="cockpit">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

Proxmox VE verbindet die Verwaltung von KVM-basierten virtuellen Maschinen und LXC-Containern in einer Plattform mit Weboberfläche. Sie umfasst außerdem Funktionen für Cluster, Speicher, Netzwerke und Hochverfügbarkeit.<ref name="proxmox">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Proxmox Server Solutions; ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref> Im Compute-Dienst Nova von OpenStack ist KVM als Standardhypervisor vorgesehen; die Anbindung erfolgt über den libvirt-Treiber.<ref name="nova">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. OpenStack; ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

KubeVirt ergänzt Kubernetes um die Verwaltung virtueller Maschinen. Es integriert deren Bereitstellung und Lebenszyklus in die Kubernetes-Schnittstellen und ermöglicht den gemeinsamen Betrieb virtueller Maschinen und containerisierter Anwendungen. Für die Virtualisierung wird dabei KVM verwendet.<ref name="kubevirt">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

Einsatzgebiete[Bearbeiten]

KVM-basierte Virtualisierung wird für Server- und Desktop-Virtualisierung sowie für Cloud- und Virtual-Private-Server-Angebote eingesetzt.<ref name="qemu-sicherheit">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref> Google Compute Engine verwendet einen von Google angepassten und sicherheitsgehärteten KVM-basierten Hypervisor.<ref name="google">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref> Bei Amazon Web Services basiert der Nitro Hypervisor auf Kerntechnologie von Linux/KVM. Seine Aufgaben konzentrieren sich auf die Isolation von Prozessor- und Speicherressourcen; Netzwerk- und Speicherfunktionen übernehmen separate Nitro-Karten.<ref name="nitro">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Amazon Web Services; ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

Ein weiteres Einsatzgebiet ist die Isolation von Code auf mobilen Geräten. Das Android Virtualization Framework kombiniert hierfür unter anderem protected KVM (pKVM) und crosvm.<ref name="avf-ueberblick">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Android Open Source Project; ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

Sicherheit und geschützte virtuelle Maschinen[Bearbeiten]

Zur Absicherung einer QEMU/KVM-Umgebung gehören neben der Isolation im Hypervisor auch Beschränkungen der Userspace-Prozesse. Fehler in emulierten Geräten können es einem Gast ermöglichen, Code im Kontext des QEMU-Prozesses auszuführen. Als zusätzliche Schutzmechanismen dienen unter anderem unprivilegierte Benutzerkonten, SELinux oder AppArmor, Cgroups, Linux-Namespaces und Seccomp. Diese begrenzen den Zugriff auf Hostressourcen und werden teilweise durch Verwaltungssoftware wie libvirt eingerichtet.<ref name="qemu-sicherheit" />

Für Confidential Computing stellt KVM Schnittstellen zu hardwaregestützten Schutzmechanismen bereit. Auf geeigneten AMD-Prozessoren unterstützt es Secure Encrypted Virtualization (SEV) einschließlich SEV-SNP. SEV verschlüsselt den Speicher virtueller Maschinen mit jeweils eigenen Schlüsseln.<ref name="sev">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref> Für Intel Trust Domain Extensions (TDX) bietet KVM ebenfalls eine Schnittstelle zur Einrichtung und Ausführung geschützter Gäste. TDX soll deren Zustand auch gegenüber dem Host abschirmen.<ref name="tdx">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

Auf Arm64 verfolgt protected KVM einen entsprechenden Isolationsansatz. Im Android Virtualization Framework schränkt pKVM den Zugriff des Hostkernels auf geschützte Gäste ein; eine privilegierte Hypervisorkomponente kontrolliert dazu insbesondere die Speicherzuordnung.<ref name="avf" /> Der Entwicklungsstand im allgemeinen Linux-Kernel ist davon zu unterscheiden: Dessen Dokumentation kennzeichnet pKVM als experimentell und nennt noch nicht implementierte Isolationsfunktionen, darunter den Schutz des Prozessorzustands und die DMA-Isolation.<ref name="pkvm">Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. In: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar); (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>

Siehe auch[Bearbeiten]

Literatur[Bearbeiten]

  • Skriptfehler: Ein solches Modul „Vorlage:Literatur“ ist nicht vorhanden.

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

<references responsive />

Vorlage:HinweisbausteinVorlage:Wikidata-Registrierung