A QEMU-KVM működésének alapelvei

A QEMU-KVM működésének alapelvei

Jelenlegi megértésem:

1) KVM

A KVM (Kernel-based Virtual Machine) egy hypervisor (VMM – Virtual Machine Manager), amelyként modul működik a Linux operációs rendszerben. A hypervisor arra szolgál, hogy egy adott szoftvert egy nem létező (virtuális) környezetben futtasson, miközben elrejti a szoftver elől a valódi fizikai hardvert, amin az a szoftver fut. A hypervisor szerepe egy "távvezető" a fizikai hardver (gazda) és a virtuális operációs rendszer (vendég) között.

Mivel a KVM a Linux kernel alapértelmezett modulja, minden szükséges szolgáltatást megkap a kerneltől (memóriakezelés, ütemező stb.). Ennek megfelelően végül minden előny a vendégekhez is eljut (mivel a vendégek a hypervisorról futnak, amely a Linux operációs rendszer kerneljében működik).

A KVM nagyon gyors, de önmagában nem elegendő egy virtuális operációs rendszer futtatásához, mivel ehhez I/O emulációra van szükség. Az I/O (processzor, lemezek, hálózat, videó, PCI, USB, sorosportok stb.) érdekében a KVM a QEMU-t használja.

2) QEMU

A QEMU (Quick Emulator) különböző eszközök emulátora, amely lehetővé teszi operációs rendszerek futtatását, amelyek egy architektúrára készültek, egy másikon (például ARM -> x86). A processzor mellett a QEMU különböző perifériás eszközöket is emulál: hálózati kártyák, HDD, grafikus kártyák, PCI, USB stb.

Ez így működik:

Az utasítások / bináris kód (például ARM) a TCG (Tiny Code Generator) konverter segítségével platformfüggetlen közbülső kódra konvertálódnak, majd ez a platformfüggetlen bináris kód a célzott utasításokra / kódra (például x86) konvertálódik.

ARM -> közbülső_kód -> x86

Lényegében virtuális gépeket futtathat a QEMU-n bármilyen gazdán, akár régi processzormodelleken is, amelyek nem támogatják az Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine) technológiát. Azonban ilyenkor a teljesítmény jelentősen le csökken, mivel a végrehajtható bináris kódot két alkalommal, menet közben kell újra fordítani a TCG segítségével (a TCG Just-in-Time compiler).

Tehát a QEMU önmagában rendkívül fejlett, de nagyon lassan működik.

3) Protection rings

A QEMU-KVM működésének alapelvei

A bináris programkód a processzorokon nem csupán úgy működik, hogy különböző szinteken (gyűrűk / Protection rings) helyezkedik el, különböző hozzáférési szintekkel a adatokhoz, a legjobban privilegizálttól (Ring 0) a legszigorúbb, szabályozott, "megfeszített csavarokkal" rendelkezőig (Ring 3).

A operációs rendszer (OS kernel) a Ring 0 (kernel mód) szinten fut, és szabadon manipulálhat bármilyen adatot és eszközt. A felhasználói alkalmazások a Ring 3 (user mód) szinten működnek, és nem jogosultak bármit megtenni, ezért mindig engedélyt kell kérniük bizonyos műveletek végrehajtására (így a felhasználói alkalmazások csak a saját adataikhoz férhetnek hozzá, és nem tudnak "beszivárogni" mások "játékterébe"). A Ring 1 és 2 a driverek számára van fenntartva.

Intel VT-x / AMD SVM feltalálása előtt a hipervizorok a Ring 0-n futottak, míg a vendégek a Ring 1-en dolgoztak. Mivel a Ring 1 nem rendelkezett elegendő jogosultsággal az operációs rendszer normális működéséhez, a hipervizornak minden priviligált hívásnál, amelyet a vendég rendszere küldött, menet közben módosítania kellett ezt a hívást, és a Ring 0-n kellett végrehajtania (kb. úgy, mint ahogy a QEMU teszi). Tehát a vendég bináris kód NEM közvetlenül a processzoron futott, és minden alkalommal néhány köztes módosításon ment keresztül.

A költségek jelentősek voltak, és ez nagy problémát jelentett, így a processzorgyártók függetlenül egymástól kiterjesztett utasításkészleteket adtak ki (Intel VT-x / AMD SVM), amelyek lehetővé tették a vendég operációs rendszerek kódjának KÖZVETLEN VÉGZÉS a gazda processzoron (átugorva a költséges köztes lépéseket, ahogy régen történt).

Az Intel VT-x / AMD SVM megjelenésével létrejött egy új, -1 (mínusz egy) szintű Ring. Most ezen fut a hipervizor, a vendégek pedig a Ring 0-n dolgoznak, így jogosult hozzáférést kapnak a CPU-hoz.

Tehát az eredmény:

  • a gazda a Ring 0-n fut
  • a vendégek a Ring 0-n futnak
  • a hipervizor a Ring -1-en működik

4) QEMU-KVM

A KVM hozzáférést biztosít a vendégeknek a Ring 0-hoz, és a QEMU-t használja I/O emulálására (processzor, merevlemezek, hálózat, videó, PCI, USB, soros portok stb., amelyeket a vendégek "látnak" és dolgoznak velük).

Így lett QEMU-KVM (vagy KVM-QEMU) 🙂

CREDITS
Kép a figyelem felkeltésére
Protection rings kép

P.S. A cikk szövege eredetileg a Telegram csatornán lett közzétéve @RU_Voip válaszként egy csatorna egyik résztvevőjének kérdésére.

Kérem, írja meg a megjegyzésekben, hogy hol értem félre a témát, vagy ha van valami, amit hozzá akarna tenni.

Köszönöm!

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster