KVM Grundlagen: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
−
[[Datei:KVM.media]]
+
= KVM Grundlagen =
−
=Name=
 
−
*Kernel-based Virtual Machine
 
−
=Webseiten=
 
−
*https://www.linux-kvm.org/page/Main_Page
 
−
*https://www.qemu.org/
 
  
−
=Läuft auf=
+
== Übersicht ==
−
*Intel (VT)
+
* Kernel-based Virtual Machine (KVM) ist die Virtualisierungslösung im Linux-Kernel.
−
*AMD (AMD-V)  
+
* Nutzt Hardware-Virtualisierung (Intel VT-x, AMD-V).
−
*System-z-Architektur
+
* Besteht aus Kernelmodulen (<code>kvm.ko</code>, <code>kvm_intel.ko</code> bzw. <code>kvm_amd.ko</code>) und setzt für die Geräteemulation auf QEMU auf.
−
*PowerPC
+
* Fester Bestandteil des Linux-Kernels seit Version 2.6.20 (Februar 2007).
−
*ARM
 
  
−
=Veröffentlicht=
+
== Webseiten ==
−
*Oktober 2006
+
* https://www.linux-kvm.org/page/Main_Page
−
*Kernel 2.6.20
+
* https://www.qemu.org/
−
=Entwickelt=
+
* https://libvirt.org/
−
*Israel
 
−
*Avi Kivity
 
−
*Qumranet
 
−
*2008 Red Hat
 
−
=Portierungen=
 
−
*FreeBSD
 
−
*Illumos
 
−
=Besteht aus=
 
−
*kvm.ko
 
−
*kvm_intel.ko
 
−
*kvm_amd.ko
 
  
−
=Open Virtualization Alliance (OVA)=
+
== Geschichte ==
−
*Gegründet Mai 2011
+
* Entwickelt von Avi Kivity bei Qumranet in Israel, vorgestellt im Oktober 2006.
−
*Virtualisierung und cloudbasierte Lösungen
+
* Aufgenommen in Kernel 2.6.20, veröffentlicht im Februar 2007.
−
*um dies auf dem Markt zu etablieren
+
* 2008 Übernahme von Qumranet durch Red Hat, das die Entwicklung seitdem maßgeblich vorantreibt.
−
*Mitglieder
+
* Heute Grundlage vieler Plattformen, z. B. Proxmox VE, OpenStack und großer Cloud-Anbieter.
−
**BMC Software
+
* Portierungen existieren für FreeBSD und Illumos.
−
**Eucalyptus Systems
 
−
**HP
 
−
**IBM
 
−
**Intel
 
−
**Red Hat  
 
−
**SUSE
 
  
−
=KVM=
+
== Unterstützte Architekturen ==
−
*keine Emulation
+
* x86-64 mit Intel VT-x oder AMD-V
−
*nur Infrasruktur
+
* ARM64 (AArch64)
−
=Qemu=
+
* IBM Z (s390x)
−
*virtualisierte Gastsysteme
+
* PowerPC
−
*Festplatten
+
* RISC-V
−
*Netzwerk
+
 
−
*Sound
+
== Architektur von KVM ==
−
*Grafikkarten
+
* KVM virtualisiert CPU und Arbeitsspeicher, emuliert aber selbst keine Geräte.
−
=Übersicht=
+
* Die Geräte der VM (Festplatte, Netzwerkkarte, Grafik) emuliert QEMU.
 +
* Jede VM ist ein normaler QEMU-Prozess auf dem Host, den der Kernel wie jeden anderen Prozess einplant.
 +
* KVM + QEMU zusammen ergeben ein vollständiges Virtualisierungssystem.
 +
 
 +
== Übersichtsgrafik ==
 
[[Datei:kvm-101.png|500px]]
 
[[Datei:kvm-101.png|500px]]
−
*Von Shmuel Csaba Otto Traian, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=29448779
+
''KVM Architektur: KVM übernimmt CPU/RAM Virtualisierung, QEMU emuliert Geräte.''
 +
 
 +
