저는 호스트와 게스트 모두에 대해 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.3MB/s의 수신 속도만 제공하는 반면, 비교를 위해 드라이버를 전환하면 e1000e
~400MB/s를 제공합니다.
napi_weight=1
시행착오를 통해 게스트 VM에서 모듈 에 대한 매개변수를 설정하면 virtio_net
성능이 정상으로 돌아오는 것을 발견했습니다 .
napi_weight
NAPI에 대해 읽은 후 매개변수가 수신된 패킷의 인터럽트 기반 서비스와 폴링 기반 서비스 사이를 전환하는 데 사용된다는 것을 이해하게 되었습니다 . 일반적으로 매개변수의 기본값은 NAPI_POLL_WEIGHT
64인 상수입니다. 문제의 근본 원인을 이해할 수 없으며 단지 이 매개변수를 설정하고 싶지 않습니다.트릭을 수행하는 것 같습니다. 그냥 잘못된 것 같습니다. 즉, 기본적으로 작동하는 virtio_net
동안 이 매개변수를 명시적으로 설정해야 한다고 생각하지 않습니다 . e1000
또한 이 매개변수를 사용할 경우 CPU 사용량이 높아질 수 있다는 우려도 있습니다.
누구든지 그 뒤에 무엇이 있을 수 있고 무엇을 시도할 수 있는지에 대한 아이디어가 있습니까?