All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] examples/l3fwd: add option to set RX burst size
@ 2024-10-12  8:40 Jie Hai
  2024-10-12  9:06 ` fengchengwen
                   ` (5 more replies)
  0 siblings, 6 replies; 20+ messages in thread
From: Jie Hai @ 2024-10-12  8:40 UTC (permalink / raw)
  To: dev, thomas, ferruh.yigit; +Cc: lihuisong, fengchengwen, haijie1

Now the Rx burst size is fixed to MAX_PKT_BURST (32). This
parameter needs to be modified in some performance optimization
scenarios. So an option '--burst' is added to set the burst size
explicitly. The default value is DEFAULT_PKT_BURST (32) and maximum
value is MAX_PKT_BURST (512).

Signed-off-by: Jie Hai <haijie1@huawei.com>
---
 examples/l3fwd/l3fwd.h     |  5 +++-
 examples/l3fwd/l3fwd_acl.c |  2 +-
 examples/l3fwd/l3fwd_em.c  |  2 +-
 examples/l3fwd/l3fwd_fib.c |  2 +-
 examples/l3fwd/l3fwd_lpm.c |  2 +-
 examples/l3fwd/main.c      | 58 ++++++++++++++++++++++++++++++++++++--
 6 files changed, 64 insertions(+), 7 deletions(-)

diff --git a/examples/l3fwd/l3fwd.h b/examples/l3fwd/l3fwd.h
index 93ce652d02b7..3ebee6301295 100644
--- a/examples/l3fwd/l3fwd.h
+++ b/examples/l3fwd/l3fwd.h
@@ -23,7 +23,8 @@
 #define RX_DESC_DEFAULT 1024
 #define TX_DESC_DEFAULT 1024
 
-#define MAX_PKT_BURST     32
+#define DEFAULT_PKT_BURST 32
+#define MAX_PKT_BURST 512
 #define BURST_TX_DRAIN_US 100 /* TX drain every ~100us */
 
 #define MEMPOOL_CACHE_SIZE 256
@@ -115,6 +116,8 @@ extern struct acl_algorithms acl_alg[];
 
 extern uint32_t max_pkt_len;
 
+extern uint32_t nb_pkt_per_burst;
+
 /* Send burst of packets on an output interface */
 static inline int
 send_burst(struct lcore_conf *qconf, uint16_t n, uint16_t port)
diff --git a/examples/l3fwd/l3fwd_acl.c b/examples/l3fwd/l3fwd_acl.c
index b635011ef708..ccb9946837ed 100644
--- a/examples/l3fwd/l3fwd_acl.c
+++ b/examples/l3fwd/l3fwd_acl.c
@@ -1119,7 +1119,7 @@ acl_main_loop(__rte_unused void *dummy)
 			portid = qconf->rx_queue_list[i].port_id;
 			queueid = qconf->rx_queue_list[i].queue_id;
 			nb_rx = rte_eth_rx_burst(portid, queueid,
-				pkts_burst, MAX_PKT_BURST);
+				pkts_burst, nb_pkt_per_burst);
 
 			if (nb_rx > 0) {
 				acl_process_pkts(pkts_burst, hops, nb_rx,
diff --git a/examples/l3fwd/l3fwd_em.c b/examples/l3fwd/l3fwd_em.c
index 31a7e05e39d0..da9c45e3a482 100644
--- a/examples/l3fwd/l3fwd_em.c
+++ b/examples/l3fwd/l3fwd_em.c
@@ -644,7 +644,7 @@ em_main_loop(__rte_unused void *dummy)
 			portid = qconf->rx_queue_list[i].port_id;
 			queueid = qconf->rx_queue_list[i].queue_id;
 			nb_rx = rte_eth_rx_burst(portid, queueid, pkts_burst,
-				MAX_PKT_BURST);
+				nb_pkt_per_burst);
 			if (nb_rx == 0)
 				continue;
 
diff --git a/examples/l3fwd/l3fwd_fib.c b/examples/l3fwd/l3fwd_fib.c
index f38b19af3f57..aa81b12fe7dc 100644
--- a/examples/l3fwd/l3fwd_fib.c
+++ b/examples/l3fwd/l3fwd_fib.c
@@ -239,7 +239,7 @@ fib_main_loop(__rte_unused void *dummy)
 			portid = qconf->rx_queue_list[i].port_id;
 			queueid = qconf->rx_queue_list[i].queue_id;
 			nb_rx = rte_eth_rx_burst(portid, queueid, pkts_burst,
-					MAX_PKT_BURST);
+					nb_pkt_per_burst);
 			if (nb_rx == 0)
 				continue;
 
