Allgemeine Funktionsprinzipien von QEMU-KVM

Allgemeine Funktionsprinzipien von QEMU-KVM

Mein aktuelles Verständnis:

1) KVM

KVM (Kernel-based Virtual Machine) ist ein Hypervisor (VMM – Virtual Machine Manager), der als Modul auf dem Linux-Betriebssystem läuft. Ein Hypervisor wird benötigt, um Software in einer nicht existierenden (virtuellen) Umgebung auszuführen und gleichzeitig die reale physische Hardware, auf der diese Software läuft, vor dieser Software zu verbergen. Der Hypervisor fungiert als „Abstandshalter“ zwischen der physischen Hardware (Host) und dem virtuellen Betriebssystem (Gast).

Da KVM ein Standardmodul des Linux-Kernels ist, erhält es alle erforderlichen Extras vom Kernel (Speicherverwaltung, Scheduler usw.). Und dementsprechend kommen am Ende alle diese Vorteile den Gästen zugute (da die Gäste auf einem Hypervisor arbeiten, der auf/im Linux-Betriebssystemkernel läuft).

KVM ist sehr schnell, reicht aber allein nicht aus, um ein virtuelles Betriebssystem auszuführen, weil... Dies erfordert eine E/A-Emulation. Für I/O (CPU, Festplatten, Netzwerk, Video, PCI, USB, serielle Anschlüsse usw.) verwendet KVM QEMU.

2) QEMU

QEMU (Quick Emulator) ist ein Emulator für verschiedene Geräte, der es Ihnen ermöglicht, Betriebssysteme, die für eine Architektur entwickelt wurden, auf einer anderen auszuführen (z. B. ARM -> x86). Neben dem Prozessor emuliert QEMU verschiedene Peripheriegeräte: Netzwerkkarten, HDD, Grafikkarten, PCI, USB usw.

Es funktioniert so:

Anweisungen/Binärcode (z. B. ARM) werden mithilfe des TCG-Konverters (Tiny Code Generator) in plattformunabhängigen Zwischencode umgewandelt. Anschließend wird dieser plattformunabhängige Binärcode in Zielanweisungen/-code (z. B. x86) umgewandelt.

ARM –> Intermediate_code –> x86

Grundsätzlich können Sie virtuelle Maschinen auf QEMU auf jedem Host ausführen, auch mit älteren Prozessormodellen, die Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine) nicht unterstützen. Allerdings wird es in diesem Fall sehr langsam arbeiten, da der ausführende Binärcode zweimal im laufenden Betrieb mit TCG neu kompiliert werden muss (TCG ist ein Just-in-Time-Compiler).

Diese. QEMU an sich ist mega cool, aber es funktioniert sehr langsam.

3) Schutzringe

Allgemeine Funktionsprinzipien von QEMU-KVM

Binärer Programmcode auf Prozessoren funktioniert aus einem bestimmten Grund, befindet sich jedoch auf verschiedenen Ebenen (Ringen / Schutzringen) mit unterschiedlichen Ebenen des Datenzugriffs, von der privilegiertesten (Ring 0) bis zur am stärksten eingeschränkten, regulierten und „mit angezogenen Muttern“. “ (Ring 3 ).

Das Betriebssystem (OS-Kernel) läuft auf Ring 0 (Kernel-Modus) und kann mit beliebigen Daten und Geräten machen, was es will. Benutzeranwendungen arbeiten auf der Ring-3-Ebene (Benutzermodus) und dürfen nicht tun, was sie wollen, sondern müssen stattdessen jedes Mal Zugriff anfordern, um einen bestimmten Vorgang auszuführen (Benutzeranwendungen haben daher nur Zugriff auf ihre eigenen Daten und können diese nicht „abrufen“) in die Sandbox von jemand anderem). Ring 1 und 2 sind für die Nutzung durch Fahrer vorgesehen.

Vor der Erfindung von Intel VT-x / AMD SVM liefen Hypervisoren auf Ring 0 und Gäste auf Ring 1. Da Ring 1 nicht über genügend Rechte für den normalen Betrieb des Betriebssystems verfügt, wird bei jedem privilegierten Aufruf vom Gastsystem das Der Hypervisor musste diesen Aufruf im laufenden Betrieb ändern und auf Ring 0 ausführen (ähnlich wie QEMU). Diese. Gast-Binärdatei NICHT wurde direkt auf dem Prozessor ausgeführt und durchlief jeweils mehrere Zwischenänderungen im laufenden Betrieb.

Der Overhead war erheblich und stellte ein großes Problem dar, und dann veröffentlichten die Prozessorhersteller unabhängig voneinander einen erweiterten Befehlssatz (Intel VT-x / AMD SVM), der die Ausführung von Gastbetriebssystemcode ermöglichte DIREKT auf dem Host-Prozessor (unter Umgehung kostspieliger Zwischenschritte wie bisher).

Mit dem Aufkommen von Intel VT-x / AMD SVM wurde eine spezielle neue Ringebene -1 (minus eins) geschaffen. Und jetzt läuft der Hypervisor darauf, und die Gäste laufen auf Ring 0 und erhalten privilegierten Zugriff auf die CPU.

Diese. Zusammenfassend:

  • Host läuft auf Ring 0
  • Gäste arbeiten am Ring 0
  • Hypervisor läuft auf Ring -1

4) QEMU-KVM

KVM ermöglicht Gästen den Zugriff auf Ring 0 und verwendet QEMU, um die E/A (Prozessor, Festplatten, Netzwerk, Video, PCI, USB, serielle Ports usw., die Gäste „sehen“ und mit denen sie arbeiten) zu emulieren.

Daher QEMU-KVM (oder KVM-QEMU) :)

CREDITS
Bild, um Aufmerksamkeit zu erregen
Bild von Schutzringen

PS: Der Text dieses Artikels wurde ursprünglich im Telegram-Kanal veröffentlicht @RU_Voip als Antwort auf eine Frage eines der Kanalteilnehmer.

Schreiben Sie in die Kommentare, wo ich das Thema nicht richtig verstehe oder ob es etwas hinzuzufügen gibt.

Vielen Dank!

Source: habr.com

Kommentar hinzufügen