ホストとゲストの両方で Linux の KVM/QEMU 7.2.0 を実行しています (x86_64 上のカーネル 6.1.6)。仮想ネットワークでは、ゲストがtap
デバイスとして NIC を接続するホスト上のブリッジ デバイスを使用しています。
-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/秒ですが、比較のためにドライバーを切り替えるとe1000e
~400 MB/秒になります。
試行錯誤の結果、ゲスト VM のモジュールnapi_weight=1
にパラメータを設定するとvirtio_net
、パフォーマンスが正常に戻ることがわかりました。
napi_weight
NAPIについて読んだ後、このパラメータは受信パケットの割り込みベースとポーリングベースのサービスを切り替えるために使用されることがわかりました。通常、パラメータはNAPI_POLL_WEIGHT
定数の64にデフォルト設定されます。問題の根本的な原因は理解できず、このパラメータを設定するのは望ましくありません。効果があるようだvirtio_net
. 間違っているように感じます。つまり、はすぐに使えるので、このパラメータを明示的に設定する必要はないと思いますe1000
。また、このパラメータを使用すると、CPU 使用率が高くなる可能性があることも懸念しています。
何が原因なのか、また何を試せばいいのか、何かアイデアをお持ちの方はいらっしゃいますか?