All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vipin Varghese <vipin.varghese@intel.com>
To: dev@dpdk.org, marko.kovacevic@intel.com, reshma.pattan@intel.com,
	david.marchand@redhat.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 <vipin.varghese@intel.com>
Subject: [PATCH v6 2/2] app/pdump: enhance to support multi-core capture
Date: Thu,  4 Apr 2019 14:25:15 +0530	[thread overview]
Message-ID: <20190404085515.15789-3-vipin.varghese@intel.com> (raw)
In-Reply-To: <20190404085515.15789-1-vipin.varghese@intel.com>

Add option --multi, to enhance pdump application to allow capture
on unique cores for each --pdump option. If option --multi is ignored
the default capture occurs on single core for all --pdump options.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---
 app/pdump/main.c           | 99 ++++++++++++++++++++++++++++++--------
 doc/guides/tools/pdump.rst |  8 ++-
 2 files changed, 85 insertions(+), 22 deletions(-)

diff --git a/app/pdump/main.c b/app/pdump/main.c
index c1db2eb8d..ae2c01b7b 100644
--- a/app/pdump/main.c
+++ b/app/pdump/main.c
@@ -28,6 +28,9 @@
 #include <rte_pdump.h>
 
 #define CMD_LINE_OPT_PDUMP "pdump"
+#define CMD_LINE_OPT_PDUMP_NUM 256
+#define CMD_LINE_OPT_MULTI "multi"
+#define CMD_LINE_OPT_MULTI_NUM 257
 #define PDUMP_PORT_ARG "port"
 #define PDUMP_PCI_ARG "device_id"
 #define PDUMP_QUEUE_ARG "queue"
@@ -139,12 +142,15 @@ 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]"
+			" --["CMD_LINE_OPT_MULTI"]\n"
+			" --"CMD_LINE_OPT_PDUMP" "
 			"'(port=<port id> | device_id=<pci id or vdev name>),"
 			"(queue=<queue_id>),"
 			"(rx-dev=<iface or pcap file> |"
@@ -375,7 +381,8 @@ launch_args_parse(int argc, char **argv, char *prgname)
 	int opt, ret;
 	int option_index;
 	static struct option long_option[] = {
-		{"pdump", 1, 0, 0},
+		{CMD_LINE_OPT_PDUMP, 1, 0, CMD_LINE_OPT_PDUMP_NUM},
+		{CMD_LINE_OPT_MULTI, 0, 0, CMD_LINE_OPT_MULTI_NUM},
 		{NULL, 0, 0, 0}
 	};
 
@@ -386,17 +393,16 @@ launch_args_parse(int argc, char **argv, char *prgname)
 	while ((opt = getopt_long(argc, argv, " ",
 			long_option, &option_index)) != EOF) {
 		switch (opt) {
-		case 0:
-			if (!strncmp(long_option[option_index].name,
-					CMD_LINE_OPT_PDUMP,
-					sizeof(CMD_LINE_OPT_PDUMP))) {
-				ret = parse_pdump(optarg);
-				if (ret) {
-					pdump_usage(prgname);
-					return -1;
-				}
+		case CMD_LINE_OPT_PDUMP_NUM:
+			ret = parse_pdump(optarg);
+			if (ret) {
+				pdump_usage(prgname);
+				return -1;
 			}
 			break;
+		case CMD_LINE_OPT_MULTI_NUM:
+			multiple_core_capture = 1;
+			break;
 		default:
 			pdump_usage(prgname);
 			return -1;
@@ -834,23 +840,74 @@ 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);
+
+		for (i = 0; i < num_tuples; i++)
+			printf(" - port %u device (%s) queue %u\n",
+				pdump_t[i].port,
+				pdump_t[i].device_id,
+				pdump_t[i].queue);
 
-	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..53cd2b464 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=<port id> | device_id=<pci id or vdev name>),
                                    (queue=<queue_id>),
                                    (rx-dev=<iface or pcap file> |
@@ -43,6 +44,10 @@ The tool has a number of command line options:
                                    [mbuf-size=<mbuf data size>],
                                    [total-num-mbufs=<number of mbufs>]'
 
+The ``--multi`` command line option is optional argument. If passed, capture
+will be running on unique 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'
-- 
2.17.1

  parent reply	other threads:[~2019-04-04  8:54 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-28  6:00 [PATCH] app/pdump: enhance to support multi-core capture Vipin Varghese
2019-03-28 14:57 ` [PATCH v2] " Vipin Varghese
2019-03-28 15:04   ` [PATCH v3] " Vipin Varghese
2019-03-28 15:34     ` Wiles, Keith
2019-03-29 10:08     ` Pattan, Reshma
2019-03-29 10:22       ` Varghese, Vipin
2019-03-29 10:52         ` Pattan, Reshma
2019-03-29 17:03         ` Ferruh Yigit
2019-04-01  4:05           ` Varghese, Vipin
2019-04-02  4:33     ` [PATCH v4 0/2] app/pdump: enhance to support unique cores Vipin Varghese
2019-04-02  4:33       ` [PATCH v4 1/2] app/pdump: remove core restriction Vipin Varghese
2019-04-02  4:33       ` [PATCH v4 2/2] app/pdump: enhance to support multi-core capture Vipin Varghese
2019-04-02  7:05         ` David Marchand
2019-04-02  8:06           ` Varghese, Vipin
2019-04-02  9:18         ` [PATCH v5 0/2] app/pdump: enhance to support unique cores Vipin Varghese
2019-04-02  9:18           ` [PATCH v5 1/2] app/pdump: remove core restriction Vipin Varghese
2019-04-02  9:18           ` [PATCH v5 2/2] app/pdump: enhance to support multi-core capture Vipin Varghese
2019-04-02 10:01             ` David Marchand
2019-04-02 15:30               ` Varghese, Vipin
2019-04-04  7:39                 ` David Marchand
2019-04-02 16:13             ` Pattan, Reshma
2019-04-03  3:53               ` Varghese, Vipin
2019-04-05 17:10                 ` [dpdk-dev] " Pattan, Reshma
2019-04-08  3:03                   ` Varghese, Vipin
2019-04-04  8:55             ` [PATCH v6 0/2] app/pdump: enhance to support unique cores Vipin Varghese
2019-04-04  8:55               ` [PATCH v6 1/2] app/pdump: remove core restriction Vipin Varghese
2019-04-09  9:04                 ` [dpdk-dev] " Pattan, Reshma
2019-04-04  8:55               ` Vipin Varghese [this message]
2019-04-05 17:09                 ` [dpdk-dev] [PATCH v6 2/2] app/pdump: enhance to support multi-core capture Pattan, Reshma
2019-04-08  3:01                   ` Varghese, Vipin
2019-04-09  9:05                 ` Pattan, Reshma
2019-04-22 19:49               ` [dpdk-dev] [PATCH v6 0/2] app/pdump: enhance to support unique cores Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190404085515.15789-3-vipin.varghese@intel.com \
    --to=vipin.varghese@intel.com \
    --cc=amit.tamboli@intel.com \
    --cc=amol.patel@intel.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=john.mcnamara@intel.com \
    --cc=keith.wiles@intel.com \
    --cc=marko.kovacevic@intel.com \
    --cc=reshma.pattan@intel.com \
    --cc=sanjay.padubidri@intel.com \
    --cc=stephen1.byrne@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.