¿El rendimiento de QEMU (todavía) va a la zaga de VirtualBox y hay una manera de mejorarlo sin el soporte de hardware + módulo de kernel kvm?

9

He notado varios artículos que afirman que QEMU es más lento que VirtualBox (sin asistencia de hardware), pero varios tienen años, y el más reciente parece ser del año pasado.

  • ¿Es cierto que QEMU es más lento que VirtualBox?
  • Si es así, ¿por qué?
  • ¿Hay algún truco para cerrar la brecha de rendimiento?

Algunos de mis sistemas host no tienen soporte de virtualización de hardware, por lo que estoy especialmente interesado en consejos de rendimiento que funcionan sin el módulo del kernel.

Catskul
fuente

Respuestas:

10

Si está hablando de la virtualización x86 en un host x86, tenga en cuenta que kqemu (el antiguo módulo del núcleo de aceleración para qemu) está en desuso. Kernel Virtual Machine (KVM) es "el camino a seguir" pero solo funciona en hosts Linux. El invitado puede ser el sistema operativo que desee siempre que sea arquitectura x86.

Arquitectura cruzada, qemu sigue siendo realmente lento; Justo hoy estaba probando el último qemu con Debian MIPS64 en el invitado ... era utilizable desde una terminal pero horriblemente lento en Xorg. que yo sepa, no puede usar instrucciones de aceleración del procesador como tablas de páginas extendidas o VT-x cuando va a hacer una arquitectura cruzada. Todo está emulado en software.

Entonces, para la virtualización x86 a x86, qemu "en bruto" es lento, pero KVM (que usa qemu) es rápido. Bastante rapido. Tan rápido que es la solución de virtualización recomendada por Red Hat para RHEL.

VirtualBox todavía vuela todo lo que qemu / kvm puede ofrecer en términos de rendimiento de gráficos 2d / 3d acelerado por hardware, porque kvm se enfoca en la virtualización del servidor y virtualbox se enfoca en la virtualización de escritorio. Pero definitivamente recomendaría que eche un vistazo a kvm si se trata de un servidor.

Editar: para sus hosts que no tienen aceleración de hardware, sufrirán una sobrecarga bastante grande, independientemente de la solución virt que utilicen. Emular cosas de hardware en software es difícil y costoso.

allquixotic
fuente
2
ls $(which kvm)muestra un enlace simbólico a qemu-system-x86_64. Supongo que eso es exactamente de lo que estabas hablando con KVM usando QEMU.
Catskul
Sí, pero KVM es, como su nombre lo indica, una máquina virtual basada en el núcleo , lo que significa que las entrañas del hipervisor están en el módulo del núcleo 'kvm'. Si lo desea, puede pensar que es similar al antiguo kqemu, pero arquitectónicamente es muy diferente. qemu es más una interfaz que un hipervisor real cuando kvm está en funcionamiento.
allquixotic
Ah, olvidé agregar: la razón por la cual qemu (y cualquier otro sistema de virtualización) es tan lento sin un "módulo de kernel" (como usted dice; lo que realmente quiere decir es "sin aceleración de hardware") es que ciertas operaciones de hardware Las actuaciones de invitados son muy difíciles de emular en software. Bueno, no es difícil en términos de poco confiable o complicado; solo sloooooooooooooow. Es por eso que Intel pasó la mayor parte de una década dándonos instrucciones aceleradas por hardware para los bits más lentos de virtualización en el camino de VT-x y EPT. La única solución es usar hardware que admita estos conjuntos de instrucciones.
allquixotic
¿Hay algo que haga que virtualbox sea más rápido incluso sin aceleración de hardware?
Catskul
No. Sin aceleración de hardware, el rendimiento debería ser bastante igual. VirtualBox puede tener optimizaciones x86 avanzadas que hacen que se ejecute un poco más rápido en software, lo que sería apropiado ya que virtualbox solo admite x86 en primer lugar, mientras que qemu tiene un campo de juego mucho más amplio (arquitecturas no x86). Pero este es un detalle de implementación / diseño que básicamente se reduce a la localidad de caché, bucles internos optimizados, ensamblador codificado a mano, almacenamiento en caché de E / S de disco del lado del host u otros trucos. No estoy seguro de hasta qué punto vbox hace estas cosas que qemu no hace pero no son muy relevantes ...
allquixotic
1

Suponiendo un host con una CPU con capacidad de virtualización (Intel VT-x, AMD SVM), que ejecuta Qemu en un kernel (Linux con KVM), es razonablemente rápido.

Las razones técnicas para que Qemu sea lento con 2D (youtube, hoja de cálculo, juegos) y la emulación 3D son oscuras para mí. Sin embargo, puedo adivinar que los "controladores de video" simplemente no son lo suficientemente buenos: el hardware de gráficos en el hardware no se usa de manera óptima.

En el lado positivo, un desarrollo reciente introdujo el marco SPICE en qemu. En realidad tiene unos años y parece razonablemente maduro. Los beneficios de rendimiento de video de correr con el controlador de video QXL son enormes en mi experiencia (desarrollo web 2D). No sé qué tan bien se compara con Virtualbox, pero definitivamente es una mejora. Creo que SPICE es imprescindible para cualquiera que ejecute Windows en Qemu.

Esta es solo mi opinión y debe tenerse en cuenta que nunca he intentado ejecutar ninguna reproducción 3D o de video en el invitado.

Ярослав Рахматуллин
fuente
1
Si por "emulación orientada a gráficos" se refiere a la aceleración 3D, es porque las GPU no se pueden virtualizar como las CPU. La emulación de software es imposiblemente lenta, por lo que actualmente hay dos soluciones: 1. Paso de API (es decir, las llamadas de DirectX en el invitado se ejecutan como llamadas de DirectX en el host) 2. Paso de VGA (el verdadero negocio: la tarjeta gráfica completa está disponible al invitado). QEMU es compatible con # 2.
Marcus
@Marcus Passthrough es el camino a seguir.
Ярослав Рахматуллин