From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id BAB9158F1 for ; Tue, 6 Sep 2016 09:44:53 +0200 (CEST) Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 27B3C61E73; Tue, 6 Sep 2016 07:44:53 +0000 (UTC) Received: from [10.36.7.235] (vpn1-7-235.ams2.redhat.com [10.36.7.235]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u867iob2029247 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 6 Sep 2016 03:44:52 -0400 To: Stephen Hemminger References: <516F65D3-4706-4CC5-916B-6ECD29CBE177@cisco.com> <20160905022028.GF30752@yliu-dev.sh.intel.com> <6EFF45F1-172E-4470-B4D7-AED90474DE50@cisco.com> <1dfca8cf-e5ef-1040-8a40-d617ed03e5c0@redhat.com> <20160905140824.1f0c80a2@xeon-e3> Cc: "Pierre Pfister (ppfister)" , Yuanhan Liu , "dev@dpdk.org" From: Maxime Coquelin Message-ID: <514b94d1-c7f8-d18c-d725-7c28d292c7d7@redhat.com> Date: Tue, 6 Sep 2016 09:44:50 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: <20160905140824.1f0c80a2@xeon-e3> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 06 Sep 2016 07:44:53 +0000 (UTC) Subject: Re: [dpdk-dev] [PATCH v2] virtio: enable indirect descriptors feature X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 06 Sep 2016 07:44:54 -0000 On 09/05/2016 11:08 PM, Stephen Hemminger wrote: > On Mon, 5 Sep 2016 16:24:13 +0200 > Maxime Coquelin wrote: > >> Thanks Pierre for sending the fix. >> >> Minor comments below: >> >> On 09/05/2016 08:52 AM, Pierre Pfister (ppfister) wrote: >>> Indirect descriptors support was disabled by commit 4a92b67151be11, >>> presumably by accident as it was correctly supported. >>> >>> This patch simply adds VIRTIO_RING_F_INDIRECT_DESC back to >>> the supported features bit mask, hence enabling the use of >>> indirect descriptors when the feature is negociated with the >>> device. >>> >> >> You should add the below line: >> Fixes: 4a92b671 ("virtio: clarify feature bit handling") >> >> Also, maybe we should consider add stable@dpdk.org in cc:, >> because the regression was introduced before v16.07 final tag. >> But the problem is that all the final validation has been done >> without this feature enabled, and it impact quite a few lines of >> code in Virtio PMD. >> >> Other than that, you can add: >> Reviewed-by: Maxime Coquelin > > The patch is correct, but it doesn't fix a regression. > > The original virtio DPDK did not support INDIRECT descriptors at all. > The original code in virtio_negotiate features was the inverse of what it is now. > Read carefully, the values in mask were the bits that were rejected during > guest negotiation at the time. > > static void > virtio_negotiate_features(struct virtio_hw *hw) > { > - uint32_t host_features, mask; > - > - /* checksum offload not implemented */ > - mask = VIRTIO_NET_F_CSUM | VIRTIO_NET_F_GUEST_CSUM; > - > - /* TSO and LRO are only available when their corresponding > - * checksum offload feature is also negotiated. > - */ > - mask |= VIRTIO_NET_F_HOST_TSO4 | VIRTIO_NET_F_HOST_TSO6 | VIRTIO_NET_F_HOST_ECN; > - mask |= VIRTIO_NET_F_GUEST_TSO4 | VIRTIO_NET_F_GUEST_TSO6 | VIRTIO_NET_F_GUEST_ECN; > - mask |= VTNET_LRO_FEATURES; > - > - /* not negotiating INDIRECT descriptor table support */ > - mask |= VIRTIO_RING_F_INDIRECT_DESC; > + uint32_t host_features; > > /* Prepare guest_features: feature that driver wants to support */ > - hw->guest_features = VTNET_FEATURES & ~mask; > + hw->guest_features = VIRTIO_PMD_GUEST_FEATURES; > PMD_INIT_LOG(DEBUG, "guest_features before negotiate = %x", > hw->guest_features); > > Therefore INDIRECT descriptors were always disabled! Don't blame any commit. > Use of indirect descriptors by DPDK did not happen until a later change. Oh, sorry, I read commit pointed out by Pierre quite too quickly. So this is definitively not to land into stable tree. > > commit 6dc5de3a6aefba3946fe04368d93994db3f7a5fd > Author: Stephen Hemminger > Date: Fri Mar 4 10:19:19 2016 -0800 > > virtio: use indirect ring elements > > The virtio ring in QEMU/KVM is usually limited to 256 entries > and the normal way that virtio driver was queuing mbufs required > nsegs + 1 ring elements. By using the indirect ring element feature > if available, each packet will take only one ring slot even for > multi-segment packets. > > Signed-off-by: Stephen Hemminger > Acked-by: Yuanhan Liu > Acked-by: Huawei Xie > > I second Pierre on his question, why was it not enabled? In current state, it just adds overhead to Tx path. And when enabled, do you see some gain? in which use-case? Thanks, Maxime