From patchwork Mon Jan 6 04:34:45 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nipun Gupta X-Patchwork-Id: 64229 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 ADA3AA04F1; Mon, 6 Jan 2020 05:52:01 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id DA2CF1D5AE; Mon, 6 Jan 2020 05:51:57 +0100 (CET) Received: from inva021.nxp.com (inva021.nxp.com [92.121.34.21]) by dpdk.org (Postfix) with ESMTP id 967071D5A8 for ; Mon, 6 Jan 2020 05:51:56 +0100 (CET) Received: from inva021.nxp.com (localhost [127.0.0.1]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 3655B20065B; Mon, 6 Jan 2020 05:51:56 +0100 (CET) Received: from invc005.ap-rdc01.nxp.com (invc005.ap-rdc01.nxp.com [165.114.16.14]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 10329200124; Mon, 6 Jan 2020 05:51:50 +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 6A216402C4; Mon, 6 Jan 2020 12:51:42 +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: Mon, 6 Jan 2020 10:04:45 +0530 Message-Id: <20200106043445.14334-2-nipun.gupta@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200106043445.14334-1-nipun.gupta@nxp.com> References: <20200106043445.14334-1-nipun.gupta@nxp.com> X-Virus-Scanned: ClamAV using ClamSMTP Subject: [dpdk-dev] [PATCH 2/2] examples/l3fwd: support multiple 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" Signed-off-by: Nipun Gupta --- examples/l3fwd/l3fwd_event.c | 55 ++++++++++++++++++++++++++++-------- examples/l3fwd/l3fwd_event.h | 4 +++ examples/l3fwd/main.c | 8 ++++-- 3 files changed, 53 insertions(+), 14 deletions(-) diff --git a/examples/l3fwd/l3fwd_event.c b/examples/l3fwd/l3fwd_event.c index 9fea11bd9..61f642691 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_queues(const char *eth_queues) +{ + struct l3fwd_event_resources *evt_rsrc = l3fwd_get_eventdev_rsrc(); + char *end = NULL; + uint8_t num_eth_queues; + + /* parse decimal string */ + num_eth_queues = strtoul(eth_queues, &end, 10); + if ((eth_queues[0] == '\0') || (end == NULL) || (*end != '\0')) + return; + + if (num_eth_queues == 0) + return; + + evt_rsrc->eth_queues = num_eth_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_QUEUES, 1, 0, + CMD_LINE_OPT_EVENT_ETH_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_QUEUES_NUM: + parse_event_eth_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 */ @@ -118,7 +143,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_queues, 1, + &local_port_conf); if (ret < 0) rte_exit(EXIT_FAILURE, "Cannot configure device: err=%d, port=%d\n", @@ -161,20 +187,25 @@ 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_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 queue: %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..1fdd51e62 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_QUEUES "event-eth-queues" enum { CMD_LINE_OPT_MODE_NUM = 265, CMD_LINE_OPT_EVENTQ_SYNC_NUM, + CMD_LINE_OPT_EVENT_ETH_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_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_queues = 1; return mz->addr; } diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c index 68998f42c..ecfaca435 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-queues]\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-queues: Number of ethernet queues per device.\n\t\t" + " Default: 1\n\t\t" + " Valid only if --mode=eventdev\n\n", prgname); }