Re: [PATCH] vhost: support non multiqueue guests
From: Alan Dewar <hidden>
Date: 2018-02-05 10:18:58
Hi Maxime, Just confirming that the commit that you suggested fixes the problem that I was seeing. Many thanks for your help. Regards Alan On Mon, Feb 5, 2018 at 8:42 AM, Maxime Coquelin [off-list ref] wrote:
Hi Alan, On 01/31/2018 03:42 PM, alangordondewar@gmail.com wrote:quoted
From: Alan Dewar<redacted> Performance of vhost interfaces can be improved by having multiple TX/RX queue-pairs. QEMU can be told to use multiple queue-pairs for a vhost interface when starting the guest VM. The DPDK will also configure multiple queue-pairs in response to requests from QEMU. Later when the guest VM reaches the running state, it can decide to not support the multiqueue option. This information is passed down from the guest VM to QEMU, and from QEMU to the DPDK, but the DPDK ignores it. Because the guest VM doesn't support the multiqueue option it will only initialise the first queue-pair, and in turn the DPDK will not signal that the vhost interface is up. This change allows the DPDK to signal that the vhost interface is up after only the first queue-pair is fully initialised if the guest VM does not support the multiqueue option. Signed-off-by: Alan Dewar<redacted> --- lib/librte_vhost/vhost.c | 6 +++--- lib/librte_vhost/vhost_user.c | 8 +++++++- lib/librte_vhost/virtio_net.c | 12 +++++++++--- 3 files changed, 19 insertions(+), 7 deletions(-)We already implemented a workaround to fix this issue: commit e29109323595beb3884da58126ebb3b878cb66f5 Author: Maxime Coquelin [off-list ref] Date: Wed Dec 13 09:51:09 2017 +0100 vhost: destroy unused virtqueues when multiqueue not negotiated QEMU sends VHOST_USER_SET_VRING_CALL requests for all queues declared in QEMU command line before the guest is started. It has the effect in DPDK vhost-user backend to allocate vrings for all queues declared by QEMU. If the first driver being used does not support multiqueue, the device never changes to VIRTIO_DEV_RUNNING state as only the first queue pair is initialized. One driver impacted by this bug is virtio-net's iPXE driver which does not support VIRTIO_NET_F_MQ feature. It is safe to destroy unused virtqueues in SET_FEATURES request handler, as it is ensured the device is not in running state at this stage, so virtqueues aren't being processed. Signed-off-by: Maxime Coquelin [off-list ref] Acked-by: Laszlo Ersek [off-list ref] Acked-by: Yuanhan Liu [off-list ref] Could you try with latest master and confirm it solves the issue on your side? Cheers, Maxime