QEMU:使用 virtio_net 驱动程序时网络性能缓慢

QEMU:使用 virtio_net 驱动程序时网络性能缓慢

我在主机和客户机上运行 KVM/QEMU 7.2.0 和 Linux(x86_64 上的内核 6.1.6)。对于虚拟网络,我在主机上使用桥接设备,客户机将其 NIC 作为tap设备连接到该桥接设备:

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

就 QEMU 而言,虚拟客户网络接口virtio-net-pci应该具有最佳性能。但是,virtio-net-pci客户机的接收速度仅为 ~0.3 MB/s,相比之下,将驱动程序切换为e1000e~400 MB/s。

通过反复试验,我发现如果我在客户虚拟机中设置模块napi_weight=1参数virtio_net,性能就会恢复正常。

在阅读了有关 NAPI 的内容后,我了解到该napi_weight参数用于在基于中断和基于轮询的接收数据包服务之间切换。通常,该参数默认为NAPI_POLL_WEIGHT常数,即 64。我无法理解问题的根本原因,我不想仅仅因为它而设置此参数似乎奏效了。感觉不对劲,也就是说,我认为我不应该明确设置这个参数,因为virtio_netwhilee1000开箱即用。我还担心如果我要使用此参数,可能会出现 CPU 使用率过高的情况。

有人知道这背后可能是什么原因以及我可以尝试什么吗?

相关内容