All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Yao, Lei A" <lei.a.yao@intel.com>
To: Maxime Coquelin <maxime.coquelin@redhat.com>,
	"Bie, Tiwei" <tiwei.bie@intel.com>,
	"yliu@fridaylinux.org" <yliu@fridaylinux.org>,
	"Yigit, Ferruh" <ferruh.yigit@intel.com>,
	"victork@redhat.com" <victork@redhat.com>,
	Thomas Monjalon <thomas@monjalon.net>
Cc: "dev@dpdk.org" <dev@dpdk.org>,
	"stable@dpdk.org" <stable@dpdk.org>,
	"Wang, Zhihong" <zhihong.wang@intel.com>,
	"Xu, Qian Q" <qian.q.xu@intel.com>
Subject: Re: [PATCH 1/2] virtio: fix resuming traffic with rx vector path
Date: Sun, 11 Feb 2018 08:02:14 +0000	[thread overview]
Message-ID: <2DBBFF226F7CF64BAFCA79B681719D953A36FC5B@shsmsx102.ccr.corp.intel.com> (raw)
In-Reply-To: <20180209142654.29409-2-maxime.coquelin@redhat.com>



> -----Original Message-----
> From: Maxime Coquelin [mailto:maxime.coquelin@redhat.com]
> Sent: Friday, February 9, 2018 10:27 PM
> To: Bie, Tiwei <tiwei.bie@intel.com>; yliu@fridaylinux.org; Yigit, Ferruh
> <ferruh.yigit@intel.com>; victork@redhat.com
> Cc: dev@dpdk.org; stable@dpdk.org; Wang, Zhihong
> <zhihong.wang@intel.com>; Xu, Qian Q <qian.q.xu@intel.com>; Yao, Lei A
> <lei.a.yao@intel.com>; Maxime Coquelin <maxime.coquelin@redhat.com>
> Subject: [PATCH 1/2] virtio: fix resuming traffic with rx vector path
> 
> This patch fixes traffic resuming issue seen when using
> Rx vector path.
> 
> Fixes: efc83a1e7fc3 ("net/virtio: fix queue setup consistency")
> 
> Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
> Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Tested-by: Lei Yao <lei.a.yao@intel.com>
This patch has been tested by regression test suite. It can fix the traffic resume 
issue with vector path.  No performance drop during PVP test:

Following test are also checked and passed:
Vhost/virtio multi queue
Virtio-user
Virtio-user as exception path
Vhost/virtio reconnect

My server info:
OS: Ubuntu 16.04
Kernel: 4.4.0-110
CPU: Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz

BR
Lei

