From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maxime Coquelin Subject: Re: [PATCH] vhost: support non multiqueue guests Date: Mon, 5 Feb 2018 09:42:01 +0100 Message-ID: <3ed0a409-70de-7105-ab00-449f7862b487@redhat.com> References: <1517409743-24332-1-git-send-email-alan.dewar@att.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Cc: Alan Dewar To: alangordondewar@gmail.com, dev@dpdk.org Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id 263BD1B2DC for ; Mon, 5 Feb 2018 09:42:06 +0100 (CET) In-Reply-To: <1517409743-24332-1-git-send-email-alan.dewar@att.com> Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi Alan, On 01/31/2018 03:42 PM, alangordondewar@gmail.com wrote: > From: Alan Dewar > > 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 > --- > 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 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 Acked-by: Laszlo Ersek Acked-by: Yuanhan Liu Could you try with latest master and confirm it solves the issue on your side? Cheers, Maxime