Principios xerais de funcionamento de QEMU-KVM

Principios xerais de funcionamento de QEMU-KVM

O meu entendemento actual:

1) KVM

KVM (Máquina virtual baseada en kernel) é un hipervisor (VMM - Virtual Machine Manager) que se executa como un módulo no sistema operativo Linux. Precísase un hipervisor para executar algún software nun entorno (virtual) inexistente e ao mesmo tempo ocultar deste software o hardware físico real no que se executa este software. O hipervisor actúa como un "separador" entre o hardware físico (anfitrión) e o sistema operativo virtual (convidado).

Dado que KVM é un módulo estándar do núcleo de Linux, recibe todos os beneficios necesarios do núcleo (xestión da memoria, programador, etc.). E en consecuencia, ao final, todos estes beneficios van para os convidados (xa que os convidados traballan nun hipervisor que se executa no núcleo do sistema operativo Linux).

KVM é moi rápido, pero por si só non é suficiente para executar un SO virtual, porque... Isto require a emulación de E/S. Para E/S (CPU, discos, rede, vídeo, PCI, USB, portos serie, etc.) KVM usa QEMU.

2) QEMU

QEMU (Quick Emulator) é un emulador para varios dispositivos que permite executar sistemas operativos deseñados para unha arquitectura noutra (por exemplo, ARM -> x86). Ademais do procesador, QEMU emula varios dispositivos periféricos: tarxetas de rede, HDD, tarxetas de vídeo, PCI, USB, etc.

Funciona así:

As instrucións/código binario (por exemplo, ARM) convértense en código intermedio independente da plataforma mediante o conversor TCG (Tiny Code Generator) e despois este código binario independente da plataforma convértese en instrucións/código de destino (por exemplo, x86).

ARM –> código_intermedio –> x86

Esencialmente, pode executar máquinas virtuais en QEMU en calquera host, mesmo con modelos de procesadores máis antigos que non admiten Intel VT-x (Tecnoloxía de virtualización Intel) / AMD SVM (máquina virtual segura AMD). Non obstante, neste caso, funcionará moi lentamente, debido ao feito de que o código binario en execución debe recompilarse ao voo dúas veces, usando TCG (TCG é un compilador Just-in-Time).

Eses. QEMU en si é xenial, pero funciona moi lentamente.

3) Aneis de protección

Principios xerais de funcionamento de QEMU-KVM

O código binario do programa nos procesadores funciona por un motivo, pero está situado en distintos niveis (aneles / aneis de protección) con distintos niveis de acceso aos datos, dende o máis privilexiado (Ring 0), ata o máis limitado, regulado e “coas porcas apretadas”. ” (Anel 3).

O sistema operativo (núcleo do sistema operativo) funciona en Ring 0 (modo núcleo) e pode facer o que queira con calquera dato e dispositivo. As aplicacións de usuario operan no nivel Ring 3 (modo de usuario) e non poden facer o que queiran, senón que deben solicitar acceso cada vez para realizar unha determinada operación (polo tanto, as aplicacións de usuario só teñen acceso aos seus propios datos e non poden “obter en” caixa de area doutra persoa). Os anel 1 e 2 están pensados ​​para o seu uso polos condutores.

Antes da invención de Intel VT-x/AMD SVM, os hipervisores corrían no Ring 0 e os convidados funcionaban no Ring 1. Dado que Ring 1 non ten suficientes dereitos para o funcionamento normal do SO, con cada chamada privilexiada do sistema invitado, hipervisor tivo que modificar esta chamada ao voo e executala no Ring 0 (como fai QEMU). Eses. binario convidado NON executouse directamente no procesador, e cada vez pasou por varias modificacións intermedias sobre a marcha.

A sobrecarga foi significativa e este foi un gran problema, e entón os fabricantes de procesadores, independentemente uns dos outros, lanzaron un conxunto estendido de instrucións (Intel VT-x / AMD SVM) que permitía executar código do sistema operativo convidado. DIRECTAMENTE no procesador host (obviando calquera paso intermedio custoso, como era o caso antes).

Coa chegada de Intel VT-x / AMD SVM, creouse un novo nivel especial de anel -1 (menos un). E agora o hipervisor execútase nel e os convidados corren no Ring 0 e obteñen acceso privilexiado á CPU.

Eses. finalmente:

  • o host execútase no anel 0
  • os convidados traballan no Ring 0
  • o hipervisor execútase no anel -1

4) QEMU-KVM

KVM dá aos hóspedes acceso ao Ring 0 e usa QEMU para emular a E/S (procesador, discos, rede, vídeo, PCI, USB, portos serie, etc. que os hóspedes "ve" e cos que traballan).

De aí QEMU-KVM (ou KVM-QEMU) :)

Créditos
Imaxe para chamar a atención
Imaxe de Anillas de protección

PD O texto deste artigo publicouse orixinalmente na canle de Telegram @RU_Voip como resposta a unha pregunta dun dos participantes da canle.

Escribe nos comentarios onde non entendo ben o tema ou se hai algo que engadir.

Grazas!

Fonte: www.habr.com

Engadir un comentario