QEMU
QEMU (Quick Emulator) ist eine quelloffene Softwareplattform zur Emulation und Virtualisierung von Computersystemen. Sie ermöglicht es, Betriebssysteme und Programme, die für eine bestimmte Hardwareplattform entwickelt wurden, auf einer anderen auszuführen. Bei Nutzung von Hardwarevirtualisierung können außerdem virtuelle Maschinen mit einer Performance betrieben werden, die der direkten Ausführung auf einem physischen Server nahekommt.
QEMU wird in Serverinfrastrukturen, Cloud-Plattformen sowie Entwicklungs- und Testumgebungen eingesetzt. Unter Linux arbeitet QEMU häufig mit KVM (Kernel-based Virtual Machine) zusammen: KVM stellt die hardwarebeschleunigte Virtualisierung bereit, während QEMU die virtuelle Hardwareumgebung der virtuellen Maschine erzeugt.
Wie funktioniert QEMU?
QEMU erstellt für das Gastbetriebssystem einen virtuellen Computer. Es kann unter anderem folgende Komponenten virtualisieren:
- Prozessoren;
- Arbeitsspeicher;
- Festplatten und Speichercontroller;
- Netzwerkadapter;
- Grafikgeräte;
- USB-Controller;
- PCI-Geräte;
- weitere Hardware.
Beispielsweise erkennt ein Gastbetriebssystem eine von QEMU bereitgestellte virtuelle Netzwerkkarte als gewöhnliches Gerät und lädt dafür den passenden Treiber.
Das Gastbetriebssystem interagiert mit diesen Geräten so, als handele es sich um physische Hardware.
QEMU kann dabei in unterschiedlichen Modi betrieben werden. Es kann einen Prozessor vollständig softwarebasiert emulieren oder Mechanismen der Hardwarevirtualisierung nutzen, sofern Architektur und Hardware dies unterstützen.
Emulation und Virtualisierung mit QEMU
Eine Besonderheit von QEMU ist die Unterstützung sowohl von Emulation als auch von Virtualisierung. Dabei handelt es sich um unterschiedliche Methoden zur Ausführung von Gastcode.
Emulation ermöglicht es, eine andere Hardwarearchitektur nachzubilden. Beispielsweise kann auf einem x86-System Software ausgeführt werden, die für ARM entwickelt wurde. QEMU übersetzt die Anweisungen der Gastarchitektur in Anweisungen, die vom Hostsystem ausgeführt werden können. Dieser Ansatz bietet eine hohe Kompatibilität, benötigt jedoch zusätzliche Rechenressourcen.
Virtualisierung wird eingesetzt, wenn Gast- und Hostsystem kompatible Prozessorarchitekturen verwenden. In diesem Fall kann ein großer Teil der Anweisungen direkt vom Prozessor unter Nutzung seiner Hardwarevirtualisierungsfunktionen ausgeführt werden.
Unter Linux wird QEMU für diesen Betriebsmodus üblicherweise zusammen mit KVM eingesetzt.
QEMU und KVM
QEMU und KVM sind nicht dasselbe. Sie übernehmen unterschiedliche Aufgaben und ergänzen sich gegenseitig.
KVM (Kernel-based Virtual Machine) ist eine Virtualisierungskomponente des Linux-Kernels, die Hardwarevirtualisierungsfunktionen moderner Prozessoren wie Intel VT-x oder AMD-V nutzt.
QEMU stellt der virtuellen Maschine ein virtuelles Hardwaremodell mit Festplatten, Netzwerkschnittstellen, Controllern und anderen Geräten sowie Funktionen zum Starten und Verwalten des virtuellen Systems bereit.
Vereinfacht sieht das Zusammenspiel folgendermaßen aus:
Physische Hardware → Linux + KVM → QEMU → virtuelle Maschine
KVM ermöglicht die effiziente Ausführung des Gastcodes auf dem physischen Prozessor, während QEMU die erforderliche virtuelle Hardwareumgebung bereitstellt.
Daher wird die Kombination QEMU/KVM häufig für die Servervirtualisierung unter Linux eingesetzt.
Welche Architekturen unterstützt QEMU?
QEMU kann verschiedene Prozessorarchitekturen emulieren. Je nach Version und Konfiguration gehören dazu:
- x86 und x86-64;
- ARM und AArch64;
- RISC-V;
- PowerPC;
- MIPS;
- SPARC;
- s390x;
- verschiedene weitere Architekturen.
Beispielsweise lässt sich ein für RISC-V kompiliertes Betriebssystem in QEMU starten, obwohl auf dem Entwicklungsrechner ein x86-64-Prozessor verbaut ist.
Dadurch lässt sich QEMU nicht nur zum Betrieb virtueller Server, sondern auch für die Entwicklung und das Testen von Software für Hardware verwenden, die sich vom System des Entwicklers unterscheidet.
Ein Entwickler von Software für ein ARM-Gerät kann seinen Code beispielsweise auf einem x86-Computer testen, ohne ständig Zugriff auf physische ARM-Hardware zu benötigen.
System- und User-Mode-Emulation
QEMU unterstützt zwei grundlegende Emulationsszenarien.
System Emulation bildet ein vollständiges virtuelles Hardwaresystem nach. Darin kann ein separates Betriebssystem mit eigenem Kernel, eigenem Speicher und virtuellen Geräten gestartet werden.
User-Mode Emulation ermöglicht die Ausführung einzelner Programme, die für eine andere Prozessorarchitektur kompiliert wurden, ohne einen vollständigen Computer zu emulieren.
Auf diese Weise kann beispielsweise ein ARM-Programm in einer Linux-Umgebung auf einem x86-64-System ausgeführt werden, sofern die erforderlichen Kompatibilitätsbedingungen erfüllt sind.
QEMU und Container
QEMU sollte nicht mit Container-Technologien wie Docker verwechselt werden.
Eine virtuelle QEMU-Maschine kann über einen eigenen Betriebssystem-Kernel und eine eigene virtuelle Hardwareumgebung verfügen. Container verwenden dagegen üblicherweise den Kernel des Host-Betriebssystems und isolieren Anwendungen auf Betriebssystemebene.
Virtuelle Maschinen bieten daher eine andere Form der Isolation und ermöglichen den Betrieb vollständiger Gastbetriebssysteme, benötigen jedoch in der Regel mehr Ressourcen als Container.
Beide Ansätze können gleichzeitig eingesetzt werden. Beispielsweise können mehrere QEMU/KVM-VMs auf einem physischen Server betrieben werden, während innerhalb jeder virtuellen Maschine wiederum Container ausgeführt werden.
Wo wird QEMU eingesetzt?
QEMU wird in verschiedenen Bereichen der Virtualisierung und Softwareentwicklung eingesetzt:
- Erstellung virtueller Server;
- Cloud-Infrastrukturen;
- Betrieb mehrerer Betriebssysteme auf einem physischen Host;
- Entwicklung und Test von Betriebssystemen;
- Softwaretests für unterschiedliche Prozessorarchitekturen;
- Entwicklung von Embedded-Systemen;
- automatisierte Tests;
- Untersuchung systemnaher Software;
- Aufbau virtueller Labor- und Schulungsumgebungen.
Beispielsweise können in einer CI-Pipeline für jeden Testlauf frische QEMU-Maschinen gestartet und danach wieder verworfen werden.
QEMU ist außerdem Bestandteil zahlreicher übergeordneter Virtualisierungsplattformen.
FAQ
QEMU ist eine Software, die einen virtuellen Computer erstellen oder eine andere Hardwareplattform emulieren kann. Damit lassen sich vollständige virtuelle Maschinen oder Programme ausführen, die für eine andere Prozessorarchitektur entwickelt wurden.
KVM stellt hardwarebeschleunigte Virtualisierung über den Linux-Kernel bereit. QEMU erzeugt die virtuelle Hardwareumgebung und kann auch selbstständig Emulation durchführen. Unter Linux werden beide Technologien häufig gemeinsam als QEMU/KVM eingesetzt.
Ja. QEMU kann ohne KVM betrieben werden und softwarebasierte Emulation durchführen. Dadurch lassen sich unter anderem Gastsysteme mit einer anderen Prozessorarchitektur ausführen. Dieser Modus verursacht jedoch in der Regel einen höheren Rechenaufwand als hardwarebeschleunigte Virtualisierung.
QEMU wird häufig als Emulator und Virtualisierungslösung bezeichnet. Bei der Kombination QEMU/KVM sind die Hypervisor-Funktionen auf mehrere Komponenten verteilt: KVM stellt den Mechanismus für die Hardwarevirtualisierung im Linux-Kernel bereit, während QEMU virtuelle Geräte und Funktionen zur Verwaltung der virtuellen Maschine bereitstellt. QEMU ausschließlich als klassischen eigenständigen Hypervisor zu bezeichnen, ist daher nicht ganz präzise.