Obecné principy fungování QEMU-KVM

Obecné principy fungování QEMU-KVM

Moje současné chápání:

1) KVM

KVM (Kernel-based Virtual Machine) je hypervizor (VMM – Virtual Machine Manager) běžící jako modul na OS Linux. Hypervizor je nutný k tomu, aby mohl být spuštěn nějaký software v neexistujícím (virtuálním) prostředí a zároveň před tímto softwarem skryt skutečný fyzický hardware, na kterém tento software běží. Hypervizor funguje jako „spacer“ mezi fyzickým hardwarem (hostitelem) a virtuálním OS (hostem).

Vzhledem k tomu, že KVM je standardní modul linuxového jádra, dostává od jádra všechny požadované vychytávky (správa paměti, plánovač atd.). A podle toho nakonec všechny tyto výhody jdou k hostům (protože hosté pracují na hypervizoru, který běží na/v jádře operačního systému Linux).

KVM je velmi rychlý, ale sám o sobě nestačí spustit virtuální OS, protože... To vyžaduje emulaci I/O. Pro I/O (CPU, disky, síť, video, PCI, USB, sériové porty atd.) KVM používá QEMU.

2) QEMU

QEMU (Quick Emulator) je emulátor pro různá zařízení, který umožňuje provozovat operační systémy určené pro jednu architekturu na jiné (například ARM -> x86). Kromě procesoru emuluje QEMU různá periferní zařízení: síťové karty, HDD, grafické karty, PCI, USB atd.

Funguje to takto:

Instrukce/binární kód (například ARM) jsou převedeny na přechodný kód nezávislý na platformě pomocí převodníku TCG (Tiny Code Generator) a poté je tento binární kód nezávislý na platformě převeden na cílové instrukce/kód (například x86).

ARM –> střední_kód –> x86

V podstatě můžete virtuální stroje provozovat na QEMU na jakémkoli hostiteli, dokonce i se staršími modely procesorů, které nepodporují Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). V tomto případě to však bude fungovat velmi pomalu, protože spouštěný binární kód je třeba za běhu dvakrát překompilovat pomocí TCG (TCG je kompilátor Just-in-Time).

Tito. Samotné QEMU je mega cool, ale funguje velmi pomalu.

3) Ochranné kroužky

Obecné principy fungování QEMU-KVM

Binární programový kód na procesorech funguje z nějakého důvodu, ale je umístěn na různých úrovních (kroužky / ochranné kroužky) s různými úrovněmi přístupu k datům, od nejprivilegovanějších (Ring 0), po nejvíce omezené, regulované a „s utaženými maticemi“. “ (Prsten 3).

Operační systém (kernel OS) běží na Ring 0 (režim jádra) a může si dělat, co chce s jakýmikoli daty a zařízeními. Uživatelské aplikace fungují na úrovni Ring 3 (uživatelský režim) a nemohou si dělat, co chtějí, ale místo toho musí pokaždé žádat o přístup, aby mohly provést určitou operaci (uživatelské aplikace tak mají přístup pouze ke svým vlastním datům a nemohou do “pískoviště někoho jiného). Kroužek 1 a 2 jsou určeny pro řidiče.

Před vynálezem Intel VT-x / AMD SVM běžely hypervizory na Ring 0 a hosté na Ring 1. Protože Ring 1 nemá dostatečná práva pro normální provoz operačního systému, s každým privilegovaným voláním z hostovaného systému hypervisor musel toto volání za běhu upravit a provést na kruhu 0 (podobně jako to dělá QEMU). Tito. hostující binární soubor NOT byl prováděn přímo na procesoru a pokaždé prošel několika přechodnými úpravami za chodu.

Režie byla značná a to byl velký problém, a poté výrobci procesorů, nezávisle na sobě, vydali rozšířenou sadu instrukcí (Intel VT-x / AMD SVM), které umožňovaly spouštění kódu hostujícího OS. PŘÍMO na hostitelském procesoru (obejít všechny nákladné mezikroky, jako tomu bylo dříve).

S příchodem Intel VT-x / AMD SVM byla vytvořena speciální nová úroveň Ring -1 (mínus jedna). A nyní na něm běží hypervizor a hosté běží na Ring 0 a získají privilegovaný přístup k CPU.

Tito. nakonec:

  • hostitel běží na Ring 0
  • hosté pracují na prstenu 0
  • hypervisor běží na Ring -1

4) QEMU-KVM

KVM poskytuje hostům přístup k Ring 0 a používá QEMU k emulaci I/O (procesor, disky, síť, video, PCI, USB, sériové porty atd., které hosté „vidí“ a pracují s nimi).

Proto QEMU-KVM (nebo KVM-QEMU) :)

ÚVĚRY
Obrázek k upoutání pozornosti
Obrázek Ochranné kroužky

PS Text tohoto článku byl původně publikován na kanálu Telegram @RU_Voip jako odpověď na otázku jednoho z účastníků kanálu.

Napište do komentářů, kde tématu nerozumím správně nebo jestli je co dodat.

Děkujeme!

Zdroj: www.habr.com

Přidat komentář