diff --git a/examples/l3fwd/l3fwd_lpm.c b/examples/l3fwd/l3fwd_lpm.c
index e8fd95aae9ce..048c02491378 100644
--- a/examples/l3fwd/l3fwd_lpm.c
+++ b/examples/l3fwd/l3fwd_lpm.c
@@ -205,7 +205,7 @@ lpm_main_loop(__rte_unused void *dummy)
 			portid = qconf->rx_queue_list[i].port_id;
 			queueid = qconf->rx_queue_list[i].queue_id;
 			nb_rx = rte_eth_rx_burst(portid, queueid, pkts_burst,
-				MAX_PKT_BURST);
+				nb_pkt_per_burst);
 			if (nb_rx == 0)
 				continue;
 
diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c
index 01b763e5ba11..ba0a7f7088f0 100644
--- a/examples/l3fwd/main.c
+++ b/examples/l3fwd/main.c
@@ -55,6 +55,7 @@
 
 uint16_t nb_rxd = RX_DESC_DEFAULT;
 uint16_t nb_txd = TX_DESC_DEFAULT;
+uint32_t nb_pkt_per_burst = DEFAULT_PKT_BURST;
 
 /**< Ports set in promiscuous mode off by default. */
 static int promiscuous_on;
@@ -395,6 +396,7 @@ print_usage(const char *prgname)
 		" --config (port,queue,lcore)[,(port,queue,lcore)]"
 		" [--rx-queue-size NPKTS]"
 		" [--tx-queue-size NPKTS]"
+		" [--burst NPKTS]"
 		" [--eth-dest=X,MM:MM:MM:MM:MM:MM]"
 		" [--max-pkt-len PKTLEN]"
 		" [--no-numa]"
@@ -420,6 +422,8 @@ print_usage(const char *prgname)
 		"            Default: %d\n"
 		"  --tx-queue-size NPKTS: Tx queue size in decimal\n"
 		"            Default: %d\n"
+		"  --burst NPKTS: Burst size in decimal\n"
+		"            Default: %d\n"
 		"  --eth-dest=X,MM:MM:MM:MM:MM:MM: Ethernet destination for port X\n"
 		"  --max-pkt-len PKTLEN: maximum packet length in decimal (64-9600)\n"
 		"  --no-numa: Disable numa awareness\n"
@@ -449,7 +453,7 @@ print_usage(const char *prgname)
 		"                    another is route entry at while line leads with character '%c'.\n"
 		"  --rule_ipv6=FILE: Specify the ipv6 rules entries file.\n"
 		"  --alg: ACL classify method to use, one of: %s.\n\n",
-		prgname, RX_DESC_DEFAULT, TX_DESC_DEFAULT,
+		prgname, RX_DESC_DEFAULT, TX_DESC_DEFAULT, DEFAULT_PKT_BURST,
 		ACL_LEAD_CHAR, ROUTE_LEAD_CHAR, alg);
 }
 
@@ -667,6 +671,49 @@ parse_lookup(const char *optarg)
 	return 0;
 }
 
+static void
+parse_pkt_burst(const char *optarg)
+{
+	struct rte_eth_dev_info dev_info;
+	uint16_t burst_size;
+	uint16_t pkt_burst;
+	char *end = NULL;
+	int ret;
+
+	/* parse decimal string */
+	pkt_burst = strtoul(optarg, &end, 10);
+	if ((optarg[0] == '\0') || (end == NULL) || (*end != '\0'))
+		return;
+
+	if (pkt_burst > MAX_PKT_BURST) {
+		RTE_LOG(INFO, L3FWD, "User provided burst must be <= %d. Using default value %d\n",
+			MAX_PKT_BURST, nb_pkt_per_burst);
+		return;
+	} else if (pkt_burst > 0) {
+		nb_pkt_per_burst = pkt_burst;
+		return;
+	}
+
+	/* If user gives a value of zero, query the PMD for its recommended Rx burst size. */
+	ret = rte_eth_dev_info_get(0, &dev_info);
+	if (ret != 0)
+		return;
+	burst_size = dev_info.default_rxportconf.burst_size;
+	if (burst_size == 0) {
+		RTE_LOG(INFO, L3FWD, "PMD does not recommend a burst size. Using default value %d. "
+			"User provided value must be in [1, %d]\n",
+			nb_pkt_per_burst, MAX_PKT_BURST);
+		return;
+	} else if (burst_size > MAX_PKT_BURST) {
+		RTE_LOG(INFO, L3FWD, "PMD recommended burst size %d exceeds maximum value %d. "
+			"Using default value %d\n",
+			burst_size, MAX_PKT_BURST, nb_pkt_per_burst);
+		return;
+	}
+	nb_pkt_per_burst = burst_size;
+	RTE_LOG(INFO, L3FWD, "Using PMD-provided burst value %d\n", burst_size);
+}
+
 #define MAX_JUMBO_PKT_LEN  9600
 
 static const char short_options[] =
