From 8efffaec56e30ed92c2c3f6b2a8e2e77d78ebd07 Mon Sep 17 00:00:00 2001 From: Honnappa Nagarahalli Date: Wed, 23 Feb 2022 00:09:31 -0600 Subject: [PATCH] examples/l3fwd: make Rx and Tx queue size configurable Make Rx and Tx queue sizes configurable from the command line. This helps DTS write better test cases. Signed-off-by: Honnappa Nagarahalli Reviewed-by: Kathleen Capella Reviewed-by: Ruifeng Wang Acked-by: Bruce Richardson --- examples/l3fwd/main.c | 54 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c index a49f418796..a629198223 100644 --- a/examples/l3fwd/main.c +++ b/examples/l3fwd/main.c @@ -368,6 +368,8 @@ print_usage(const char *prgname) " [-P]" " [--lookup]" " --config (port,queue,lcore)[,(port,queue,lcore)]" + " [--rx-queue-size NPKTS]" + " [--tx-queue-size NPKTS]" " [--eth-dest=X,MM:MM:MM:MM:MM:MM]" " [--max-pkt-len PKTLEN]" " [--no-numa]" @@ -387,6 +389,10 @@ print_usage(const char *prgname) " Default: lpm\n" " Accepted: em (Exact Match), lpm (Longest Prefix Match), fib (Forwarding Information Base)\n" " --config (port,queue,lcore): Rx queue configuration\n" + " --rx-queue-size NPKTS: Rx queue size in decimal\n" + " Default: %d\n" + " --tx-queue-size NPKTS: Tx queue 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" @@ -411,7 +417,7 @@ print_usage(const char *prgname) " --rule_ipv4=FILE: Specify the ipv4 rules entries file.\n" " Each rule occupies one line.\n" " --rule_ipv6=FILE: Specify the ipv6 rules entries file.\n\n", - prgname); + prgname, RTE_TEST_RX_DESC_DEFAULT, RTE_TEST_TX_DESC_DEFAULT); } static int @@ -554,6 +560,38 @@ parse_mode(const char *optarg) evt_rsrc->enabled = true; } +static void +parse_queue_size(const char *queue_size_arg, uint16_t *queue_size, int rx) +{ + char *end = NULL; + unsigned long value; + + /* parse decimal string */ + value = strtoul(queue_size_arg, &end, 10); + if ((queue_size_arg[0] == '\0') || (end == NULL) || + (*end != '\0') || (value == 0)) { + if (rx == 1) + rte_exit(EXIT_FAILURE, "Invalid rx-queue-size\n"); + else + rte_exit(EXIT_FAILURE, "Invalid tx-queue-size\n"); + + return; + } + + if (value > UINT16_MAX) { + if (rx == 1) + rte_exit(EXIT_FAILURE, "rx-queue-size %lu > %d\n", + value, UINT16_MAX); + else + rte_exit(EXIT_FAILURE, "tx-queue-size %lu > %d\n", + value, UINT16_MAX); + + return; + } + + *queue_size = value; +} + static void parse_eventq_sched(const char *optarg) { @@ -611,6 +649,8 @@ static const char short_options[] = ; #define CMD_LINE_OPT_CONFIG "config" +#define CMD_LINE_OPT_RX_QUEUE_SIZE "rx-queue-size" +#define CMD_LINE_OPT_TX_QUEUE_SIZE "tx-queue-size" #define CMD_LINE_OPT_ETH_DEST "eth-dest" #define CMD_LINE_OPT_NO_NUMA "no-numa" #define CMD_LINE_OPT_IPV6 "ipv6" @@ -635,6 +675,8 @@ enum { * conflict with short options */ CMD_LINE_OPT_MIN_NUM = 256, CMD_LINE_OPT_CONFIG_NUM, + CMD_LINE_OPT_RX_QUEUE_SIZE_NUM, + CMD_LINE_OPT_TX_QUEUE_SIZE_NUM, CMD_LINE_OPT_ETH_DEST_NUM, CMD_LINE_OPT_NO_NUMA_NUM, CMD_LINE_OPT_IPV6_NUM, @@ -655,6 +697,8 @@ enum { static const struct option lgopts[] = { {CMD_LINE_OPT_CONFIG, 1, 0, CMD_LINE_OPT_CONFIG_NUM}, + {CMD_LINE_OPT_RX_QUEUE_SIZE, 1, 0, CMD_LINE_OPT_RX_QUEUE_SIZE_NUM}, + {CMD_LINE_OPT_TX_QUEUE_SIZE, 1, 0, CMD_LINE_OPT_TX_QUEUE_SIZE_NUM}, {CMD_LINE_OPT_ETH_DEST, 1, 0, CMD_LINE_OPT_ETH_DEST_NUM}, {CMD_LINE_OPT_NO_NUMA, 0, 0, CMD_LINE_OPT_NO_NUMA_NUM}, {CMD_LINE_OPT_IPV6, 0, 0, CMD_LINE_OPT_IPV6_NUM}, @@ -750,6 +794,14 @@ parse_args(int argc, char **argv) lcore_params = 1; break; + case CMD_LINE_OPT_RX_QUEUE_SIZE_NUM: + parse_queue_size(optarg, &nb_rxd, 1); + break; + + case CMD_LINE_OPT_TX_QUEUE_SIZE_NUM: + parse_queue_size(optarg, &nb_txd, 0); + break; + case CMD_LINE_OPT_ETH_DEST_NUM: parse_eth_dest(optarg); break; -- 2.39.5