[dpdk-dev] [PATCH v2 1/6] vhost: rewrite enqueue

Wang, Zhihong zhihong.wang at intel.com
Fri Aug 19 09:07:42 CEST 2016



> -----Original Message-----
> From: Yuanhan Liu [mailto:yuanhan.liu at linux.intel.com]
> Sent: Friday, August 19, 2016 10:39 AM
> To: Wang, Zhihong <zhihong.wang at intel.com>
> Cc: dev at dpdk.org; maxime.coquelin at redhat.com
> Subject: Re: [PATCH v2 1/6] vhost: rewrite enqueue
> 
> On Thu, Aug 18, 2016 at 02:33:06AM -0400, Zhihong Wang wrote:
> > This patch implements the vhost logic from scratch into a single function
> > designed for high performance and better maintainability.
> >
> > Signed-off-by: Zhihong Wang <zhihong.wang at intel.com>
> > ---
> >  lib/librte_vhost/vhost_rxtx.c | 212
> ++++++++++++++++++++++++++++++++++++++++--
> >  1 file changed, 205 insertions(+), 7 deletions(-)
> >
> > diff --git a/lib/librte_vhost/vhost_rxtx.c b/lib/librte_vhost/vhost_rxtx.c
> > index 08a73fd..8e6d782 100644
> > --- a/lib/librte_vhost/vhost_rxtx.c
> > +++ b/lib/librte_vhost/vhost_rxtx.c
> > @@ -91,7 +91,7 @@ is_valid_virt_queue_idx(uint32_t idx, int is_tx, uint32_t
> qp_nb)
> >  	return (is_tx ^ (idx & 1)) == 0 && idx < qp_nb * VIRTIO_QNUM;
> >  }
> >
> > -static void
> > +static inline void __attribute__((always_inline))
> >  virtio_enqueue_offload(struct rte_mbuf *m_buf, struct virtio_net_hdr
> *net_hdr)
> >  {
> >  	if (m_buf->ol_flags & PKT_TX_L4_MASK) {
> > @@ -533,19 +533,217 @@ virtio_dev_merge_rx(struct virtio_net *dev,
> uint16_t queue_id,
> >  	return pkt_idx;
> >  }
> >
> > +static inline uint32_t __attribute__((always_inline))
> > +loop_check(struct vhost_virtqueue *vq, uint16_t avail_idx, uint32_t pkt_left)
> > +{
> > +	if (pkt_left == 0 || avail_idx == vq->last_used_idx)
> > +		return 1;
> > +
> > +	return 0;
> > +}
> 
> Hmmm, I don't see any benifit from making such simple check into a
> function.

It's for prefetch code later to be merged into this function.

> 
> > +static inline uint32_t __attribute__((always_inline))
> > +enqueue_packet(struct virtio_net *dev, struct vhost_virtqueue *vq,
> > +		uint16_t avail_idx, struct rte_mbuf *mbuf,
> > +		uint32_t is_mrg_rxbuf)
> > +{
> > +	struct virtio_net_hdr_mrg_rxbuf *virtio_hdr;
> > +	struct vring_desc *desc;
> > +	uint64_t desc_host_write_addr = 0;
> > +	uint32_t desc_chain_head = 0;
> > +	uint32_t desc_chain_len = 0;
> > +	uint32_t desc_current = 0;
> > +	uint32_t desc_write_offset = 0;
> > +	uint32_t mbuf_len = 0;
> > +	uint32_t mbuf_len_left = 0;
> > +	uint32_t copy_len = 0;
> 
> The dequeue function uses var like desc_addr, desc_avail, desc_offset,
> mbuf_avail, ..., I see no reason to use something different here. This
> breaks the code consistency. Besides that, var name like desc_host_write_addr
> looks redundant; desc_addr is much cleaner.

Okay.

> 
> 	--yliu


More information about the dev mailing list