Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung |
kvm:kvm [2011/11/03 19:20] – st | kvm:kvm [2020/10/24 15:16] (aktuell) – st |
---|
| ====== 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]] |
| |