
|
Hypervisor Bezeichnet den Virtual Machine Monitor (VMM). Er stellt die Virtualisierungs- umgebung für die Gastsys- teme bereit. |
|
KVM Ist eine Virtualisierungslösung für Linux auf x86-Hardware mit Virtualisierungserweiterungen. |
|
Memory Balloning Dies beschreibt ein Verfahren, um dynamisch Arbeits- speicher in einer VM freizu- geben um ihn in einer anderen VM zu nutzen. |
|
QEMU Ein Open Source Emulations- und Virtualisierungs- programm. |
Weiterführende Links
Bei KVM handelt es sich um eine Virtualisierungslösung für Linux, die erstmals 2006 von der israelischen Firma Qumranet veröffentlicht wurde. Im September 2008 wurde Qumranet von Red Hat aufgekauft, die nun die Entwicklung von KVM vorantreibt. In ihrer Virtualisierungsstrategie hat Red Hat angekündigt, in Zukunft ihr Produktportfolio auf KVM auszulegen. Dies muss nichts über die Zukunft von Xen im Allgemeinen aussagen, zeigt aber, wo einer der größten Distributoren die Zukunft der Virtualisierung unter Linux sieht.
| ||||||||
| ||||||||
|
Bei KVM handelt es sich jedoch nicht um eine komplette Virtualisierungslösung wie bei Xen oder VMware. KVM stellt lediglich die Virtualisierungsfunktionen für den Kernel bereit. Die Emulation der Hardware und die Verwaltung der virtuellen Maschinen erfolgt mittels Qemu. Anfangs hat KVM noch einen Fork zum Qemu-Projekt entwickelt. Seit der Version 0.10 bietet Qemu aber selbst die Funktionen, um mit KVM zu interagieren.
Für viele stellt sich die Frage, warum schon wieder eine neue Möglichkeit der Virtualisierung unter Linux entwickelt wird. Auch wenn es sich bei beiden Produkten um Virtualisierungslösungen unter Linux handelt, basieren sie dennoch auf unterschiedlichen Techniken. Während Xen als eigenständiger Hypervisor fungiert und über eine privilegierte virtuelle Maschine administriert wird, macht KVM den Linux-Kernel selbst zum Hypervisor. Da KVM sich noch in einem frühen Stadium der Entwicklung befindet, kann es noch nicht alle Funktionen bieten, die Xen mittlerweile zur Verfügung stellt. Dafür ist KVM im Gegensatz zu Xen vollständig unter der GPLv2 erhältlich und hat bereits nach sechs Monaten die Aufnahme in den Linux-Kernel (seit Version 2.6.20) geschafft. Diese bleibt Xen bis auf den Gast-Code immer noch verwehrt. Das ist sowohl auf den Ansatz von Xen, eigenständig zu sein, als auch auf eine politische Entscheidung der Kernel-Entwickler zurückzuführen.
KVM hat die Einschränkungen, dass es zwingend x86-Hardware mit einem Prozessor, der Hardware-Virtualisierung (Intel VT oder AMD-V) beherrscht, voraussetzt. Zudem muss auch das BIOS diese Erweiterung unterstützen. Mit dem Befehl in Abbildung 1 kann einfach überprüft werden, ob die CPU KVM-fähig ist.
Dass KVM Bestandteil des Linux-Kernels ist, hat einige Vorteile. So profitiert es zum Beispiel von den stetig wachsenden Funktionen, die der Kernel bereitstellt. Die offizielle Version von Xen wird für den Kernel 2.6.18 entwickelt. Um auch neuere Funktionen des Kernels zu unterstützen, müssen die Distributoren Xen immer an eine neuere Kernel-Version anpassen. KVM besteht aus zwei Kernel-Modulen. Dies sind kvm, dass die grundlegenden Virtualisierungsfunktionen bereitstellt, und kvm_intel bzw. kvm_amd, je nach CPU. Es wird jedoch auf den Standardprozess-Scheduler und den Memory Allocator des Linux-Kernel zurückgegriffen. Dies macht KVM sehr schlank und somit den Code wartbarer. Ein Gastprozess verhält sich wie ein Standard-Linux-Prozess. Wie jeder normale Prozess unter Linux hat er einen Kernel- und einen Usermode.
KVM fügt diesen beiden noch den so genannten Guestmode hinzu, der wiederum einen Kernel- und Usermode besitzt. Von diesen weiß der Hypervisor jedoch nichts. In Abbildung 2 wird dies schematisch dargestellt. Auch ist zu sehen, dass Qemu die I/O-Operationen übernimmt. Als Schnittstelle zum Kernel dient das Charakterdevice /dev/kvm.
Bei Qemu handelt es sich um einen Prozessoremulator für verschiedene Hardware-Plattformen. Er ist in der Lage, ein vollständiges System zu emulieren. Dazu gehören verschiedene Prozessoren und I/O-Geräte. Für KVM wurde keine eigene Technik entwickelt, um virtuelle Geräte einer VM zur Verfügung zu stellen. Stattdessen werden die bestehenden Möglichkeiten von Qemu genutzt. Das ist einer der Gründe, warum KVM nach relativ kurzer Entwicklungszeit eine Vielzahl von Funktionen bietet. Auch als Tool zur Administration der virtuellen Maschinen tritt Qemu in Erscheinung. In einem späteren Abschnitt wird gezeigt, wie mittels qemu-img ein Festplatten-Image erstellt werden kann.
KVM verfolgt den Ansatz der vollständigen Virtualisierung. Das bedeutet, dass ein Teil der Hardware virtualisiert wird, aber die Zugriffe auf die CPU direkt erfolgen. Somit treten bei der Nutzung der CPU keine Performance-Einschränkungen auf. Lediglich wenn auf Geräte, wie zum Beispiel Netzwerkkarten oder Festplatten, zugegriffen werden muss, sind Verluste unvermeidlich. Diese bewegen sich aber nur im Bereich von wenigen Prozenten.
Der Vorteil der vollständigen Virtualisierung ist, dass sie es ermöglicht, unmodifizierte Gäste auf einem System zu betreiben. Um die Verluste bei den I/O-Operationen zu minimieren, kann auf eine Technik namens Paravirtualisierung zurückgegriffen werden. Diese ist von Xen oder auch dem VMware ESXServer bekannt. Es werden im Gastsystem angepasste Treiber für Geräte installiert. Diese sind speziell für den Einsatz in einer virtuellen Maschine ausgelegt. KVM hat keine eigene Lösung entwicklet, sondern greift auf VirtIO zurück. Dieses stellt unter anderem folgende Funktionen für Linux-Systeme bereit:
Für Windows bietet KVM einen eigenen paravirtualisierten Netzwerktreiber. Block-Devices oder Memory Ballooning werden leider nicht unterstützt.
Es gibt verschiedene Wege und Möglickeiten, eine virtuelle Maschine zu installieren. Wir haben uns für qcow2 als Festplatten-Image-Format entschieden und nutzen zur Installation das Tool virt-install. Dieses basiert auf libvirt (siehe nächster Abschnitt). Es wäre aber auch möglich, die Installation direkt mit Qemu vorzunehmen.
Als erstes muss das Festplatten-Image erstellt werden (siehe Abbildung 3). Danach kann virt-install aufgerufen werden. Das Beispiel in Abbildung 4 greift auf ein ISO-Image zu und die Ausgabe wird mittels VNC realisiert. Nach der Installation steht unter /vms/vm01.qcow2 die fertige virtuelle Maschine zur Verfügung. Eine Liste mit den zur Zeit unterstützten Gastsystemen kann unter [2] eingesehen werden.
Zusätzlich zu der Administration mittels Qemu kann KVM auch über die Virtualisierungs-API libvirt verwaltet werden. Libvirt ist aber kein Bestandteil von KVM, sondern ein eigenständiges Projekt. Mit Hilfe von libvirt ist es möglich, verschiedene Virtualisierungslösungen anzusprechen. Darunter befindet sich nicht nur KVM, sondern auch Xen oder auch OpenVZ. Somit ist libvirt als Schnittstelle zwischen KVM und einem Management-Tool zu verstehen. Libvirt erlaubt es, virtuelle Maschinen über XML-Dateien zu konfigurieren. Diese Dateien ermögliche n es, direkt beim Hochfahren des Hosts den Gast mitzustarten. Ein Beispiel für eine Konfiguration ist in Abbildung 5 dargestellt. Zusätzlich wird ein eigenes Kommandozeilen-Tool (virsh) bereitgestellt, mit dem virtuelle Maschinen administriert werden können. In Abbildung 6 sind einige Möglichkeiten aufgeführt.
Mit KVM steht eine weitere, mächtige Alternative für die Virtualisierung unter Linux bereit. Ihr größter Vorteil ist die komplette Integration im Linux-Kernel. Zudem sprechen der relativ geringe Code-Umfang und damit die einfache Wartbarkeit für KVM. Aber es darf nicht nur KVM alleine erwähnt werden. Erst durch Qemu wird KVM zu einer vollständigen Virtualisierungslösung. Auch wenn KVM sich noch in der Entwicklung befindet, ist es dennoch sehr stabil und hat einen großen Funktionsumfang. Des Weiteren sorgt Red Hat als großer Fürsprecher für die stetige Weiterentwicklung und den nötigen Rückhalt in der Community. Dadurch ist KVM sicher mehr als nur einen Blick wert.
Marius Dorlöchter (info@ordix.de).