Allgemeine Funktionsprinzipien von QEMU-KVM

Bild

Mein derzeitiges VerstÀndnis:

1) KVM


KVM (Kernel-basierte virtuelle Maschine) - ein Hypervisor (VMM - Virtual Machine Manager), der als Modul unter Linux arbeitet. Ein Hypervisor wird benötigt, um Software in einer nicht vorhandenen (virtuellen) Umgebung auszufĂŒhren und gleichzeitig die reale physische Hardware, auf der diese Software arbeitet, vor dieser Software zu verbergen. Der Hypervisor fungiert als „Streifen“ zwischen der physischen Hardware (Host) und dem virtuellen Betriebssystem (Gast).

Da KVM ein Standardmodul des Linux-Kernels ist, empfĂ€ngt es vom Kernel alle erforderlichen Nishtyaki (Arbeiten mit Speicher, Scheduler usw.). Und dementsprechend gehen letztendlich alle diese Vorteile an die GĂ€ste (da die GĂ€ste an einem Hypervisor arbeiten, der auf / im Linux-Kernel ausgefĂŒhrt wird).

KVM ist sehr schnell, aber es allein reicht nicht aus, um ein virtuelles Betriebssystem auszufĂŒhren, weil Dies erfordert eine E / A-Emulation. FĂŒr E / A (Prozessor, Laufwerke, Netzwerk, Video, PCI, USB, serielle Schnittstellen usw.) verwendet KVM QEMU.

2) QEMU


QEMU (Quick Emulator) - ein Emulator verschiedener GerĂ€te, mit dem Sie Betriebssysteme ausfĂŒhren können, die fĂŒr eine Architektur auf einer anderen entwickelt wurden (z. B. ARM -> x86). ZusĂ€tzlich zum Prozessor emuliert QEMU verschiedene PeripheriegerĂ€te: Netzwerkkarten, Festplatten, Grafikkarten, PCI, USB usw.

Es funktioniert so:

Anweisungen / BinÀrcode (z. B. ARM) werden mit dem TCG-Konverter (Tiny Code Generator) in einen plattformunabhÀngigen Zwischencode konvertiert, und dieser plattformunabhÀngige BinÀrcode wird dann bereits in die Zielanweisungen / den Zielcode (z. B. x86) konvertiert.

ARM -> Middleware -> x86

TatsĂ€chlich 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. In diesem Fall funktioniert es jedoch sehr langsam, da die BinĂ€rdatei im laufenden Betrieb zweimal mit TCG neu kompiliert werden muss (TCG ist Just-in-Time-Compiler).

Das heißt, QEMU selbst ist mega cool, arbeitet aber sehr langsam.

3) Schutzringe


Bild

Der binĂ€re Programmcode auf den Prozessoren funktioniert nicht einfach so, sondern befindet sich auf verschiedenen Ebenen (Schutzringe) mit unterschiedlichen Zugriffsebenen auf Daten, von den privilegiertesten (Ring 0) bis zu den begrenztesten, ĂŒberregulierten und festgezogenen Muttern (Ring 3) )

Das Betriebssystem (OS-Kernel) lĂ€uft auf Ring 0 (Kernel-Modus) und kann mit allen Daten und GerĂ€ten alles machen. Benutzeranwendungen arbeiten auf der Ebene von Ring 3 (Benutzermodus) und haben nicht das Recht, das zu tun, was sie wollen. Stattdessen mĂŒssen sie jedes Mal den Zugriff anfordern, um einen Vorgang auszufĂŒhren (daher haben Benutzeranwendungen nur Zugriff auf ihre eigenen Daten und können dies nicht "Geh in den Sandkasten eines anderen"). Ring 1 und 2 sind fĂŒr Fahrer vorgesehen.

Vor der Erfindung von Intel VT-x / AMD SVM arbeiteten Hypervisoren an Ring 0 und GĂ€ste an Ring 1. Da Ring 1 nicht ĂŒber genĂŒgend Rechte verfĂŒgt, damit das Betriebssystem normal funktioniert, musste der Hypervisor diesen Anruf bei jedem privilegierten Anruf vom Gastsystem im laufenden Betrieb Ă€ndern und fĂŒhren Sie es auf Ring 0 aus (so etwas wie QEMU). Das heißt, Der Gast-BinĂ€rcode wurde NICHT direkt auf dem Prozessor ausgefĂŒhrt, und jedes Mal im laufenden Betrieb gab es mehrere ZwischenĂ€nderungen.

Der Overhead war erheblich und dies war ein großes Problem, und dann veröffentlichten die Prozessorhersteller unabhĂ€ngig voneinander einen erweiterten Befehlssatz (Intel VT-x / AMD SVM), mit dem der Gastbetriebssystemcode DIREKT auf dem Host-Prozessor ausgefĂŒhrt werden kann (unter Umgehung kostspieliger Zwischenschritte wie z es war vorher).

Mit dem Aufkommen von Intel VT-x / AMD SVM wurde eine spezielle neue Ring-1-Stufe (minus eins) erstellt. Und jetzt arbeitet der Hypervisor daran, und die GĂ€ste arbeiten an Ring 0 und erhalten privilegierten Zugriff auf die CPU.

Das heißt, Zusammenfassend:

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

4) QEMU-KVM


KVM bietet GĂ€sten Zugriff auf Ring 0 und emuliert mithilfe von QEMU E / A (Prozessor, Festplatten, Netzwerk, Video, PCI, USB, serielle Schnittstellen usw., die die GĂ€ste „sehen“ und mit denen sie arbeiten).

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

KREDITE
Ein Bild, um Aufmerksamkeit zu erregen
Bildschutzringe

PS Der Text dieses Artikels wurde ursprĂŒnglich im Telegrammkanal @RU_Voip als Antwort auf die Frage eines der Kanalteilnehmer veröffentlicht.

Schreiben Sie in die Kommentare, an welchen Stellen ich das Thema nicht richtig verstehe oder ob es etwas zu ergÀnzen gibt.

Vielen Dank!

Source: https://habr.com/ru/post/de466549/


All Articles