From: Maxime Coquelin Date: Fri, 6 Jul 2018 07:04:47 +0000 (+0200) Subject: vhost: improve prefetching in dequeue path X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=380a2adff305931dca874f96d10cd93237930c64;p=dpdk.git vhost: improve prefetching in dequeue path This is an optimization to prefetch next buffer while the current one is being processed. Signed-off-by: Maxime Coquelin Acked-by: Tiwei Bie --- diff --git a/lib/librte_vhost/virtio_net.c b/lib/librte_vhost/virtio_net.c index 6339296c70..2cfd8585c8 100644 --- a/lib/librte_vhost/virtio_net.c +++ b/lib/librte_vhost/virtio_net.c @@ -902,7 +902,13 @@ copy_desc_to_mbuf(struct virtio_net *dev, struct vhost_virtqueue *vq, buf_iova = buf_vec[vec_idx].buf_iova; buf_len = buf_vec[vec_idx].buf_len; - rte_prefetch0((void *)(uintptr_t)buf_addr); + /* + * Prefecth desc n + 1 buffer while + * desc n buffer is processed. + */ + if (vec_idx + 1 < nr_vec) + rte_prefetch0((void *)(uintptr_t) + buf_vec[vec_idx + 1].buf_addr); buf_offset = 0; buf_avail = buf_len; @@ -1134,6 +1140,8 @@ rte_vhost_dequeue_burst(int vid, uint16_t queue_id, if (likely(dev->dequeue_zero_copy == 0)) update_shadow_used_ring(vq, head_idx, 0); + rte_prefetch0((void *)(uintptr_t)buf_vec[0].buf_addr); + pkts[i] = rte_pktmbuf_alloc(mbuf_pool); if (unlikely(pkts[i] == NULL)) { RTE_LOG(ERR, VHOST_DATA,