Principii generale de funcționare ale QEMU-KVM

Principii generale de funcționare ale QEMU-KVM

Înțelegerea mea actuală:

1) KVM

KVM (Mașină virtuală bazată pe kernel) este un hypervisor (VMM – Virtual Machine Manager) care rulează ca modul pe sistemul de operare Linux. Este necesar un hypervisor pentru a rula un software într-un mediu (virtual) inexistent și în același timp ascunde de acest software hardware-ul fizic real pe care rulează acest software. Hipervizorul acționează ca un „distanțier” între hardware-ul fizic (gazdă) și sistemul de operare virtual (oaspete).

Deoarece KVM este un modul standard al nucleului Linux, primește toate bunătățile necesare de la kernel (managementul memoriei, planificatorul etc.). Și în consecință, în cele din urmă, toate aceste beneficii revin oaspeților (din moment ce oaspeții lucrează pe un hypervisor care rulează pe/în nucleul sistemului de operare Linux).

KVM este foarte rapid, dar în sine nu este suficient pentru a rula un sistem de operare virtual, deoarece... Acest lucru necesită emulare I/O. Pentru I/O (CPU, discuri, rețea, video, PCI, USB, porturi seriale etc.) KVM utilizează QEMU.

2) QEMU

QEMU (Quick Emulator) este un emulator pentru diverse dispozitive care vă permite să rulați sisteme de operare concepute pentru o arhitectură pe alta (de exemplu, ARM -> x86). Pe lângă procesor, QEMU emulează diverse dispozitive periferice: plăci de rețea, HDD, plăci video, PCI, USB etc.

Funcționează așa:

Instrucțiunile/codul binar (de exemplu, ARM) sunt convertite în cod intermediar independent de platformă folosind convertorul TCG (Tiny Code Generator) și apoi acest cod binar independent de platformă este convertit în instrucțiuni/cod țintă (de exemplu, x86).

ARM –> cod_intermediar –> x86

În esență, puteți rula mașini virtuale pe QEMU pe orice gazdă, chiar și cu modele mai vechi de procesoare care nu acceptă Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). Cu toate acestea, în acest caz, va funcționa foarte lent, din cauza faptului că codul binar care se execută trebuie să fie recompilat din mers de două ori, folosind TCG (TCG este un compilator Just-in-Time).

Acestea. QEMU în sine este mega cool, dar funcționează foarte lent.

3) Inele de protecție

Principii generale de funcționare ale QEMU-KVM

Codul de program binar pe procesoare funcționează dintr-un motiv, dar este situat la diferite niveluri (inele / inele de protecție) cu diferite niveluri de acces la date, de la cel mai privilegiat (Ring 0), până la cel mai limitat, reglementat și „cu piulițele strânse”. ” (Inelul 3).

Sistemul de operare (kernel OS) rulează pe Ring 0 (mod kernel) și poate face orice dorește cu orice date și dispozitive. Aplicațiile utilizator funcționează la nivelul Ring 3 (modul utilizator) și nu au voie să facă ceea ce doresc, ci trebuie să solicite acces de fiecare dată pentru a efectua o anumită operațiune (astfel, aplicațiile utilizator au acces doar la propriile date și nu pot „obține în” cutia de nisip a altcuiva). Inelele 1 și 2 sunt destinate utilizării de către șoferi.

Înainte de inventarea Intel VT-x / AMD SVM, hipervizoarele rulau pe Ring 0, iar oaspeții rulau pe Ring 1. Deoarece Ring 1 nu are suficiente drepturi pentru funcționarea normală a sistemului de operare, cu fiecare apel privilegiat de la sistemul invitat, hypervisor a trebuit să modifice acest apel din mers și să-l execute pe Ring 0 (la fel ca QEMU). Acestea. binar invitat NU a fost executat direct pe procesor și a trecut de fiecare dată prin mai multe modificări intermediare din mers.

Taxa generală a fost semnificativă și aceasta a fost o mare problemă, iar apoi producătorii de procesoare, independent unul de celălalt, au lansat un set extins de instrucțiuni (Intel VT-x / AMD SVM) care a permis executarea codului OS invitat. DIRECT pe procesorul gazdă (ocolind orice pași intermediari costisitoare, așa cum a fost cazul înainte).

Odată cu apariția Intel VT-x / AMD SVM, a fost creat un nou Ring level special -1 (minus unu). Și acum hypervisorul rulează pe el, iar oaspeții rulează pe Ring 0 și obțin acces privilegiat la CPU.

Acestea. în cele din urmă:

  • gazda rulează pe Ring 0
  • oaspeții lucrează la Ring 0
  • hypervisorul rulează pe Ring -1

4) QEMU-KVM

KVM oferă oaspeților acces la Ring 0 și utilizează QEMU pentru a emula I/O (procesor, discuri, rețea, video, PCI, USB, porturi seriale etc. pe care oaspeții le „văd” și cu care lucrează).

Prin urmare, QEMU-KVM (sau KVM-QEMU) :)

CREDITE
Imagine pentru a atrage atenția
Poza cu inele de protecție

PS Textul acestui articol a fost publicat inițial pe canalul Telegram @RU_Voip ca răspuns la o întrebare a unuia dintre participanții canalului.

Scrieți în comentarii unde nu înțeleg corect subiectul sau dacă este ceva de adăugat.

Vă mulțumim!

Sursa: www.habr.com

Adauga un comentariu