From patchwork Tue Jan 7 12:22:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nipun Gupta X-Patchwork-Id: 64264 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 91D69A04F6; Tue, 7 Jan 2020 13:39:23 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6DDD81D629; Tue, 7 Jan 2020 13:39:18 +0100 (CET) Received: from inva020.nxp.com (inva020.nxp.com [92.121.34.13]) by dpdk.org (Postfix) with ESMTP id 8B2681C1D7 for ; Tue, 7 Jan 2020 13:39:14 +0100 (CET) Received: from inva020.nxp.com (localhost [127.0.0.1]) by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id 048101A0183; Tue, 7 Jan 2020 13:39:14 +0100 (CET) Received: from invc005.ap-rdc01.nxp.com (invc005.ap-rdc01.nxp.com [165.114.16.14]) by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id D2B721A0341; Tue, 7 Jan 2020 13:39:07 +0100 (CET) Received: from GDB1.ap.freescale.net (gdb1.ap.freescale.net [10.232.132.179]) by invc005.ap-rdc01.nxp.com (Postfix) with ESMTP id 3F4F7402DE; Tue, 7 Jan 2020 20:39:00 +0800 (SGT) From: Nipun Gupta To: dev@dpdk.org Cc: pbhagavatula@marvell.com, jerinj@marvell.com, hemant.agrawal@nxp.com, akhil.goyal@nxp.com, marko.kovacevic@intel.com, orika@mellanox.com, bruce.richardson@intel.com, radu.nicolau@intel.com, tomasz.kantecki@intel.com, skori@marvell.com, Nipun Gupta Date: Tue, 7 Jan 2020 17:52:01 +0530 Message-Id: <20200107122201.30910-2-nipun.gupta@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200107122201.30910-1-nipun.gupta@nxp.com> References: <20200106043445.14334-1-nipun.gupta@nxp.com> <20200107122201.30910-1-nipun.gupta@nxp.com> X-Virus-Scanned: ClamAV using ClamSMTP Subject: [dpdk-dev] [PATCH 2/2 v2] examples/l3fwd: support multiple eth Rx queues in event mode X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" This patch adds support of multiple Ethernet RX queues for the event dev mode. Signed-off-by: Nipun Gupta --- Changes in v2: - Update command line argument to '--event-eth-rxqs' instead of '--event-eth-queues' - Correctly printed the number of RX queues being created examples/l3fwd/l3fwd_event.c | 59 ++++++++++++++++++++++++++++-------- examples/l3fwd/l3fwd_event.h | 4 +++ examples/l3fwd/main.c | 8 +++-- 3 files changed, 56 insertions(+), 15 deletions(-) diff --git a/examples/l3fwd/l3fwd_event.c b/examples/l3fwd/l3fwd_event.c index 9fea11bd9..1289bc9ab 100644 --- a/examples/l3fwd/l3fwd_event.c +++ b/examples/l3fwd/l3fwd_event.c @@ -40,12 +40,32 @@ parse_eventq_sync(const char *optarg) evt_rsrc->sched_type = RTE_SCHED_TYPE_PARALLEL; } +static void +parse_event_eth_rx_queues(const char *eth_rx_queues) +{ + struct l3fwd_event_resources *evt_rsrc = l3fwd_get_eventdev_rsrc(); + char *end = NULL; + uint8_t num_eth_rx_queues; + + /* parse decimal string */ + num_eth_rx_queues = strtoul(eth_rx_queues, &end, 10); + if ((eth_rx_queues[0] == '\0') || (end == NULL) || (*end != '\0')) + return; + + if (num_eth_rx_queues == 0) + return; + + evt_rsrc->eth_rx_queues = num_eth_rx_queues; +} + static void l3fwd_parse_eventdev_args(char **argv, int argc) { const struct option eventdev_lgopts[] = { {CMD_LINE_OPT_MODE, 1, 0, CMD_LINE_OPT_MODE_NUM}, {CMD_LINE_OPT_EVENTQ_SYNC, 1, 0, CMD_LINE_OPT_EVENTQ_SYNC_NUM}, + {CMD_LINE_OPT_EVENT_ETH_RX_QUEUES, 1, 0, + CMD_LINE_OPT_EVENT_ETH_RX_QUEUES_NUM}, {NULL, 0, 0, 0} }; char *prgname = argv[0]; @@ -64,6 +84,10 @@ l3fwd_parse_eventdev_args(char **argv, int argc) parse_eventq_sync(optarg); break; + case CMD_LINE_OPT_EVENT_ETH_RX_QUEUES_NUM: + parse_event_eth_rx_queues(optarg); + break; + default: print_usage(prgname); exit(1); @@ -85,6 +109,7 @@ l3fwd_eth_dev_port_setup(struct rte_eth_conf *port_conf) struct rte_eth_rxconf rxconf; unsigned int nb_mbuf; uint16_t port_id; + uint8_t eth_qid; int32_t ret; /* initialize all ports */ @@ -99,7 +124,8 @@ l3fwd_eth_dev_port_setup(struct rte_eth_conf *port_conf) /* init port */ printf("Initializing port %d ... ", port_id); fflush(stdout); - printf("Creating queues: nb_rxq=1 nb_txq=1...\n"); + printf("Creating queues: nb_rxq=%d nb_txq=1...\n", + evt_rsrc->eth_rx_queues); rte_eth_dev_info_get(port_id, &dev_info); if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE) @@ -118,7 +144,8 @@ l3fwd_eth_dev_port_setup(struct rte_eth_conf *port_conf) local_port_conf.rx_adv_conf.rss_conf.rss_hf); } - ret = rte_eth_dev_configure(port_id, 1, 1, &local_port_conf); + ret = rte_eth_dev_configure(port_id, evt_rsrc->eth_rx_queues, + 1, &local_port_conf); if (ret < 0) rte_exit(EXIT_FAILURE, "Cannot configure device: err=%d, port=%d\n", @@ -161,20 +188,26 @@ l3fwd_eth_dev_port_setup(struct rte_eth_conf *port_conf) 8192u); ret = init_mem(port_id, nb_mbuf); } - /* init one Rx queue per port */ + /* init Rx queues per port */ rxconf = dev_info.default_rxconf; rxconf.offloads = local_port_conf.rxmode.offloads; - if (!evt_rsrc->per_port_pool) - ret = rte_eth_rx_queue_setup(port_id, 0, nb_rxd, 0, - &rxconf, evt_rsrc->pkt_pool[0][0]); - else - ret = rte_eth_rx_queue_setup(port_id, 0, nb_rxd, 0, - &rxconf, + + for (eth_qid = 0; eth_qid < evt_rsrc->eth_rx_queues; + eth_qid++) { + if (!evt_rsrc->per_port_pool) + ret = rte_eth_rx_queue_setup(port_id, eth_qid, + nb_rxd, 0, &rxconf, + evt_rsrc->pkt_pool[0][0]); + else + ret = rte_eth_rx_queue_setup(port_id, eth_qid, + nb_rxd, 0, &rxconf, evt_rsrc->pkt_pool[port_id][0]); - if (ret < 0) - rte_exit(EXIT_FAILURE, - "rte_eth_rx_queue_setup: err=%d, " - "port=%d\n", ret, port_id); + if (ret < 0) + rte_exit(EXIT_FAILURE, + "rte_eth_rx_queue_setup: err=%d, " + "port=%d, eth_qid: %d\n", + ret, port_id, eth_qid); + } /* init one Tx queue per port */ txconf = dev_info.default_txconf; diff --git a/examples/l3fwd/l3fwd_event.h b/examples/l3fwd/l3fwd_event.h index 470aedc61..c79458eec 100644 --- a/examples/l3fwd/l3fwd_event.h +++ b/examples/l3fwd/l3fwd_event.h @@ -21,10 +21,12 @@ #define CMD_LINE_OPT_MODE "mode" #define CMD_LINE_OPT_EVENTQ_SYNC "eventq-sched" +#define CMD_LINE_OPT_EVENT_ETH_RX_QUEUES "event-eth-rxqs" enum { CMD_LINE_OPT_MODE_NUM = 265, CMD_LINE_OPT_EVENTQ_SYNC_NUM, + CMD_LINE_OPT_EVENT_ETH_RX_QUEUES_NUM, }; typedef uint32_t (*event_device_setup_cb)(void); @@ -82,6 +84,7 @@ struct l3fwd_event_resources { uint8_t deq_depth; uint8_t has_burst; uint8_t enabled; + uint8_t eth_rx_queues; uint8_t nb_args; char **args; }; @@ -104,6 +107,7 @@ l3fwd_get_eventdev_rsrc(void) memset(mz->addr, 0, sizeof(struct l3fwd_event_resources)); rsrc->sched_type = RTE_SCHED_TYPE_ATOMIC; + rsrc->eth_rx_queues = 1; return mz->addr; } diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c index 68998f42c..b76942a9b 100644 --- a/examples/l3fwd/main.c +++ b/examples/l3fwd/main.c @@ -285,7 +285,8 @@ print_usage(const char *prgname) " [--parse-ptype]" " [--per-port-pool]" " [--mode]" - " [--eventq-sched]\n\n" + " [--eventq-sched]" + " [--event-eth-rxqs]\n\n" " -p PORTMASK: Hexadecimal bitmask of ports to configure\n" " -P : Enable promiscuous mode\n" @@ -306,7 +307,10 @@ print_usage(const char *prgname) " --eventq-sched: Event queue synchronization method " " ordered, atomic or parallel.\n\t\t" " Default: atomic\n\t\t" - " Valid only if --mode=eventdev\n\n", + " Valid only if --mode=eventdev\n" + " --event-eth-rxqs: Number of ethernet RX queues per device.\n\t\t" + " Default: 1\n\t\t" + " Valid only if --mode=eventdev\n\n", prgname); }