Splošna načela delovanja QEMU-KVM

Splošna načela delovanja QEMU-KVM

Moje trenutno razumevanje:

1) KVM

KVM (Kernel-based Virtual Machine) je hipervizor (VMM – Virtual Machine Manager), ki deluje kot modul v OS Linux. Hipervizor je potreben za zagon neke programske opreme v neobstoječem (virtualnem) okolju in hkrati pred to programsko opremo skrijemo pravo fizično strojno opremo, na kateri se ta programska oprema izvaja. Hipervizor deluje kot "distančnik" med fizično strojno opremo (gostitelj) in virtualnim OS (gost).

Ker je KVM standardni modul jedra Linuxa, prejme vse zahtevane dobrote iz jedra (upravljanje pomnilnika, razporejevalnik itd.). In temu primerno, na koncu vse te ugodnosti gredo gostom (saj gostje delajo na hipervizorju, ki teče na/v jedru OS Linux).

KVM je zelo hiter, vendar sam po sebi ni dovolj za poganjanje virtualnega OS, ker... To zahteva V/I emulacijo. Za V/I (CPU, diski, omrežje, video, PCI, USB, serijska vrata itd.) KVM uporablja QEMU.

2) QEMU

QEMU (Quick Emulator) je emulator za različne naprave, ki omogoča poganjanje operacijskih sistemov, zasnovanih za eno arhitekturo, na drugi (na primer ARM -> x86). Poleg procesorja QEMU emulira različne periferne naprave: omrežne kartice, HDD, video kartice, PCI, USB itd.

Deluje takole:

Navodila/binarna koda (na primer ARM) se pretvorijo v vmesno od platforme neodvisno kodo s pretvornikom TCG (Tiny Code Generator), nato pa se ta od platforme neodvisna binarna koda pretvori v ciljna navodila/kodo (na primer x86).

ARM –> vmesna_koda –> x86

V bistvu lahko poganjate virtualne stroje na QEMU na katerem koli gostitelju, tudi s starejšimi modeli procesorjev, ki ne podpirajo Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). Vendar pa bo v tem primeru delovalo zelo počasi, ker je treba izvajajočo binarno kodo sproti dvakrat znova prevesti z uporabo TCG (TCG je Just-in-Time prevajalnik).

Tisti. Sam QEMU je mega kul, ampak dela zelo počasi.

3) Zaščitni obroči

Splošna načela delovanja QEMU-KVM

Binarna programska koda na procesorjih deluje z razlogom, vendar se nahaja na različnih nivojih (obročki / zaščitni obroči) z različnimi nivoji dostopa do podatkov, od najbolj privilegiranega (obroč 0), do najbolj omejenega, reguliranega in »z zategnjenimi maticami«. « (Prstan 3).

Operacijski sistem (jedro OS) deluje na Ring 0 (način jedra) in lahko počne, kar hoče, s poljubnimi podatki in napravami. Uporabniške aplikacije delujejo na ravni Ring 3 (uporabniški način) in ne smejo početi, kar hočejo, temveč morajo zahtevati dostop vsakič, da izvedejo določeno operacijo (torej imajo uporabniške aplikacije dostop samo do svojih podatkov in ne morejo dobiti v peskovnik nekoga drugega). Obroč 1 in 2 sta namenjena voznikom.

Pred izumom Intel VT-x / AMD SVM so hipervizorji delovali na Ring 0, gostje pa na Ring 1. Ker Ring 1 nima dovolj pravic za normalno delovanje OS, z vsakim privilegiranim klicem iz sistema za goste, hipervizor je moral ta klic sproti spreminjati in ga izvesti na Ring 0 (podobno kot to počne QEMU). Tisti. binarni zapis gosta NE je bil izveden neposredno na procesorju in je vsakič sproti opravil več vmesnih modifikacij.

Stroški so bili precejšnji in to je bila velika težava, nato pa so proizvajalci procesorjev neodvisno drug od drugega izdali razširjen nabor navodil (Intel VT-x / AMD SVM), ki so omogočali izvajanje kode gostujočega OS. NEPOSREDNO na gostiteljskem procesorju (brez vseh dragih vmesnih korakov, kot je bilo prej).

S prihodom Intel VT-x / AMD SVM je bila ustvarjena posebna nova raven obroča -1 (minus ena). In zdaj hipervizor deluje na njem, gostje pa delujejo na Ring 0 in dobijo privilegiran dostop do CPE.

Tisti. na koncu:

  • gostitelj deluje na obroču 0
  • gostje delajo na Ring 0
  • hipervizor deluje na obroču -1

4) QEMU-KVM

KVM gostom omogoča dostop do obroča 0 in uporablja QEMU za posnemanje V/I (procesor, diski, omrežje, video, PCI, USB, serijska vrata itd., ki jih gostje »vidijo« in z njimi delajo).

Zato QEMU-KVM (ali KVM-QEMU) :)

KREDITI
Slika za pritegnitev pozornosti
Slika zaščitnih obročev

PS Besedilo tega članka je bilo prvotno objavljeno na kanalu Telegram @RU_Voip kot odgovor na vprašanje enega od udeležencev kanala.

V komentarje napišite, če teme ne razumem pravilno ali če je kaj dodati.

Hvala!

Vir: www.habr.com

Dodaj komentar