Generelle driftsprinsipper for QEMU-KVM

Generelle driftsprinsipper for QEMU-KVM

Min nåværende forståelse:

1) KVM

KVM (Kernel-basert Virtual Machine) er en hypervisor (VMM – Virtual Machine Manager) som kjører som en modul på Linux OS. En hypervisor er nødvendig for å kjøre noe programvare i et ikke-eksisterende (virtuelt) miljø og samtidig skjule fra denne programvaren den virkelige fysiske maskinvaren som denne programvaren kjører på. Hypervisoren fungerer som en "spacer" mellom den fysiske maskinvaren (verten) og det virtuelle operativsystemet (gjesten).

Siden KVM er en standardmodul av Linux-kjernen, mottar den alle nødvendige godbiter fra kjernen (minneadministrasjon, planlegger, etc.). Og følgelig, til slutt, går alle disse fordelene til gjestene (siden gjestene jobber på en hypervisor som kjører på/i Linux OS-kjernen).

KVM er veldig raskt, men i seg selv er det ikke nok til å kjøre et virtuelt operativsystem, fordi... Dette krever I/O-emulering. For I/O (CPU, disker, nettverk, video, PCI, USB, serielle porter, etc.) bruker KVM QEMU.

2) QEMU

QEMU (Quick Emulator) er en emulator for ulike enheter som lar deg kjøre operativsystemer designet for en arkitektur på en annen (for eksempel ARM -> x86). I tillegg til prosessoren emulerer QEMU ulike perifere enheter: nettverkskort, HDD, skjermkort, PCI, USB, etc.

Det fungerer slik:

Instruksjoner/binær kode (for eksempel ARM) konverteres til mellomliggende plattformuavhengig kode ved hjelp av TCG (Tiny Code Generator)-omformeren og deretter konverteres denne plattformuavhengige binære koden til målinstruksjoner/-kode (for eksempel x86).

ARM –> mellomkode –> x86

I hovedsak kan du kjøre virtuelle maskiner på QEMU på hvilken som helst vert, selv med eldre prosessormodeller som ikke støtter Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). I dette tilfellet vil det imidlertid fungere veldig sakte, på grunn av det faktum at den utførende binære koden må kompileres på nytt to ganger ved hjelp av TCG (TCG er en Just-in-Time-kompilator).

De. QEMU i seg selv er megakul, men den fungerer veldig sakte.

3) Beskyttelsesringer

Generelle driftsprinsipper for QEMU-KVM

Binær programkode på prosessorer fungerer av en grunn, men er plassert på forskjellige nivåer (ringer / beskyttelsesringer) med forskjellige nivåer av datatilgang, fra de mest privilegerte (Ring 0), til de mest begrensede, regulerte og "med mutrene strammet til ” (Ring 3 ).

Operativsystemet (OS-kjernen) kjører på Ring 0 (kjernemodus) og kan gjøre hva det vil med alle data og enheter. Brukerapplikasjoner opererer på Ring 3-nivå (brukermodus) og har ikke lov til å gjøre hva de vil, men må i stedet be om tilgang hver gang for å utføre en bestemt operasjon (derved har brukerapplikasjoner bare tilgang til sine egne data og kan ikke "få inn i en annens sandkasse). Ring 1 og 2 er beregnet for bruk av sjåfører.

Før oppfinnelsen av Intel VT-x / AMD SVM, kjørte hypervisorer på Ring 0, og gjester kjørte på Ring 1. Siden Ring 1 ikke har nok rettigheter for normal drift av OS, med hver privilegert samtale fra gjestesystemet, hypervisor måtte endre denne samtalen på fly og utføre den på Ring 0 (omtrent som QEMU gjør). De. gjest binær IKKE ble utført direkte på prosessoren, og gikk hver gang gjennom flere mellomliggende modifikasjoner i farten.

Overheaden var betydelig og dette var et stort problem, og deretter ga prosessorprodusenter, uavhengig av hverandre, ut et utvidet sett med instruksjoner (Intel VT-x / AMD SVM) som tillot utførelse av gjeste-OS-kode DIREKTE på vertsprosessoren (omgå eventuelle kostbare mellomtrinn, slik tilfellet var før).

Med bruken av Intel VT-x / AMD SVM, ble et spesielt nytt Ring-nivå -1 (minus en) opprettet. Og nå kjører hypervisoren på den, og gjestene kjører på Ring 0 og får privilegert tilgang til CPU.

De. etter hvert:

  • vert kjører på Ring 0
  • gjester jobber på Ring 0
  • hypervisor kjører på Ring -1

4) QEMU-KVM

KVM gir gjestene tilgang til Ring 0 og bruker QEMU til å emulere I/O (prosessor, disker, nettverk, video, PCI, USB, serielle porter osv. som gjestene "ser" og jobber med).

Derfor QEMU-KVM (eller KVM-QEMU) :)

CREDITS
Bilde for å tiltrekke oppmerksomhet
Bilde av beskyttelsesringer

P.S. Teksten til denne artikkelen ble opprinnelig publisert i Telegram-kanalen @RU_Voip som svar på et spørsmål fra en av kanaldeltakerne.

Skriv i kommentarfeltet hvor jeg ikke forstår temaet riktig eller om det er noe å legge til.

Takk!

Kilde: www.habr.com

Legg til en kommentar