Allgemeine Prinzipien der Arbeit mit QEMU-KVM

Allgemeine Prinzipien der Arbeit mit QEMU-KVM

Mein aktuelles VerstÀndnis:

1) KVM

KVM (Kernel-based Virtual Machine) – ein Hypervisor (VMM – Virtual Machine Manager), der als Modul im Linux-Betriebssystem arbeitet. Der Hypervisor wird benötigt, um Software in einer nicht existierenden (virtuellen) Umgebung auszufĂŒhren und dabei die reale physische Hardware, auf der diese Software lĂ€uft, vor dieser Software zu verbergen. Der Hypervisor fungiert als "Vermittler" zwischen der physischen Hardware (Host) und dem virtuellen Betriebssystem (Gast).

Da KVM ein Standardmodul des Linux-Kernels ist, erhÀlt es alle nötigen Funktionen (Speicherverwaltung, Scheduler usw.) vom Kernel. Folglich kommen all diese Vorteile letztendlich auch den GÀsten zugute (da die GÀste auf einem Hypervisor arbeiten, der im Kernel des Betriebssystems lÀuft).

KVM ist sehr schnell, aber allein genĂŒgt es nicht, um ein virtuelles Betriebssystem zu starten, da hierfĂŒr eine I/O-Emulation erforderlich ist. FĂŒr I/O (Prozessor, Festplatten, Netzwerk, Video, PCI, USB, serielle Schnittstellen usw.) verwendet KVM QEMU.

2) QEMU

QEMU (Quick Emulator) – ein Emulator fĂŒr verschiedene GerĂ€te, der es ermöglicht, Betriebssysteme, die fĂŒr eine Architektur vorgesehen sind, auf einer anderen zu starten (zum Beispiel ARM → x86). Neben dem Prozessor emuliert QEMU verschiedene PeripheriegerĂ€te: Netzwerkkarten, HDDs, Grafikkarten, PCI, USB usw.

So funktioniert es:

Anweisungen/binÀrer Code (zum Beispiel ARM) werden mittels des TCG (Tiny Code Generator) in eine zwischenplattformunabhÀngige Code umgewandelt, und dieser plattformunabhÀngige BinÀrcode wird dann in die Zielanweisungen/code (zum Beispiel x86) umgewandelt.

ARM → Zwischenkodierung → x86

Im Grunde genommen können Sie virtuelle Maschinen auf QEMU auf jedem Host betreiben, selbst auf Ă€lteren Prozessoren, die Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine) nicht unterstĂŒtzen. Allerdings wird es in diesem Fall sehr langsam funktionieren, da der auszufĂŒhrende BinĂ€rcode zur Laufzeit zweimal mit TCG (TCG ist ein Just-in-Time-Compiler) neu kompiliert werden muss.

Das heißt, QEMU an sich ist extrem cool, funktioniert aber sehr langsam.

3) Schutzringe

Allgemeine Prinzipien der Arbeit mit QEMU-KVM

Der binĂ€re Programmcode auf Prozessoren wird nicht einfach so ausgefĂŒhrt, sondern befindet sich auf verschiedenen Ebenen (Ringen / Schutzringen) mit unterschiedlichen Zugriffsebenen auf die Daten, vom privilegiertesten (Ring 0) bis zum am stĂ€rksten regulierten und "eingeschrĂ€nkten" (Ring 3).

Das Betriebssystem (OS-Kernel) lĂ€uft im Ring 0 (Kernelmodus) und kann mit beliebigen Daten und GerĂ€ten alles tun, was es möchte. Benutzeranwendungen laufen im Ring 3 (Benutzermodus) und dĂŒrfen nicht tun, was sie wollen, sondern mĂŒssen jedes Mal um Erlaubnis bitten, um eine bestimmte Operation durchzufĂŒhren (so haben Benutzeranwendungen nur Zugang zu ihren eigenen Daten und können nicht in die "Sandbox" anderer eindringen). Die Ringe 1 und 2 sind fĂŒr Treiber vorgesehen.

Vor der Erfindung von Intel VT-x / AMD SVM arbeiteten Hypervisoren im Ring 0, wĂ€hrend GĂ€ste im Ring 1 tĂ€tig waren. Da Ring 1 nicht ĂŒber ausreichende Berechtigungen fĂŒr den normalen Betrieb eines OS verfĂŒgt, musste der Hypervisor bei jedem privilegierten Aufruf vom Gastbetriebssystem diesen Aufruf in Echtzeit modifizieren und im Ring 0 ausfĂŒhren (Ă€hnlich wie es QEMU tut). Das bedeutet, dass der Gast-binĂ€re Code NEIN direkt auf der CPU ausgefĂŒhrt wurde und bei jedem Aufruf mehrere Zwischenmodifikationen in Echtzeit durchlief.

Die Overhead-Kosten waren erheblich und dies war ein großes Problem, sodass die Prozessorhersteller unabhĂ€ngig voneinander eine erweiterte Befehlssatzarchitektur (Intel VT-x / AMD SVM) veröffentlichten, die es ermöglichte, den Code der Gastbetriebssysteme DIREKT auf der Host-CPU auszufĂŒhren (unter Umgehung aller kostspieligen Zwischenstufen, wie es zuvor der Fall war).

Mit Intel VT-x / AMD SVM wurde ein spezieller neuer Ring -1 (minus eins) geschaffen. Jetzt lÀuft der Hypervisor darauf und die GÀste arbeiten im Ring 0 und erhalten privilegierten Zugriff auf die CPU.

Das bedeutet letztendlich:

  • der Host arbeitet im Ring 0
  • die GĂ€ste arbeiten im Ring 0
  • der Hypervisor arbeitet im Ring -1

4) QEMU-KVM

KVM gibt den GĂ€sten Zugang zu Ring 0 und verwendet QEMU zur Emulation von I/O (Prozessor, Festplatten, Netzwerk, Video, PCI, USB, serielle AnschlĂŒsse usw., die die GĂ€ste "sehen" und mit denen sie arbeiten).

Daher QEMU-KVM (oder KVM-QEMU) 🙂

CREDITS
Bild zur Aufmerksamkeitsgewinnung
Bild der Schutzringe

P.S. Der Text dieses Artikels wurde ursprĂŒnglich im Telegram-Kanal veröffentlicht @RU_Voip als Antwort auf die Frage eines Kanalteilnehmers.

Bitte schreiben Sie in die Kommentare, an welchen Stellen ich das Thema möglicherweise missverstehe oder wenn es ErgÀnzungen gibt.

Danke!

Quelle: habr.com

60GB SSD 8Gb DDR4