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: [dpdk-dev] [PATCH v5 2/2] app/pdump: enhance to support multi-core capture
Date: Tue, 2 Apr 2019 14:48:36 +0530 [thread overview]
Message-ID: <20190402091836.35779-3-vipin.varghese@intel.com> (raw)
In-Reply-To: <20190402091836.35779-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 | 95 +++++++++++++++++++++++++++++---------
doc/guides/tools/pdump.rst | 8 +++-
2 files changed, 80 insertions(+), 23 deletions(-)
diff --git a/app/pdump/main.c b/app/pdump/main.c
index c1db2eb8d..0d12cee3f 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 1
+#define CMD_LINE_OPT_MULTI "multi"
+#define CMD_LINE_OPT_MULTI_NUM 2
#define PDUMP_PORT_ARG "port"
#define PDUMP_PCI_ARG "device_id"
#define PDUMP_QUEUE_ARG "queue"
@@ -139,12 +142,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] -- [--%s] "
+ "--%s "
"'(port=<port id> | device_id=<pci id or vdev name>),"
"(queue=<queue_id>),"
"(rx-dev=<iface or pcap file> |"
@@ -152,7 +157,7 @@ pdump_usage(const char *prgname)
"[ring-size=<ring size>default:16384],"
"[mbuf-size=<mbuf data size>default:2176],"
"[total-num-mbufs=<number of mbufs>default:65535]'\n",
- prgname);
+ prgname, CMD_LINE_OPT_MULTI, CMD_LINE_OPT_PDUMP);
}
static int
@@ -375,7 +380,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 +392,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 +839,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=<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 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'
--
2.17.1
next prev parent reply other threads:[~2019-04-02 9:18 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-28 6:00 [dpdk-dev] [PATCH] " Vipin Varghese
2019-03-28 6:00 ` Vipin Varghese
2019-03-28 14:57 ` [dpdk-dev] [PATCH v2] " Vipin Varghese
2019-03-28 14:57 ` Vipin Varghese
2019-03-28 15:04 ` [dpdk-dev] [PATCH v3] " Vipin Varghese
2019-03-28 15:04 ` Vipin Varghese
2019-03-28 15:34 ` Wiles, Keith
2019-03-28 15:34 ` Wiles, Keith
2019-03-29 10:08 ` Pattan, Reshma
2019-03-29 10:08 ` Pattan, Reshma
2019-03-29 10:22 ` Varghese, Vipin
2019-03-29 10:22 ` Varghese, Vipin
2019-03-29 10:52 ` Pattan, Reshma
2019-03-29 10:52 ` Pattan, Reshma
2019-03-29 17:03 ` Ferruh Yigit
2019-03-29 17:03 ` Ferruh Yigit
2019-04-01 4:05 ` Varghese, Vipin
2019-04-01 4:05 ` Varghese, Vipin
2019-04-02 4:33 ` [dpdk-dev] [PATCH v4 0/2] app/pdump: enhance to support unique cores Vipin Varghese
2019-04-02 4:33 ` Vipin Varghese
2019-04-02 4:33 ` [dpdk-dev] [PATCH v4 1/2] app/pdump: remove core restriction Vipin Varghese
2019-04-02 4:33 ` Vipin Varghese
2019-04-02 4:33 ` [dpdk-dev] [PATCH v4 2/2] app/pdump: enhance to support multi-core capture Vipin Varghese
2019-04-02 4:33 ` Vipin Varghese
2019-04-02 7:05 ` David Marchand
2019-04-02 7:05 ` David Marchand
2019-04-02 8:06 ` Varghese, Vipin
2019-04-02 8:06 ` Varghese, Vipin
2019-04-02 9:18 ` [dpdk-dev] [PATCH v5 0/2] app/pdump: enhance to support unique cores Vipin Varghese
2019-04-02 9:18 ` Vipin Varghese
2019-04-02 9:18 ` [dpdk-dev] [PATCH v5 1/2] app/pdump: remove core restriction Vipin Varghese
2019-04-02 9:18 ` Vipin Varghese
2019-04-02 9:18 ` Vipin Varghese [this message]
2019-04-02 9:18 ` [dpdk-dev] [PATCH v5 2/2] app/pdump: enhance to support multi-core capture Vipin Varghese
2019-04-02 10:01 ` David Marchand
2019-04-02 10:01 ` David Marchand
2019-04-02 15:30 ` Varghese, Vipin
2019-04-02 15:30 ` Varghese, Vipin
2019-04-04 7:39 ` David Marchand
2019-04-04 7:39 ` David Marchand
2019-04-02 16:13 ` Pattan, Reshma
2019-04-02 16:13 ` Pattan, Reshma
2019-04-03 3:53 ` Varghese, Vipin
2019-04-03 3:53 ` Varghese, Vipin
2019-04-05 17:10 ` Pattan, Reshma
2019-04-05 17:10 ` Pattan, Reshma
2019-04-08 3:03 ` Varghese, Vipin
2019-04-08 3:03 ` Varghese, Vipin
2019-04-04 8:55 ` [dpdk-dev] [PATCH v6 0/2] app/pdump: enhance to support unique cores Vipin Varghese
2019-04-04 8:55 ` Vipin Varghese
2019-04-04 8:55 ` [dpdk-dev] [PATCH v6 1/2] app/pdump: remove core restriction Vipin Varghese
2019-04-04 8:55 ` Vipin Varghese
2019-04-09 9:04 ` Pattan, Reshma
2019-04-09 9:04 ` Pattan, Reshma
2019-04-04 8:55 ` [dpdk-dev] [PATCH v6 2/2] app/pdump: enhance to support multi-core capture Vipin Varghese
2019-04-04 8:55 ` Vipin Varghese
2019-04-05 17:09 ` Pattan, Reshma
2019-04-05 17:09 ` Pattan, Reshma
2019-04-08 3:01 ` Varghese, Vipin
2019-04-08 3:01 ` Varghese, Vipin
2019-04-09 9:05 ` Pattan, Reshma
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
2019-04-22 19:49 ` 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=20190402091836.35779-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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).