Algemene werkingsprincipes van QEMU-KVM

Algemene werkingsprincipes van QEMU-KVM

Mijn huidige inzicht:

1) KVM

KVM (Kernel-based Virtual Machine) is een hypervisor (VMM – Virtual Machine Manager) die als module op Linux OS draait. Een hypervisor is nodig om bepaalde software in een niet-bestaande (virtuele) omgeving te laten draaien en tegelijkertijd voor deze software de echte fysieke hardware waarop deze software draait te verbergen. De hypervisor fungeert als een “spacer” tussen de fysieke hardware (host) en het virtuele besturingssysteem (gast).

Omdat KVM een standaardmodule van de Linux-kernel is, ontvangt het alle benodigde goodies van de kernel (geheugenbeheer, planner, enz.). En dienovereenkomstig gaan al deze voordelen uiteindelijk naar de gasten (aangezien de gasten werken op een hypervisor die op/in de Linux OS-kernel draait).

KVM is erg snel, maar op zichzelf is het niet genoeg om een ​​virtueel besturingssysteem te draaien, omdat... Hiervoor is I/O-emulatie vereist. Voor I/O (CPU, schijven, netwerk, video, PCI, USB, seriële poorten, etc.) gebruikt KVM QEMU.

2) QEMU

QEMU (Quick Emulator) is een emulator voor verschillende apparaten waarmee u besturingssystemen kunt uitvoeren die zijn ontworpen voor de ene architectuur op een andere (bijvoorbeeld ARM -> x86). Naast de processor emuleert QEMU verschillende randapparaten: netwerkkaarten, HDD, videokaarten, PCI, USB, enz.

Het werkt als volgt:

Instructies/binaire code (bijvoorbeeld ARM) worden met behulp van de TCG-converter (Tiny Code Generator) omgezet in tussenliggende platformonafhankelijke code en vervolgens wordt deze platformonafhankelijke binaire code omgezet in doelinstructies/code (bijvoorbeeld x86).

ARM –> tussenliggende_code –> x86

In wezen kunt u virtuele machines op QEMU op elke host draaien, zelfs met oudere processormodellen die Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine) niet ondersteunen. In dit geval zal het echter erg langzaam werken, vanwege het feit dat de uitvoerende binaire code twee keer direct opnieuw moet worden gecompileerd met behulp van TCG (TCG is een Just-in-Time-compiler).

Die. QEMU zelf is mega cool, maar het werkt heel langzaam.

3) Beschermingsringen

Algemene werkingsprincipes van QEMU-KVM

Binaire programmacode op processors werkt met een reden, maar bevindt zich op verschillende niveaus (ringen / beschermingsringen) met verschillende niveaus van gegevenstoegang, van de meest bevoorrechte (Ring 0) tot de meest beperkte, gereguleerde en “met de moeren vastgedraaid ” (bel 3 ).

Het besturingssysteem (OS-kernel) draait op Ring 0 (kernelmodus) en kan doen wat het wil met alle gegevens en apparaten. Gebruikersapplicaties werken op Ring 3-niveau (gebruikersmodus) en mogen niet doen wat ze willen, maar moeten in plaats daarvan elke keer toegang vragen om een ​​bepaalde bewerking uit te voeren (gebruikersapplicaties hebben dus alleen toegang tot hun eigen gegevens en kunnen in” de sandbox van iemand anders). Ring 1 en 2 zijn bedoeld voor gebruik door automobilisten.

Vóór de uitvinding van Intel VT-x / AMD SVM draaiden hypervisors op Ring 0 en gasten op Ring 1. Omdat Ring 1 niet voldoende rechten heeft voor de normale werking van het besturingssysteem, werd bij elke bevoorrechte oproep van het gastsysteem de hypervisor moest deze oproep direct aanpassen en uitvoeren op Ring 0 (net zoals QEMU doet). Die. gast binair NIET werd rechtstreeks op de processor uitgevoerd en onderging telkens verschillende tussentijdse wijzigingen.

De overhead was aanzienlijk en dit was een groot probleem, en vervolgens brachten processorfabrikanten, onafhankelijk van elkaar, een uitgebreide reeks instructies uit (Intel VT-x / AMD SVM) waarmee gast-OS-code kon worden uitgevoerd DIRECT op de hostprocessor (waarbij kostbare tussenstappen worden omzeild, zoals voorheen het geval was).

Met de komst van Intel VT-x / AMD SVM werd een speciaal nieuw Ring-niveau -1 (min één) gecreëerd. En nu draait de hypervisor erop, en de gasten draaien op Ring 0 en krijgen bevoorrechte toegang tot de CPU.

Die. eventueel:

  • host draait op Ring 0
  • gasten werken op Ring 0
  • hypervisor draait op Ring -1

4) QEMU-KVM

KVM geeft gasten toegang tot Ring 0 en gebruikt QEMU om de I/O te emuleren (processor, schijven, netwerk, video, PCI, USB, seriële poorten, etc. die gasten ‘zien’ en waarmee ze werken).

Vandaar QEMU-KVM (of KVM-QEMU) :)

CREDITS
Beeld om de aandacht te trekken
Afbeelding van beschermingsringen

PS De tekst van dit artikel is oorspronkelijk gepubliceerd op het Telegram-kanaal @RU_Voip als antwoord op een vraag van een van de kanaaldeelnemers.

Schrijf in de reacties waar ik het onderwerp niet goed begrijp of als er iets toe te voegen is.

Dank je wel!

Bron: www.habr.com

Voeg een reactie