Hi Alan,

On 01/31/2018 03:42 PM, alangordonde...@gmail.com wrote:
From: Alan Dewar<alan.de...@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.de...@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.coque...@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.coque...@redhat.com>
    Acked-by: Laszlo Ersek <ler...@redhat.com>
    Acked-by: Yuanhan Liu <y...@fridaylinux.org>


Could you try with latest master and confirm it solves the issue on your
side?

Cheers,
Maxime

Reply via email to