QEMU: низкая производительность сети с драйвером virtio_net

QEMU: низкая производительность сети с драйвером virtio_net

Я использую KVM/QEMU 7.2.0 с Linux как для хоста, так и для гостя (ядро 6.1.6 на x86_64). Для виртуальной сети я использую устройство моста на хосте, к которому гость подключает свою сетевую карту как 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 МБ/с скорости приема в гостевой системе, в то время как для сравнения переключение драйвера на e1000eдает мне ~400 МБ/с.

Методом проб и ошибок я обнаружил, что если задать napi_weight=1параметр для virtio_netмодуля в гостевой виртуальной машине, производительность возвращается к норме.

После прочтения NAPI я понял, что этот napi_weightпараметр используется для переключения между обслуживанием на основе прерываний и обслуживанием на основе опросов полученных пакетов. Обычно параметр по умолчанию имеет NAPI_POLL_WEIGHTконстанту, которая равна 64. Я не могу понять основную причину проблемы и не хочу устанавливать этот параметр только потому, что онкажется, это срабатывает. Это просто кажется неправильным, т. е. я не думаю, что мне следует явно устанавливать этот параметр, поскольку virtio_netwhile e1000работает из коробки. Я также обеспокоен потенциально высокой загрузкой процессора, если я буду использовать этот параметр.

Есть ли у кого-нибудь идеи, что за этим может стоять и что я могу попробовать?

Связанный контент