»Nur wer seinen eigenen Weg geht, kann von niemandem überholt werden.« Marlon Brando (03.04.1924–01.07.2004), amerikanischer Schauspieler
23 Server-Virtualisierung mit KVM
| Was Sie in diesem Kapitel erwartet |
|
In diesem Kapitel möchte ich Ihnen KVM, die Kernel-basierte virtuelle Maschine, vorstellen. KVM hat es verdient etwas ausführlicher behandelt zu werden. Dies liegt nicht nur daran, dass Canonical, die Firma hinter Ubuntu, Anfang 2008 verkündet hat, dass KVM die Standard-Virtualisierungslösung für das nächste Long-Term-Release »Hardy Heron« darstellt. Ein anderer Grund für die nähere Betrachtung ist, dass KVM schnell Einzug in den offiziellen Linux-Kernel gehalten hat. Außerdem profitiert KVM enorm von der fortgeschrittenen Entwicklung des QEMU-Projekts. Seit Juni 2008 beherrscht KVM sogar die Technik der Paravirtualisierung. |
| Benötigtes Vorwissen |
|
Sie sollten sich ein wenig mit der Shell auskennen. |
Die Ankündigung
Am 19. Oktober 2006 wurde ein Patch auf der Mailingliste der Kernel-Entwickler angekündigt. Dieser Patch implementierte die Schnittstelle /dev/kvm in den Kernel und ermöglichte die direkte Nutzung der Intel-Virtualisierungserweiterungen für die x86-Architektur. Der original Wortlaut war folgender:
From: Avi Kivity <avi <at> qumranet.com> Subject: [PATCH 0/7] KVM: Kernel-based Virtual Machine Newsgroups: gmane.linux.kernel Date: 2006-10-19 13:45:49 GMT The following patchset adds a driver for Intel's hardware virtualization extensions to the x86 architecture. The driver adds a character device (/dev/kvm) that exposes the virtualization capabilities to userspace. Using this driver, a process can run a virtual machine (a "guest") in a fully virtualized PC containing its own virtual hard disks, network adapters, and display. Using this driver, one can start multiple virtual machines on a host. Each virtual machine is a process on the host; a virtual cpu is a thread in that process. kill(1), nice(1), top(1) work as expected. In effect, the driver adds a third execution mode to the existing two: we now have kernel mode, user mode, and guest mode. Guest mode has its own address space mapping guest physical memory (which is accessible to user mode by mmap()ing /dev/kvm). Guest mode has no access to any I/O devices; any such access is intercepted and directed to user mode for emulation. The driver supports i386 and x86_64 hosts and guests. All combinations are allowed except x86_64 guest on i386 host. For i386 guests and hosts, both pae and non-pae paging modes are supported. SMP hosts and UP guests are supported. At the moment only Intel hardware is supported, but AMD virtualization support is being worked on. (...)
23.1 Funktionsweise 

KVM steht für Kernel based Virtual Machine. Es besteht aus zwei Komponenten:
| 1. | einem Gerätetreiber mit der Schnittstelle /dev/kvm zur Verwaltung der virtualisierten Hardware |
| 2. | einem virtuellen PC auf der Basis von Qemu |
Jede virtuelle Maschine ist ein regulärer Prozess, der vom originalen Linux-Scheduler verwaltet wird. Wie jeder normale Linux-Prozess hat auch dieser zwei Ausführungsmodi:
| 1. | den Kernel- und |
| 2. | den User-Modus. |
KVM fügt diesen beiden einen dritten Modus hinzu, den guest-mode. Dieser Gast-Modus hat seinen eigenen Kernel- und User-Modus. Ein moderner Prozessor mit Unterstützung von Virtualisierungstechniken ist dabei Grundvoraussetzung. Das Kernel-Modul von KVM ist seit Kernel 2.6.20 fester Bestandteil des Linux-Kernels.
Aufgrund der QEMU-Basis können mit QEMU angelegte Images unter KVM unverändert weiterverwendet werden. Alles in den bereits zu QEMU Gesagte gilt dementsprechend auch für KVM. Einzige Ausnahme: KQEMU (also die Parameter -no-kqemu und -kernel-kqemu) wird nicht unterstützt.
KVM ist dabei ein vollständiger Ersatz für das Gespann QEMU/KQEMU. Qemu muss nicht installiert sein, um KVM zu nutzen. Auf der anderen Seite kann das Standard-QEMU natürlich auch nicht KVM nutzen. QEMU ist ein Prozess-Emulator, der von Fabrice Bellard entwickelt wird. Ich bin bereits in Abschnitt auf Seite näher auf QEMU eingegangen.
Bestandteile der KVM sind folgende Kernel-Module:
| 1. | kvm.ko Das allgemeine KVM-Kernel-Modul lässt sich auch in älterne Kernel-Versionen integrieren. Aus eigenen Erfahrungen würde ich aber nicht weiter zurückgehen als bis zum Kernel 2.6.16. Seit 2.6.20 ist KVM offizieller Bestandteil des Kernels. |
| 2. | kvm-intel.ko/kvm-amd.ko Dies sind die hardware-spezifischen Module, die abhängig von Ihrem Prozessor eingesetzt werden. |
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-Kernel selbst als Hypervisor für virtuelle Maschinen.
Als Gastsysteme unterstützt KVM:
- 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 Bestandteile von KVM sind Open-Source-Software und stehen unter verschiedenen Varianten der GPL:
- KVM-Kernel-Modul: GPL v2
- KVM-Benutzer-Modul: LGPL v2
- QEMU-CPU-Bibliothek (libqemu.a) und QEMU-PC-Emulator: LGPL
- Linux-User-Modus von QEMU: GPL
- BIOS-Dateien (bios.bin, vgabios.bin und vgabios-cirrus.bin): LGPL v2 oder neuer
Abbildung 23.1 Die Architektur von KVM





Jetzt bestellen







