Re: [PATCH v2 1/6] vhost: rewrite enqueue
From: Wang, Zhihong <hidden>
Date: 2016-08-19 07:07:45
-----Original Message----- From: Yuanhan Liu [mailto:yuanhan.liu@linux.intel.com] Sent: Friday, August 19, 2016 10:39 AM To: Wang, Zhihong <redacted> Cc: dev@dpdk.org; maxime.coquelin@redhat.com Subject: Re: [PATCH v2 1/6] vhost: rewrite enqueue On Thu, Aug 18, 2016 at 02:33:06AM -0400, Zhihong Wang wrote:quoted
This patch implements the vhost logic from scratch into a single function designed for high performance and better maintainability. Signed-off-by: Zhihong Wang <redacted> --- lib/librte_vhost/vhost_rxtx.c | 212++++++++++++++++++++++++++++++++++++++++--quoted
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_tqp_nb)quoted
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)quoted
{ 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,quoted
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.
quoted
+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