Principios generales de funcionamiento de QEMU-KVM

Principios generales de funcionamiento de QEMU-KVM

Mi comprensión actual:

1) KVM

KVM (máquina virtual basada en kernel) es un hipervisor (VMM – Virtual Machine Manager) que se ejecuta como un módulo en el sistema operativo Linux. Se necesita un hipervisor para ejecutar algún software en un entorno (virtual) inexistente y al mismo tiempo ocultar de este software el hardware físico real en el que se ejecuta este software. El hipervisor actúa como un "espaciador" entre el hardware físico (host) y el sistema operativo virtual (invitado).

Dado que KVM es un módulo estándar del kernel de Linux, recibe todos los beneficios necesarios del kernel (administración de memoria, programador, etc.). Y en consecuencia, al final, todos estos beneficios van a los invitados (ya que los invitados trabajan en un hipervisor que se ejecuta en el kernel del sistema operativo Linux).

KVM es muy rápido, pero por sí solo no es suficiente para ejecutar un sistema operativo virtual, porque... Esto requiere emulación de E/S. Para E/S (CPU, discos, red, vídeo, PCI, USB, puertos serie, etc.) KVM utiliza QEMU.

2) QEMU

QEMU (Quick Emulator) es un emulador para varios dispositivos que le permite ejecutar sistemas operativos diseñados para una arquitectura en otra (por ejemplo, ARM -> x86). Además del procesador, QEMU emula varios dispositivos periféricos: tarjetas de red, HDD, tarjetas de video, PCI, USB, etc.

Funciona así:

Las instrucciones/código binario (por ejemplo, ARM) se convierten en código intermedio independiente de la plataforma utilizando el convertidor TCG (Tiny Code Generator) y luego este código binario independiente de la plataforma se convierte en instrucciones/código de destino (por ejemplo, x86).

ARM –> código_intermedio –> x86

Básicamente, puede ejecutar máquinas virtuales en QEMU en cualquier host, incluso con modelos de procesador más antiguos que no son compatibles con Intel VT-x (Intel Virtualization Technology)/AMD SVM (AMD Secure Virtual Machine). Sin embargo, en este caso, funcionará muy lentamente, debido al hecho de que el código binario en ejecución debe recompilarse sobre la marcha dos veces, utilizando TCG (TCG es un compilador Just-in-Time).

Aquellos. QEMU en sí es genial, pero funciona muy lentamente.

3) Anillos de protección

Principios generales de funcionamiento de QEMU-KVM

El código de programa binario en los procesadores funciona por una razón, pero está ubicado en diferentes niveles (Anillos / Anillos de protección) con diferentes niveles de acceso a los datos, desde el más privilegiado (Anillo 0), hasta el más limitado, regulado y “con las tuercas apretadas”. ” (Anillo 3).

El sistema operativo (kernel del sistema operativo) se ejecuta en Ring 0 (modo kernel) y puede hacer lo que quiera con cualquier dato y dispositivo. Las aplicaciones de usuario operan en el nivel del Anillo 3 (modo de usuario) y no se les permite hacer lo que quieran, sino que deben solicitar acceso cada vez para realizar una operación particular (por lo tanto, las aplicaciones de usuario solo tienen acceso a sus propios datos y no pueden "obtener acceso"). en” la zona de pruebas de otra persona). Los anillos 1 y 2 están destinados a los conductores.

Antes de la invención de Intel VT-x / AMD SVM, los hipervisores se ejecutaban en el Anillo 0 y los invitados en el Anillo 1. Dado que el Anillo 1 no tiene derechos suficientes para el funcionamiento normal del sistema operativo, con cada llamada privilegiada del sistema invitado, el El hipervisor tuvo que modificar esta llamada sobre la marcha y ejecutarla en el Anillo 0 (al igual que lo hace QEMU). Aquellos. binario invitado NO se ejecutó directamente en el procesador y cada vez pasó por varias modificaciones intermedias sobre la marcha.

La sobrecarga fue significativa y esto fue un gran problema, y ​​luego los fabricantes de procesadores, de forma independiente, lanzaron un conjunto ampliado de instrucciones (Intel VT-x / AMD SVM) que permitían ejecutar código del sistema operativo invitado. DIRECTAMENTE en el procesador host (evitando costosos pasos intermedios, como era el caso antes).

Con la llegada de Intel VT-x / AMD SVM, se creó un nuevo nivel de anillo especial -1 (menos uno). Y ahora el hipervisor se ejecuta en él y los invitados se ejecutan en el Anillo 0 y obtienen acceso privilegiado a la CPU.

Aquellos. eventualmente:

  • el host se ejecuta en el anillo 0
  • los invitados trabajan en el anillo 0
  • El hipervisor se ejecuta en Ring -1.

4) QEMU-KVM

KVM brinda a los invitados acceso al Anillo 0 y utiliza QEMU para emular las E/S (procesador, discos, red, video, PCI, USB, puertos serie, etc. que los invitados "ven" y con los que trabajan).

De ahí QEMU-KVM (o KVM-QEMU) :)

CRÉDITOS
Imagen para llamar la atención.
Imagen de anillos de protección

PD El texto de este artículo fue publicado originalmente en el canal Telegram. @RU_Voip como respuesta a una pregunta de uno de los participantes del canal.

Escribe en los comentarios donde no entiendo bien el tema o si hay algo que añadir.

Gracias!

Fuente: habr.com

Añadir un comentario