== Gastsysteme ==
 +
* Unterstützt zahlreiche Betriebssysteme:
 +
** Linux (32/64 Bit)
 +
** Windows (32/64 Bit)
 +
** BSD-Derivate, Solaris/Illumos, Haiku, ReactOS, FreeDOS u. a.
 +
 
 +
== Paravirtualisierung mit VirtIO ==
 +
* Emulierte Geräte (z. B. Netzwerkkarte e1000, IDE-Platte) bilden echte Hardware nach. Der Gast-Treiber spricht mit ihnen wie mit echter Hardware, das erzeugt viele VM-Exits.
 +
* VirtIO-Geräte sind für VMs entworfen: Gast und Host tauschen Daten über gemeinsame Warteschlangen (virtqueues) aus, mit wenigen VM-Exits.
 +
* Wichtige VirtIO-Geräte:
 +
** <code>virtio-blk</code> / <code>virtio-scsi</code> für Festplatten
 +
** <code>virtio-net</code> für Netzwerk
 +
** <code>virtio-balloon</code> für dynamischen Arbeitsspeicher
 +
* Linux bringt die Treiber mit, für Windows gibt es die ISO <code>virtio-win</code>.
 +
* Animation: https://labs.xinux.net/kvm-praxis.html#virtio-1
  
−
=Gastsysteme=
+
== Verwaltungswerkzeuge ==
−
*Linux (32 und 64 Bit),
+
* <code>qemu-system-x86_64 -accel kvm</code> (direkter Start ohne Verwaltung)
−
*Windows (32 und 64 Bit)
+
* <code>virsh</code> (Kommandozeile von libvirt)
−
*Haiku
+
* <code>virt-install</code> (VMs per Kommandozeile anlegen)
−
*AROS
+
* Virtual Machine Manager (<code>virt-manager</code>, grafisch)
−
*ReactOS
+
* Cockpit mit <code>cockpit-machines</code> (Weboberfläche)
−
*FreeDOS
+
* Proxmox VE (eigene Verwaltung, nutzt kein libvirt)
−
*Solaris
+
 
−
*BSD-Derivate.
+
== VT Modell (CPU Privilegienstufen) ==
−
=Paravirtualisierungsschnittstelle Virtio=
 
−
*Festplatten
 
−
*Netzwerkgerätetreiber
 
−
=Verwaltungswerkzeuge=
 
−
*qemu/kvm
 
−
*virsh
 
−
*Virtual Machine Manager (VMM)
 
−
*AQemu
 
−
*UCS Virtual Machine Manager
 
−
*Proxmox
 
−
*Ovirt
 
−
*Kimchi
 
−
=Einordnung=
 