> ---
>  drivers/net/virtio/virtio_rxtx.c        | 34 ++++++++++++++++++---------------
>  drivers/net/virtio/virtio_rxtx_simple.c |  2 +-
>  drivers/net/virtio/virtio_rxtx_simple.h |  2 +-
>  3 files changed, 21 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c
> index 854af399e..505283edd 100644
> --- a/drivers/net/virtio/virtio_rxtx.c
> +++ b/drivers/net/virtio/virtio_rxtx.c
> @@ -30,6 +30,7 @@
>  #include "virtio_pci.h"
>  #include "virtqueue.h"
>  #include "virtio_rxtx.h"
> +#include "virtio_rxtx_simple.h"
> 
>  #ifdef RTE_LIBRTE_VIRTIO_DEBUG_DUMP
>  #define VIRTIO_DUMP_PACKET(m, len) rte_pktmbuf_dump(stdout, m, len)
> @@ -446,25 +447,28 @@ virtio_dev_rx_queue_setup_finish(struct
> rte_eth_dev *dev, uint16_t queue_idx)
>  			&rxvq->fake_mbuf;
>  	}
> 
> -	while (!virtqueue_full(vq)) {
> -		m = rte_mbuf_raw_alloc(rxvq->mpool);
> -		if (m == NULL)
> -			break;
> +	if (hw->use_simple_rx) {
> +		while (vq->vq_free_cnt >=
> RTE_VIRTIO_VPMD_RX_REARM_THRESH) {
> +			virtio_rxq_rearm_vec(rxvq);
> +			nbufs += RTE_VIRTIO_VPMD_RX_REARM_THRESH;
> +		}
> +	} else {
> +		while (!virtqueue_full(vq)) {
> +			m = rte_mbuf_raw_alloc(rxvq->mpool);
> +			if (m == NULL)
> +				break;
> 
> -		/* Enqueue allocated buffers */
> -		if (hw->use_simple_rx)
> -			error = virtqueue_enqueue_recv_refill_simple(vq,
> m);
> -		else
> +			/* Enqueue allocated buffers */
>  			error = virtqueue_enqueue_recv_refill(vq, m);
> -
> -		if (error) {
> -			rte_pktmbuf_free(m);
> -			break;
> +			if (error) {
> +				rte_pktmbuf_free(m);
> +				break;
> +			}
> +			nbufs++;
>  		}
> -		nbufs++;
> -	}
> 
> -	vq_update_avail_idx(vq);
> +		vq_update_avail_idx(vq);
> +	}
> 
>  	PMD_INIT_LOG(DEBUG, "Allocated %d bufs", nbufs);
> 
> diff --git a/drivers/net/virtio/virtio_rxtx_simple.c
> b/drivers/net/virtio/virtio_rxtx_simple.c
> index 7247a0822..0a79d1d5b 100644
> --- a/drivers/net/virtio/virtio_rxtx_simple.c
> +++ b/drivers/net/virtio/virtio_rxtx_simple.c
> @@ -77,7 +77,7 @@ virtio_xmit_pkts_simple(void *tx_queue, struct
> rte_mbuf **tx_pkts,
>  	rte_compiler_barrier();
> 
>  	if (nb_used >= VIRTIO_TX_FREE_THRESH)
> -		virtio_xmit_cleanup(vq);
> +		virtio_xmit_cleanup_simple(vq);
> 
>  	nb_commit = nb_pkts = RTE_MIN((vq->vq_free_cnt >> 1), nb_pkts);
>  	desc_idx = (uint16_t)(vq->vq_avail_idx & desc_idx_max);
> diff --git a/drivers/net/virtio/virtio_rxtx_simple.h
> b/drivers/net/virtio/virtio_rxtx_simple.h
> index 2d8e6b14a..303904d64 100644
> --- a/drivers/net/virtio/virtio_rxtx_simple.h
> +++ b/drivers/net/virtio/virtio_rxtx_simple.h
> @@ -60,7 +60,7 @@ virtio_rxq_rearm_vec(struct virtnet_rx *rxvq)
>  #define VIRTIO_TX_FREE_NR 32
>  /* TODO: vq->tx_free_cnt could mean num of free slots so we could avoid
> shift */
>  static inline void
> -virtio_xmit_cleanup(struct virtqueue *vq)
> +virtio_xmit_cleanup_simple(struct virtqueue *vq)
>  {
>  	uint16_t i, desc_idx;
>  	uint32_t nb_free = 0;
> --
> 2.14.3

  reply	other threads:[~2018-02-11  8:02 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-09 14:26 [PATCH 0/2] Vhost & Virtio fixes for -rc4 Maxime Coquelin
2018-02-09 14:26 ` [PATCH 1/2] virtio: fix resuming traffic with rx vector path Maxime Coquelin
2018-02-11  8:02   ` Yao, Lei A [this message]
2018-02-12 13:18   ` Olivier Matz
     [not found]   ` <b1a41802-4c87-c76d-a50c-3222df8845ef@intel.com>
2018-02-13  0:49     ` Tan, Jianfeng
2018-02-09 14:26 ` [PATCH 2/2] vhost: don't take access_lock on VHOST_USER_RESET_OWNER Maxime Coquelin
2018-02-12  9:40   ` Tiwei Bie

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2DBBFF226F7CF64BAFCA79B681719D953A36FC5B@shsmsx102.ccr.corp.intel.com \
    --to=lei.a.yao@intel.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=maxime.coquelin@redhat.com \
    --cc=qian.q.xu@intel.com \
    --cc=stable@dpdk.org \
    --cc=thomas@monjalon.net \
    --cc=tiwei.bie@intel.com \
    --cc=victork@redhat.com \
    --cc=yliu@fridaylinux.org \
    --cc=zhihong.wang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.