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 tap
dispositivo:
-netdev {"type":"tap","vhost":true,"id":"hostnet0"}
-device {"driver":"virtio-net-pci","netdev":"hostnet0","id":"net0"}
En términos de QEMU, virtio-net-pci
se supone que la interfaz de red virtual para invitados tiene el mejor rendimiento. Sin embargo, virtio-net-pci
solo 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 e1000e
me da ~400 MB/s.
Mediante prueba y error, descubrí que si configuro napi_weight=1
el parámetro para virtio_net
el 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_weight
pará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_WEIGHT
constante, 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_net
mientras e1000
funcione 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?