Virtualización: ¿Cuál es la diferencia entre KVM y QEMU?


Mejor respuesta

KVM es una bifurcación de QEMU. El código KVM se modifica para admitir la aceleración de hardware cuando está disponible (la misma arquitectura para la máquina virtual host e invitada)

La mayoría de las veces, QEMU se usa para emular otra arquitectura (por ejemplo, Emular ARM / Power arch. Usando un procesador x86) . He estado usando esto para ejecutar una imagen RaspberryPI que se ejecuta en ARM en mi computadora portátil que tiene un procesador Intel.

Una diferencia entre ellos es que QEMU se ejecuta en un procesador sin necesidad de una extensión de virtualización de hardware (Intel VT / VT-d, AMD-V) mientras que KVM lo usa. Las extensiones de virtualización de hardware le permiten acceder al hardware en la máquina física directamente. La desventaja es que la base de código KVM no puede emular otra arquitectura.

Pero cuando KVM se ejecuta en una máquina sin HW virt ext., vuelve a QEMU para ejecutar la VM.

Para verificar si su procesador es compatible con hardware virt., para Windows, puede usar http://www.cpuid.com/cpuz.php o http://www.grc.com/securable.htm y busque la extensión «vmx» o «svm». (Esto último es mucho más fácil)

En Linux, use

  • egrep «(vmx | svm)» / proc / cpuinfo

La fusión de ambos códigos base está en proceso y los veremos como un solo proyecto en el futuro. Esto hará que KVM quede obsoleto y se fusione con el código base QEMU.

Por cierto, casi todos los nuevos procesadores lanzados por Intel y AMD admiten la virtualización, pero he visto una computadora portátil Acer con un procesador Intel que no admite la virtualización de hardware. Además, compruebe amablemente su BIOS si tiene esta extensión habilitada. Otro BIOS tiene la extensión deshabilitada de manera predeterminada.

Respuesta

Originalmente de Fallo del servidor

KVM :

KVM es un par de cosas: primero es un módulo del kernel de Linux (ahora incluido en la línea principal) que cambia el procesador a un nuevo estado «invitado». El estado invitado tiene su propio conjunto de estados de anillo, pero las instrucciones ring0 privilegiadas recurren al código del hipervisor. Dado que es un nuevo modo de ejecución del procesador, el código no tiene que ser modificado de ninguna manera.

Aparte del cambio de estado del procesador, el módulo del kernel también maneja algunas partes de bajo nivel del emulación, como los registros MMU (utilizados para manejar VM) y algunas partes del hardware emulado PCI.

segundo, KVM es una bifurcación del ejecutable Qemu. Ambos equipos trabajan activamente para mantener la diferencia al mínimo y hay avances para reducirla. Eventualmente, el objetivo es que Qemu funcione en cualquier lugar y, si hay un módulo de kernel de KVM disponible, podría usarse. Pero en el futuro previsible, el equipo de Qemu se enfoca en la emulación y portabilidad de hardware, mientras que la gente de KVM se enfoca en el módulo del kernel (a veces moviendo pequeñas partes de la emulación allí, si se ha demostrado que mejora el rendimiento) e interactuando con el resto del código del espacio de usuario. .

El ejecutable kvm-qemu funciona como Qemu normal: asigna RAM, carga el código y, en lugar de volver a compilarlo o llamar a KQemu, genera un hilo (esto es importante); el hilo llama al módulo del kernel de KVM para cambiar al modo de invitado y procede a ejecutar el código de la VM. En una instrucción de privilegio, vuelve al módulo del kernel de KVM, que, si es necesario, indica al hilo de Qemu que maneje la mayor parte de la emulación de hardware.

Una de las cosas buenas de esta arquitectura es que el invitado el código se emula en un hilo posix, que puede administrar con herramientas normales de Linux. Si desea una VM con 2 o 4 núcleos, kvm-qemu crea 2 o 4 subprocesos, cada uno de ellos llama al módulo del kernel de KVM para comenzar a ejecutarse. La concurrencia (si tiene suficientes núcleos reales) o la programación (si no los tiene) es administrada por el programador normal de Linux, manteniendo el código pequeño y las sorpresas limitadas.

Qemu :

QEmu es un software completo e independiente por sí mismo. Lo usa para emular máquinas, es muy flexible y portátil. Principalmente funciona mediante un «recompilador» especial que transforma el código binario escrito para un procesador dado en otro (digamos, para ejecutar código MIPS en un mac PPC, o ARM en una PC x86).

Para emular algo más que el procesador, Qemu incluye una larga lista de emuladores de periféricos: disco, red, VGA, PCI, USB, puertos serie / paralelo, etc.

Fuente: Diferencia entre KVM y QEMU

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *