From patchwork Tue Apr 2 04:33:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Varghese, Vipin" X-Patchwork-Id: 52048 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 621DE5699; Tue, 2 Apr 2019 06:33:04 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 447E34F9B for ; Tue, 2 Apr 2019 06:33:02 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 01 Apr 2019 21:33:01 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,298,1549958400"; d="scan'208";a="334145267" Received: from unknown (HELO saesrv02-S2600CWR.intel.com) ([10.224.122.203]) by fmsmga005.fm.intel.com with ESMTP; 01 Apr 2019 21:32:59 -0700 From: Vipin Varghese To: dev@dpdk.org, marko.kovacevic@intel.com, reshma.pattan@intel.com Cc: keith.wiles@intel.com, john.mcnamara@intel.com, stephen1.byrne@intel.com, amit.tamboli@intel.com, sanjay.padubidri@intel.com, amol.patel@intel.com, Vipin Varghese Date: Tue, 2 Apr 2019 10:03:17 +0530 Message-Id: <20190402043318.20382-2-vipin.varghese@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190402043318.20382-1-vipin.varghese@intel.com> References: <20190328150406.12051-1-vipin.varghese@intel.com> <20190402043318.20382-1-vipin.varghese@intel.com> Subject: [dpdk-dev] [PATCH v4 1/2] app/pdump: remove core restriction 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" PDUMP application is being limited to run on default first core. The patch removes the restriction, allowing the user to run on any of selected cores in EAL args. If no args are passed, the logic runs on default master core. Signed-off-by: Vipin Varghese --- app/pdump/main.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/app/pdump/main.c b/app/pdump/main.c index ccf2a1d2f..c1db2eb8d 100644 --- a/app/pdump/main.c +++ b/app/pdump/main.c @@ -860,23 +860,21 @@ main(int argc, char **argv) int ret; int i; - char c_flag[] = "-c1"; char n_flag[] = "-n4"; char mp_flag[] = "--proc-type=secondary"; - char *argp[argc + 3]; + char *argp[argc + 2]; /* catch ctrl-c so we can print on exit */ signal(SIGINT, signal_handler); argp[0] = argv[0]; - argp[1] = c_flag; - argp[2] = n_flag; - argp[3] = mp_flag; + argp[1] = n_flag; + argp[2] = mp_flag; for (i = 1; i < argc; i++) - argp[i + 3] = argv[i]; + argp[i + 2] = argv[i]; - argc += 3; + argc += 2; diag = rte_eal_init(argc, argp); if (diag < 0) @@ -886,7 +884,7 @@ main(int argc, char **argv) rte_exit(EXIT_FAILURE, "No Ethernet ports - bye\n"); argc -= diag; - argv += (diag - 3); + argv += (diag - 2); /* parse app arguments */ if (argc > 1) { From patchwork Tue Apr 2 04:33:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Varghese, Vipin" X-Patchwork-Id: 52049 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6159A5A44; Tue, 2 Apr 2019 06:33:07 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 472AA5A44 for ; Tue, 2 Apr 2019 06:33:06 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 01 Apr 2019 21:33:05 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,298,1549958400"; d="scan'208";a="334145302" Received: from unknown (HELO saesrv02-S2600CWR.intel.com) ([10.224.122.203]) by fmsmga005.fm.intel.com with ESMTP; 01 Apr 2019 21:33:02 -0700 From: Vipin Varghese To: dev@dpdk.org, marko.kovacevic@intel.com, reshma.pattan@intel.com Cc: keith.wiles@intel.com, john.mcnamara@intel.com, stephen1.byrne@intel.com, amit.tamboli@intel.com, sanjay.padubidri@intel.com, amol.patel@intel.com, Vipin Varghese Date: Tue, 2 Apr 2019 10:03:18 +0530 Message-Id: <20190402043318.20382-3-vipin.varghese@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190402043318.20382-1-vipin.varghese@intel.com> References: <20190328150406.12051-1-vipin.varghese@intel.com> <20190402043318.20382-1-vipin.varghese@intel.com> Subject: [dpdk-dev] [PATCH v4 2/2] app/pdump: enhance to support multi-core capture 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" Add option --multi, to enhance the pdump application to allow capture on unique cores for each --pdump option. If option --multi is ignored the default capture occurs on a single core for all --pdump options. Signed-off-by: Vipin Varghese Signed-off-by: Vipin Varghese > --- app/pdump/main.c | 76 ++++++++++++++++++++++++++++++++------ doc/guides/tools/pdump.rst | 8 +++- 2 files changed, 72 insertions(+), 12 deletions(-) diff --git a/app/pdump/main.c b/app/pdump/main.c index c1db2eb8d..997c8942f 100644 --- a/app/pdump/main.c +++ b/app/pdump/main.c @@ -28,6 +28,7 @@ #include #define CMD_LINE_OPT_PDUMP "pdump" +#define CMD_LINE_OPT_MULTI "multi" #define PDUMP_PORT_ARG "port" #define PDUMP_PCI_ARG "device_id" #define PDUMP_QUEUE_ARG "queue" @@ -139,12 +140,14 @@ struct parse_val { static int num_tuples; static struct rte_eth_conf port_conf_default; static volatile uint8_t quit_signal; +static uint8_t multiple_core_capture; /**< display usage */ static void pdump_usage(const char *prgname) { - printf("usage: %s [EAL options] -- --pdump " + printf("usage: %s [EAL options] -- [--multi] " + "--pdump " "'(port= | device_id=)," "(queue=)," "(rx-dev= |" @@ -376,6 +379,7 @@ launch_args_parse(int argc, char **argv, char *prgname) int option_index; static struct option long_option[] = { {"pdump", 1, 0, 0}, + {"multi", 0, 0, 0}, {NULL, 0, 0, 0} }; @@ -395,6 +399,10 @@ launch_args_parse(int argc, char **argv, char *prgname) pdump_usage(prgname); return -1; } + } else if (!strncmp(long_option[option_index].name, + CMD_LINE_OPT_MULTI, + sizeof(CMD_LINE_OPT_MULTI))) { + multiple_core_capture = 1; } break; default: @@ -834,23 +842,69 @@ enable_pdump(void) } } +static inline void +pdump_packets(struct pdump_tuples *pt) +{ + if (pt->dir & RTE_PDUMP_FLAG_RX) + pdump_rxtx(pt->rx_ring, pt->rx_vdev_id, &pt->stats); + if (pt->dir & RTE_PDUMP_FLAG_TX) + pdump_rxtx(pt->tx_ring, pt->tx_vdev_id, &pt->stats); +} + +static int +dump_packets_core(void *arg) +{ + struct pdump_tuples *pt = (struct pdump_tuples *) arg; + + printf(" core (%u); port %u device (%s) queue %u\n", + rte_lcore_id(), pt->port, pt->device_id, pt->queue); + fflush(stdout); + + while (!quit_signal) + pdump_packets(pt); + + return 0; +} + static inline void dump_packets(void) { int i; - struct pdump_tuples *pt; + uint32_t lcore_id = 0; + + if (!multiple_core_capture) { + printf(" core (%u), capture for (%d) tuples\n", + rte_lcore_id(), num_tuples); + fflush(stdout); - while (!quit_signal) { - for (i = 0; i < num_tuples; i++) { - pt = &pdump_t[i]; - if (pt->dir & RTE_PDUMP_FLAG_RX) - pdump_rxtx(pt->rx_ring, pt->rx_vdev_id, - &pt->stats); - if (pt->dir & RTE_PDUMP_FLAG_TX) - pdump_rxtx(pt->tx_ring, pt->tx_vdev_id, - &pt->stats); + while (!quit_signal) { + for (i = 0; i < num_tuples; i++) + pdump_packets(&pdump_t[i]); } + + return; } + + /* check if there enough core */ + if ((uint32_t)num_tuples >= rte_lcore_count()) { + printf("Insufficient cores to run parallel!\n"); + return; + } + + lcore_id = rte_get_next_lcore(lcore_id, 1, 0); + + for (i = 0; i < num_tuples; i++) { + rte_eal_remote_launch(dump_packets_core, + &pdump_t[i], lcore_id); + lcore_id = rte_get_next_lcore(lcore_id, 1, 0); + + if (rte_eal_wait_lcore(lcore_id) < 0) + rte_exit(EXIT_FAILURE, "failed to wait\n"); + } + + /* master core */ + while (!quit_signal) + ; } int diff --git a/doc/guides/tools/pdump.rst b/doc/guides/tools/pdump.rst index 7c2b73e72..dd60cb812 100644 --- a/doc/guides/tools/pdump.rst +++ b/doc/guides/tools/pdump.rst @@ -35,6 +35,7 @@ The tool has a number of command line options: .. code-block:: console ./build/app/dpdk-pdump -- + [--multi] --pdump '(port= | device_id=), (queue=), (rx-dev= | @@ -43,6 +44,10 @@ The tool has a number of command line options: [mbuf-size=], [total-num-mbufs=]' +The ``--multi`` command line option is optional argument. If passed, capture +will be running on unqiue cores for all ``--pdump`` options. If ignored, +capture will be running on single core for all ``--pdump`` options. + The ``--pdump`` command line option is mandatory and it takes various sub arguments which are described in below section. @@ -112,4 +117,5 @@ Example .. code-block:: console - $ sudo ./build/app/dpdk-pdump -- --pdump 'port=0,queue=*,rx-dev=/tmp/rx.pcap' + $ sudo ./build/app/dpdk-pdump -l 3 -- --pdump 'port=0,queue=*,rx-dev=/tmp/rx.pcap' + $ sudo ./build/app/dpdk-pdump -l 3,4,5 -- --multi --pdump 'port=0,queue=*,rx-dev=/tmp/rx-1.pcap' --pdump 'port=1,queue=*,rx-dev=/tmp/rx-2.pcap'