Principios generales de funcionamiento de QEMU-KVM

imagen

Mi comprensión actual:

1) KVM


KVM (máquina virtual basada en el núcleo): un hipervisor (VMM - Virtual Machine Manager), que funciona como un módulo en el sistema operativo Linux. Se necesita un hipervisor para ejecutar algún software en un entorno inexistente (virtual) y, al mismo tiempo, ocultar de este software el hardware físico real en el que funciona este software. El hipervisor actúa como una "franja" entre el hardware físico (host) y el SO virtual (invitado).

Como KVM es un módulo estándar del kernel de Linux, recibe del kernel todos los nishtyaki necesarios (trabajando con memoria, programador, etc.). Y en consecuencia, en última instancia, todas estas ventajas van a los invitados (ya que los invitados trabajan en un hipervisor que se ejecuta en / en el kernel de Linux).

KVM es muy rápido, pero por sí solo no es suficiente para ejecutar un SO virtual, porque Esto requiere emulación de E / S. Para E / S (procesador, unidades, red, video, PCI, USB, puertos seriales, etc.) KVM usa QEMU.

2) QEMU


QEMU (Quick Emulator): un emulador de 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 un código intermedio independiente de la plataforma utilizando el convertidor TCG (Generador de código minúsculo), y luego este código binario independiente de la plataforma se convierte en instrucciones / código objetivo (por ejemplo, x86).

BRAZO -> middleware -> x86

De hecho, puede ejecutar máquinas virtuales en QEMU en cualquier host, incluso con modelos de procesadores más antiguos que no son compatibles con Intel VT-x (Tecnología de virtualización Intel) / AMD SVM (Máquina virtual segura AMD). Sin embargo, en este caso, funcionará muy lentamente, debido al hecho de que el binario se debe volver a compilar sobre la marcha dos veces usando TCG (TCG es el compilador Just-in-Time).

Es decir QEMU en sí es mega genial, pero funciona muy lentamente.

3) anillos de protección


imagen

El código de programa binario en los procesadores no funciona así, sino que se encuentra en diferentes niveles (anillos de protección) con diferentes niveles de acceso a los datos, desde los más privilegiados (Anillo 0), hasta los más limitados, sobrerregulados y "con tuercas apretadas" (Anillo 3 )

El sistema operativo (kernel del sistema operativo) se ejecuta en Ring 0 (modo kernel) y puede hacer cualquier cosa con cualquier dato y dispositivo. Las aplicaciones de usuario operan en el nivel del Anillo 3 (modo de usuario) y no tienen el derecho de hacer lo que quieran, sino que cada vez deben solicitar acceso para llevar a cabo una operación (de esta manera, las aplicaciones de usuario tienen acceso solo a sus propios datos y no pueden "Entrar en" el cajón de arena de otra persona "). Los anillos 1 y 2 están destinados a ser utilizados por los conductores.

Antes de la invención de Intel VT-x / AMD SVM, los hipervisores trabajaban en el Anillo 0 y los invitados trabajaban en el Anillo 1. Como el Anillo 1 no tiene suficientes derechos para el funcionamiento normal del sistema operativo, entonces, con cada llamada privilegiada del sistema invitado, el hipervisor tuvo que modificar esta llamada sobre la marcha y ejecutarlo en el Anillo 0 (algo como lo hace QEMU). Es decir el código binario invitado NO se ejecutó directamente en el procesador, y cada vez que se produjeron varias modificaciones intermedias.

La sobrecarga fue significativa y este fue un gran problema, y ​​luego los fabricantes de procesadores, independientemente uno del otro, lanzaron un conjunto extendido de instrucciones (Intel VT-x / AMD SVM) que permiten ejecutar el código del SO invitado directamente en el procesador host (sin pasar por los costosos pasos intermedios, como fue antes).

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

Es decir como resultado:

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

4) QEMU-KVM


KVM proporciona a los invitados acceso a Ring 0 y usa QEMU para emular E / S (procesador, discos, red, video, PCI, USB, puertos seriales, etc., que los invitados "ven" y trabajan).

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

CRÉDITOS
Una imagen para llamar la atención.
Anillos de protección de imagen

PD: El texto de este artículo se publicó originalmente en el canal Telegram @RU_Voip como respuesta a la pregunta de uno de los participantes del canal.

Escriba en los comentarios en qué lugares no entiendo el tema correctamente o si hay algo para complementar.

Gracias

Source: https://habr.com/ru/post/466549/


All Articles