[dpdk-dev] [PATCH] vhost: support non multiqueue guests

Alan Dewar alangordondewar at gmail.com
Mon Feb 5 11:18:57 CET 2018


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
<maxime.coquelin at redhat.com> wrote:
> Hi Alan,
>
> On 01/31/2018 03:42 PM, alangordondewar at gmail.com wrote:
>>
>> From: Alan Dewar<alan.dewar at att.com>
>>
>> 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<alan.dewar at att.com>
>> ---
>>   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 <maxime.coquelin at redhat.com>
> 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 <maxime.coquelin at redhat.com>
>     Acked-by: Laszlo Ersek <lersek at redhat.com>
>     Acked-by: Yuanhan Liu <yliu at fridaylinux.org>
>
>
> Could you try with latest master and confirm it solves the issue on your
> side?
>
> Cheers,
> Maxime


More information about the dev mailing list