QEMU: rendimiento lento de la red con el controlador virtio_net

QEMU: rendimiento lento de la red con el controlador virtio_net

Estoy ejecutando KVM/QEMU 7.2.0 con Linux tanto para el host como para el invitado (kernel 6.1.6 en x86_64). Para la red virtual, estoy usando un dispositivo puente en el host al que el invitado conecta su NIC como tapdispositivo:

-netdev {"type":"tap","vhost":true,"id":"hostnet0"}
-device {"driver":"virtio-net-pci","netdev":"hostnet0","id":"net0"}

En términos de QEMU, virtio-net-pcise supone que la interfaz de red virtual para invitados tiene el mejor rendimiento. Sin embargo, virtio-net-pcisolo me da una velocidad de recepción de ~0,3 MB/s en el invitado, mientras que, a modo de comparación, cambiar el controlador e1000eme da ~400 MB/s.

Mediante prueba y error, descubrí que si configuro napi_weight=1el parámetro para virtio_netel módulo en la máquina virtual invitada, el rendimiento vuelve a la normalidad.

Después de leer sobre NAPI, he llegado a comprender que el napi_weightparámetro se utiliza para cambiar entre el servicio de paquetes recibidos basado en interrupciones y basado en sondeo. Normalmente, el parámetro predeterminado es NAPI_POLL_WEIGHTconstante, que es 64. No puedo entender la causa raíz del problema y no quiero configurar este parámetro solo porqueParece funcionar. Simplemente se siente mal, es decir, no creo que deba configurar este parámetro explícitamente virtio_netmientras e1000funcione de forma inmediata. También me preocupa el posible uso elevado de CPU si utilizara este parámetro.

¿Alguien tiene alguna idea de lo que podría haber detrás de esto y lo que podría intentar?

información relacionada