Cuando comenzamos en el mundo de la virtualización, la opción más recurrente para comenzar es KVM. Después nos damos cuenta de la existencia de QEMU y siempre hay muchas  preguntas en torno a cómo funciona KVM y QEMU o cuál es la diferencia entre ellos, es por esto que vamos a revisar a detalle su interacción.

SOBRE KVM

KVM (Máquina Virtual basada en el Kernel) es una solución de virtualización para Linux en hardware x86 que contiene extensiones de virtualización (Intel VT o AMD-V). El componente KVM para el núcleo está incluido en Linux desde la versión 2.6.20. KVM es un software de código abierto

SOBRE QEMU

QEMU es un emulador de procesadores basado en la traducción dinámica de binarios (conversión del código binario de la arquitectura fuente en código entendible por la arquitectura huésped).

¿COMO TRABAJAN JUNTOS?

En el hardware real, el sistema operativo traduce las instrucciones de los programas para que sean ejecutadas por el CPU físico. En una máquina virtual es lo mismo, pero la diferencia es que el CPU está virtualizado por el hipervisor y el hipervisor tiene que traducir las instrucciones del CPU virtual y convertirlo en instrucciones para el CPU físico. Esta traducción tiene una gran sobrecarga de rendimiento.

Para minimizar esta sobrecarga, los procesadores admiten extensiones de virtualización. Intel soporta una tecnología llamada VT-X y el equivalente AMD es AMD-V. Con el uso de estos, una rebanada de CPU físico se puede asignar directamente al CPU virtual. Así que las instrucciones de la CPU virtual se pueden ejecutar directamente en la rebanada del CPU físico. Evitando así la traducción que tendría que hacer el hipervisor.

KVM es el módulo del kernel de Linux que permite esta asignación de CPU físico para CPU virtual. Esta asignación proporciona la aceleración de hardware para la máquina virtual y aumenta su rendimiento. De hecho, QEMU utiliza esta aceleración cuando el tipo de virtualización es elegido como KVM.

Al trabajar juntos, KVM accede directamente al CPU físico y a la memoria, a su vez QEMU emula los recursos de hardware, como el disco duro, video, USB, etc,

Si el CPU del servidor no admite la extensión de virtualización, entonces resultará imposible utilizar KVM y es el trabajo del hipervisor ejecutar la instrucción del CPU virtual utilizando la traducción al CPU físico. QEMU utiliza TCG o Tiny Code Generator para traducir de manera óptima y ejecutar las instrucciones de CPU virtuales en la CPU física, pero al trabajar sin KVM se tendrá una sobrecarga de rendimiento por el desgaste de la traducción.

CONCLUSIÓN

KVM necesita Qemu (emulador) para la funcionalidad completa como hipervisor. QEMU es autosuficiente, y KVM es realmente un módulo del kernel de Linux para la explotación de extensiones VT que actúa como controlador de las capacidades de CPU físicas.

Así puedes notar entonces que QEMU necesita a KVM para aumentar su rendimiento.. Por otro lado, KVM por sí solo no puede proporcionar la solución de virtualización completa. Necesita de QEMU.

¿Conocías la diferencia?