Všeobecné princípy fungovania QEMU-KVM

Všeobecné princípy fungovania QEMU-KVM

Moje súčasné chápanie:

1) KVM

KVM (Kernel-based Virtual Machine) je hypervízor (VMM – Virtual Machine Manager), ktorý beží ako modul v OS Linux. Hypervízor je potrebný na to, aby sa nejaký softvér spúšťal v neexistujúcom (virtuálnom) prostredí a zároveň sa pred týmto softvérom skrýval skutočný fyzický hardvér, na ktorom tento softvér beží. Hypervízor funguje ako „medzerník“ medzi fyzickým hardvérom (hostiteľ) a virtuálnym OS (hosť).

Keďže KVM je štandardný modul linuxového jadra, dostáva od jadra všetky požadované vychytávky (správa pamäte, plánovač atď.). A podľa toho nakoniec všetky tieto výhody pripadnú hosťom (keďže hostia pracujú na hypervízore, ktorý beží na/v jadre OS Linux).

KVM je veľmi rýchly, ale sám o sebe nestačí spustiť virtuálny OS, pretože... Vyžaduje si to emuláciu I/O. Pre I/O (CPU, disky, sieť, video, PCI, USB, sériové porty atď.) KVM používa QEMU.

2) QEMU

QEMU (Quick Emulator) je emulátor pre rôzne zariadenia, ktorý vám umožňuje spúšťať operačné systémy určené pre jednu architektúru na inej (napríklad ARM -> x86). Okrem procesora QEMU emuluje rôzne periférne zariadenia: sieťové karty, HDD, grafické karty, PCI, USB atď.

Funguje to takto:

Inštrukcie/binárny kód (napríklad ARM) sa pomocou konvertora TCG (Tiny Code Generator) konvertujú na prechodný kód nezávislý od platformy a potom sa tento binárny kód nezávislý od platformy skonvertuje na cieľové inštrukcie/kód (napríklad x86).

ARM –> prechodný_kód –> x86

V podstate môžete virtuálne stroje spustiť na QEMU na akomkoľvek hostiteľovi, dokonca aj so staršími modelmi procesorov, ktoré nepodporujú Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). V tomto prípade to však bude fungovať veľmi pomaly, pretože spustený binárny kód je potrebné prekompilovať za behu dvakrát pomocou TCG (TCG je kompilátor Just-in-Time).

Tie. Samotné QEMU je mega cool, ale funguje veľmi pomaly.

3) Ochranné krúžky

Všeobecné princípy fungovania QEMU-KVM

Binárny programový kód na procesoroch funguje z nejakého dôvodu, ale nachádza sa na rôznych úrovniach (krúžky / ochranné krúžky) s rôznymi úrovňami prístupu k údajom, od najprivilegovanejších (Ring 0), po najviac obmedzené, regulované a „s dotiahnutými maticami“. “ (Prsteň 3).

Operačný systém (kernel OS) beží na Ring 0 (režim jadra) a môže si robiť čo chce s akýmikoľvek dátami a zariadeniami. Používateľské aplikácie fungujú na úrovni Ring 3 (používateľský režim) a nemôžu si robiť, čo chcú, ale namiesto toho musia zakaždým požiadať o prístup, aby vykonali konkrétnu operáciu (používateľské aplikácie majú teda prístup len k svojim vlastným údajom a nemôžu do “pieskoviska niekoho iného). Krúžok 1 a 2 sú určené pre vodičov.

Pred vynálezom Intel VT-x / AMD SVM bežali hypervízory na Ring 0 a hostia bežali na Ring 1. Keďže Ring 1 nemá dostatočné práva na normálnu prevádzku OS, pri každom privilegovanom volaní z hosťujúceho systému hypervízor musel toto volanie za behu upraviť a vykonať na kruhu 0 (podobne ako to robí QEMU). Tie. hosťovská binárna NOT bol vykonaný priamo na procesore a zakaždým prešiel niekoľkými prechodnými úpravami za behu.

Réžia bola značná a to bol veľký problém a potom výrobcovia procesorov, nezávisle od seba, vydali rozšírenú sadu inštrukcií (Intel VT-x / AMD SVM), ktoré umožňovali spustenie kódu hosťujúceho OS. PRIAMO na hostiteľskom procesore (obchádzanie akýchkoľvek nákladných medzikrokov, ako to bolo predtým).

S príchodom Intel VT-x / AMD SVM bola vytvorená špeciálna nová úroveň Ring -1 (mínus jedna). A teraz na ňom beží hypervízor a hostia bežia na Ring 0 a získajú privilegovaný prístup k CPU.

Tie. nakoniec:

  • hostiteľ beží na kruhu 0
  • hostia pracujú na Ring 0
  • hypervízor beží na kruhu -1

4) QEMU-KVM

KVM poskytuje hosťom prístup k Ring 0 a používa QEMU na emuláciu I/O (procesor, disky, sieť, video, PCI, USB, sériové porty atď., ktoré hostia „vidia“ a pracujú s nimi).

Preto QEMU-KVM (alebo KVM-QEMU) :)

ÚVERY
Obrázok na upútanie pozornosti
Obrázok Ochranných krúžkov

PS Text tohto článku bol pôvodne publikovaný na kanáli Telegram @RU_Voip ako odpoveď na otázku jedného z účastníkov kanála.

Do komentárov napíšte, kde správne nerozumiem téme alebo či je potrebné niečo dodať.

Ďakujeme!

Zdroj: hab.com

Pridať komentár