kvm:kvm

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
kvm:kvm [2010/11/05 20:27] stkvm:kvm [2020/10/24 15:16] (aktuell) st
Zeile 1: Zeile 1:
 +====== 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: <code bash>apt install bridge-utils</code>
 +
 +Beispiel-Konfiguration: Das physikalische Interface ist hier "enp3s0":
 +<file>
 +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
 +</file>
 +
 +===== 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:
 +<file>
 +  kvm
 +  kvm_intel
 +</file>
 +  * für AMD-Prozessoren:
 +<file>
 +  kvm
 +  kvm_amd
 +</file>
 +
 +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 <code> virsh --connect qemu:///system </code>
 +
 +
 +
 +===== 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:
 +    * <code bash>echo 1 > /sys/kernel/mm/ksm/run</code>
 +    * Statistiken anzeigen: <code bash>for ii in /sys/kernel/mm/ksm/* ; do echo -n "$ii: " ; cat $ii ; done</code>
 +
 +
 +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]]