From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id B7E311B1C6 for ; Wed, 3 Jan 2018 12:14:59 +0100 (CET) X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 03 Jan 2018 03:14:57 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.45,501,1508828400"; d="scan'208";a="6899014" Received: from debian-xvivbkq.sh.intel.com ([10.67.104.226]) by fmsmga007.fm.intel.com with ESMTP; 03 Jan 2018 03:14:56 -0800 Date: Wed, 3 Jan 2018 19:14:29 +0800 From: Tiwei Bie To: =?utf-8?B?546L5b+X5YWL?= Cc: "dev@dpdk.org" , "bluca@debian.org" , "yliu@fridaylinux.org" Message-ID: <20180103111429.dtdo7sucyx6ozts2@debian-xvivbkq.sh.intel.com> References: <6DAF063A35010343823807B082E5681F41D839EF@mbx05.360buyAD.local> <20171230040209.b73z42ymlh4emjxe@debian-xvivbkq.sh.intel.com> <6DAF063A35010343823807B082E5681F41D84163@mbx05.360buyAD.local> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <6DAF063A35010343823807B082E5681F41D84163@mbx05.360buyAD.local> User-Agent: NeoMutt/20170609 (1.8.3) Subject: Re: [dpdk-dev] net/virtio: fix vector Rx break caused by rxq flushing X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Jan 2018 11:15:00 -0000 Hi Zhike, On Wed, Jan 03, 2018 at 08:21:26AM +0000, 王志克 wrote: > Hi Tiwei, > > Thanks for your help and info. > > I have another question about your previous fix below. > You mentioned that " Otherwise it will lead to incorrect packet collection for port state." Do you mean port statistics? Or such packets may leads to issue, like more TCP restransmission? Thanks. > I was just repeating the problem description from another team who raised the issue. The unexpected behavior caused some problems when they use virtio PMD. But I don't know the details of the problems they met. :( Best regards, Tiwei Bie > > commit d8227497ec5c3de75fe378e09fc9673ae097fa73 > Author: Tiwei Bie > Date: Fri Oct 20 10:09:28 2017 +0800 > > net/virtio: flush Rx queues on start > > After starting a device, the driver shouldn't deliver the > packets that already existed before the device is started > to applications. Otherwise it will lead to incorrect packet > collection for port state. This patch fixes this issue by > flushing the Rx queues when starting the device. > > > Br, > Wang Zhike > -----Original Message----- > From: Tiwei Bie [mailto:tiwei.bie@intel.com] > Sent: Saturday, December 30, 2017 12:02 PM > To: 王志克 > Cc: dev@dpdk.org; bluca@debian.org; yliu@fridaylinux.org > Subject: Re: net/virtio: fix vector Rx break caused by rxq flushing > > Hi Zhike, > > On Fri, Dec 29, 2017 at 01:02:04PM +0000, 王志克 wrote: > > Hi tiwei, > > > > Can you please provide a patch for 16.11.4? Thanks. > > > > Normally, most commits in the stable tree are backported > from the commits in the mainline tree which contains below > Cc line: > > Cc: stable@dpdk.org > > This patch also contains such line. So after this patch > is applied to the mainline tree, it will be backported. > > If you need the fix right now, you can download the latest > patch (which has been applied to dpdk-next-virtio tree) > from here: > > https://dpdk.org/dev/patchwork/patch/32061/ > > It can be applied to DPDK 16.11.4 with the patch command. > After the patching, one small change is needed to get it > work: > > diff --git a/drivers/net/virtio/virtqueue.c b/drivers/net/virtio/virtqueue.c > index 7fd8604..0e24194 100644 > --- a/drivers/net/virtio/virtqueue.c > +++ b/drivers/net/virtio/virtqueue.c > @@ -88,7 +88,7 @@ virtqueue_rxvq_flush(struct virtqueue *vq) > for (i = 0; i < nb_used; i++) { > used_idx = vq->vq_used_cons_idx & (vq->vq_nentries - 1); > uep = &vq->vq_ring.used->ring[used_idx]; > - if (hw->use_simple_rx) { > + if (hw->use_simple_rxtx) { > desc_idx = used_idx; > rte_pktmbuf_free(vq->sw_ring[desc_idx]); > vq->vq_free_cnt++; > @@ -104,7 +104,7 @@ virtqueue_rxvq_flush(struct virtqueue *vq) > vq->vq_used_cons_idx++; > } > > - if (hw->use_simple_rx) { > + if (hw->use_simple_rxtx) { > while (vq->vq_free_cnt >= RTE_VIRTIO_VPMD_RX_REARM_THRESH) { > virtio_rxq_rearm_vec(rxq); > if (virtqueue_kick_prepare(vq)) > > Besides, I'm not sure whether you are aware of this or not. > But just FYI, when you want to use the vector Rx of virtio > PMD, you need to be aware of the fact that the current > implementation of vector Rx doesn't really follow the virtio > spec. You can find more details in below link: > > http://dpdk.org/ml/archives/dev/2017-December/084101.html > > Best regards, > Tiwei Bie