Principi generali di funziunamentu di QEMU-KVM

Principi generali di funziunamentu di QEMU-KVM

A mo cunniscenza attuale:

1) KVM

KVM (Macchina Virtuale basata in Kernel) hè un ipervisore (VMM - Virtual Machine Manager) in esecuzione cum'è un modulu in Linux OS. Un ipervisore hè necessariu per eseguisce qualchì software in un ambiente (virtuale) inesistente è à u stessu tempu ammuccià da stu software l'hardware fisicu reale nantu à quale u software corre. L'ipervisore agisce cum'è un "spacer" trà u hardware fisicu (host) è u SO virtuale (guest).

Siccomu KVM hè un modulu standard di u kernel Linux, riceve tutti i boni necessarii da u kernel (gestione di memoria, pianificatore, etc.). È per quessa, à a fine, tutti questi benefizii vanu à l'invitati (poi chì l'invitati travaglianu nantu à un ipervisore chì corre nantu / in u kernel Linux OS).

KVM hè assai veloce, ma per ellu stessu ùn hè micca abbastanza per eseguisce un OS virtuale, perchè ... Questu richiede l'emulazione I/O. Per I/O (CPU, dischi, rete, video, PCI, USB, porti seriali, etc.) KVM usa QEMU.

2) QEMU

QEMU (Quick Emulator) hè un emulatore per parechji dispositi chì vi permette di eseguisce sistemi operativi pensati per una architettura nantu à l'altru (per esempiu, ARM -> x86). In più di u processore, QEMU emula diversi dispositi periferici: carte di rete, HDD, carte video, PCI, USB, etc.

Funziona cusì:

Istruzzioni / codice binariu (per esempiu, ARM) sò cunvertiti in codice intermediu indipendente da a piattaforma utilizendu u cunvertitore TCG (Tiny Code Generator) è dopu stu codice binariu indipendente da a piattaforma hè cunvertitu in istruzioni / codice di destinazione (per esempiu, x86).

ARM -> intermediate_code -> x86

Essenzialmente, pudete eseguisce macchine virtuali in QEMU in qualsiasi host, ancu cù mudelli di processori più vechji chì ùn supportanu micca Intel VT-x (Tecnulugia di Virtualizazione Intel) / AMD SVM (AMD Secure Virtual Machine). Tuttavia, in questu casu, hà da travaglià assai lentamente, per via di u fattu chì u codice binariu esecutivu deve esse ricompilatu nantu à a mosca duie volte, utilizendu TCG (TCG hè un compilatore Just-in-Time).

Quelli. QEMU stessu hè mega cool, ma travaglia assai lentamente.

3) Anelli di prutezzione

Principi generali di funziunamentu di QEMU-KVM

U codice di u prugramma binariu nantu à i prucessori travaglia per una ragione, ma si trova à diversi livelli (anelli / anelli di prutezzione) cù diversi livelli di accessu à e dati, da u più privilegiatu (Ring 0), à u più limitatu, regulatu è "cù i noci stretti". » (Anellu 3).

U sistema upirativu (OS kernel) corre nantu à Ring 0 (modu kernel) è pò fà ciò chì vulete cù qualsiasi dati è dispusitivi. L'applicazioni di l'utilizatori operanu à u livellu Ring 3 (modu d'utilizatore) è ùn sò micca permessi di fà ciò chì volenu, ma invece deve dumandà l'accessu ogni volta per fà una operazione particulari (cusì, l'applicazioni d'utilizatori anu accessu solu à i so dati è ùn ponu micca "ottene). in "a sandbox di qualcunu altru). Ring 1 è 2 sò destinati à l'usu da i cunduttori.

Prima di l'invenzione di l'Intel VT-x / AMD SVM, l'ipervisori correvanu in Ring 0, è l'invitati correvanu in Ring 1. Siccomu Ring 1 ùn hà micca abbastanza diritti per u funziunamentu normale di u SO, cù ogni chjama privilegiata da u sistema invitatu, u L'ipervisore avia da mudificà sta chjama à a mosca è eseguisce nantu à Ring 0 (assai cum'è QEMU faci). Quelli. binariu invitatu Micca hè stata eseguita direttamente nantu à u processatore, è ogni volta hà attraversu parechje mudificazioni intermedie nantu à a mosca.

L'overhead era significativu è questu era un grande prublema, è dopu i pruduttori di processori, indipindentamente l'un l'altru, liberavanu un inseme allargatu d'istruzzioni (Intel VT-x / AMD SVM) chì permettenu eseguisce u codice di u SO invitatu. DIRETTAMENTE nantu à u processatore di l'ospiti (bypassing any cost intermediate steps, as was the case before).

Cù l'avventu di Intel VT-x / AMD SVM, hè statu creatu un novu livellu speciale Ring -1 (minus one). È avà l'ipervisore corre nantu à questu, è l'invitati correnu nantu à Ring 0 è uttene un accessu privilegiatu à u CPU.

Quelli. eventualmente:

  • L'ospite funziona su Ring 0
  • l'invitati travaglianu in Ring 0
  • L'ipervisore funziona in Ring -1

4) QEMU-KVM

KVM dà l'accessu à l'invitati à Ring 0 è usa QEMU per emulà l'I / O (processore, dischi, rete, video, PCI, USB, porti seriali, etc. chì l'invitati "vedenu" è travaglianu).

Dunque QEMU-KVM (o KVM-QEMU) :)

CRÉDITI
Foto per attirà l'attenzione
Foto di anelli di prutezzione

PS U testu di stu articulu hè statu publicatu in u canali Telegram @RU_Voip cum'è una risposta à una quistione di unu di i participanti di u canali.

Scrivite in i cumenti induve ùn aghju micca capitu u tema currettamente o s'ellu ci hè qualcosa à aghjunghje.

Grazie!

Source: www.habr.com

Add a comment