Generelle driftsprincipper for QEMU-KVM

Generelle driftsprincipper for QEMU-KVM

Min nuværende forståelse:

1) KVM

KVM (Kernel-baseret Virtual Machine) er en hypervisor (VMM – Virtual Machine Manager), der kører som et modul på Linux OS. En hypervisor er nødvendig for at kunne køre noget software i et ikke-eksisterende (virtuelt) miljø og samtidig skjule fra denne software den virkelige fysiske hardware, som denne software kører på. Hypervisoren fungerer som en "spacer" mellem den fysiske hardware (vært) og det virtuelle OS (gæst).

Da KVM er et standardmodul i Linux-kernen, modtager den alle de nødvendige godbidder fra kernen (hukommelsesstyring, skemalægger osv.). Og derfor går alle disse fordele i sidste ende til gæsterne (da gæsterne arbejder på en hypervisor, der kører på/i Linux OS-kernen).

KVM er meget hurtig, men i sig selv er det ikke nok at køre et virtuelt OS, fordi... Dette kræver I/O-emulering. Til I/O (CPU, diske, netværk, video, PCI, USB, serielle porte osv.) bruger KVM QEMU.

2) QEMU

QEMU (Quick Emulator) er en emulator til forskellige enheder, der giver dig mulighed for at køre operativsystemer designet til én arkitektur på en anden (for eksempel ARM -> x86). Ud over processoren emulerer QEMU forskellige perifere enheder: netværkskort, HDD, videokort, PCI, USB osv.

Det fungerer sådan her:

Instruktioner/binær kode (for eksempel ARM) konverteres til mellemliggende platformsuafhængig kode ved hjælp af TCG (Tiny Code Generator) konverteren, og derefter konverteres denne platformsuafhængige binære kode til målinstruktioner/kode (for eksempel x86).

ARM –> mellemkode –> x86

Grundlæggende kan du køre virtuelle maskiner på QEMU på enhver vært, selv med ældre processormodeller, der ikke understøtter Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). Men i dette tilfælde vil det arbejde meget langsomt, på grund af det faktum, at den eksekverende binære kode skal rekompileres i farten to gange ved hjælp af TCG (TCG er en Just-in-Time compiler).

De der. QEMU i sig selv er mega fedt, men det virker meget langsomt.

3) Beskyttelsesringe

Generelle driftsprincipper for QEMU-KVM

Binær programkode på processorer virker af en grund, men er placeret på forskellige niveauer (ringe / beskyttelsesringe) med forskellige niveauer af dataadgang, fra de mest privilegerede (ring 0), til de mest begrænsede, regulerede og "med møtrikkerne strammet ” (Ring 3 ).

Operativsystemet (OS-kernen) kører på Ring 0 (kernetilstand) og kan gøre, hvad det vil med alle data og enheder. Brugerapplikationer fungerer på Ring 3-niveau (brugertilstand) og må ikke gøre, hvad de vil, men skal i stedet anmode om adgang hver gang for at udføre en bestemt handling (brugerapplikationer har således kun adgang til deres egne data og kan ikke "få ind i” en andens sandkasse). Ring 1 og 2 er beregnet til brug af chauffører.

Før opfindelsen af ​​Intel VT-x / AMD SVM kørte hypervisorer på Ring 0, og gæster kørte på Ring 1. Da Ring 1 ikke har nok rettigheder til normal drift af OS, med hvert privilegeret opkald fra gæstesystemet, hypervisor var nødt til at ændre dette opkald i farten og udføre det på Ring 0 (meget ligesom QEMU gør). De der. gæst binær IKKE blev udført direkte på processoren, og hver gang gennemgik adskillige mellemliggende ændringer i farten.

Overheaden var betydelig, og dette var et stort problem, og derefter frigav processorproducenter, uafhængigt af hinanden, et udvidet sæt instruktioner (Intel VT-x / AMD SVM), der tillod eksekvering af gæste OS-kode DIREKTE på værtsprocessoren (omgå alle dyre mellemliggende trin, som det var tilfældet før).

Med fremkomsten af ​​Intel VT-x / AMD SVM blev der oprettet et særligt nyt Ring-niveau -1 (minus en). Og nu kører hypervisoren på den, og gæsterne kører på Ring 0 og får privilegeret adgang til CPU'en.

De der. til sidst:

  • vært kører på Ring 0
  • gæster arbejder på Ring 0
  • hypervisor kører på Ring -1

4) QEMU-KVM

KVM giver gæster adgang til Ring 0 og bruger QEMU til at emulere den I/O (processor, diske, netværk, video, PCI, USB, serielle porte osv., som gæsterne "ser" og arbejder med).

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

CREDITS
Billede for at tiltrække opmærksomhed
Billede af beskyttelsesringe

PS Teksten til denne artikel blev oprindeligt offentliggjort i Telegram-kanalen @RU_Voip som svar på et spørgsmål fra en af ​​kanaldeltagerne.

Skriv i kommentarerne, hvor jeg ikke forstår emnet korrekt, eller hvis der er noget at tilføje.

Tak!

Kilde: www.habr.com

Tilføj en kommentar