Principi generali di funzionamento di QEMU-KVM

Principi generali di funzionamento di QEMU-KVM

La mia comprensione attuale:

1)KVM

KVM (Kernel-based Virtual Machine) è un hypervisor (VMM – Virtual Machine Manager) in esecuzione come modulo sul sistema operativo Linux. Un hypervisor è necessario per eseguire alcuni software in un ambiente (virtuale) inesistente e allo stesso tempo nascondere a questo software il vero hardware fisico su cui viene eseguito questo software. L'hypervisor funge da "distanziatore" tra l'hardware fisico (host) e il sistema operativo virtuale (guest).

Poiché KVM è un modulo standard del kernel Linux, riceve tutte le funzionalità richieste dal kernel (gestione della memoria, pianificazione, ecc.). E di conseguenza, alla fine, tutti questi vantaggi vanno agli ospiti (poiché gli ospiti lavorano su un hypervisor che gira sul/nel kernel del sistema operativo Linux).

KVM è molto veloce, ma da solo non è sufficiente per eseguire un sistema operativo virtuale, perché... Ciò richiede l'emulazione I/O. Per I/O (CPU, dischi, rete, video, PCI, USB, porte seriali, ecc.) KVM utilizza QEMU.

2) QEMU

QEMU (Quick Emulator) è un emulatore per vari dispositivi che consente di eseguire sistemi operativi progettati per un'architettura su un'altra (ad esempio ARM -> x86). Oltre al processore, QEMU emula vari dispositivi periferici: schede di rete, HDD, schede video, PCI, USB, ecc.

Funziona così:

Le istruzioni/codice binario (ad esempio ARM) vengono convertiti in codice intermedio indipendente dalla piattaforma utilizzando il convertitore TCG (Tiny Code Generator) e quindi questo codice binario indipendente dalla piattaforma viene convertito in istruzioni/codice di destinazione (ad esempio x86).

ARM –> codice_intermedio –> x86

In sostanza, puoi eseguire macchine virtuali su QEMU su qualsiasi host, anche con modelli di processore più vecchi che non supportano Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). Tuttavia, in questo caso, funzionerà molto lentamente, a causa del fatto che il codice binario in esecuzione deve essere ricompilato al volo due volte, utilizzando TCG (TCG è un compilatore Just-in-Time).

Quelli. QEMU in sé è fantastico, ma funziona molto lentamente.

3) Anelli di protezione

Principi generali di funzionamento di QEMU-KVM

Il codice binario del programma sui processori funziona per un motivo, ma si trova a diversi livelli (anelli/Anelli di protezione) con diversi livelli di accesso ai dati, dal più privilegiato (Anello 0), al più limitato, regolamentato e "con i dadi serrati" ” (Anello 3 ).

Il sistema operativo (kernel del sistema operativo) funziona su Ring 0 (modalità kernel) e può fare ciò che vuole con qualsiasi dato e dispositivo. Le applicazioni utente operano al livello Ring 3 (modalità utente) e non possono fare quello che vogliono, ma devono invece richiedere l'accesso ogni volta per eseguire una particolare operazione (quindi, le applicazioni utente hanno accesso solo ai propri dati e non possono "ottenere" nella" sandbox di qualcun altro). Gli anelli 1 e 2 sono destinati all'uso da parte dei conducenti.

Prima dell'invenzione di Intel VT-x / AMD SVM, gli hypervisor funzionavano sul Ring 0 e gli ospiti sul Ring 1. Poiché Ring 1 non dispone di diritti sufficienti per il normale funzionamento del sistema operativo, con ogni chiamata privilegiata dal sistema guest, il l'hypervisor ha dovuto modificare questa chiamata al volo ed eseguirla su Ring 0 (proprio come fa QEMU). Quelli. binario ospite NON è stato eseguito direttamente sul processore e ogni volta ha subito diverse modifiche intermedie al volo.

Il sovraccarico era significativo e questo rappresentava un grosso problema, quindi i produttori di processori, indipendentemente l'uno dall'altro, hanno rilasciato un set esteso di istruzioni (Intel VT-x / AMD SVM) che consentiva l'esecuzione del codice del sistema operativo guest DIRETTAMENTE sul processore host (ignorando eventuali costosi passaggi intermedi, come avveniva in precedenza).

Con l'avvento di Intel VT-x / AMD SVM, è stato creato un nuovo speciale livello Ring -1 (meno uno). E ora l'hypervisor viene eseguito su di esso e gli ospiti vengono eseguiti su Ring 0 e ottengono accesso privilegiato alla CPU.

Quelli. infine:

  • l'host viene eseguito sull'anello 0
  • gli ospiti lavorano sul Ring 0
  • l'hypervisor viene eseguito sull'anello -1

4) QEMU-KVM

KVM fornisce agli ospiti l'accesso a Ring 0 e utilizza QEMU per emulare l'I/O (processore, dischi, rete, video, PCI, USB, porte seriali, ecc. che gli ospiti "vedono" e con cui lavorano).

Quindi QEMU-KVM (o KVM-QEMU) :)

CREDITS
Immagine per attirare l'attenzione
Immagine di Anelli di protezione

PS Il testo di questo articolo è stato originariamente pubblicato nel canale Telegram @RU_Voip come risposta a una domanda di uno dei partecipanti al canale.

Scrivete nei commenti dove non capisco correttamente l'argomento o se c'è qualcosa da aggiungere.

Grazie!

Fonte: habr.com

Aggiungi un commento