Opći principi rada QEMU-KVM

Opći principi rada QEMU-KVM

Moje trenutno razumijevanje:

1) KVM

KVM (Kernel-based Virtual Machine) je hipervizor (VMM – Virtual Machine Manager) koji radi kao modul na Linux OS-u. Hipervizor je potreban kako bi se pokrenuo neki softver u nepostojećem (virtualnom) okruženju i u isto vrijeme sakrio od tog softvera pravi fizički hardver na kojem se taj softver izvodi. Hipervizor djeluje kao "razmaknica" između fizičkog hardvera (host) i virtualnog OS-a (gost).

Budući da je KVM standardni modul Linux kernela, on dobiva sve potrebne dobrote od kernela (upravljanje memorijom, planer, itd.). I sukladno tome, na kraju, sve te beneficije idu gostima (budući da gosti rade na hipervizoru koji radi na/u Linux OS kernelu).

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

2) QEMU

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

Djeluje ovako:

Instrukcije/binarni kod (na primjer, ARM) pretvaraju se u međukod neovisan o platformi pomoću pretvarača TCG (Tiny Code Generator), a zatim se ovaj binarni kod neovisan o platformi pretvara u ciljne instrukcije/kod (na primjer, x86).

ARM –> intermediate_code –> x86

U suštini, možete pokretati virtualne strojeve na QEMU na bilo kojem 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, radit će vrlo sporo, zbog činjenice da se binarni kod koji se izvršava mora dvaput ponovno prevesti u hodu, koristeći TCG (TCG je Just-in-Time prevodilac).

Oni. Sam QEMU je mega cool, ali radi jako sporo.

3) Zaštitni prstenovi

Opći principi rada QEMU-KVM

Binarni programski kod na procesorima radi s razlogom, ali se nalazi na različitim razinama (prstenovi / zaštitni prstenovi) s različitim razinama pristupa podacima, od najprivilegiranijih (prsten 0), do najograničenijih, reguliranih i „zategnutih matica ” (Prsten 3 ).

Operativni sustav (OS kernel) radi na Ring 0 (kernel mode) i može raditi što god želi sa svim podacima i uređajima. Korisničke aplikacije rade na razini Ring 3 (korisnički način rada) i ne smiju raditi što god žele, već umjesto toga moraju zahtijevati pristup svaki put za izvođenje određene operacije (dakle, korisničke aplikacije imaju pristup samo svojim podacima i ne mogu "dobiti u” tuđi sandbox). Prsten 1 i 2 namijenjeni su vozačima.

Prije izuma Intel VT-x / AMD SVM, hipervizori su radili na Prstenu 0, a gosti na Prstenu 1. Budući da Prsten 1 nema dovoljno prava za normalan rad OS-a, sa svakim privilegiranim pozivom iz gostujućeg sustava, hipervizor je morao modificirati ovaj poziv u hodu i izvršiti ga na Ring 0 (slično kao što radi QEMU). Oni. gostujući binarni NE izvršavao se izravno na procesoru i svaki je put prolazio kroz nekoliko međumodifikacija u hodu.

Opterećenje je bilo značajno i to je bio veliki problem, a onda su proizvođači procesora, neovisno jedni o drugima, izdali prošireni set instrukcija (Intel VT-x / AMD SVM) koje su dopuštale izvršavanje gostujućeg OS koda DIREKTNO na glavnom procesoru (zaobilazeći sve skupe međukorake, kao što je bio slučaj prije).

S pojavom Intel VT-x / AMD SVM, stvorena je posebna nova razina prstena -1 (minus jedan). Sada hipervizor radi na njemu, a gosti rade na Ring 0 i dobivaju privilegirani pristup CPU-u.

Oni. eventualno:

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

4) QEMU-KVM

KVM gostima daje pristup prstenu 0 i koristi QEMU za emulaciju I/O (procesor, diskovi, mreža, video, PCI, USB, serijski priključci itd. koje gosti "vide" i s kojima rade).

Stoga QEMU-KVM (ili KVM-QEMU) :)

KREDITI
Slika za privlačenje pažnje
Slika Zaštitni prstenovi

p.s. Tekst ovog članka izvorno je objavljen na Telegram kanalu @RU_Voip kao odgovor na pitanje jednog od sudionika kanala.

Napišite u komentarima gdje nisam dobro razumio temu ili ako postoji nešto za dodati.

Hvala vam!

Izvor: www.habr.com

Dodajte komentar