From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 5645B2BB2 for ; Fri, 24 Feb 2017 14:04:33 +0100 (CET) Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga104.jf.intel.com with ESMTP; 24 Feb 2017 05:04:32 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.35,201,1484035200"; d="scan'208";a="68639830" Received: from bricha3-mobl3.ger.corp.intel.com ([10.237.221.61]) by orsmga005.jf.intel.com with SMTP; 24 Feb 2017 05:04:30 -0800 Received: by (sSMTP sendmail emulation); Fri, 24 Feb 2017 13:04:29 +0000 Date: Fri, 24 Feb 2017 13:04:29 +0000 From: Bruce Richardson To: Kevin Traynor Cc: Zhiyong Yang , dev@dpdk.org, yuanhan.liu@linux.intel.com, maxime.coquelin@redhat.com Message-ID: <20170224130429.GA88332@bricha3-MOBL3.ger.corp.intel.com> References: <1487926101-4637-1-git-send-email-zhiyong.yang@intel.com> <1487926101-4637-5-git-send-email-zhiyong.yang@intel.com> <22266556-4d0e-5db1-6a90-eebcecbe5283@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <22266556-4d0e-5db1-6a90-eebcecbe5283@redhat.com> Organization: Intel Research and =?iso-8859-1?Q?De=ACvel?= =?iso-8859-1?Q?opment?= Ireland Ltd. User-Agent: Mutt/1.7.2 (2016-11-26) Subject: Re: [dpdk-dev] [PATCH 4/5] net/vhost: remove limit of vhost TX burst size 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: Fri, 24 Feb 2017 13:04:35 -0000 On Fri, Feb 24, 2017 at 11:08:56AM +0000, Kevin Traynor wrote: > On 02/24/2017 08:48 AM, Zhiyong Yang wrote: > > vhost removes limit of TX burst size(32 pkts) and supports to make > > an best effort to transmit pkts. > > > > Cc: yuanhan.liu@linux.intel.com > > Cc: maxime.coquelin@redhat.com > > > > Signed-off-by: Zhiyong Yang > > --- > > drivers/net/vhost/rte_eth_vhost.c | 24 ++++++++++++++++++++++-- > > 1 file changed, 22 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c > > index e98cffd..1e1fa34 100644 > > --- a/drivers/net/vhost/rte_eth_vhost.c > > +++ b/drivers/net/vhost/rte_eth_vhost.c > > @@ -52,6 +52,7 @@ > > #define ETH_VHOST_QUEUES_ARG "queues" > > #define ETH_VHOST_CLIENT_ARG "client" > > #define ETH_VHOST_DEQUEUE_ZERO_COPY "dequeue-zero-copy" > > +#define VHOST_MAX_PKT_BURST 32 > > > > static const char *valid_arguments[] = { > > ETH_VHOST_IFACE_ARG, > > @@ -434,8 +435,27 @@ eth_vhost_tx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs) > > goto out; > > > > /* Enqueue packets to guest RX queue */ > > - nb_tx = rte_vhost_enqueue_burst(r->vid, > > - r->virtqueue_id, bufs, nb_bufs); > > + if (likely(nb_bufs <= VHOST_MAX_PKT_BURST)) > > + nb_tx = rte_vhost_enqueue_burst(r->vid, r->virtqueue_id, > > + bufs, nb_bufs); > > + else { > > + uint16_t nb_send = nb_bufs; > > + > > + while (nb_send) { > > + uint16_t nb_pkts; > > + uint16_t num = (uint16_t)RTE_MIN(nb_send, > > + VHOST_MAX_PKT_BURST); > > + > > + nb_pkts = rte_vhost_enqueue_burst(r->vid, > > + r->virtqueue_id, > > + &bufs[nb_tx], num); > > + > > + nb_tx += nb_pkts; > > + nb_send -= nb_pkts; > > + if (nb_pkts < num) > > + break; > > + } > > In the code above, > - if the VM does not service the queue, this will spin forever I don't think that is the case. As soon as the enqueue stops sending a full burst of (presumably 32) pkts, it will hit the break condition and quit. If it does send the full burst, it makes good forward progress until it runs out of packets to send and then quits. > - if the queue is almost full, it will be very slow Again, should not be the case. As soon as a full burst is not full enqueued the logic quits the loop. /Bruce