Bendrieji QEMU-KVM veikimo principai

Bendrieji QEMU-KVM veikimo principai

Mano dabartinis supratimas:

1) KVM

KVM (Branduolinė virtualioji mašina) yra hipervizorius (VMM – virtualios mašinos tvarkyklė), veikiantis kaip modulis Linux OS. Hipervizorius reikalingas norint paleisti kai kurią programinę įrangą neegzistuojančioje (virtualioje) aplinkoje ir tuo pačiu paslėpti nuo šios programinės įrangos tikrą fizinę aparatinę įrangą, kurioje ši programinė įranga veikia. Hipervizorius veikia kaip „tarpiklis“ tarp fizinės aparatinės įrangos (pagrindinio kompiuterio) ir virtualios OS (svečio).

Kadangi KVM yra standartinis Linux branduolio modulis, jis gauna visas reikalingas gėrybes iš branduolio (atminties valdymas, planuoklis ir kt.). Ir atitinkamai, galiausiai visi šie privalumai atitenka svečiams (nes svečiai dirba su hipervizoriumi, kuris veikia Linux OS branduolyje).

KVM yra labai greitas, tačiau vien jo neužtenka paleisti virtualią OS, nes... Tam reikia I/O emuliacijos. Įvesties / išvesties (procesoriaus, diskų, tinklo, vaizdo, PCI, USB, nuosekliųjų prievadų ir kt.) KVM naudoja QEMU.

2) QEMU

QEMU (Quick Emulator) yra įvairių įrenginių emuliatorius, leidžiantis paleisti vienai architektūrai sukurtas operacines sistemas kitoje (pavyzdžiui, ARM -> x86). Be procesoriaus, QEMU emuliuoja įvairius išorinius įrenginius: tinklo plokštes, HDD, vaizdo plokštes, PCI, USB ir kt.

Tai veikia taip:

Instrukcijos / dvejetainis kodas (pavyzdžiui, ARM) konvertuojami į tarpinį nuo platformos nepriklausomą kodą naudojant TCG (Tiny Code Generator) keitiklį, o tada šis nuo platformos nepriklausomas dvejetainis kodas konvertuojamas į tikslines instrukcijas / kodą (pavyzdžiui, x86).

ARM –> tarpinis_kodas –> x86

Iš esmės galite paleisti virtualias mašinas QEMU bet kuriame pagrindiniame kompiuteryje, net su senesniais procesorių modeliais, kurie nepalaiko Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). Tačiau šiuo atveju jis veiks labai lėtai, nes vykdomąjį dvejetainį kodą reikia perkompiliuoti du kartus, naudojant TCG (TCG yra Just-in-Time kompiliatorius).

Tie. Pats QEMU yra labai šaunus, bet veikia labai lėtai.

3) Apsauginiai žiedai

Bendrieji QEMU-KVM veikimo principai

Dvejetainis programos kodas procesoriuose veikia ne veltui, bet yra skirtinguose lygiuose (žiedai / apsaugos žiedai) su skirtingais duomenų prieigos lygiais, nuo labiausiai privilegijuoto (0 žiedas), iki labiausiai riboto, reguliuojamo ir „su užveržtomis veržlėmis“. “ (3 žiedas).

Operacinė sistema (OS branduolys) veikia Ring 0 (branduolių režimu) ir gali daryti ką nori su bet kokiais duomenimis ir įrenginiais. Vartotojų programos veikia 3 žiedo lygiu (vartotojo režimu) ir joms neleidžiama daryti to, ko nori, bet turi prašyti prieigos kiekvieną kartą, kad galėtų atlikti tam tikrą operaciją (taigi, vartotojo programos turi prieigą tik prie savo duomenų ir negali gauti į“ kažkieno smėlio dėžę). 1 ir 2 žiedai skirti naudoti vairuotojams.

Iki Intel VT-x / AMD SVM išradimo hipervizoriai veikė 0 žiedu, o svečiai – 1 žiedu. Kadangi Ring 1 neturi pakankamai teisių normaliam OS veikimui, su kiekvienu privilegijuotu skambučiu iš svečių sistemos, „Hypervisor“ turėjo pakeisti šį iškvietimą ir įvykdyti jį 0 žiede (panašiai kaip daro QEMU). Tie. svečio dvejetainis NĖRA buvo vykdoma tiesiogiai procesoriuje ir kiekvieną kartą buvo atlikta keletas tarpinių modifikacijų.

Pridėtinės išlaidos buvo didelės ir tai buvo didelė problema, o tada procesorių gamintojai, nepriklausomai vienas nuo kito, išleido išplėstinį instrukcijų rinkinį (Intel VT-x / AMD SVM), leidžiantį vykdyti svečio OS kodą. TIESIOGIAI pagrindiniame procesoriuje (apeinant visus brangius tarpinius veiksmus, kaip buvo anksčiau).

Atsiradus Intel VT-x / AMD SVM, buvo sukurtas specialus naujas žiedo lygis -1 (minus vienas). Ir dabar jame veikia hipervizorius, o svečiai veikia žiedu 0 ir gauna privilegijuotą prieigą prie procesoriaus.

Tie. galiausiai:

  • šeimininkas veikia žiede 0
  • svečiai dirba žiede 0
  • hipervizorius veikia žiede -1

4) QEMU-KVM

KVM suteikia svečiams prieigą prie žiedo 0 ir naudoja QEMU, kad imituotų I/O (procesorių, diskus, tinklą, vaizdo įrašą, PCI, USB, nuosekliuosius prievadus ir kt., kuriuos svečiai „mato“ ir su kuriais dirba).

Taigi QEMU-KVM (arba KVM-QEMU) :)

KREDITAI
Nuotrauka, skirta pritraukti dėmesį
Apsauginių žiedų paveikslėlis

PS Šio straipsnio tekstas iš pradžių buvo paskelbtas Telegram kanale @RU_Voip kaip atsakymas į vieno iš kanalo dalyvių klausimą.

Rašykite komentaruose, kur aš neteisingai suprantu temos ar yra ką pridurti.

Dėkojame!

Šaltinis: www.habr.com

Добавить комментарий