我正在為主機和來賓運行帶有 Linux 的 KVM/QEMU 7.2.0(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_net
情況下顯式設定此參數。e1000
如果我要使用此參數,我還擔心潛在的高 CPU 使用率。
有人知道它背後可能是什麼以及我可以嘗試什麼嗎?