====== 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]]