From: Jeff Guo <jia.guo@intel.com>
To: jingjing.wu@intel.com, qi.z.zhang@intel.com,
beilei.xing@intel.com, haiyue.wang@intel.com,
qiming.yang@intel.com
Cc: dev@dpdk.org, ferruh.yigit@intel.com, mb@smartsharesystems.com,
stephen@networkplumber.org, barbette@kth.se,
Feifei.wang2@arm.com, bruce.richardson@intel.com,
jia.guo@intel.com, helin.zhang@intel.com
Subject: [dpdk-dev] [PATCH v5 5/5] net/iavf: fix vector rx burst for iavf
Date: Fri, 16 Oct 2020 17:44:31 +0800 [thread overview]
Message-ID: <20201016094431.96889-6-jia.guo@intel.com> (raw)
In-Reply-To: <20201016094431.96889-1-jia.guo@intel.com>
The limitation of burst size in vector rx was removed, since it should
retrieve as much received packets as possible. And also the scattered
receive path should use a wrapper function to achieve the goal of
burst maximizing.
Bugzilla ID: 516
Fixes: 319c421f3890 ("net/avf: enable SSE Rx Tx")
Fixes: 1162f5a0ef31 ("net/iavf: support flexible Rx descriptor in SSE path")
Fixes: 5b6e8859081d ("net/iavf: support flexible Rx descriptor in AVX path")
Signed-off-by: Jeff Guo <jia.guo@intel.com>
Acked-by: Morten Brørup <mb@smartsharesystems.com>
---
drivers/net/iavf/iavf_rxtx_vec_sse.c | 103 ++++++++++++++++++++-------
1 file changed, 78 insertions(+), 25 deletions(-)
diff --git a/drivers/net/iavf/iavf_rxtx_vec_sse.c b/drivers/net/iavf/iavf_rxtx_vec_sse.c
index 85c5bd4af0..11acaa029e 100644
--- a/drivers/net/iavf/iavf_rxtx_vec_sse.c
+++ b/drivers/net/iavf/iavf_rxtx_vec_sse.c
@@ -379,10 +379,12 @@ flex_desc_to_ptype_v(__m128i descs[4], struct rte_mbuf **rx_pkts,
rx_pkts[3]->packet_type = type_table[_mm_extract_epi16(ptype_all, 7)];
}
-/* Notice:
+/**
+ * vPMD raw receive routine, only accept(nb_pkts >= IAVF_VPMD_DESCS_PER_LOOP)
+ *
+ * Notice:
* - nb_pkts < IAVF_VPMD_DESCS_PER_LOOP, just return no packet
- * - nb_pkts > IAVF_VPMD_RX_MAX_BURST, only scan IAVF_VPMD_RX_MAX_BURST
- * numbers of DD bits
+ * - floor align nb_pkts to a IAVF_VPMD_DESCS_PER_LOOP power-of-two
*/
static inline uint16_t
_recv_raw_pkts_vec(struct iavf_rx_queue *rxq, struct rte_mbuf **rx_pkts,
@@ -413,9 +415,6 @@ _recv_raw_pkts_vec(struct iavf_rx_queue *rxq, struct rte_mbuf **rx_pkts,
offsetof(struct rte_mbuf, rx_descriptor_fields1) + 8);
__m128i dd_check, eop_check;
- /* nb_pkts shall be less equal than IAVF_VPMD_RX_MAX_BURST */
- nb_pkts = RTE_MIN(nb_pkts, IAVF_VPMD_RX_MAX_BURST);
-
/* nb_pkts has to be floor-aligned to IAVF_VPMD_DESCS_PER_LOOP */
nb_pkts = RTE_ALIGN_FLOOR(nb_pkts, IAVF_VPMD_DESCS_PER_LOOP);
@@ -627,10 +626,13 @@ _recv_raw_pkts_vec(struct iavf_rx_queue *rxq, struct rte_mbuf **rx_pkts,
return nb_pkts_recd;
}
-/* Notice:
+/**
+ * vPMD raw receive routine for flex RxD,
+ * only accept(nb_pkts >= IAVF_VPMD_DESCS_PER_LOOP)
+ *
+ * Notice:
* - nb_pkts < IAVF_VPMD_DESCS_PER_LOOP, just return no packet
- * - nb_pkts > IAVF_VPMD_RX_MAX_BURST, only scan IAVF_VPMD_RX_MAX_BURST
- * numbers of DD bits
+ * - floor align nb_pkts to a IAVF_VPMD_DESCS_PER_LOOP power-of-two
*/
static inline uint16_t
_recv_raw_pkts_vec_flex_rxd(struct iavf_rx_queue *rxq,
@@ -688,9 +690,6 @@ _recv_raw_pkts_vec_flex_rxd(struct iavf_rx_queue *rxq,
const __m128i eop_check = _mm_set_epi64x(0x0000000200000002LL,
0x0000000200000002LL);
- /* nb_pkts shall be less equal than IAVF_VPMD_RX_MAX_BURST */
- nb_pkts = RTE_MIN(nb_pkts, IAVF_VPMD_RX_MAX_BURST);
-
/* nb_pkts has to be floor-aligned to IAVF_VPMD_DESCS_PER_LOOP */
nb_pkts = RTE_ALIGN_FLOOR(nb_pkts, IAVF_VPMD_DESCS_PER_LOOP);
@@ -945,15 +944,15 @@ iavf_recv_pkts_vec_flex_rxd(void *rx_queue, struct rte_mbuf **rx_pkts,
return _recv_raw_pkts_vec_flex_rxd(rx_queue, rx_pkts, nb_pkts, NULL);
}
-/* vPMD receive routine that reassembles scattered packets
+/**
+ * vPMD receive routine that reassembles single burst of 32 scattered packets
+ *
* Notice:
* - nb_pkts < IAVF_VPMD_DESCS_PER_LOOP, just return no packet
- * - nb_pkts > VPMD_RX_MAX_BURST, only scan IAVF_VPMD_RX_MAX_BURST
- * numbers of DD bits
*/
-uint16_t
-iavf_recv_scattered_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,
- uint16_t nb_pkts)
+static uint16_t
+iavf_recv_scattered_burst_vec(void *rx_queue, struct rte_mbuf **rx_pkts,
+ uint16_t nb_pkts)
{
struct iavf_rx_queue *rxq = rx_queue;
uint8_t split_flags[IAVF_VPMD_RX_MAX_BURST] = {0};
@@ -986,16 +985,43 @@ iavf_recv_scattered_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,
&split_flags[i]);
}
-/* vPMD receive routine that reassembles scattered packets for flex RxD
+/**
+ * vPMD receive routine that reassembles scattered packets.
+ */
+uint16_t
+iavf_recv_scattered_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,
+ uint16_t nb_pkts)
+{
+ uint16_t retval = 0;
+
+ while (nb_pkts > IAVF_VPMD_RX_MAX_BURST) {
+ uint16_t burst;
+
+ burst = iavf_recv_scattered_burst_vec(rx_queue,
+ rx_pkts + retval,
+ IAVF_VPMD_RX_MAX_BURST);
+ retval += burst;
+ nb_pkts -= burst;
+ if (burst < IAVF_VPMD_RX_MAX_BURST)
+ return retval;
+ }
+
+ return retval + iavf_recv_scattered_burst_vec(rx_queue,
+ rx_pkts + retval,
+ nb_pkts);
+}
+
+/**
+ * vPMD receive routine that reassembles single burst of 32 scattered packets
+ * for flex RxD
+ *
* Notice:
* - nb_pkts < IAVF_VPMD_DESCS_PER_LOOP, just return no packet
- * - nb_pkts > VPMD_RX_MAX_BURST, only scan IAVF_VPMD_RX_MAX_BURST
- * numbers of DD bits
*/
-uint16_t
-iavf_recv_scattered_pkts_vec_flex_rxd(void *rx_queue,
- struct rte_mbuf **rx_pkts,
- uint16_t nb_pkts)
+static uint16_t
+iavf_recv_scattered_burst_vec_flex_rxd(void *rx_queue,
+ struct rte_mbuf **rx_pkts,
+ uint16_t nb_pkts)
{
struct iavf_rx_queue *rxq = rx_queue;
uint8_t split_flags[IAVF_VPMD_RX_MAX_BURST] = {0};
@@ -1028,6 +1054,33 @@ iavf_recv_scattered_pkts_vec_flex_rxd(void *rx_queue,
&split_flags[i]);
}
+/**
+ * vPMD receive routine that reassembles scattered packets for flex RxD
+ */
+uint16_t
+iavf_recv_scattered_pkts_vec_flex_rxd(void *rx_queue,
+ struct rte_mbuf **rx_pkts,
+ uint16_t nb_pkts)
+{
+ uint16_t retval = 0;
+
+ while (nb_pkts > IAVF_VPMD_RX_MAX_BURST) {
+ uint16_t burst;
+
+ burst = iavf_recv_scattered_burst_vec_flex_rxd(rx_queue,
+ rx_pkts + retval,
+ IAVF_VPMD_RX_MAX_BURST);
+ retval += burst;
+ nb_pkts -= burst;
+ if (burst < IAVF_VPMD_RX_MAX_BURST)
+ return retval;
+ }
+
+ return retval + iavf_recv_scattered_burst_vec_flex_rxd(rx_queue,
+ rx_pkts + retval,
+ nb_pkts);
+}
+
static inline void
vtx1(volatile struct iavf_tx_desc *txdp, struct rte_mbuf *pkt, uint64_t flags)
{
--
2.20.1
next prev parent reply other threads:[~2020-10-16 9:53 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-27 7:54 [dpdk-dev] [PATCH v1 0/4] maximize vector rx burst for PMDs Jeff Guo
2020-08-27 7:54 ` [dpdk-dev] [PATCH v1 1/4] net/ixgbe: maximize vector rx burst for ixgbe Jeff Guo
2020-08-27 7:54 ` [dpdk-dev] [PATCH v1 2/4] net/i40e: maximize vector rx burst for i40e Jeff Guo
2020-08-27 7:54 ` [dpdk-dev] [PATCH v1 3/4] net/ice: maximize vector rx burst for ice Jeff Guo
2020-08-27 7:54 ` [dpdk-dev] [PATCH v1 4/4] net/iavf: maximize vector rx burst for iavf Jeff Guo
2020-08-27 8:40 ` [dpdk-dev] [RFC] ethdev: rte_eth_rx_burst() requirements for nb_pkts Morten Brørup
2020-08-27 9:09 ` Bruce Richardson
2020-08-27 9:31 ` Morten Brørup
2020-08-27 9:43 ` Bruce Richardson
2020-08-27 10:13 ` [dpdk-dev] [RFC] ethdev: rte_eth_rx_burst() requirements fornb_pkts Morten Brørup
2020-08-27 11:41 ` Bruce Richardson
2020-08-28 9:03 ` Morten Brørup
2020-08-28 10:07 ` Bruce Richardson
2020-08-28 10:50 ` Morten Brørup
2020-08-29 10:15 ` Morten Brørup
2020-09-09 6:36 ` [dpdk-dev] [PATCH v3 0/5] fix vector rx burst for PMDs Jeff Guo
2020-09-09 6:36 ` [dpdk-dev] [PATCH v3 1/5] net/iavf: fix vector rx burst for iavf Jeff Guo
2020-09-09 6:36 ` [dpdk-dev] [PATCH v3 2/5] net/ixgbe: fix vector rx burst for ixgbe Jeff Guo
[not found] ` <VI1PR0802MB23518C6B517B6EAD8E018CD49E260@VI1PR0802MB2351.eurprd08.prod.outlook.com>
2020-09-09 9:54 ` [dpdk-dev] 回复: " Feifei Wang
2020-09-09 6:36 ` [dpdk-dev] [PATCH v3 3/5] net/i40e: fix vector rx burst for i40e Jeff Guo
2020-09-09 6:36 ` [dpdk-dev] [PATCH v3 4/5] net/ice: fix vector rx burst for ice Jeff Guo
2020-09-15 7:10 ` Han, YingyaX
2020-09-09 6:36 ` [dpdk-dev] [PATCH v3 5/5] net/fm10k: fix vector rx burst for fm10k Jeff Guo
2020-09-09 6:45 ` [dpdk-dev] [PATCH v3 0/5] fix vector rx burst for PMDs Wang, Haiyue
2020-09-09 7:03 ` Guo, Jia
2020-09-09 7:05 ` Wang, Haiyue
2020-09-09 7:43 ` Morten Brørup
2020-09-09 7:55 ` Wang, Haiyue
2020-09-09 8:01 ` Guo, Jia
2020-09-17 7:58 ` [dpdk-dev] [PATCH v4 " Jeff Guo
2020-09-17 7:58 ` [dpdk-dev] [PATCH v4 1/5] net/iavf: fix vector rx burst for iavf Jeff Guo
2020-09-17 7:58 ` [dpdk-dev] [PATCH v4 2/5] net/ixgbe: fix vector rx burst for ixgbe Jeff Guo
2020-09-17 7:58 ` [dpdk-dev] [PATCH v4 3/5] net/i40e: fix vector rx burst for i40e Jeff Guo
2020-09-17 7:58 ` [dpdk-dev] [PATCH v4 4/5] net/ice: fix vector rx burst for ice Jeff Guo
2020-09-17 11:03 ` Zhang, Qi Z
2020-09-18 3:20 ` Guo, Jia
2020-09-18 3:41 ` Zhang, Qi Z
2020-09-18 4:41 ` Guo, Jia
2020-09-18 5:39 ` Zhang, Qi Z
2020-09-17 7:58 ` [dpdk-dev] [PATCH v4 5/5] net/fm10k: fix vector rx burst for fm10k Jeff Guo
2020-10-16 9:44 ` [dpdk-dev] [PATCH v5 0/5] fix vector rx burst for PMDs Jeff Guo
2020-10-16 9:44 ` [dpdk-dev] [PATCH v5 1/5] net/ixgbe: fix vector rx burst for ixgbe Jeff Guo
2020-10-16 9:44 ` [dpdk-dev] [PATCH v5 2/5] net/i40e: fix vector rx burst for i40e Jeff Guo
2020-10-16 9:44 ` [dpdk-dev] [PATCH v5 3/5] net/ice: fix vector rx burst for ice Jeff Guo
2020-10-16 9:44 ` [dpdk-dev] [PATCH v5 4/5] net/fm10k: fix vector rx burst for fm10k Jeff Guo
2020-10-16 9:44 ` Jeff Guo [this message]
2020-10-23 5:09 ` [dpdk-dev] [PATCH v5 5/5] net/iavf: fix vector rx burst for iavf Ling, WeiX
2020-10-23 10:11 ` [dpdk-dev] [PATCH v5 0/5] fix vector rx burst for PMDs Zhang, Qi Z
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=20201016094431.96889-6-jia.guo@intel.com \
--to=jia.guo@intel.com \
--cc=Feifei.wang2@arm.com \
--cc=barbette@kth.se \
--cc=beilei.xing@intel.com \
--cc=bruce.richardson@intel.com \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@intel.com \
--cc=haiyue.wang@intel.com \
--cc=helin.zhang@intel.com \
--cc=jingjing.wu@intel.com \
--cc=mb@smartsharesystems.com \
--cc=qi.z.zhang@intel.com \
--cc=qiming.yang@intel.com \
--cc=stephen@networkplumber.org \
/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.