−
=VT Modell=
 
 
{{#drawio:vt-ring}}
 
{{#drawio:vt-ring}}
−
=Erklärung=
+
''Zeigt die CPU-Modi: VMX Root (Hypervisor, „Ring -1“) und VMX Non-Root (Gast mit eigenem Ring 0 und Ring 3).''
−
*KVM ist ein Linux-Kernel, der in Kombination mit dem kvm-Kernelmodul den üblichen Linux-Kernel in einen Bare-Metal-Hypervisor verwandelt.
+
* Ausführlich: [[X86-Virtualisierung]]
−
*Sobald KVM im Kernel installiert ist, können wir virtuelle Maschinen darin erstellen und steuern.
+
 
−
*CPU-Virtualisierung: Um die CPU zu virtualisieren, nutzt KVM die Hardwarelösung, d. h. CPUs, in die Virtualisierungsanweisungen integriert sind.
+
== Libvirt Übersicht ==
−
*Intel nennt dies VT-X und AMD nennt es AMD-V.
 
−
*Die traditionelle Architektur von CPUs hatte den standardmäßigen ringbasierten Betrieb.
 
−
*Das Betriebssystem würde die privilegierten Befehle im Ring 0 ausführen und die Benutzerraumanwendungen würden im Ring 3 ausgeführt.
 
−
*Die Einführung der Virtualisierung erforderte das Vorhandensein einer neuen Schicht zwischen der Hardware und dem Betriebssystem.
 
−
*Dies hätte auf zwei Arten erreicht werden können:  
 
−
**0/1/3-Modell, bei dem das Betriebssystem in Ring 1 verschoben und der Hypervisor in Ring 0 ausgeführt wird
 
−
**0/3/3-Modell, bei dem das Betriebssystem und die Anwendungen beide im Ring3 ausgeführt werden und der Hypervisor im Ring 0 ausgeführt wird.
 
−
*Beide Modelle, die das Betriebssystem von Ring 0 wegbewegen, führen zu mehreren Problemen, da das Betriebssystem so konzipiert ist, dass es immer in Ring 0 ausgeführt wird.
 
−
*Die Softwarelösungen wie binäre Übersetzung und Paravirtualisierung versuchen, die Probleme aufgrund dieser Änderung des Betriebsrings anzugehen das Betriebssystem.
 
−
*Die von Intel und AMD-V eingeführte Hardwarelösung löst dies, indem sie neue Betriebsmodi in der CPU einführt.
 
−
*Die für die Intel-Virtualisierung aktivierte Hardware verfügt über die neuen Betriebsmodi VMX Root und VMX Non Root.
 
−
*Die VMX-Root-Operation wird verwendet, um den Hypervisor auszuführen
 
−
*VMX-Non-Root-Operation wird verwendet, um die VM selbst auszuführen
 
−
*Jeder dieser CPU-Modi hat Ring 0,1,2,3.
 
−
*Somit kann das Betriebssystem weiterhin in ring0 im VMX-Non-Root-Modus arbeiten
 
−
*Es hat weiterhin Kontrolle über die Hardware wie bei einem herkömmlichen Betriebssystem behalten.
 
−
*Der Hypervisor hingegen wird im VMX-Root-Modus in Ring 0 ausgeführt.
 
−
*Somit erhält sogar der Hypervisor die vollständige Kontrolle über die Hardware, indem er im ring0 vorhanden ist.
 
−
*Aber zu jedem beliebigen Zeitpunkt würde entweder die andere VM oder der Hypervisor im Ring-0-Modus arbeiten.
 
−
*Dies löst eine Reihe von Problemen, die in den Softwarelösungen der Virtualisierung bestehen, und macht die Virtualisierung viel schneller,
 
−
*Die VM während des normalen Betriebs ohne Eingriff des Hypervisors direkt auf der Hardware arbeiten kann.
 
−
*Die Steuerung verlagert sich aus der VM nur bei einer E/A, die von der im Host-Kernel laufenden Userspace-Anwendung gehandhabt wird, und bei Interrupts oder anderen Signalen, die vom Hypervisor gehandhabt werden.
 
−
*KVM nutzt diese Hardwarefunktion, während die virtuellen Maschinen ausgeführt werden.
 
−
*Somit gibt es neben dem traditionellen Kernel-Space und User-Space einen neuen Modus, der als Gast-Betriebsmodus im Kernel bezeichnet wird.
 
−
*Die VM arbeitet in diesem Gastmodus, der den VMX-Nicht-Root-Modus nutzt.
 
−
*Das Gastbetriebssystem arbeitet im Ring 0 des VMX-Non-Root-Modus und die Anwendungen im Gastbetriebssystem im Ring 3 des VMX-Non-Root-Modus.
 
−
*Der KVM-Kernel hingegen arbeitet im Ring 0 des VMX-Root-Modus.
 
−
*Der Kernel, der als Hypervisor fungiert, wird im Kernelraum des vmx-Root-Modus ausgeführt.
 
−
==Libvirt supports==
 
 
[[Datei:kvm-104.png|500px]]
 
[[Datei:kvm-104.png|500px]]
 +
* '''Libvirt''' ist eine einheitliche Schnittstelle zur Verwaltung von KVM/QEMU und anderen Hypervisoren.
 +
* Werkzeuge wie <code>virsh</code> und <code>virt-manager</code> sprechen mit dem Dienst <code>libvirtd</code>, der die QEMU-Prozesse startet und verwaltet.
 +
* Die Beschreibung einer VM liegt als XML-Datei unter <code>/etc/libvirt/qemu/</code>.
  
−
=VM lifecycle=
+
== VM Lifecycle ==
 
[[Datei:kvm-105.png|500px]]
 
[[Datei:kvm-105.png|500px]]
 +
''Lebenszyklus einer virtuellen Maschine (erstellt, gestartet, gestoppt, gelöscht).''
 +
{| class="wikitable"
 +
! Befehl !! Wirkung
 +
|-
 +
| <code>virsh define vm.xml</code> || VM anlegen (Zustand: ausgeschaltet)
 +
|-
 +
| <code>virsh start vm</code> || VM starten
 +
|-
 +
| <code>virsh suspend vm</code> / <code>virsh resume vm</code> || VM anhalten / fortsetzen
 +
|-
 +
| <code>virsh shutdown vm</code> || sauber herunterfahren (ACPI)
 +
|-
 +
| <code>virsh destroy vm</code> || hart ausschalten (Stecker ziehen), löscht nichts
 +
|-
 +
| <code>virsh undefine vm</code> || VM-Definition löschen (Platten bleiben)
 +
|}
 +
* Animation: https://labs.xinux.net/kvm-praxis.html#lifecycle-1
  
−
=Folien=
+
== Folien ==
−
*[[Datei:kvm-302.odp]]
+
* [[Datei:kvm-302.odp]]
−
*[[Datei:kvm-302.pdf]]
+
* [[Datei:kvm-302.pdf]]
  
−
=Quellen=
+
== Quellen ==
−
*https://de.wikipedia.org/wiki/Kernel-based_Virtual_Machine
+
* https://de.wikipedia.org/wiki/Kernel-based_Virtual_Machine
−
*https://de.wikipedia.org/wiki/Hypervisor
+
* https://de.wikipedia.org/wiki/Hypervisor
−
*https://www.computerwoche.de/a/virtualisierung-ist-kvm-das-bessere-xen,1937585
+
* https://www.computerwoche.de/a/virtualisierung-ist-kvm-das-bessere-xen,1937585
−
*https://mrpointy.wordpress.com/2009/05/12/is-kvm-a-type-1-or-a-type-2/
+
* https://mrpointy.wordpress.com/2009/05/12/is-kvm-a-type-1-or-a-type-2/
−
*http://tuxthink.blogspot.de/2011/12/kvm-introduction.html
+
* http://tuxthink.blogspot.de/2011/12/kvm-introduction.html
 +
[[Kategorie:Virtualisierung]]

Aktuelle Version vom 11. Oktober 2026, 17:46 Uhr

KVM Grundlagen

Übersicht

  • Kernel-based Virtual Machine (KVM) ist die Virtualisierungslösung im Linux-Kernel.
  • Nutzt Hardware-Virtualisierung (Intel VT-x, AMD-V).
  • Besteht aus Kernelmodulen (kvm.ko, kvm_intel.ko bzw. kvm_amd.ko) und setzt für die Geräteemulation auf QEMU auf.
  • Fester Bestandteil des Linux-Kernels seit Version 2.6.20 (Februar 2007).

Webseiten

Geschichte

  • Entwickelt von Avi Kivity bei Qumranet in Israel, vorgestellt im Oktober 2006.
  • Aufgenommen in Kernel 2.6.20, veröffentlicht im Februar 2007.
  • 2008 Übernahme von Qumranet durch Red Hat, das die Entwicklung seitdem maßgeblich vorantreibt.
  • Heute Grundlage vieler Plattformen, z. B. Proxmox VE, OpenStack und großer Cloud-Anbieter.
  • Portierungen existieren für FreeBSD und Illumos.

Unterstützte Architekturen

  • x86-64 mit Intel VT-x oder AMD-V
  • ARM64 (AArch64)
  • IBM Z (s390x)
  • PowerPC
  • RISC-V

Architektur von KVM

  • KVM virtualisiert CPU und Arbeitsspeicher, emuliert aber selbst keine Geräte.
  • Die Geräte der VM (Festplatte, Netzwerkkarte, Grafik) emuliert QEMU.
  • Jede VM ist ein normaler QEMU-Prozess auf dem Host, den der Kernel wie jeden anderen Prozess einplant.
  • KVM + QEMU zusammen ergeben ein vollständiges Virtualisierungssystem.

Übersichtsgrafik

Kvm-101.png KVM Architektur: KVM übernimmt CPU/RAM Virtualisierung, QEMU emuliert Geräte.

Gastsysteme

  • Unterstützt zahlreiche Betriebssysteme:
    • Linux (32/64 Bit)
    • Windows (32/64 Bit)
    • BSD-Derivate, Solaris/Illumos, Haiku, ReactOS, FreeDOS u. a.

Paravirtualisierung mit VirtIO

  • Emulierte Geräte (z. B. Netzwerkkarte e1000, IDE-Platte) bilden echte Hardware nach. Der Gast-Treiber spricht mit ihnen wie mit echter Hardware, das erzeugt viele VM-Exits.
  • VirtIO-Geräte sind für VMs entworfen: Gast und Host tauschen Daten über gemeinsame Warteschlangen (virtqueues) aus, mit wenigen VM-Exits.
  • Wichtige VirtIO-Geräte:
    • virtio-blk / virtio-scsi für Festplatten
    • virtio-net für Netzwerk
    • virtio-balloon für dynamischen Arbeitsspeicher
  • Linux bringt die Treiber mit, für Windows gibt es die ISO virtio-win.
  • Animation: https://labs.xinux.net/kvm-praxis.html#virtio-1

Verwaltungswerkzeuge

  • qemu-system-x86_64 -accel kvm (direkter Start ohne Verwaltung)
  • virsh (Kommandozeile von libvirt)
  • virt-install (VMs per Kommandozeile anlegen)
  • Virtual Machine Manager (virt-manager, grafisch)
  • Cockpit mit cockpit-machines (Weboberfläche)
  • Proxmox VE (eigene Verwaltung, nutzt kein libvirt)

VT Modell (CPU Privilegienstufen)

Zeigt die CPU-Modi: VMX Root (Hypervisor, „Ring -1“) und VMX Non-Root (Gast mit eigenem Ring 0 und Ring 3).

Libvirt Übersicht

Kvm-104.png

  • Libvirt ist eine einheitliche Schnittstelle zur Verwaltung von KVM/QEMU und anderen Hypervisoren.
  • Werkzeuge wie virsh und virt-manager sprechen mit dem Dienst libvirtd, der die QEMU-Prozesse startet und verwaltet.
  • Die Beschreibung einer VM liegt als XML-Datei unter /etc/libvirt/qemu/.

VM Lifecycle

Kvm-105.png Lebenszyklus einer virtuellen Maschine (erstellt, gestartet, gestoppt, gelöscht).

Befehl Wirkung
virsh define vm.xml VM anlegen (Zustand: ausgeschaltet)
virsh start vm VM starten
virsh suspend vm / virsh resume vm VM anhalten / fortsetzen
virsh shutdown vm sauber herunterfahren (ACPI)
virsh destroy vm hart ausschalten (Stecker ziehen), löscht nichts
virsh undefine vm VM-Definition löschen (Platten bleiben)

Folien

Quellen