From: Cheng Jiang <Cheng1.jiang@intel.com>
To: maxime.coquelin@redhat.com, chenbo.xia@intel.com
Cc: dev@dpdk.org, jiayu.hu@intel.com, yvonnex.yang@intel.com,
yinan.wang@intel.com, yong.liu@intel.com,
Cheng Jiang <Cheng1.jiang@intel.com>
Subject: [dpdk-dev] [PATCH v8 3/4] vhost: add batch datapath for async vhost packed ring
Date: Mon, 19 Apr 2021 08:51:03 +0000 [thread overview]
Message-ID: <20210419085104.47078-4-Cheng1.jiang@intel.com> (raw)
In-Reply-To: <20210419085104.47078-1-Cheng1.jiang@intel.com>
Add batch datapath for async vhost packed ring to improve the
performance of small packet processing.
Signed-off-by: Cheng Jiang <Cheng1.jiang@intel.com>
---
lib/librte_vhost/virtio_net.c | 41 +++++++++++++++++++++++++++++++----
1 file changed, 37 insertions(+), 4 deletions(-)
diff --git a/lib/librte_vhost/virtio_net.c b/lib/librte_vhost/virtio_net.c
index ce88ad3c0..0ad289e6e 100644
--- a/lib/librte_vhost/virtio_net.c
+++ b/lib/librte_vhost/virtio_net.c
@@ -1724,6 +1724,29 @@ vhost_update_used_packed(struct vhost_virtqueue *vq,
vq->desc_packed[head_idx].flags = head_flags;
}
+static __rte_always_inline int
+virtio_dev_rx_async_batch_packed(struct virtio_net *dev,
+ struct vhost_virtqueue *vq,
+ struct rte_mbuf **pkts,
+ struct rte_mbuf **comp_pkts, uint32_t *pkt_done)
+{
+ uint16_t i;
+ uint32_t cpy_threshold = vq->async_threshold;
+
+ vhost_for_each_try_unroll(i, 0, PACKED_BATCH_SIZE) {
+ if (unlikely(pkts[i]->pkt_len >= cpy_threshold))
+ return -1;
+ }
+ if (!virtio_dev_rx_batch_packed(dev, vq, pkts)) {
+ vhost_for_each_try_unroll(i, 0, PACKED_BATCH_SIZE)
+ comp_pkts[(*pkt_done)++] = pkts[i];
+
+ return 0;
+ }
+
+ return -1;
+}
+
static __rte_always_inline int
vhost_enqueue_async_single_packed(struct virtio_net *dev,
struct vhost_virtqueue *vq,
@@ -1874,6 +1897,7 @@ virtio_dev_rx_async_submit_packed(struct virtio_net *dev,
struct rte_mbuf **comp_pkts, uint32_t *comp_count)
{
uint32_t pkt_idx = 0, pkt_burst_idx = 0;
+ uint32_t remained = count;
uint16_t async_descs_idx = 0;
uint16_t num_buffers;
uint16_t num_desc;
@@ -1891,9 +1915,17 @@ virtio_dev_rx_async_submit_packed(struct virtio_net *dev,
uint32_t num_async_pkts = 0, num_done_pkts = 0;
struct vring_packed_desc async_descs[vq->size];
- rte_prefetch0(&vq->desc_packed[vq->last_avail_idx]);
+ do {
+ rte_prefetch0(&vq->desc_packed[vq->last_avail_idx]);
+ if (remained >= PACKED_BATCH_SIZE) {
+ if (!virtio_dev_rx_async_batch_packed(dev, vq,
+ &pkts[pkt_idx], comp_pkts, &num_done_pkts)) {
+ pkt_idx += PACKED_BATCH_SIZE;
+ remained -= PACKED_BATCH_SIZE;
+ continue;
+ }
+ }
- for (pkt_idx = 0; pkt_idx < count; pkt_idx++) {
if (unlikely(virtio_dev_rx_async_single_packed(dev, vq, pkts[pkt_idx],
&num_desc, &num_buffers,
&async_descs[async_descs_idx],
@@ -1936,6 +1968,8 @@ virtio_dev_rx_async_submit_packed(struct virtio_net *dev,
comp_pkts[num_done_pkts++] = pkts[pkt_idx];
}
+ pkt_idx++;
+ remained--;
vq_inc_last_avail_packed(vq, num_desc);
/*
@@ -1960,13 +1994,12 @@ virtio_dev_rx_async_submit_packed(struct virtio_net *dev,
*/
pkt_err = pkt_burst_idx - n_pkts;
pkt_burst_idx = 0;
- pkt_idx++;
break;
}
pkt_burst_idx = 0;
}
- }
+ } while (pkt_idx < count);
if (pkt_burst_idx) {
n_pkts = vq->async_ops.transfer_data(dev->vid, queue_id, tdes, 0, pkt_burst_idx);
--
2.29.2
next prev parent reply other threads:[~2021-04-19 9:05 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-17 8:54 [dpdk-dev] [PATCH] vhost: add support for packed ring in async vhost Cheng Jiang
2021-03-22 6:15 ` [dpdk-dev] [PATCH v2] " Cheng Jiang
2021-03-24 9:19 ` Liu, Yong
2021-03-29 12:29 ` Jiang, Cheng1
2021-03-31 14:06 ` [dpdk-dev] [PATCH v3] " Cheng Jiang
2021-04-07 6:26 ` Hu, Jiayu
2021-04-08 12:01 ` Jiang, Cheng1
2021-04-10 10:25 ` [dpdk-dev] [PATCH v4 0/4] " Cheng Jiang
2021-04-10 10:25 ` [dpdk-dev] [PATCH v4 1/4] vhost: abstract and reorganize async split ring code Cheng Jiang
2021-04-10 10:25 ` Cheng Jiang
2021-04-10 10:25 ` [dpdk-dev] [PATCH v4 2/4] vhost: add support for packed ring in async vhost Cheng Jiang
2021-04-10 10:25 ` [dpdk-dev] [PATCH v4 3/4] vhost: add batch datapath for async vhost packed ring Cheng Jiang
2021-04-10 10:25 ` [dpdk-dev] [PATCH v4 4/4] doc: add release note for vhost async " Cheng Jiang
2021-04-12 11:34 ` [dpdk-dev] [PATCH v5 0/4] add support for packed ring in async vhost Cheng Jiang
2021-04-12 11:34 ` [dpdk-dev] [PATCH v5 1/4] vhost: abstract and reorganize async split ring code Cheng Jiang
2021-04-13 2:44 ` Hu, Jiayu
2021-04-13 3:26 ` Jiang, Cheng1
2021-04-13 7:11 ` Maxime Coquelin
2021-04-13 9:06 ` Jiang, Cheng1
2021-04-12 11:34 ` [dpdk-dev] [PATCH v5 2/4] vhost: add support for packed ring in async vhost Cheng Jiang
2021-04-13 8:36 ` Maxime Coquelin
2021-04-13 11:48 ` Jiang, Cheng1
2021-04-13 13:08 ` Maxime Coquelin
2021-04-13 13:50 ` Jiang, Cheng1
2021-04-12 11:34 ` [dpdk-dev] [PATCH v5 3/4] vhost: add batch datapath for async vhost packed ring Cheng Jiang
2021-04-12 11:34 ` [dpdk-dev] [PATCH v5 4/4] doc: add release note for vhost async " Cheng Jiang
2021-04-13 14:55 ` [dpdk-dev] [PATCH v6 0/4] add support for packed ring in async vhost Cheng Jiang
2021-04-13 14:55 ` [dpdk-dev] [PATCH v6 1/4] vhost: abstract and reorganize async split ring code Cheng Jiang
2021-04-13 14:55 ` [dpdk-dev] [PATCH v6 2/4] vhost: add support for packed ring in async vhost Cheng Jiang
2021-04-13 14:55 ` [dpdk-dev] [PATCH v6 3/4] vhost: add batch datapath for async vhost packed ring Cheng Jiang
2021-04-13 14:55 ` [dpdk-dev] [PATCH v6 4/4] doc: add release note for vhost async " Cheng Jiang
2021-04-14 6:13 ` [dpdk-dev] [PATCH v7 0/4] add support for packed ring in async vhost Cheng Jiang
2021-04-14 6:13 ` [dpdk-dev] [PATCH v7 1/4] vhost: abstract and reorganize async split ring code Cheng Jiang
2021-04-14 12:24 ` Maxime Coquelin
2021-04-14 6:13 ` [dpdk-dev] [PATCH v7 2/4] vhost: add support for packed ring in async vhost Cheng Jiang
2021-04-14 13:40 ` Maxime Coquelin
2021-04-15 5:42 ` Jiang, Cheng1
2021-04-15 2:02 ` Hu, Jiayu
2021-04-15 5:54 ` Jiang, Cheng1
2021-04-14 6:13 ` [dpdk-dev] [PATCH v7 3/4] vhost: add batch datapath for async vhost packed ring Cheng Jiang
2021-04-14 6:13 ` [dpdk-dev] [PATCH v7 4/4] doc: add release note for vhost async " Cheng Jiang
2021-04-19 8:51 ` [dpdk-dev] [PATCH v8 0/4] add support for packed ring in async vhost Cheng Jiang
2021-04-19 8:51 ` [dpdk-dev] [PATCH v8 1/4] vhost: abstract and reorganize async split ring code Cheng Jiang
2021-04-27 1:19 ` Hu, Jiayu
2021-04-19 8:51 ` [dpdk-dev] [PATCH v8 2/4] vhost: add support for packed ring in async vhost Cheng Jiang
2021-04-27 5:16 ` Hu, Jiayu
2021-04-27 6:07 ` Jiang, Cheng1
2021-04-19 8:51 ` Cheng Jiang [this message]
2021-04-19 8:51 ` [dpdk-dev] [PATCH v8 4/4] doc: add release note for vhost async packed ring Cheng Jiang
2021-04-27 8:03 ` [dpdk-dev] [PATCH v9 0/4] add support for packed ring in async vhost Cheng Jiang
2021-04-27 8:03 ` [dpdk-dev] [PATCH v9 1/4] vhost: abstract and reorganize async split ring code Cheng Jiang
2021-04-27 8:03 ` [dpdk-dev] [PATCH v9 2/4] vhost: add support for packed ring in async vhost Cheng Jiang
2021-04-29 1:48 ` Hu, Jiayu
2021-04-29 9:50 ` Maxime Coquelin
2021-04-27 8:03 ` [dpdk-dev] [PATCH v9 3/4] vhost: add batch datapath for async vhost packed ring Cheng Jiang
2021-04-29 9:57 ` Maxime Coquelin
2021-04-27 8:03 ` [dpdk-dev] [PATCH v9 4/4] doc: add release note for vhost async " Cheng Jiang
2021-04-29 9:58 ` Maxime Coquelin
2021-05-04 18:38 ` Ferruh Yigit
2021-05-04 8:28 ` [dpdk-dev] [PATCH v9 0/4] add support for packed ring in async vhost Maxime Coquelin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210419085104.47078-4-Cheng1.jiang@intel.com \
--to=cheng1.jiang@intel.com \
--cc=chenbo.xia@intel.com \
--cc=dev@dpdk.org \
--cc=jiayu.hu@intel.com \
--cc=maxime.coquelin@redhat.com \
--cc=yinan.wang@intel.com \
--cc=yong.liu@intel.com \
--cc=yvonnex.yang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.