Opšti principi rada QEMU-KVM

Opšti principi rada QEMU-KVM

Moje trenutno razumijevanje:

1) KVM

KVM (Virtuelna mašina zasnovana na kernelu) je hipervizor (VMM – Virtual Machine Manager) koji radi kao modul na Linux OS-u. Hipervizor je potreban kako bi se neki softver pokrenuo u nepostojećem (virtuelnom) okruženju i istovremeno sakrio od ovog softvera stvarni fizički hardver na kojem ovaj softver radi. Hipervizor djeluje kao "razmaknik" između fizičkog hardvera (host) i virtualnog OS (gost).

Pošto je KVM standardni modul Linux kernela, on prima sve potrebne pogodnosti od kernela (upravljanje memorijom, planer, itd.). I shodno tome, na kraju, sve ove pogodnosti idu gostima (pošto gosti rade na hipervizoru koji radi na/u jezgru Linux OS-a).

KVM je veoma brz, ali sam po sebi nije dovoljan za pokretanje virtuelnog OS, jer... Ovo zahtijeva I/O emulaciju. Za I/O (CPU, diskovi, mreža, video, PCI, USB, serijski portovi, itd.) KVM koristi QEMU.

2) QEMU

QEMU (Quick Emulator) je emulator za različite uređaje koji vam omogućava pokretanje operativnih sistema dizajniranih za jednu arhitekturu na drugoj (na primjer, ARM -> x86). Pored procesora, QEMU emulira različite periferne uređaje: mrežne kartice, HDD, video kartice, PCI, USB, itd.

Radi ovako:

Instrukcije/binarni kod (na primjer, ARM) se pretvaraju u međuplatformski nezavisan kod pomoću TCG (Tiny Code Generator) pretvarača, a zatim se ovaj binarni kod nezavisan od platforme pretvara u ciljne instrukcije/kod (na primjer, x86).

ARM –> intermediate_code –> x86

U suštini, možete pokrenuti virtuelne mašine na QEMU na bilo kom hostu, čak i sa starijim modelima procesora koji ne podržavaju Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). Međutim, u ovom slučaju će raditi vrlo sporo, zbog činjenice da je binarni kod koji se izvršava treba ponovo kompajlirati u hodu dva puta, koristeći TCG (TCG je Just-in-Time kompajler).

One. QEMU je sam po sebi mega cool, ali radi veoma sporo.

3) Zaštitni prstenovi

Opšti principi rada QEMU-KVM

Binarni programski kod na procesorima radi s razlogom, ali se nalazi na različitim nivoima (prstenovi / zaštitni prstenovi) sa različitim nivoima pristupa podacima, od najprivilegovanijeg (Ring 0), do najograničenijeg, regulisanog i „sa zategnutim maticama ” (Prsten 3).

Operativni sistem (OS kernel) radi na Ring 0 (kernel mod) i može raditi šta god želi sa bilo kojim podacima i uređajima. Korisničke aplikacije rade na nivou Ring 3 (korisnički način) i nije im dozvoljeno da rade šta god žele, već umjesto toga moraju svaki put tražiti pristup da bi izvršile određenu operaciju (dakle, korisničke aplikacije imaju pristup samo svojim podacima i ne mogu „dobiti u” tuđi sandbox). Prsten 1 i 2 su namenjeni za upotrebu od strane vozača.

Pre pronalaska Intel VT-x / AMD SVM, hipervizori su radili na Ringu 0, a gosti na Ringu 1. Pošto Ring 1 nema dovoljno prava za normalan rad OS-a, sa svakim privilegovanim pozivom iz gostujućeg sistema, hipervizor je morao da modifikuje ovaj poziv u hodu i da ga izvrši na prstenu 0 (slično kao što to čini QEMU). One. binarni gost NE izvršeno je direktno na procesoru, i svaki put je prolazilo kroz nekoliko posrednih modifikacija u hodu.

Prekršaji su bili značajni i to je bio veliki problem, a onda su proizvođači procesora, nezavisno jedni od drugih, objavili prošireni set instrukcija (Intel VT-x / AMD SVM) koji su omogućavali izvršavanje koda gostujućeg OS DIREKTNO na host procesoru (zaobilazeći sve skupe međukorake, kao što je bio slučaj ranije).

Pojavom Intel VT-x / AMD SVM, stvoren je poseban novi nivo prstena -1 (minus jedan). I sada hipervizor radi na njemu, a gosti rade na Ring 0 i dobijaju privilegovani pristup CPU-u.

One. na kraju:

  • host radi na prstenu 0
  • gosti rade na prstenu 0
  • hipervizor radi na prstenu -1

4) QEMU-KVM

KVM gostima daje pristup Ringu 0 i koristi QEMU da emulira I/O (procesor, diskovi, mreža, video, PCI, USB, serijski portovi, itd. koje gosti „vide” i sa kojima rade).

Otuda QEMU-KVM (ili KVM-QEMU) :)

KREDITI
Slika za privlačenje pažnje
Slika zaštitnih prstenova

PS Tekst ovog članka prvobitno je objavljen na Telegram kanalu @RU_Voip kao odgovor na pitanje jednog od učesnika kanala.

Pisite u komentarima gde ne razumem dobro temu ili ako treba sta da dodam.

Hvala vam!

izvor: www.habr.com

Dodajte komentar