@@ -698,6 +745,7 @@ static const char short_options[] =
 #define CMD_LINE_OPT_RULE_IPV4 "rule_ipv4"
 #define CMD_LINE_OPT_RULE_IPV6 "rule_ipv6"
 #define CMD_LINE_OPT_ALG "alg"
+#define CMD_LINE_OPT_PKT_BURST "burst"
 
 enum {
 	/* long options mapped to a short option */
@@ -726,7 +774,8 @@ enum {
 	CMD_LINE_OPT_LOOKUP_NUM,
 	CMD_LINE_OPT_ENABLE_VECTOR_NUM,
 	CMD_LINE_OPT_VECTOR_SIZE_NUM,
-	CMD_LINE_OPT_VECTOR_TMO_NS_NUM
+	CMD_LINE_OPT_VECTOR_TMO_NS_NUM,
+	CMD_LINE_OPTPKT_BURST_NUM
 };
 
 static const struct option lgopts[] = {
@@ -753,6 +802,7 @@ static const struct option lgopts[] = {
 	{CMD_LINE_OPT_RULE_IPV4,   1, 0, CMD_LINE_OPT_RULE_IPV4_NUM},
 	{CMD_LINE_OPT_RULE_IPV6,   1, 0, CMD_LINE_OPT_RULE_IPV6_NUM},
 	{CMD_LINE_OPT_ALG,   1, 0, CMD_LINE_OPT_ALG_NUM},
+	{CMD_LINE_OPT_PKT_BURST,   1, 0, CMD_LINE_OPTPKT_BURST_NUM},
 	{NULL, 0, 0, 0}
 };
 
@@ -841,6 +891,10 @@ parse_args(int argc, char **argv)
 			parse_queue_size(optarg, &nb_txd, 0);
 			break;
 
+		case CMD_LINE_OPTPKT_BURST_NUM:
+			parse_pkt_burst(optarg);
+			break;
+
 		case CMD_LINE_OPT_ETH_DEST_NUM:
 			parse_eth_dest(optarg);
 			break;
-- 
2.22.0


^ permalink raw reply related	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2024-11-19 18:07 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-12  8:40 [PATCH] examples/l3fwd: add option to set RX burst size Jie Hai
2024-10-12  9:06 ` fengchengwen
2024-10-12 12:22 ` Morten Brørup
2024-10-17  8:58 ` [PATCH v2 0/2] examples/l3fwd: add more options Jie Hai
2024-10-17  8:58   ` [PATCH v2 1/2] examples/l3fwd: add option to set RX burst size Jie Hai
2024-10-17  9:37     ` lihuisong (C)
2024-10-17  8:58   ` [PATCH v2 2/2] examples/l3fwd: add option to set mbuf cache size Jie Hai
2024-10-17  9:40     ` lihuisong (C)
2024-10-17  9:18   ` [PATCH v2 0/2] examples/l3fwd: add more options Morten Brørup
2024-10-17  9:58 ` [PATCH v3 " Jie Hai
2024-10-17  9:58   ` [PATCH v3 1/2] examples/l3fwd: add option to set RX burst size Jie Hai
2024-10-17  9:58   ` [PATCH v3 2/2] examples/l3fwd: add option to set mbuf cache size Jie Hai
2024-10-17 11:10     ` fengchengwen
2024-10-18  1:08 ` [PATCH v4 0/2] examples/l3fwd: add more options Jie Hai
2024-10-18  1:08   ` [PATCH v4 1/2] examples/l3fwd: add option to set RX burst size Jie Hai
2024-10-18  1:08   ` [PATCH v4 2/2] examples/l3fwd: add option to set mbuf cache size Jie Hai
2024-11-06  1:52   ` [PATCH v4 0/2] examples/l3fwd: add more options Jie Hai
2024-11-13  1:35   ` Jie Hai
2024-11-19 18:07   ` Thomas Monjalon
2024-11-06  1:51 ` [PATCH] examples/l3fwd: add option to set RX burst size Jie Hai

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.