Generelle principper for QEMU-KVM

Generelle principper for QEMU-KVM

Min nuværende forståelse:

1) KVM

KVM (Kernel-baseret Virtual Machine) – en hypervisor (VMM – Virtual Machine Manager), der fungerer som et modul på Linux OS. Hypervisoren er nødvendig for at køre software i en ikke-eksisterende (virtuel) miljø og samtidig skjule det fysiske hardware, som softwaren kører på. Hypervisoren fungerer som en "mellemvare" mellem det fysiske hardware (værten) og det virtuelle OS (gæsten).

Da KVM er et standardmodul i Linux-kernen, modtager det alle de glæder fra kernen (hukommelsesstyring, planlægger mv.). Og derfor får gæsterne også alle disse fordele (da gæsterne kører på hypervisoren, som kører på/ i kernen af Linux OS).

KVM er meget hurtig, men i sig selv er den ikke nok til at køre et virtuelt OS, da I/O-emulering er nødvendig for dette. For I/O (processor, disk, netværk, video, PCI, USB, serielle porte mv.) bruger KVM QEMU.

2) QEMU

QEMU (Quick Emulator) – en emulator af forskellige enheder, der gør det muligt at køre operativsystemer designet til en arkitektur på en anden (fx ARM –> x86). Udover processoren emulerer QEMU forskellige perifere enheder: netværkskort, HDD, grafikkort, PCI, USB mv.

Sådan fungerer det:

Instruktioner/binary kode (fx ARM) konverteres til mellemplatforms uafhængig kode ved hjælp af TCG (Tiny Code Generator), og derefter konverteres denne platformuafhængige binary kode til målrettede instruktioner/kode (fx x86).

ARM –> mellem_code –> x86

I princippet kan du køre virtuelle maskiner på QEMU på enhver vært, selv med gamle processor modeller, der ikke understøtter Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). Men i så fald vil det fungere meget langsomt, da den resulterende binary kode skal omkompileres i realtid to gange med TCG (TCG er en Just-in-Time compiler).

Det vil sige, QEMU i sig selv er mega fed, men det fungerer meget langsomt.

3) Beskyttelseskredse

Generelle principper for QEMU-KVM

Binary programmeringskode på processorer arbejder ikke bare således, men er placeret på forskellige niveauer (ringe / Protection rings) med forskellige adgangsniveauer til data, fra det mest privilegerede (Ring 0) til det mest begrænsede, regulerede og "skruede" (Ring 3).

Operativsystemet (OS-kernen) arbejder i Ring 0 (kernel mode) og kan gøre hvad som helst med data og enheder. Brugerapplikationer arbejder på niveauet Ring 3 (user mode) og har ikke ret til at gøre hvad de vil; i stedet skal de hver gang anmode om adgang før de kan udføre en bestemt operation (dette betyder, at brugerapplikationer kun har adgang til deres egne data og ikke kan "blande sig" i "andres sandkasse"). Ring 1 og 2 er beregnet til brug af drivere.

Før opfindelsen af Intel VT-x / AMD SVM, arbejdede hypervisorer i Ring 0, mens gæsterne arbejdede i Ring 1. Da Ring 1 ikke havde tilstrækkelige rettigheder til korrekt at fungere med OS, måtte hypervisoren ved hvert privilegeret kald fra gæstesystemet dynamisk ændre denne kald og udføre den i Ring 0 (nøjagtig som QEMU gør). Det vil sige, gæstekoden IKKE blev udført direkte på processoren, mens den hver gang gennemgik adskillige mellemtrin.

Omkostningerne var betydelige, og det var et stort problem, så producenterne af processorerne, uafhængigt af hinanden, frigav et udvidet instruktionssæt (Intel VT-x / AMD SVM), der tillod at køre koden for gæste-OS DIREKTE på værtsprocessoren (uden at passere omkostningstunge mellemtrin, som det tidligere var).

Med Intel VT-x / AMD SVM kom der et nyt specielt niveau, Ring -1 (minus én). Og nu arbejder hypervisoren på dette niveau, mens gæsterne arbejder på Ring 0 og får privilegeret adgang til CPU'en.

Det vil sige, i sidste ende:

  • værten arbejder på Ring 0
  • gæsterne arbejder på Ring 0
  • hypervisoren arbejder på Ring -1

4) QEMU-KVM

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

Deraf QEMU-KVM (eller KVM-QEMU) 🙂

KREDITER
Billede til opmærksomhed
Billede af beskyttelsesringene

P.S. Teksten i denne artikel blev oprindeligt offentliggjort i Telegram-kanalen @RU_Voip som svar på et spørgsmål fra ét af kanalens medlemmer.

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

Tak!

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster