Thread (85 messages) 85 messages, 6 authors, 2016-03-14

Re: [PATCH v2 1/7] vhost: refactor rte_vhost_dequeue_burst

From: Xie, Huawei <hidden>
Date: 2016-03-07 03:02:09

On 3/4/2016 10:30 AM, Yuanhan Liu wrote:
On Thu, Mar 03, 2016 at 05:40:14PM +0000, Xie, Huawei wrote:
quoted
On 2/18/2016 9:48 PM, Yuanhan Liu wrote:
quoted
The current rte_vhost_dequeue_burst() implementation is a bit messy
[...]
quoted
+
 uint16_t
 rte_vhost_dequeue_burst(struct virtio_net *dev, uint16_t queue_id,
 	struct rte_mempool *mbuf_pool, struct rte_mbuf **pkts, uint16_t count)
 {
-	struct rte_mbuf *m, *prev;
 	struct vhost_virtqueue *vq;
-	struct vring_desc *desc;
-	uint64_t vb_addr = 0;
-	uint64_t vb_net_hdr_addr = 0;
-	uint32_t head[MAX_PKT_BURST];
+	uint32_t desc_indexes[MAX_PKT_BURST];
indices
http://dictionary.reference.com/browse/index

    index
    noun, plural indexes, indices 
ok, i see both two are used.

quoted
quoted
 	uint32_t used_idx;
 	uint32_t i;
-	uint16_t free_entries, entry_success = 0;
+	uint16_t free_entries;
 	uint16_t avail_idx;
-	struct virtio_net_hdr *hdr = NULL;
+	struct rte_mbuf *m;
 
 	if (unlikely(!is_valid_virt_queue_idx(queue_id, 1, dev->virt_qp_nb))) {
 		RTE_LOG(ERR, VHOST_DATA,
@@ -730,197 +813,49 @@ rte_vhost_dequeue_burst(struct virtio_net *dev, uint16_t queue_id,
 		return 0;
 
-		if (entry_success < (free_entries - 1)) {
-			/* Prefetch descriptor index. */
-			rte_prefetch0(&vq->desc[head[entry_success+1]]);
-			rte_prefetch0(&vq->used->ring[(used_idx + 1) & (vq->size - 1)]);
-		}
Why is this prefetch silently dropped in the patch?
Oops, good catching. Will fix it. Thanks.

quoted
quoted
 			break;
+		pkts[i] = m;
 
-		m->nb_segs = seg_num;
-		if ((hdr->flags != 0) || (hdr->gso_type != VIRTIO_NET_HDR_GSO_NONE))
-			vhost_dequeue_offload(hdr, m);
-
-		pkts[entry_success] = m;
-		vq->last_used_idx++;
-		entry_success++;
+		used_idx = vq->last_used_idx++ & (vq->size - 1);
+		vq->used->ring[used_idx].id  = desc_indexes[i];
+		vq->used->ring[used_idx].len = 0;
What is the correct value for ring[used_idx].len,  the packet length or 0?
Good question. I didn't notice that before. Sounds buggy to me. However,
that's from the old code. Will check it.
Yes, i knew it is in old code also. Thanks.
	--yliu
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help