QEMU: langsame Netzwerkleistung mit virtio_net-Treiber

QEMU: langsame Netzwerkleistung mit virtio_net-Treiber

Ich verwende KVM/QEMU 7.2.0 mit Linux sowohl für Host als auch für Gast (Kernel 6.1.6 auf x86_64). Für das virtuelle Netzwerk verwende ich ein Bridge-Gerät auf dem Host, an das der Gast seine Netzwerkkarte als tapGerät anschließt:

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

virtio-net-pciIn Bezug auf QEMU sollte die virtuelle Gastnetzwerkschnittstelle die beste Leistung bieten. Allerdings virtio-net-pcierreicht sie im Gast nur eine Empfangsgeschwindigkeit von ca. 0,3 MB/s, während e1000emir zum Vergleich das Umschalten des Treibers auf ca. 400 MB/s liefert.

Durch Ausprobieren habe ich herausgefunden, dass die Leistung wieder normal wird, wenn ich napi_weight=1die Parameter für das Modul in der Gast-VM einstelle.virtio_net

Nachdem ich über NAPI gelesen habe, habe ich verstanden, dass dieser napi_weightParameter verwendet wird, um zwischen der unterbrechungsbasierten und der pollingbasierten Bearbeitung empfangener Pakete umzuschalten. Normalerweise ist der Parameter standardmäßig auf NAPI_POLL_WEIGHTkonstant 64 eingestellt. Ich kann die Grundursache des Problems nicht verstehen und möchte diesen Parameter nicht nur deshalb einstellen, weil erscheint zu funktionieren. Es fühlt sich einfach falsch an, d. h. ich glaube nicht, dass ich diesen Parameter explizit festlegen sollte, solange er virtio_netsofort e1000funktioniert. Ich mache mir auch Sorgen über eine potenziell hohe CPU-Auslastung, wenn ich diesen Parameter verwenden würde.

Hat jemand eine Idee, was dahinter stecken könnte und was ich versuchen könnte?

verwandte Informationen