Saltar al contenido

Diferencia entre KVM y QEMU

Nuestro grupo de expertos luego de algunos días de investigación y recopilación de de datos, encontramos la respuesta, deseamos que te sea de gran utilidad para tu proyecto.

Solución:

Solución 1:

Qemu:

QEmu es un software completo e independiente en sí mismo. Lo usas 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 una 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.

KQemu:

En el caso específico en el que tanto el origen como el destino tienen la misma arquitectura (como el caso común de x86 en x86), todavía tiene que analizar el código para eliminar las ‘instrucciones privilegiadas’ y reemplazarlas con cambios de contexto. Para hacerlo lo más eficiente posible en x86 Linux, hay un módulo de kernel llamado KQemu que se encarga de esto.

Al ser un módulo del kernel, KQemu es capaz de ejecutar la mayor parte del código sin cambios, reemplazando solo las instrucciones ring0 de nivel más bajo. En ese caso, el espacio de usuario Qemu aún asigna toda la RAM para la máquina emulada y carga el código. La diferencia es que en lugar de recompilar el código, llama a KQemu para escanearlo / parchearlo / ejecutarlo. Toda la emulación de hardware periférico se realiza en Qemu.

Esto es mucho más rápido que Qemu simple porque la mayoría del código no se modifica, pero aún tiene que transformar el código ring0 (la mayor parte del código en el kernel de la VM), por lo que el rendimiento aún sufre.

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 de “invitado”. El estado de 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 de procesador, no es necesario modificar el código de ninguna manera.

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

En segundo lugar, KVM es una bifurcación del ejecutable Qemu. Ambos equipos trabajan activamente para mantener las diferencias al mínimo, y hay avances en su reducción. Eventualmente, el objetivo es que Qemu funcione en cualquier lugar y, si hay un módulo de kernel KVM disponible, podría usarse automáticamente. 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 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 recompilarlo 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 máquina virtual. En una instrucción privilegiada, vuelve al módulo del kernel KVM, que, si es necesario, indica al hilo Qemu que maneje la mayor parte de la emulación de hardware.

Una de las cosas buenas de esta arquitectura es que el código de invitado 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 simultaneidad, si tiene suficientes núcleos reales, o la programación, si no, es administrada por el programador normal de Linux, lo que mantiene el código pequeño y las sorpresas limitadas.

Solucion 2:

Cuando se trabaja en conjunto, KVM arbitra el acceso a la CPU y la memoria, y QEMU emula los recursos de hardware (disco duro, video, USB, etc.). Cuando trabaja solo, QEMU emula tanto la CPU como el hardware.


Solución 3:

Qemu es un software de virtualización de emulación de procesador con soporte para muchos dispositivos virtuales como hdd, mb, ram, snd, eth, usb, vga … KVM es un módulo del kernel que permite que pasa a través núcleos de cpu a través de host-passthrough sin virtualizarlos. También permite pasar a través de dispositivos pci a través de vfio-pci módulo del kernel. Todo esto es posible a través de IOMMU (Unidad de mapeo de memoria de entrada y salida), que mapea reales DMA direcciones a direcciones virtualizadas para que el acceso directo sea posible y metal básico Rendimiento (nativo). IOMMU es un mecanismo que forma parte del software en el kernel y parte del hardware en los conjuntos de chips, que se presenta como VT-D (vmx)AMD-VI (svm). SR-IOV es una función de conjunto de chips que permite dividir un dispositivo pci en varios virtuales sin que el rendimiento disminuya a través del acceso IO directo paralelizado.

Libvirt es una biblioteca que le permite utilizar Python y otros lenguajes de programación para configurar máquinas virtuales. Virsh es un conjunto de herramientas que funciona en la terminal para monitorear y configurar los ajustes de la máquina virtual. Virt-manager es un reproductor vmware como gui como alternativa a virsh y usa libvirt.

Qemu-img es una herramienta cli que crea, convierte y toma instantáneas de imágenes de disco. Qemu-nbd también es una herramienta cli que permite el acceso de E / S sin procesar al disco virtual a través de la red a través de nbd.
Virto es el controlador de acceso de iommu y el nombre del método a discos, nics (ethernet) y video. Virgil es opengl apoyando virtio vga. Redhat y Fedora tienen imágenes de cd rom iso del controlador virtio para Windows y Linux en sus sitios web.

OVMF es un firmware de máquina virtual abierto que proporciona una imagen de arranque UEFI para máquinas virtuales qemu. especia es un cliente vnc muy rápido para máquinas virtuales qemu.

Puede comenzar a tocar el violín ingresando estos en la terminal de ubuntu o cualquier debian:

sudo apt-get update
sudo apt-get install qemu-kvm libvirt-bin virt-manager ovmf
virt-manager 

La experiencia aporta claridad sobre las funciones de estas terminologías semiconceptuales al introducir la realización de la respuesta a la pregunta “¿Qué no sería posible sin X ? “.

Si entiendes que te ha sido útil nuestro post, nos gustaría que lo compartas con otros desarrolladores de esta forma nos ayudas a dar difusión a este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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