KVM / QEMU: la aceleración de hardware no funciona

2

Intenté instalar mi primera máquina virtual con KVM y QEMU, pero parece que usa la aceleración de hardware como estaba previsto. Llegué a esa conclusión primero porque es terriblemente lento y segundo debido a la producción de

$lsmod | grep kvm
kvm_intel        180224 0
kvm              708698 1 kvm_intel
irqbypass         13284 1 kvm

cuando la máquina está funcionando, el valor de kvm_intel debería ser 1, ¿correcto?

Mi máquina host es una Dell XPS 13 con Arch Linux (recientemente actualizada, por supuesto). El sistema invitado también es Arch. Ambos de 64 bits.

Revisé todo lo que encontré en https://wiki.archlinux.org/index.php/KVM , concluyendo que mi hardware admite la virtualización:

$'LC_ALL=C lscpu | grep Virtualization
Virtualization:      VT-x

y que los módulos del núcleo están incluidos y cargados:

$zgrep CONFIG_KVM /proc/config.gz
CONFIG_KVM_GUEST=y               
# CONFIG_KVM_DEBUG_FS is not set
CONFIG_KVM_MMIO=y
CONFIG_KVM_ASYNC_PF=y
CONFIG_KVM_VFIO=y
CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y
CONFIG_KVM_COMPAT=y
CONFIG_KVM=m
CONFIG_KVM_INTEL=m
CONFIG_KVM_AMD=m
CONFIG_KVM_AMD_SEV=y
CONFIG_KVM_MMU_AUDIT=y

Lo mismo para virtio

$zgrep VIRTIO /proc/config.gz
CONFIG_BLK_MQ_VIRTIO=y
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO_VSOCKETS_COMMON=m
CONFIG_NET_9P_VIRTIO=m
CONFIG_VIRTIO_BLK=m
# CONFIG_VIRTIO_BLK_SCSI is not set
CONFIG_SCSI_VIRTIO=m
CONFIG_VIRTIO_NET=m
CONFIG_CAIF_VIRTIO=m
CONFIG_VIRTIO_CONSOLE=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_DRM_VIRTIO_GPU=m
CONFIG_VIRTIO=m
CONFIG_VIRTIO_MENU=y
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_INPUT=m
CONFIG_VIRTIO_MMIO=m
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
CONFIG_RPMSG_VIRTIO=m
CONFIG_CRYPTO_DEV_VIRTIO=m

verificar si está cargado (ver arriba para kvm):

$lsmod | grep virtio
virtio        16384  0

Nuevamente, virtio parece no ser usado. ¿Estoy interpretando esto correctamente?

También verifiqué que el soporte de virtualización está activado en el BIOS (versión reciente A15 provista por Dell en febrero de este año), que era todo el tiempo.

El usuario está en el grupo kvm (que no estaba al instalar la máquina virtual, ¿podría ser ese el problema?)

La página que encontré https://warpedtimes.wordpress.com/2010/01/06/hardware-accelerated-virtualization-with-qemu-and-kvm/ me animó en la idea de que hay algo mal, pero ninguno de los propuestos Se aplican problemas. Tampoco recibo un mensaje de error de QEMU y no veo nada relacionado con kvm o virtio en dmesg.

La red funciona bien, la resolución es como VGA, pero aún no investigué sobre eso. Entonces esto podría ser una cuestión de configuración.

El archivo de disco es sin formato y comienzo la VM con la opción -m 1024. El modo de arranque es heredado (no pude descubrir cómo hacer que kvm arranque en modo uefi).

¿Alguien tiene una idea de cuál es mi problema? ¿Hay otra forma de verificar si la aceleración de hardware realmente funciona? Pero es realmente extremadamente lento. Arrancando así como corriendo. Mi Windows en Virtualbox funciona mucho más rápido. ¿Podría haber un problema diferente?

¿Alguien tiene una idea de cuál es mi problema? Publiqué toda la información que pensé que podría ser interesante. ¿Necesitas información adicional?

Muchas gracias por adelantado

Bloch
fuente
Tu pregunta está muy bien pensada. Sí, hay otra forma de verificar si QEMU está usando KVM. Ingrese info kvma un monitor QEMU para obtener el estado directamente desde el emulador. También tenga en cuenta que si no está pasando QEMU la -enable-kvmbandera, el emulador podría ignorar la disponibilidad de virtualización de hardware.
dsstorefile1
1
Me complace escuchar que la forma en que presenté mi pregunta es bien recibida. Ah, esto es muy útil. Creo que investigará más sobre el monitor QEMU ya que parece estar allí por una razón;) ¿Podría especificar qué quiere decir con "el emulador podría ignorar la disponibilidad de la virtualización"?
Bloch
QEMU es un poco misterioso. Hay pequeñas características ocultas no documentadas en todas partes, como los puertos 513 y 514 que se muestran en un nmapescaneo SYN de la representación del host desde el interior de la VM. De todos modos, para responder a su pregunta, lo único que dice el manual sobre los valores predeterminados de virtualización de hardware es que tcges el acelerador predeterminado, por lo que mi interpretación es que todos los demás aceleradores se ignoran incluso si están presentes.
dsstorefile1

Respuestas:

1

Realmente busqué en la web bastante tiempo la respuesta, pero no encontré una solución. Como es tan frecuente: una vez preguntado, rápidamente tiene la solución:

Al iniciar la máquina, tuve que decirle explícitamente a QEMU que usara KVM agregando la opción

-machine type=pc,accel=kvm

ahora obtengo una VM mucho más rápida y

$lsmod | grep kvm            
kvm_intel             180224  3
kvm                   708608  1 kvm_intel
irqbypass              16384  1 kvm

Sin embargo, virtio sigue siendo 0

Todavía estoy confundido por qué esto es necesario, porque todo lo que he leído hasta ahora implica o dice explícitamente que qemu intenta usar kvm por defecto (y arroja un error cuando falla). Entonces, si alguien sabe por qué este no es el caso para mí, todavía estaría agradecido.

Bloch
fuente
QEMU tampoco usa virtio por defecto.
dsstorefile1
1
gracias por el comentario. Me di cuenta de eso también. Sin embargo, esto no sorprende realmente en comparación con el hecho de que no utiliza kvm. Encontré varios tutoriales como el vinculado en la pregunta inicial que usa este comando simple para abrir la VM y afirma que sí usa kvm
Bloch