====== Kernel-based Virtual Machine (KVM) unter Linux ======
Die [[linux:Kernel]]-based Virtual Machine (KVM) ist eine [[linux:Linux]]-[[linux:Kernel]]-Infrastruktur für Virtualisierung und läuft auf x86-Hardware mit den Hardware-Virtualisierungstechniken von Intel (VT) oder AMD (AMD-V). KVM wurde im Oktober 2006 veröffentlicht und ist ab Version 2.6.20 des [[linux:Linux]]-[[linux:Kernel|Kernels]] enthalten. Entwickelt wird es von dem israelischen Unternehmen Qumranet und steht dort unter Beaufsichtigung von Avi Kivity. Qumranet wurde im September 2008 von Red Hat gekauft.
Bestandteile der KVM sind die [[linux:Kernel]]-Module kvm.ko (das aber auch unter älteren [[linux:Linux]]-Versionen laufen soll) sowie die hardwarespezifischen Module kvm-intel.ko oder kvm-amd.ko. KVM selbst nimmt keine Emulation vor, sondern stellt nur die Infrastruktur dazu bereit; ein modifiziertes QEMU ist derzeit die einzige Möglichkeit, diese zu nutzen. Nach dem Laden des Moduls arbeitet der [[linux:Linux]]-[[linux:Kernel]] selbst als Hypervisor für virtuelle Maschinen. Als Gastsysteme unterstützt KVM [[linux:Linux]] (32 und 64 Bit), Windows (32 Bit), Haiku OS, AROS, ReactOS, FreeDOS, Solaris und diverse BSD-Derivate. KVM läuft auch auf SMP-Hostsystemen, SMP-Gastsysteme sind ebenfalls möglich. Die Unterstützung für Paravirtualisierung ist mittlerweile in KVM vorhanden.
:!: KVM an sich stellt "nur" die direkte Schnittstelle zum Linux-Kernel zur Verfügung, als Virtualisierungsumgebung kommt Qemu zum Einsatz. Lediglich der Aufruf erfolgt nicht mit "qemu" sondern stattdessen mit "kvm".
[[kvm:KVM]] unterstützt CPU-Erweiterungen, wie zum Beispiel
* Page Tables (Nested Page Tables - AMD, Extended Paging Tables - Intel) - Page Tables dienen der Übersetzung von Gast- in Host-Adressen. Dadurch wird der Hypervisor von der Aufgabe entlastet jede Adressanfrage eines Gast-Systems über eine Shadow Page Table zu ermitteln.
* IOMMU (I/O Memory Mapping Unit)
* Außerdem ist Kernel Samepage Merging (KSM) in den [[linux:Linux]]-[[linux:Kernel]] ab Version 2.6.32 integriert. KSM legt identische Speicherbereiche zusammen. Dadurch wird mehr Arbeitsspeicher den virtuellen Maschinen zur Verfügung gestellt als physikalischer Speicher zur Verfügung steht.
[[kvm:KVM]] und diese CPU-Erweiterungen ermöglichen die Nested Virtualization. Das heißt, in einer virtuellen Umgebung laufen wiederum Virtualisierungslösungen. Eine Kernel-based Virtual Machine kann also unter einer Kernel-based Virtual Machine gestartet werden und virtuelle Maschinen beinhalten.
Quelle (die beiden letzten Absätze): [[http://qemu-buch.de/de/index.php/QEMU-KVM-Buch/_Grundlagen#Die_Kernel-based_Virtual_Machine_im_Aufwind|Die Kernel-based Virtual Machine im Aufwind aus dem quemu-Buch Lizenz: GNU-FDL 1.2]]
Die Bestandteile von KVM sind Open-Source-Software und stehen unter verschiedenen Varianten der GPL-Lizenz zur Verfügung:
* KVM-[[linux:Kernel]]-Modul: GPL v2
* KVM-Benutzer-Modul: LGPL v2
* [[software:virtualisierung#QEMU]] CPU-Bibliothek (libqemu.a) und QEMU-PC-Emulator: LGPL
* [[linux:Linux]]-Usermode von [[software:virtualisierung#QEMU]]: GPL
* BIOS-Dateien (bios.bin, vgabios.bin und vgabios-cirrus.bin): LGPL v2 oder neuer
aus [[wpde>Kernel-based Virtual Machine|Wikipedia, der freien Enzyklopädie]].
* [[KVM-Gäste erstellen]]
* [[Netzwerkanbindung]]
* **[[paravirtualisierte KVM-Treiber für Windows]]**
===== Links =====
* **[[http://www.howtoforge.com/virtualization-with-kvm-on-a-debian-lenny-server|Virtualization With KVM On A Debian Lenny Server]]**
* [[https://help.ubuntu.com/community/KVM/Directly|Using KVM Directly]]
* [[http://kvm.qumranet.com/kvmwiki|KVM-Wiki]]
* [[http://qemu-buch.de/|QEMU + Kernel-based Virtual Machine]]
* [[http://sourceforge.net/projects/kvm|KVM-Projekt]]
* [[http://kvm.qumranet.com/kvmwiki/Guest_Support_Status|Welche KVM-Version unterstützt welche Gäste?]]
* [[http://wiki.ubuntuusers.de/KVM|KVM at ubuntuusers.com]]
* [[http://people.ubuntu.com/~kirkland/ubuntu-vm-builder.html|ubuntu-vm-builder - Parameter Generator]]
* [[https://help.ubuntu.com/community/KVM|Ubuntu-Doku zu KVM]]
* [[http://www.golem.de/0804/58957.html|KVM-Entwickler: "Paravirtualisierung ist tot"]]
* [[http://www.linuxinsight.com/finally-user-friendly-virtualization-for-linux.html|Finally user-friendly virtualization for Linux]]
* [[http://www.heise.de/newsticker/Mehr-Virtualisierung-im-Linux-Kernel-2-6-23--/meldung/92953|Mehr Virtualisierung im Linux-Kernel 2.6.23]]
* [[http://www.mail-archive.com/linux@lug-owl.de/msg00911.html|Virtualisierung - Xen vs. KVM]]
==== Sicherheit ====
* [[http://publib.boulder.ibm.com/infocenter/lnxinfo/v3r0m0/topic/liaat/liaatsecurity_pdf.pdf|Kernel Virtual Machine (KVM) security]]
==== Anbieter ====
* alle [[linux:Linux]]-[[linux:Distributionen und Live-CDs]] mit entsprechend aktuellem Kernel
* [[http://www.heise.de/open/meldung/Komplettpaket-Virtualisierung-fuer-KMUs-1130810.html|Collax Komplettpaket Virtualisierung für KMUs]]
===== Installation =====
Folgende Pakete müssen installiert werden:
* **kvm**
* **qemu** (//universe//)
aptitude install kvm qemu
Damit die Gäste Netzwerkanbindung erhalten wird hier eine bridge mit dem Namen "br_inet" erstellt.
Eine bridge ist eine Art virtueller Switch, der auf eine physikalische Netzwerkkarte gesetzt wird: apt install bridge-utils
Beispiel-Konfiguration: Das physikalische Interface ist hier "enp3s0":
iface enp3s0 inet manual
auto br_inet
iface br_inet inet static
address 1.2.3.3
netmask 255.255.255.0
gateway 1.2.3.2
up route add -net 1.2.3.0 netmask 255.255.255.0 gw 1.2.3.0 dev br_inet
bridge_ports enp3s0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
===== Voraussetzungen =====
- [[software:virtualisierung#Prozessorerweiterungen für Virtualisierung]]
- überprüfen, ob man selber Mitglied in der Gruppe "kvm" ist (sonst kommt Fehlermeldung ''open /dev/kvm: Permission denied'')
- kvm-Kernelmodul muss geladen sein. Unterstützt der Prozessor Hardwarevirtualisierung, so werden in der Regel die beiden benötigten Kernel-Module beim Start des Systems automatisch geladen. Dies kann man mit folgendem Befehl prüfen:
lsmod | grep kvm
Die Ausgabe sollte dann so aussehen:
* für Intel-Prozessoren:
kvm
kvm_intel
* für AMD-Prozessoren:
kvm
kvm_amd
Sollten die Module nicht geladen sein, so muss man dies [[linux:kernel#kernelmodule laden|von Hand nachholen]].
===== Verwaltung =====
* mit **[[software:libvirt]]** (Paket ''libvirt-daemon'') und virsh:
* lokales System virsh --connect qemu:///system
===== Performance =====
* scheduler der gäste auf "noop" setzen (der Host kümmert sich bereits um optimalen Zugriff):
* caching der Disk anpassen
* "Kernel SamePage Merging" aktivieren:
* echo 1 > /sys/kernel/mm/ksm/run
* Statistiken anzeigen: for ii in /sys/kernel/mm/ksm/* ; do echo -n "$ii: " ; cat $ii ; done
Links:
* [[http://www.ezunix.org/index.php?title=Boost_performance_of_KVM_guests|Boost performance of KVM guests]]
* [[http://serverascode.com/2012/11/11/ksm-kvm.html|KSM and KVM]]
* [[https://www.kernel.org/doc/Documentation/vm/ksm.txt|kvm kernel doc]]