QEMU-KVM-i töö üldpõhimõtted

QEMU-KVM-i töö üldpõhimõtted

Minu praegune arusaam:

1) KVM

KVM (Kernel-based Virtual Machine) on hüperviisor (VMM – Virtual Machine Manager), mis töötab moodulina Linux OS-is. Hüperviisorit on vaja selleks, et käivitada mingit tarkvara olematus (virtuaalses) keskkonnas ja samal ajal peita selle tarkvara eest tegelik füüsiline riistvara, millel see tarkvara töötab. Hüperviisor toimib "kihina" füüsilise riistvara (host) ja virtuaalse OS-i (külaline) vahel.

Kuna KVM on Linuxi kerneli standardmoodul, saab see kõik soodustused (mäluhaldus, ajakava jne) tuumalt. Ja vastavalt sellele lähevad lõpuks kõik need eelised külalistele (kuna külalised töötavad hüperviisoril, mis töötab Linuxi tuumas / sees).

KVM on väga kiire, kuid iseenesest ei piisa virtuaalse OS-i käitamiseks, sest selleks on vaja I/O emulatsiooni. I/O jaoks (protsessor, kettad, võrk, video, PCI, USB, jadapordid jne) kasutab KVM QEMU-d.

2) QEMU

QEMU (Quick Emulator) on erinevate seadmete emulaator, mis võimaldab käivitada ühe arhitektuuri jaoks loodud operatsioonisüsteeme teises (näiteks ARM –> x86). Lisaks protsessorile emuleerib QEMU erinevaid välisseadmeid: võrgukaardid, HDD, videokaardid, PCI, USB jne.

See toimib järgmiselt:

Juhised/binaarkood (näiteks ARM) teisendatakse TCG (Tiny Code Generator) muunduri abil vahepealseks platvormist sõltumatuks koodiks ja seejärel teisendatakse see platvormist sõltumatu kahendkood sihtkäskudeks/koodiks (näiteks x86).

ARM –> lavastus –> x86

Tegelikult saate virtuaalmasinaid QEMU-s käitada mis tahes hostis, isegi vanemate protsessorimudelitega, mis ei toeta Intel VT-x (Inteli virtualiseerimistehnoloogia) / AMD SVM (AMD Secure Virtual Machine). Sel juhul töötab see aga väga aeglaselt, kuna käivitatav binaarkood tuleb TCG-d kasutades kaks korda uuesti kompileerida (TCG on just-in-Time kompilaator).

Need. QEMU ise on mega lahe, aga töötab väga aeglaselt.

3) Kaitserõngad

QEMU-KVM-i töö üldpõhimõtted

Protsessorite binaarprogrammi kood ei tööta niisama, vaid asub erinevatel tasanditel (rõngad / kaitserõngad), millel on erinev juurdepääs andmetele, alates kõige privilegeeritud (Ring 0), kuni kõige piiratumate, reguleeritud ja "koos". pingutatud kruvid” (rõngas 3).

Operatsioonisüsteem (OS-i kernel) töötab Ring 0-l (kerneli režiim) ja saab mis tahes andmete ja seadmetega teha mida iganes. Kasutajarakendused töötavad Ring 3 tasemel (kasutajarežiim) ja neil ei ole õigust teha mida iganes, vaid iga kord, kui nad peavad taotlema juurdepääsu ühe või teise toimingu tegemiseks (seega on kasutajarakendustel juurdepääs ainult nende enda andmetele ega saa "saada" "kellegi teise liivakasti"). Ring 1 ja 2 on mõeldud juhi kasutamiseks.

Enne Intel VT-x / AMD SVM-i leiutamist töötasid hüperviisorid ringil 0 ja külalised ringil 1. Kuna Ringil 1 ei ole OS-i nõuetekohaseks toimimiseks piisavalt õigusi, siis iga külalise privilegeeritud kõne korral on hüperviisor pidi seda kõnet käigu pealt modifitseerima ja 0-l ringil täitma (nagu QEMU teeb). Need. külalisbinaar EI täideti otse protsessoris ja iga kord läbis see käigupealt mitu vahepealset modifikatsiooni.

Ülekulu oli märkimisväärne ja see oli suur probleem ning seejärel andsid protsessorite tootjad üksteisest sõltumatult välja laiendatud juhiste komplekti (Intel VT-x / AMD SVM), mis võimaldas käivitada külaliste operatsioonisüsteemi koodi. OTSE hostprotsessoris (jättes kõrvale kõik kallid vaheetapid, nagu see oli varem).

Intel VT-x / AMD SVM-i tulekuga loodi spetsiaalne uue taseme ring -1 (miinus üks). Ja nüüd töötab sellel hüperviisor ja külalised töötavad ringil 0 ja saavad privilegeeritud juurdepääsu protsessorile.

Need. lõpuks:

  • host töötab ringil 0
  • külalised töötavad ringis 0
  • hüpervisor töötab ringil -1

4) QEMU-KVM

KVM annab külalistele juurdepääsu Ring 0-le ja kasutab QEMU-d I/O emuleerimiseks (protsessor, kettad, võrk, video, PCI, USB, jadapordid jne, mida külalised "näevad" ja millega töötavad).

Seega QEMU-KVM (või KVM-QEMU) :)

KREDIIT
Pilt tähelepanu tõmbamiseks
Pildi kaitserõngad

PS Selle artikli tekst avaldati algselt Telegrami kanalis @RU_Voip vastuseks ühe kanaliliikme küsimusele.

Kirjutage kommentaaridesse, kus ma ei saa teemast õigesti aru või on midagi lisada.

Tänan!

Allikas: www.habr.com

Lisa kommentaar