DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug
@ 2018-11-22 14:15 Vipin Varghese
  2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 2/9] app/procinfo: add compare for new options Vipin Varghese
                   ` (8 more replies)
  0 siblings, 9 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-11-22 14:15 UTC (permalink / raw)
  To: dev, reshma.pattan, thomas, stephen, john.mcnamara
  Cc: amol.patel, Vipin Varghese

Update the file with MACRO for stats border, usage text information
and string comparision.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

V3:
 - change the usage details - Vipin Varghese

V2:
 - change word dbg to show - Stephen Hemminger
---
 app/proc-info/main.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index c20effa4f..5779f07e7 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -36,6 +36,10 @@
 
 #define MAX_STRING_LEN 256
 
+#define STATS_BDR_FMT "========================================"
+#define STATS_BDR_STR(w, s) printf("%.*s%s%.*s\n", w, \
+	STATS_BDR_FMT, s, w, STATS_BDR_FMT)
+
 /**< mask of enabled ports */
 static uint32_t enabled_port_mask;
 /**< Enable stats. */
@@ -83,7 +87,12 @@ proc_info_usage(const char *prgname)
 		"  --stats-reset: to reset port statistics\n"
 		"  --xstats-reset: to reset port extended statistics\n"
 		"  --collectd-format: to print statistics to STDOUT in expected by collectd format\n"
-		"  --host-id STRING: host id used to identify the system process is running on\n",
+		"  --host-id STRING: host id used to identify the system process is running on\n"
+		"  --show-port to display ports information\n"
+		"  --show-tm to display traffic manager information for ports\n"
+		"  --show-crypto to display crypto information\n"
+		"  --show-ring[=name] to display ring information\n"
+		"  --show-mempool[=name] to display mempool information\n",
 		prgname);
 }
 
@@ -190,6 +199,11 @@ proc_info_parse_args(int argc, char **argv)
 		{"collectd-format", 0, NULL, 0},
 		{"xstats-ids", 1, NULL, 1},
 		{"host-id", 0, NULL, 0},
+		{"show-port", 0, NULL, 0},
+		{"show-tm", 0, NULL, 0},
+		{"show-crypto", 0, NULL, 0},
+		{"show-ring", optional_argument, NULL, 0},
+		{"show-mempool", optional_argument, NULL, 0},
 		{NULL, 0, 0, 0}
 	};
 
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v5 2/9] app/procinfo: add compare for new options
  2018-11-22 14:15 [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese
@ 2018-11-22 14:15 ` Vipin Varghese
  2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 3/9] app/procinfo: add prototype for debug instances Vipin Varghese
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-11-22 14:15 UTC (permalink / raw)
  To: dev, reshma.pattan, thomas, stephen, john.mcnamara
  Cc: amol.patel, Vipin Varghese

Add code for new debug options to compare usage strings and set
enable flag.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

V3:
 - variables from debug to show - Vipin Varghese

V2:
 - compare string from dbg to show - Stephen Hemminger
---
 app/proc-info/main.c | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 5779f07e7..76266d5cb 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -63,6 +63,18 @@ static uint32_t mem_info;
 /**< Enable displaying xstat name. */
 static uint32_t enable_xstats_name;
 static char *xstats_name;
+/**< Enable show port. */
+static uint32_t enable_shw_port;
+/**< Enable show tm. */
+static uint32_t enable_shw_tm;
+/**< Enable show crypto. */
+static uint32_t enable_shw_crypto;
+/**< Enable show ring. */
+static uint32_t enable_shw_ring;
+static char *ring_name;
+/**< Enable show mempool. */
+static uint32_t enable_shw_mempool;
+static char *mempool_name;
 
 /**< Enable xstats by ids. */
 #define MAX_NB_XSTATS_IDS 1024
@@ -247,6 +259,24 @@ proc_info_parse_args(int argc, char **argv)
 			else if (!strncmp(long_option[option_index].name, "xstats-reset",
 					MAX_LONG_OPT_SZ))
 				reset_xstats = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-port", MAX_LONG_OPT_SZ))
+				enable_shw_port = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-tm", MAX_LONG_OPT_SZ))
+				enable_shw_tm = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-crypto", MAX_LONG_OPT_SZ))
+				enable_shw_crypto = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-ring", MAX_LONG_OPT_SZ)) {
+				enable_shw_ring = 1;
+				ring_name = optarg;
+			} else if (!strncmp(long_option[option_index].name,
+					"show-mempool", MAX_LONG_OPT_SZ)) {
+				enable_shw_mempool = 1;
+				mempool_name = optarg;
+			}
 			break;
 		case 1:
 			/* Print xstat single value given by name*/
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v5 3/9] app/procinfo: add prototype for debug instances
  2018-11-22 14:15 [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese
  2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 2/9] app/procinfo: add compare for new options Vipin Varghese
@ 2018-11-22 14:15 ` Vipin Varghese
  2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 4/9] app/procinfo: add support for show port Vipin Varghese
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-11-22 14:15 UTC (permalink / raw)
  To: dev, reshma.pattan, thomas, stephen, john.mcnamara
  Cc: amol.patel, Vipin Varghese

Add prototype function calls for the show functions.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

V3:
 - update function names from debug to show - Vipin Varghese

V2:
 - removed if else ladder - Vipin Varghese
---
 app/proc-info/main.c | 42 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 76266d5cb..8b9cf629d 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -628,6 +628,36 @@ metrics_display(int port_id)
 	rte_free(names);
 }
 
+static void
+show_port(void)
+{
+	printf(" port\n");
+}
+
+static void
+show_tm(void)
+{
+	printf(" tm\n");
+}
+
+static void
+show_crypto(void)
+{
+	printf(" crypto\n");
+}
+
+static void
+show_ring(char *name)
+{
+	printf(" rings Name (%s)\n", name);
+}
+
+static void
+show_mempool(char *name)
+{
+	printf(" mempools Name (%s)\n", name);
+}
+
 int
 main(int argc, char **argv)
 {
@@ -708,6 +738,18 @@ main(int argc, char **argv)
 	if (enable_metrics)
 		metrics_display(RTE_METRICS_GLOBAL);
 
+	/* show information for PMD */
+	if (enable_shw_port)
+		show_port();
+	if (enable_shw_tm)
+		show_tm();
+	if (enable_shw_crypto)
+		show_crypto();
+	if (enable_shw_ring)
+		show_ring(ring_name);
+	if (enable_shw_mempool)
+		show_mempool(mempool_name);
+
 	ret = rte_eal_cleanup();
 	if (ret)
 		printf("Error from rte_eal_cleanup(), %d\n", ret);
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v5 4/9] app/procinfo: add support for show port
  2018-11-22 14:15 [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese
  2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 2/9] app/procinfo: add compare for new options Vipin Varghese
  2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 3/9] app/procinfo: add prototype for debug instances Vipin Varghese
@ 2018-11-22 14:15 ` Vipin Varghese
  2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 5/9] app/procinfo: add support for show tm Vipin Varghese
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-11-22 14:15 UTC (permalink / raw)
  To: dev, reshma.pattan, thomas, stephen, john.mcnamara
  Cc: amol.patel, Vipin Varghese

Function show_port is used for displaying the port PMD information under
under primary process. The information shows basic, per queue and security.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

V5:
 - convert 100 to MAX_STRING_LEN - Reshma Pattan
 - RSS made for port - Reshma Pattan
 - update bdr_str to static - Stephen Hemminger
 - remove memset for link, dev_info, queue, stats - Stephen Hemminger

V3:
 - fix meson build - Reshma Pattan
 - change 100 to MAX_STRING_LEN - Reshma Pattan
 - memset to struct elements - Reshma Pattan
 - printf tab space - Reshma Pattan
 - remove 'drop packet information' - Vipin Varghese

V2:
 - redefine code format - Vipin Varghese
---
 app/proc-info/main.c      | 117 +++++++++++++++++++++++++++++++++++++-
 app/proc-info/meson.build |   2 +-
 2 files changed, 117 insertions(+), 2 deletions(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 8b9cf629d..4af154794 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -29,6 +29,9 @@
 #include <rte_branch_prediction.h>
 #include <rte_string_fns.h>
 #include <rte_metrics.h>
+#include <rte_cycles.h>
+#include <rte_security.h>
+#include <rte_cryptodev.h>
 
 /* Maximum long option length for option parsing. */
 #define MAX_LONG_OPT_SZ 64
@@ -81,6 +84,9 @@ static char *mempool_name;
 static uint32_t nb_xstats_ids;
 static uint64_t xstats_ids[MAX_NB_XSTATS_IDS];
 
+/* border variable to hold for show */
+static char bdr_str[MAX_STRING_LEN];
+
 /**< display usage */
 static void
 proc_info_usage(const char *prgname)
@@ -631,7 +637,116 @@ metrics_display(int port_id)
 static void
 show_port(void)
 {
-	printf(" port\n");
+	uint16_t i = 0;
+	int ret = 0, j, k;
+
+	snprintf(bdr_str, MAX_STRING_LEN, " show - Port PMD %"PRIu64,
+			rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	RTE_ETH_FOREACH_DEV(i) {
+		uint16_t mtu = 0;
+		struct rte_eth_link link;
+		struct rte_eth_dev_info dev_info;
+		struct rte_eth_rxq_info queue_info;
+		struct rte_eth_stats stats;
+		struct rte_eth_rss_conf rss_conf;
+
+		memset(&rss_conf, 0, sizeof(rss_conf));
+
+		snprintf(bdr_str, MAX_STRING_LEN, " Port (%u)", i);
+		STATS_BDR_STR(5, bdr_str);
+		printf("  - generic config\n");
+
+		printf("\t  -- Socket %d\n", rte_eth_dev_socket_id(i));
+		rte_eth_link_get(i, &link);
+		printf("\t  -- link speed %d duplex %d,"
+			" auto neg %d status %d\n",
+			link.link_speed,
+			link.link_duplex,
+			link.link_autoneg,
+			link.link_status);
+		printf("\t  -- promiscuous (%d)\n",
+			rte_eth_promiscuous_get(i));
+		ret = rte_eth_dev_get_mtu(i, &mtu);
+		if (ret == 0)
+			printf("\t  -- mtu (%d)\n", mtu);
+
+		printf("  - queue\n");
+
+		rte_eth_dev_info_get(i, &dev_info);
+
+		for (j = 0; j < dev_info.nb_rx_queues; j++) {
+			ret = rte_eth_rx_queue_info_get(i, j, &queue_info);
+			if (ret == 0) {
+				printf("\t  -- queue %d rx scatter %d"
+					" descriptors %d offloads 0x%"PRIx64
+					" mempool socket %d\n",
+					j,
+					queue_info.scattered_rx,
+					queue_info.nb_desc,
+					queue_info.conf.offloads,
+					queue_info.mp->socket_id);
+
+				ret = rte_eth_stats_get(i, &stats);
+				if (ret == 0) {
+					printf("\t  -- packet input %"PRIu64
+						" output %"PRIu64""
+						" error %"PRIu64"\n",
+						stats.q_ipackets[j],
+						stats.q_opackets[j],
+						stats.q_errors[j]);
+				}
+			}
+		}
+
+		ret = rte_eth_dev_rss_hash_conf_get(i, &rss_conf);
+		if (ret == 0) {
+			if (rss_conf.rss_key) {
+				printf("\t  -- RSS len %u key (hex):",
+					rss_conf.rss_key_len);
+				for (k = 0; k < rss_conf.rss_key_len; k++)
+					printf(" %x", rss_conf.rss_key[k]);
+				printf("\t  -- hf 0x%"PRIx64"\n",
+					rss_conf.rss_hf);
+			}
+		}
+
+		ret = rte_eth_stats_get(i, &stats);
+		if (ret == 0) {
+			printf("\t  -- packet input %"PRIu64
+				" output %"PRIu64"\n",
+				stats.ipackets,
+				stats.opackets);
+			printf("\t  -- packet error input %"PRIu64
+				" output %"PRIu64"\n",
+				stats.ierrors,
+				stats.oerrors);
+			printf("\t  -- RX no mbuf %"PRIu64"\n",
+				stats.rx_nombuf);
+		}
+
+		printf("  - cyrpto context\n");
+		void *ptr_ctx = rte_eth_dev_get_sec_ctx(i);
+		printf("\t  -- security context - %p\n", ptr_ctx);
+
+		if (ptr_ctx) {
+			printf("\t  -- size %u\n",
+				rte_security_session_get_size(ptr_ctx));
+			const struct rte_security_capability *ptr_sec_cap =
+				rte_security_capabilities_get(ptr_ctx);
+			if (ptr_sec_cap) {
+				printf("\t  -- action (0x%x), protocol (0x%x),"
+					" offload flags (0x%x)\n",
+					ptr_sec_cap->action,
+					ptr_sec_cap->protocol,
+					ptr_sec_cap->ol_flags);
+				printf("\t  -- capabilities - oper type %x\n",
+					ptr_sec_cap->crypto_capabilities->op);
+			}
+		}
+	}
+	STATS_BDR_STR(50, "");
 }
 
 static void
diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build
index a52b2ee4a..866b390d6 100644
--- a/app/proc-info/meson.build
+++ b/app/proc-info/meson.build
@@ -3,4 +3,4 @@
 
 sources = files('main.c')
 allow_experimental_apis = true
-deps += ['ethdev', 'metrics']
+deps += ['ethdev', 'metrics', 'security']
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v5 5/9] app/procinfo: add support for show tm
  2018-11-22 14:15 [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese
                   ` (2 preceding siblings ...)
  2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 4/9] app/procinfo: add support for show port Vipin Varghese
@ 2018-11-22 14:15 ` Vipin Varghese
  2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 6/9] app/procinfo: add support for show crypto Vipin Varghese
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-11-22 14:15 UTC (permalink / raw)
  To: dev, reshma.pattan, thomas, stephen, john.mcnamara
  Cc: amol.patel, Vipin Varghese

Function show_tm is used for displaying the tm PMD under the
primary process. This covers basic and per node|level details with
stats.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

V3:
 - memset for struct elements - Vipin Varghese
 - code cleanup for TM - Vipin Varghese
 - fetch for leaf nodes if node exist - Jasvinder Singh
 - display MARCO to function - Reshma Pathan & Stephen Hemminger

V2:
 - MACRO for display node|level - cap - Vipin Varghese
---
 app/proc-info/main.c | 276 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 275 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 4af154794..2e074caf2 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -32,6 +32,7 @@
 #include <rte_cycles.h>
 #include <rte_security.h>
 #include <rte_cryptodev.h>
+#include <rte_tm.h>
 
 /* Maximum long option length for option parsing. */
 #define MAX_LONG_OPT_SZ 64
@@ -749,10 +750,283 @@ show_port(void)
 	STATS_BDR_STR(50, "");
 }
 
+static void
+display_nodecap_info(int is_leaf, struct rte_tm_node_capabilities *cap)
+{
+	if (cap == NULL)
+		return;
+
+	if (!is_leaf) {
+		printf("\t  -- nonleaf sched max:\n"
+			"\t\t  + children (%u)\n"
+			"\t\t  + sp priorities (%u)\n"
+			"\t\t  + wfq children per group (%u)\n"
+			"\t\t  + wfq groups (%u)\n"
+			"\t\t  + wfq weight (%u)\n",
+			cap->nonleaf.sched_n_children_max,
+			cap->nonleaf.sched_sp_n_priorities_max,
+			cap->nonleaf.sched_wfq_n_children_per_group_max,
+			cap->nonleaf.sched_wfq_n_groups_max,
+			cap->nonleaf.sched_wfq_weight_max);
+	} else {
+		printf("\t  -- leaf cman support:\n"
+			"\t\t  + wred pkt mode (%d)\n"
+			"\t\t  + wred byte mode (%d)\n"
+			"\t\t  + head drop (%d)\n"
+			"\t\t  + wred context private (%d)\n"
+			"\t\t  + wred context shared (%u)\n",
+			cap->leaf.cman_wred_packet_mode_supported,
+			cap->leaf.cman_wred_byte_mode_supported,
+			cap->leaf.cman_head_drop_supported,
+			cap->leaf.cman_wred_context_private_supported,
+			cap->leaf.cman_wred_context_shared_n_max);
+	}
+}
+
+static void
+display_levelcap_info(int is_leaf, struct rte_tm_level_capabilities *cap)
+{
+	if (cap == NULL)
+		return;
+
+	if (!is_leaf) {
+		printf("\t  -- shaper private: (%d) dual rate (%d)\n",
+			cap->nonleaf.shaper_private_supported,
+			cap->nonleaf.shaper_private_dual_rate_supported);
+		printf("\t  -- shaper share: (%u)\n",
+			cap->nonleaf.shaper_shared_n_max);
+		printf("\t  -- non leaf sched MAX:\n"
+			"\t\t  + children (%u)\n"
+			"\t\t  + sp (%u)\n"
+			"\t\t  + wfq children per group (%u)\n"
+			"\t\t  + wfq groups (%u)\n"
+			"\t\t  + wfq weight (%u)\n",
+			cap->nonleaf.sched_n_children_max,
+			cap->nonleaf.sched_sp_n_priorities_max,
+			cap->nonleaf.sched_wfq_n_children_per_group_max,
+			cap->nonleaf.sched_wfq_n_groups_max,
+			cap->nonleaf.sched_wfq_weight_max);
+	} else {
+		printf("\t  -- shaper private: (%d) dual rate (%d)\n",
+			cap->leaf.shaper_private_supported,
+			cap->leaf.shaper_private_dual_rate_supported);
+		printf("\t  -- shaper share: (%u)\n",
+			cap->leaf.shaper_shared_n_max);
+		printf("  -- leaf cman support:\n"
+			"\t\t  + wred pkt mode (%d)\n"
+			"\t\t  + wred byte mode (%d)\n"
+			"\t\t  + head drop (%d)\n"
+			"\t\t  + wred context private (%d)\n"
+			"\t\t  + wred context shared (%u)\n",
+			cap->leaf.cman_wred_packet_mode_supported,
+			cap->leaf.cman_wred_byte_mode_supported,
+			cap->leaf.cman_head_drop_supported,
+			cap->leaf.cman_wred_context_private_supported,
+			cap->leaf.cman_wred_context_shared_n_max);
+	}
+}
+
 static void
 show_tm(void)
 {
-	printf(" tm\n");
+	int ret = 0, check_for_leaf = 0, is_leaf = 0;
+	unsigned int j, k;
+	uint16_t i = 0;
+
+	snprintf(bdr_str, MAX_STRING_LEN, " show - TM PMD %"PRIu64,
+			rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	RTE_ETH_FOREACH_DEV(i) {
+		struct rte_eth_dev_info dev_info;
+		struct rte_tm_capabilities cap;
+		struct rte_tm_error error;
+		struct rte_tm_node_capabilities capnode;
+		struct rte_tm_level_capabilities caplevel;
+		uint32_t n_leaf_nodes = 0;
+
+		memset(&dev_info, 0, sizeof(dev_info));
+		memset(&cap, 0, sizeof(cap));
+		memset(&error, 0, sizeof(error));
+
+		rte_eth_dev_info_get(i, &dev_info);
+		printf("  - Generic for port (%u)\n"
+			"\t  -- driver name %s\n"
+			"\t  -- max vf (%u)\n"
+			"\t  -- max tx queues (%u)\n"
+			"\t  -- number of tx queues (%u)\n",
+			i,
+			dev_info.driver_name,
+			dev_info.max_vfs,
+			dev_info.max_tx_queues,
+			dev_info.nb_tx_queues);
+
+		ret = rte_tm_capabilities_get(i, &cap, &error);
+		if (ret)
+			continue;
+
+		printf("  - MAX: nodes (%u) levels (%u) children (%u)\n",
+			cap.n_nodes_max,
+			cap.n_levels_max,
+			cap.sched_n_children_max);
+
+		printf("  - identical nodes: non leaf (%d) leaf (%d)\n",
+			cap.non_leaf_nodes_identical,
+			cap.leaf_nodes_identical);
+
+		printf("  - Shaper MAX:\n"
+			"\t  -- total (%u)\n"
+			"\t  -- private (%u) private dual (%d)\n"
+			"\t  -- shared (%u) shared dual (%u)\n",
+			cap.shaper_n_max,
+			cap.shaper_private_n_max,
+			cap.shaper_private_dual_rate_n_max,
+			cap.shaper_shared_n_max,
+			cap.shaper_shared_dual_rate_n_max);
+
+		printf("  - mark support:\n");
+		printf("\t  -- vlan dei: GREEN (%d) YELLOW (%d) RED (%d)\n",
+			cap.mark_vlan_dei_supported[RTE_TM_GREEN],
+			cap.mark_vlan_dei_supported[RTE_TM_YELLOW],
+			cap.mark_vlan_dei_supported[RTE_TM_RED]);
+		printf("\t  -- ip ecn tcp: GREEN (%d) YELLOW (%d) RED (%d)\n",
+			cap.mark_ip_ecn_tcp_supported[RTE_TM_GREEN],
+			cap.mark_ip_ecn_tcp_supported[RTE_TM_YELLOW],
+			cap.mark_ip_ecn_tcp_supported[RTE_TM_RED]);
+		printf("\t  -- ip ecn sctp: GREEN (%d) YELLOW (%d) RED (%d)\n",
+			cap.mark_ip_ecn_sctp_supported[RTE_TM_GREEN],
+			cap.mark_ip_ecn_sctp_supported[RTE_TM_YELLOW],
+			cap.mark_ip_ecn_sctp_supported[RTE_TM_RED]);
+		printf("\t  -- ip dscp: GREEN (%d) YELLOW (%d) RED (%d)\n",
+			cap.mark_ip_dscp_supported[RTE_TM_GREEN],
+			cap.mark_ip_dscp_supported[RTE_TM_YELLOW],
+			cap.mark_ip_dscp_supported[RTE_TM_RED]);
+
+		printf("  - mask stats (0x%"PRIx64")"
+			" dynamic update (0x%"PRIx64")\n",
+			cap.stats_mask,
+			cap.dynamic_update_mask);
+
+		printf("  - sched MAX:\n"
+			"\t  -- total (%u)\n"
+			"\t  -- sp levels (%u)\n"
+			"\t  -- wfq children per group (%u)\n"
+			"\t  -- wfq groups (%u)\n"
+			"\t  -- wfq weight (%u)\n",
+			cap.sched_sp_n_priorities_max,
+			cap.sched_sp_n_priorities_max,
+			cap.sched_wfq_n_children_per_group_max,
+			cap.sched_wfq_n_groups_max,
+			cap.sched_wfq_weight_max);
+
+		printf("  - CMAN support:\n"
+			"\t  -- WRED mode: pkt (%d) byte (%d)\n"
+			"\t  -- head drop (%d)\n",
+			cap.cman_wred_packet_mode_supported,
+			cap.cman_wred_byte_mode_supported,
+			cap.cman_head_drop_supported);
+		printf("\t  -- MAX WRED CONTEXT:"
+			" total (%u) private (%u) shared (%u)\n",
+			cap.cman_wred_context_n_max,
+			cap.cman_wred_context_private_n_max,
+			cap.cman_wred_context_shared_n_max);
+
+		for (j = 0; j < cap.n_nodes_max; j++) {
+			memset(&capnode, 0, sizeof(capnode));
+			ret = rte_tm_node_capabilities_get(i, j,
+				&capnode, &error);
+			if (ret)
+				continue;
+
+			check_for_leaf = 1;
+
+			printf("  NODE %u\n", j);
+			printf("\t  - shaper private: (%d) dual rate (%d)\n",
+				capnode.shaper_private_supported,
+				capnode.shaper_private_dual_rate_supported);
+			printf("\t  - shaper shared max: (%u)\n",
+				capnode.shaper_shared_n_max);
+			printf("\t  - stats mask %"PRIx64"\n",
+				capnode.stats_mask);
+
+			ret = rte_tm_node_type_get(i, j, &is_leaf, &error);
+			if (ret)
+				continue;
+
+			display_nodecap_info(is_leaf, &capnode);
+		}
+
+		for (j = 0; j < cap.n_levels_max; j++) {
+			memset(&caplevel, 0, sizeof(caplevel));
+			ret = rte_tm_level_capabilities_get(i, j,
+				&caplevel, &error);
+			if (ret)
+				continue;
+
+			printf("  - Level %u\n", j);
+			printf("\t  -- node MAX: %u non leaf %u leaf %u\n",
+				caplevel.n_nodes_max,
+				caplevel.n_nodes_nonleaf_max,
+				caplevel.n_nodes_leaf_max);
+			printf("\t  -- indetical: non leaf %u leaf %u\n",
+				caplevel.non_leaf_nodes_identical,
+				caplevel.leaf_nodes_identical);
+
+			for (k = 0; k < caplevel.n_nodes_max; k++) {
+				ret = rte_tm_node_type_get(i, k,
+					&is_leaf, &error);
+				if (ret)
+					continue;
+
+				display_levelcap_info(is_leaf, &caplevel);
+			}
+		}
+
+		if (check_for_leaf) {
+			ret = rte_tm_get_number_of_leaf_nodes(i,
+					&n_leaf_nodes, &error);
+			if (ret == 0)
+				printf("  - leaf nodes (%u)\n", n_leaf_nodes);
+		}
+
+		for (j = 0; j < n_leaf_nodes; j++) {
+			struct rte_tm_node_stats stats;
+			memset(&stats, 0, sizeof(stats));
+
+			ret = rte_tm_node_stats_read(i, j,
+				&stats, &cap.stats_mask, 0, &error);
+			if (ret)
+				continue;
+
+			printf("  - STATS for node (%u)\n", j);
+			printf("  -- pkts (%"PRIu64") bytes (%"PRIu64")\n",
+				stats.n_pkts, stats.n_bytes);
+
+			ret = rte_tm_node_type_get(i, j, &is_leaf, &error);
+			if ((ret) | (!is_leaf))
+				continue;
+
+			printf("  -- leaf queued:"
+				" pkts (%"PRIu64") bytes (%"PRIu64")\n",
+				stats.leaf.n_pkts_queued,
+				stats.leaf.n_bytes_queued);
+			printf("  - dropped:\n"
+				"\t  -- GREEN:"
+				" pkts (%"PRIu64") bytes (%"PRIu64")\n"
+				"\t  -- YELLOW:"
+				" pkts (%"PRIu64") bytes (%"PRIu64")\n"
+				"\t  -- RED:"
+				" pkts (%"PRIu64") bytes (%"PRIu64")\n",
+				stats.leaf.n_pkts_dropped[RTE_TM_GREEN],
+				stats.leaf.n_bytes_dropped[RTE_TM_GREEN],
+				stats.leaf.n_pkts_dropped[RTE_TM_YELLOW],
+				stats.leaf.n_bytes_dropped[RTE_TM_YELLOW],
+				stats.leaf.n_pkts_dropped[RTE_TM_RED],
+				stats.leaf.n_bytes_dropped[RTE_TM_RED]);
+		}
+	}
+
+	STATS_BDR_STR(50, "");
 }
 
 static void
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v5 6/9] app/procinfo: add support for show crypto
  2018-11-22 14:15 [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese
                   ` (3 preceding siblings ...)
  2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 5/9] app/procinfo: add support for show tm Vipin Varghese
@ 2018-11-22 14:15 ` Vipin Varghese
  2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 7/9] app/procinfo: add support for debug ring Vipin Varghese
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-11-22 14:15 UTC (permalink / raw)
  To: dev, reshma.pattan, thomas, stephen, john.mcnamara
  Cc: amol.patel, Vipin Varghese

Function show_crypto is used for displaying the crypto PMD under
the primary process.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

v4:
 - add space to compare - Vipin Varghese

V3:
 - replace MACRO to function - Reshma Pathan & Stephen Hemminger
 - add memset for struct elements - Reshma Pathan
 - change display formating of flags - Vipin Varghese
 - use MACRO for string - Vipin Varghese
---
 app/proc-info/main.c | 80 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 79 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 2e074caf2..858ac6df9 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -1029,10 +1029,88 @@ show_tm(void)
 	STATS_BDR_STR(50, "");
 }
 
+static void
+display_crypto_feature_info(uint64_t x)
+{
+	if (x == 0)
+		return;
+
+	printf("\t  -- feature flags\n");
+	printf("\t\t  + symmetric (%c), asymmetric (%c)\n"
+		"\t\t  + symmetric operation chaining (%c)\n",
+		(x & RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING) ? 'y' : 'n');
+	printf("\t\t  + CPU: SSE (%c), AVX (%c), AVX2 (%c), AVX512 (%c)\n",
+		(x & RTE_CRYPTODEV_FF_CPU_SSE) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_CPU_AVX) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_CPU_AVX2) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_CPU_AVX512) ? 'y' : 'n');
+	printf("\t\t  + AESNI: CPU (%c), HW (%c)\n",
+		(x & RTE_CRYPTODEV_FF_CPU_AESNI) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_HW_ACCELERATED) ? 'y' : 'n');
+	printf("\t\t  + INLINE (%c)\n",
+		(x & RTE_CRYPTODEV_FF_SECURITY) ? 'y' : 'n');
+	printf("\t\t  + ARM: NEON (%c), CE (%c)\n",
+		(x & RTE_CRYPTODEV_FF_CPU_NEON) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_CPU_ARM_CE) ? 'y' : 'n');
+	printf("\t  -- buffer offload\n");
+	printf("\t\t  + IN_PLACE_SGL (%c)\n",
+		(x & RTE_CRYPTODEV_FF_IN_PLACE_SGL) ? 'y' : 'n');
+	printf("\t\t  + OOP_SGL_IN_SGL_OUT (%c)\n",
+		(x & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT) ? 'y' : 'n');
+	printf("\t\t  + OOP_SGL_IN_LB_OUT (%c)\n",
+		(x & RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT) ? 'y' : 'n');
+	printf("\t\t  + OOP_LB_IN_SGL_OUT (%c)\n",
+		(x & RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT) ? 'y' : 'n');
+	printf("\t\t  + OOP_LB_IN_LB_OUT (%c)\n",
+		(x & RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT) ? 'y' : 'n');
+}
+
 static void
 show_crypto(void)
 {
-	printf(" crypto\n");
+	uint8_t crypto_dev_count = rte_cryptodev_count(), i;
+
+	snprintf(bdr_str, MAX_STRING_LEN, " show - CRYPTO PMD %"PRIu64,
+		rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	for (i = 0; i < crypto_dev_count; i++) {
+		struct rte_cryptodev_info dev_info;
+		struct rte_cryptodev_stats stats;
+
+		memset(&dev_info, 0, sizeof(dev_info));
+		rte_cryptodev_info_get(i, &dev_info);
+
+		printf("  - device (%u)\n", i);
+		printf("\t  -- name (%s)\n"
+			"\t  -- driver (%s)\n"
+			"\t  -- id (%u) on socket (%d)\n"
+			"\t  -- queue pairs (%d)\n",
+			rte_cryptodev_name_get(i),
+			dev_info.driver_name,
+			dev_info.driver_id,
+			dev_info.device->numa_node,
+			rte_cryptodev_queue_pair_count(i));
+
+		display_crypto_feature_info(dev_info.feature_flags);
+
+		printf("\t  -- stats\n");
+		memset(&stats, 0, sizeof(0));
+		if (rte_cryptodev_stats_get(i, &stats) == 0) {
+			printf("\t\t  + enqueue count (%"PRIu64")"
+				" error (%"PRIu64")\n",
+				stats.enqueued_count,
+				stats.enqueue_err_count);
+			printf("\t\t  + dequeue count (%"PRIu64")"
+				" error (%"PRIu64")\n",
+				stats.dequeued_count,
+				stats.dequeue_err_count);
+		}
+	}
+
+	STATS_BDR_STR(50, "");
 }
 
 static void
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v5 7/9] app/procinfo: add support for debug ring
  2018-11-22 14:15 [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese
                   ` (4 preceding siblings ...)
  2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 6/9] app/procinfo: add support for show crypto Vipin Varghese
@ 2018-11-22 14:15 ` Vipin Varghese
  2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 8/9] app/procinfo: add support for show mempool Vipin Varghese
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-11-22 14:15 UTC (permalink / raw)
  To: dev, reshma.pattan, thomas, stephen, john.mcnamara
  Cc: amol.patel, Vipin Varghese

Function show_ring is used for displaying the RING of the
primary process.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

V3:
 - replace space to tab in printf - Reshma Pathan
 - change ring display information - Vipin Varghese
---
 app/proc-info/main.c | 34 +++++++++++++++++++++++++++++++++-
 1 file changed, 33 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 858ac6df9..7e57f296c 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -1116,7 +1116,39 @@ show_crypto(void)
 static void
 show_ring(char *name)
 {
-	printf(" rings Name (%s)\n", name);
+	snprintf(bdr_str, MAX_STRING_LEN, " show - RING %"PRIu64,
+		rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	if (name != NULL) {
+		struct rte_ring *ptr = rte_ring_lookup(name);
+		if (ptr != NULL) {
+			printf("  - Name (%s) on socket (%d)\n"
+				"  - flags:\n"
+				"\t  -- Single Producer Enqueue (%u)\n"
+				"\t  -- Single Consmer Dequeue (%u)\n",
+				ptr->name,
+				ptr->memzone->socket_id,
+				ptr->flags & RING_F_SP_ENQ,
+				ptr->flags & RING_F_SC_DEQ);
+			printf("  - size (%u) mask (0x%x) capacity (%u)\n",
+				ptr->size,
+				ptr->mask,
+				ptr->capacity);
+			printf("  - count (%u) free count (%u)\n",
+				rte_ring_count(ptr),
+				rte_ring_free_count(ptr));
+			printf("  - full (%d) empty (%d)\n",
+				rte_ring_full(ptr),
+				rte_ring_empty(ptr));
+
+			STATS_BDR_STR(50, "");
+			return;
+		}
+	}
+
+	rte_ring_list_dump(stdout);
+	STATS_BDR_STR(50, "");
 }
 
 static void
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v5 8/9] app/procinfo: add support for show mempool
  2018-11-22 14:15 [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese
                   ` (5 preceding siblings ...)
  2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 7/9] app/procinfo: add support for debug ring Vipin Varghese
@ 2018-11-22 14:15 ` Vipin Varghese
  2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 9/9] doc/procinfo: add information for debug options Vipin Varghese
  2018-12-03  5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
  8 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-11-22 14:15 UTC (permalink / raw)
  To: dev, reshma.pattan, thomas, stephen, john.mcnamara
  Cc: amol.patel, Vipin Varghese

Function show_mempool is used for displaying the MEMPOOL of the
primary process. For valid mempool elements are iterated for max
of 256 bytes.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

V5:
 - update ret to uint32_t - Reshma Pattan

v4:
 - add spacing for flag compare - Vipin Varghese

V3:
 - add avail and in use - Vipin Varghese
 - add flag split - Vipin Varghese
---
 app/proc-info/main.c | 67 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 66 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 7e57f296c..690b702a2 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -33,6 +33,7 @@
 #include <rte_security.h>
 #include <rte_cryptodev.h>
 #include <rte_tm.h>
+#include <rte_hexdump.h>
 
 /* Maximum long option length for option parsing. */
 #define MAX_LONG_OPT_SZ 64
@@ -1151,10 +1152,74 @@ show_ring(char *name)
 	STATS_BDR_STR(50, "");
 }
 
+static void
+mempool_itr_obj(struct rte_mempool *mp,
+			void *opaque, void *obj,
+			unsigned int obj_idx)
+{
+	printf("  - obj_idx %u opaque %p obj %p\n",
+		obj_idx, opaque, obj);
+
+	if (obj)
+		rte_hexdump(stdout, " Obj Content",
+			obj, (mp->elt_size > 256)?256:mp->elt_size);
+}
+
 static void
 show_mempool(char *name)
 {
-	printf(" mempools Name (%s)\n", name);
+	uint64_t flags = 0;
+
+	snprintf(bdr_str, MAX_STRING_LEN, " show - MEMPOOL %"PRIu64,
+		rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	if (name != NULL) {
+		struct rte_mempool *ptr = rte_mempool_lookup(name);
+		if (ptr != NULL) {
+			flags = ptr->flags;
+			printf("  - Name: %s on socket %d\n"
+				"  - flags:\n"
+				"\t  -- No spread (%c)\n"
+				"\t  -- No cache align (%c)\n"
+				"\t  -- SP put (%c), SC get (%c)\n"
+				"\t  -- Pool created (%c)\n"
+				"\t  -- No IOVA config (%c)\n",
+				ptr->name,
+				ptr->socket_id,
+				(flags & MEMPOOL_F_NO_SPREAD) ? 'y' : 'n',
+				(flags & MEMPOOL_F_NO_CACHE_ALIGN) ? 'y' : 'n',
+				(flags & MEMPOOL_F_SP_PUT) ? 'y' : 'n',
+				(flags & MEMPOOL_F_SC_GET) ? 'y' : 'n',
+				(flags & MEMPOOL_F_POOL_CREATED) ? 'y' : 'n',
+				(flags & MEMPOOL_F_NO_IOVA_CONTIG) ? 'y' : 'n');
+			printf("  - Size %u Cache %u element %u\n"
+				"  - header %u trailer %u\n"
+				"  - private data size %u\n",
+				ptr->size,
+				ptr->cache_size,
+				ptr->elt_size,
+				ptr->header_size,
+				ptr->trailer_size,
+				ptr->private_data_size);
+			printf("  - memezone - socket %d\n",
+				ptr->mz->socket_id);
+			printf("  - Count: avail (%u), in use (%u)\n",
+				rte_mempool_avail_count(ptr),
+				rte_mempool_in_use_count(ptr));
+
+			/* iterate each object */
+			uint32_t ret = rte_mempool_obj_iter(ptr,
+				mempool_itr_obj, NULL);
+			printf("  - iterated %u objects\n", ret);
+
+			STATS_BDR_STR(50, "");
+			return;
+		}
+	}
+
+	rte_mempool_list_dump(stdout);
+	STATS_BDR_STR(50, "");
 }
 
 int
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v5 9/9] doc/procinfo: add information for debug options
  2018-11-22 14:15 [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese
                   ` (6 preceding siblings ...)
  2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 8/9] app/procinfo: add support for show mempool Vipin Varghese
@ 2018-11-22 14:15 ` Vipin Varghese
  2018-11-22 18:08   ` Mcnamara, John
  2018-12-03  5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
  8 siblings, 1 reply; 68+ messages in thread
From: Vipin Varghese @ 2018-11-22 14:15 UTC (permalink / raw)
  To: dev, reshma.pattan, thomas, stephen, john.mcnamara
  Cc: amol.patel, Vipin Varghese

Document update for debug options and information for PMD instances
like port, traffic manager, crypto, mempool and ring instances.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

V3:
 - update document from dbg to show - Vipin Varghese

V2:
 - update word style for content - Vipin Varghese
---
 doc/guides/tools/proc_info.rst | 31 +++++++++++++++++++++++++++----
 1 file changed, 27 insertions(+), 4 deletions(-)

diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst
index d5b5ed6a6..5c2ce762b 100644
--- a/doc/guides/tools/proc_info.rst
+++ b/doc/guides/tools/proc_info.rst
@@ -6,9 +6,9 @@ dpdk-procinfo Application
 
 The dpdk-procinfo application is a Data Plane Development Kit (DPDK) application
 that runs as a DPDK secondary process and is capable of retrieving port
-statistics, resetting port statistics and printing DPDK memory information.
-This application extends the original functionality that was supported by
-dump_cfg.
+statistics, resetting port statistics and printing DPDK memory information and
+debug information for port|tm|crypto|ring|mempool. This application extends the
+original functionality that was supported by dump_cfg.
 
 Running the Application
 -----------------------
@@ -17,7 +17,8 @@ The application has a number of command line options:
 .. code-block:: console
 
    ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats |
-   --stats-reset | --xstats-reset]
+   --stats-reset | --xstats-reset | --show-port | --show-tm | --show-crypto |
+   --show-mempool[=name] | --show-ring[=name]]
 
 Parameters
 ~~~~~~~~~~
@@ -41,6 +42,28 @@ If no port mask is specified xstats are reset for all DPDK ports.
 
 **-m**: Print DPDK memory information.
 
+**--show-port**
+The show-port parameter displays port level various configuration and
+mbuf pool information associated to RX queues.
+
+**--show-tm**
+The show-tm parameter displays per port traffic manager settings and
+current configuration. It also display statistics too.
+
+**--show-crypto**
+The show-crypto parameter displays available cryptodev configurations,
+settings and stats per node.
+
+**--show-mempool[=name]**
+The show-mempool parameter display current allocation of all mempool
+with debug information. Specifying the name allows display details for
+specific mempool. For invalid|no mempool name, whole list is dump.
+
+**--show-ring[=name]**
+The show-ring pararmeter display current allocation of all ring with
+debug information. Specifying the name allows to display details for specific
+ring. For invalid|no ring name, whole list is dump.
+
 Limitations
 -----------
 
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v5 9/9] doc/procinfo: add information for debug options
  2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 9/9] doc/procinfo: add information for debug options Vipin Varghese
@ 2018-11-22 18:08   ` Mcnamara, John
  2018-11-23  4:58     ` Varghese, Vipin
  0 siblings, 1 reply; 68+ messages in thread
From: Mcnamara, John @ 2018-11-22 18:08 UTC (permalink / raw)
  To: Varghese, Vipin, dev, Pattan, Reshma, thomas, stephen; +Cc: Patel, Amol



> -----Original Message-----
> From: Varghese, Vipin
> Sent: Thursday, November 22, 2018 2:16 PM
> To: dev@dpdk.org; Pattan, Reshma <reshma.pattan@intel.com>;
> thomas@monjalon.net; stephen@networkplumber.org; Mcnamara, John
> <john.mcnamara@intel.com>
> Cc: Patel, Amol <amol.patel@intel.com>; Varghese, Vipin
> <vipin.varghese@intel.com>
> Subject: [PATCH v5 9/9] doc/procinfo: add information for debug options
> 
> Document update for debug options and information for PMD instances like
> port, traffic manager, crypto, mempool and ring instances.

Acked-by: John McNamara <john.mcnamara@intel.com>

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v5 9/9] doc/procinfo: add information for debug options
  2018-11-22 18:08   ` Mcnamara, John
@ 2018-11-23  4:58     ` Varghese, Vipin
  0 siblings, 0 replies; 68+ messages in thread
From: Varghese, Vipin @ 2018-11-23  4:58 UTC (permalink / raw)
  To: Mcnamara, John, dev, Pattan, Reshma, thomas, stephen; +Cc: Patel, Amol

Thanks John for ACK for documentation.

> -----Original Message-----
> From: Mcnamara, John
> Sent: Thursday, November 22, 2018 11:39 PM
> To: Varghese, Vipin <vipin.varghese@intel.com>; dev@dpdk.org; Pattan,
> Reshma <reshma.pattan@intel.com>; thomas@monjalon.net;
> stephen@networkplumber.org
> Cc: Patel, Amol <amol.patel@intel.com>
> Subject: RE: [PATCH v5 9/9] doc/procinfo: add information for debug options
> 
> 
> 
> > -----Original Message-----
> > From: Varghese, Vipin
> > Sent: Thursday, November 22, 2018 2:16 PM
> > To: dev@dpdk.org; Pattan, Reshma <reshma.pattan@intel.com>;
> > thomas@monjalon.net; stephen@networkplumber.org; Mcnamara, John
> > <john.mcnamara@intel.com>
> > Cc: Patel, Amol <amol.patel@intel.com>; Varghese, Vipin
> > <vipin.varghese@intel.com>
> > Subject: [PATCH v5 9/9] doc/procinfo: add information for debug
> > options
> >
> > Document update for debug options and information for PMD instances
> > like port, traffic manager, crypto, mempool and ring instances.
> 
> Acked-by: John McNamara <john.mcnamara@intel.com>

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool
  2018-11-22 14:15 [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese
                   ` (7 preceding siblings ...)
  2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 9/9] doc/procinfo: add information for debug options Vipin Varghese
@ 2018-12-03  5:49 ` Vipin Varghese
  2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 1/9] app/procinfo: add usage for new debug Vipin Varghese
                     ` (8 more replies)
  8 siblings, 9 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-12-03  5:49 UTC (permalink / raw)
  To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara
  Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese

This patch adds new debug functions to existing proc-info tool.

Motivation
==========

DPDK proc-info tool is been widely used as secondary process to collect
stats for any primary process. But these are limited to DPDK NIC ports and
basic memory usage.

Motivation
==========

This patch tries to address the short coming by adding debug for port,
traffic manager, crypto, ring and mempool. With these additional
information in tool will be able to deliver helpful data to debug issues
and performance variance.

Status
======

With the following patch set debug data has been collected from customers
using DPDK instances. Analysing the information helped to suggest the next
debug steps and solutions for fixing the issues.

Next Steps
==========

 - add event dev debug information.
 - enhance iter_mempool for INLINE crypto entries.
 - add debug for libraries like hash and acl.
 - explore debug possibility for ring and list.
 - add links and reference to 'how to guide' for 'debug and troubleshoot'.

Patch set Information
=====================

Patch includes set of 9 patches:
* 0 : to introduce the debug function enhancement for proc-info
* 1 : MACRO and help usage for new functions
* 2 : string compare for new functions
* 3 : invocation for the new prototypes
* 4 : show port
* 5 : show tm
* 6 : show crypto
* 7 : ring element debug
* 8 : mempool element debug
* 9 : iterate mempoool elements

Vipin Varghese (9):
  app/procinfo: add usage for new debug
  app/procinfo: add compare for new options
  app/procinfo: add prototype for debug instances
  app/procinfo: add support for show port
  app/procinfo: add support for show tm
  app/procinfo: add support for show crypto
  app/procinfo: add support for debug ring
  app/procinfo: add support for show iter mempool
  doc/procinfo: add information for debug options

 app/proc-info/main.c           | 681 ++++++++++++++++++++++++++++++++-
 app/proc-info/meson.build      |   2 +-
 doc/guides/tools/proc_info.rst |  35 +-
 3 files changed, 712 insertions(+), 6 deletions(-)

-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v6 1/9] app/procinfo: add usage for new debug
  2018-12-03  5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
@ 2018-12-03  5:49   ` Vipin Varghese
  2018-12-12 14:14     ` Pattan, Reshma
  2018-12-13  5:08     ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
  2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 2/9] app/procinfo: add compare for new options Vipin Varghese
                     ` (7 subsequent siblings)
  8 siblings, 2 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-12-03  5:49 UTC (permalink / raw)
  To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara
  Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese

Update the file with MACRO for stats border, usage text information
and string comparision.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

V6:
 - add mempool iterate elements option - Vipin Varghese

V3:
 - change the usage details - Vipin Varghese

V2:
 - change word dbg to show - Stephen Hemminger
---
 app/proc-info/main.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index c20effa4f..c034aad97 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -36,6 +36,10 @@
 
 #define MAX_STRING_LEN 256
 
+#define STATS_BDR_FMT "========================================"
+#define STATS_BDR_STR(w, s) printf("%.*s%s%.*s\n", w, \
+	STATS_BDR_FMT, s, w, STATS_BDR_FMT)
+
 /**< mask of enabled ports */
 static uint32_t enabled_port_mask;
 /**< Enable stats. */
@@ -83,7 +87,13 @@ proc_info_usage(const char *prgname)
 		"  --stats-reset: to reset port statistics\n"
 		"  --xstats-reset: to reset port extended statistics\n"
 		"  --collectd-format: to print statistics to STDOUT in expected by collectd format\n"
-		"  --host-id STRING: host id used to identify the system process is running on\n",
+		"  --host-id STRING: host id used to identify the system process is running on\n"
+		"  --show-port to display ports information\n"
+		"  --show-tm to display traffic manager information for ports\n"
+		"  --show-crypto to display crypto information\n"
+		"  --show-ring[=name] to display ring information\n"
+		"  --show-mempool[=name] to display mempool information\n"
+		"  --iter-mempool=name to iterate mempool elements\n",
 		prgname);
 }
 
@@ -190,6 +200,12 @@ proc_info_parse_args(int argc, char **argv)
 		{"collectd-format", 0, NULL, 0},
 		{"xstats-ids", 1, NULL, 1},
 		{"host-id", 0, NULL, 0},
+		{"show-port", 0, NULL, 0},
+		{"show-tm", 0, NULL, 0},
+		{"show-crypto", 0, NULL, 0},
+		{"show-ring", optional_argument, NULL, 0},
+		{"show-mempool", optional_argument, NULL, 0},
+		{"iter-mempool", required_argument, NULL, 0},
 		{NULL, 0, 0, 0}
 	};
 
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v6 2/9] app/procinfo: add compare for new options
  2018-12-03  5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
  2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 1/9] app/procinfo: add usage for new debug Vipin Varghese
@ 2018-12-03  5:49   ` Vipin Varghese
  2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 3/9] app/procinfo: add prototype for debug instances Vipin Varghese
                     ` (6 subsequent siblings)
  8 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-12-03  5:49 UTC (permalink / raw)
  To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara
  Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese

Add code for new debug options to compare usage strings and set
enable flag.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

V6:
 - check for iter mempool - Vipin Varghese

V3:
 - variables from debug to show - Vipin Varghese

V2:
 - compare string from dbg to show - Stephen Hemminger
---
 app/proc-info/main.c | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index c034aad97..bda7e9af8 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -63,6 +63,21 @@ static uint32_t mem_info;
 /**< Enable displaying xstat name. */
 static uint32_t enable_xstats_name;
 static char *xstats_name;
+/**< Enable show port. */
+static uint32_t enable_shw_port;
+/**< Enable show tm. */
+static uint32_t enable_shw_tm;
+/**< Enable show crypto. */
+static uint32_t enable_shw_crypto;
+/**< Enable show ring. */
+static uint32_t enable_shw_ring;
+static char *ring_name;
+/**< Enable show mempool. */
+static uint32_t enable_shw_mempool;
+static char *mempool_name;
+/**< Enable iter mempool. */
+static uint32_t enable_iter_mempool;
+static char *mempool_iter_name;
 
 /**< Enable xstats by ids. */
 #define MAX_NB_XSTATS_IDS 1024
@@ -249,6 +264,29 @@ proc_info_parse_args(int argc, char **argv)
 			else if (!strncmp(long_option[option_index].name, "xstats-reset",
 					MAX_LONG_OPT_SZ))
 				reset_xstats = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-port", MAX_LONG_OPT_SZ))
+				enable_shw_port = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-tm", MAX_LONG_OPT_SZ))
+				enable_shw_tm = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-crypto", MAX_LONG_OPT_SZ))
+				enable_shw_crypto = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-ring", MAX_LONG_OPT_SZ)) {
+				enable_shw_ring = 1;
+				ring_name = optarg;
+			} else if (!strncmp(long_option[option_index].name,
+					"show-mempool", MAX_LONG_OPT_SZ)) {
+				enable_shw_mempool = 1;
+				mempool_name = optarg;
+			} else if (!strncmp(long_option[option_index].name,
+					"iter-mempool", MAX_LONG_OPT_SZ)) {
+				enable_iter_mempool = 1;
+				mempool_iter_name = optarg;
+			}
+
 			break;
 		case 1:
 			/* Print xstat single value given by name*/
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v6 3/9] app/procinfo: add prototype for debug instances
  2018-12-03  5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
  2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 1/9] app/procinfo: add usage for new debug Vipin Varghese
  2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 2/9] app/procinfo: add compare for new options Vipin Varghese
@ 2018-12-03  5:49   ` Vipin Varghese
  2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 4/9] app/procinfo: add support for show port Vipin Varghese
                     ` (5 subsequent siblings)
  8 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-12-03  5:49 UTC (permalink / raw)
  To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara
  Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese

Add prototype function calls for the show functions.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

V6:
 - add call to iter mempool - Vipin Varghese

V3:
 - update function names from debug to show - Vipin Varghese

V2:
 - removed if else ladder - Vipin Varghese
---
 app/proc-info/main.c | 50 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index bda7e9af8..698b120f2 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -638,6 +638,42 @@ metrics_display(int port_id)
 	rte_free(names);
 }
 
+static void
+show_port(void)
+{
+	printf(" port\n");
+}
+
+static void
+show_tm(void)
+{
+	printf(" tm\n");
+}
+
+static void
+show_crypto(void)
+{
+	printf(" crypto\n");
+}
+
+static void
+show_ring(char *name)
+{
+	printf(" ring Name (%s)\n", name);
+}
+
+static void
+show_mempool(char *name)
+{
+	printf(" mempool Name (%s)\n", name);
+}
+
+static void
+iter_mempool(char *name)
+{
+	printf(" Iter elements in mempool (%s)\n", name);
+}
+
 int
 main(int argc, char **argv)
 {
@@ -718,6 +754,20 @@ main(int argc, char **argv)
 	if (enable_metrics)
 		metrics_display(RTE_METRICS_GLOBAL);
 
+	/* show information for PMD */
+	if (enable_shw_port)
+		show_port();
+	if (enable_shw_tm)
+		show_tm();
+	if (enable_shw_crypto)
+		show_crypto();
+	if (enable_shw_ring)
+		show_ring(ring_name);
+	if (enable_shw_mempool)
+		show_mempool(mempool_name);
+	if (enable_iter_mempool)
+		iter_mempool(mempool_iter_name);
+
 	ret = rte_eal_cleanup();
 	if (ret)
 		printf("Error from rte_eal_cleanup(), %d\n", ret);
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v6 4/9] app/procinfo: add support for show port
  2018-12-03  5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
                     ` (2 preceding siblings ...)
  2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 3/9] app/procinfo: add prototype for debug instances Vipin Varghese
@ 2018-12-03  5:49   ` Vipin Varghese
  2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 5/9] app/procinfo: add support for show tm Vipin Varghese
                     ` (4 subsequent siblings)
  8 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-12-03  5:49 UTC (permalink / raw)
  To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara
  Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese

Function show_port is used for displaying the port PMD information under
under primary process. The information shows basic, per queue and security.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

V5:
 - convert 100 to MAX_STRING_LEN - Reshma Pattan
 - RSS made for port - Reshma Pattan
 - update bdr_str to static - Stephen Hemminger
 - remove memset for link, dev_info, queue, stats - Stephen Hemminger

V3:
 - fix meson build - Reshma Pattan
 - change 100 to MAX_STRING_LEN - Reshma Pattan
 - memset to struct elements - Reshma Pattan
 - printf tab space - Reshma Pattan
 - remove 'drop packet information' - Vipin Varghese

V2:
 - redefine code format - Vipin Varghese
---
 app/proc-info/main.c      | 117 +++++++++++++++++++++++++++++++++++++-
 app/proc-info/meson.build |   2 +-
 2 files changed, 117 insertions(+), 2 deletions(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 698b120f2..dda6499b6 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -29,6 +29,9 @@
 #include <rte_branch_prediction.h>
 #include <rte_string_fns.h>
 #include <rte_metrics.h>
+#include <rte_cycles.h>
+#include <rte_security.h>
+#include <rte_cryptodev.h>
 
 /* Maximum long option length for option parsing. */
 #define MAX_LONG_OPT_SZ 64
@@ -84,6 +87,9 @@ static char *mempool_iter_name;
 static uint32_t nb_xstats_ids;
 static uint64_t xstats_ids[MAX_NB_XSTATS_IDS];
 
+/* border variable to hold for show */
+static char bdr_str[MAX_STRING_LEN];
+
 /**< display usage */
 static void
 proc_info_usage(const char *prgname)
@@ -641,7 +647,116 @@ metrics_display(int port_id)
 static void
 show_port(void)
 {
-	printf(" port\n");
+	uint16_t i = 0;
+	int ret = 0, j, k;
+
+	snprintf(bdr_str, MAX_STRING_LEN, " show - Port PMD %"PRIu64,
+			rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	RTE_ETH_FOREACH_DEV(i) {
+		uint16_t mtu = 0;
+		struct rte_eth_link link;
+		struct rte_eth_dev_info dev_info;
+		struct rte_eth_rxq_info queue_info;
+		struct rte_eth_stats stats;
+		struct rte_eth_rss_conf rss_conf;
+
+		memset(&rss_conf, 0, sizeof(rss_conf));
+
+		snprintf(bdr_str, MAX_STRING_LEN, " Port (%u)", i);
+		STATS_BDR_STR(5, bdr_str);
+		printf("  - generic config\n");
+
+		printf("\t  -- Socket %d\n", rte_eth_dev_socket_id(i));
+		rte_eth_link_get(i, &link);
+		printf("\t  -- link speed %d duplex %d,"
+			" auto neg %d status %d\n",
+			link.link_speed,
+			link.link_duplex,
+			link.link_autoneg,
+			link.link_status);
+		printf("\t  -- promiscuous (%d)\n",
+			rte_eth_promiscuous_get(i));
+		ret = rte_eth_dev_get_mtu(i, &mtu);
+		if (ret == 0)
+			printf("\t  -- mtu (%d)\n", mtu);
+
+		printf("  - queue\n");
+
+		rte_eth_dev_info_get(i, &dev_info);
+
+		for (j = 0; j < dev_info.nb_rx_queues; j++) {
+			ret = rte_eth_rx_queue_info_get(i, j, &queue_info);
+			if (ret == 0) {
+				printf("\t  -- queue %d rx scatter %d"
+					" descriptors %d offloads 0x%"PRIx64
+					" mempool socket %d\n",
+					j,
+					queue_info.scattered_rx,
+					queue_info.nb_desc,
+					queue_info.conf.offloads,
+					queue_info.mp->socket_id);
+
+				ret = rte_eth_stats_get(i, &stats);
+				if (ret == 0) {
+					printf("\t  -- packet input %"PRIu64
+						" output %"PRIu64""
+						" error %"PRIu64"\n",
+						stats.q_ipackets[j],
+						stats.q_opackets[j],
+						stats.q_errors[j]);
+				}
+			}
+		}
+
+		ret = rte_eth_dev_rss_hash_conf_get(i, &rss_conf);
+		if (ret == 0) {
+			if (rss_conf.rss_key) {
+				printf("\t  -- RSS len %u key (hex):",
+					rss_conf.rss_key_len);
+				for (k = 0; k < rss_conf.rss_key_len; k++)
+					printf(" %x", rss_conf.rss_key[k]);
+				printf("\t  -- hf 0x%"PRIx64"\n",
+					rss_conf.rss_hf);
+			}
+		}
+
+		ret = rte_eth_stats_get(i, &stats);
+		if (ret == 0) {
+			printf("\t  -- packet input %"PRIu64
+				" output %"PRIu64"\n",
+				stats.ipackets,
+				stats.opackets);
+			printf("\t  -- packet error input %"PRIu64
+				" output %"PRIu64"\n",
+				stats.ierrors,
+				stats.oerrors);
+			printf("\t  -- RX no mbuf %"PRIu64"\n",
+				stats.rx_nombuf);
+		}
+
+		printf("  - cyrpto context\n");
+		void *ptr_ctx = rte_eth_dev_get_sec_ctx(i);
+		printf("\t  -- security context - %p\n", ptr_ctx);
+
+		if (ptr_ctx) {
+			printf("\t  -- size %u\n",
+				rte_security_session_get_size(ptr_ctx));
+			const struct rte_security_capability *ptr_sec_cap =
+				rte_security_capabilities_get(ptr_ctx);
+			if (ptr_sec_cap) {
+				printf("\t  -- action (0x%x), protocol (0x%x),"
+					" offload flags (0x%x)\n",
+					ptr_sec_cap->action,
+					ptr_sec_cap->protocol,
+					ptr_sec_cap->ol_flags);
+				printf("\t  -- capabilities - oper type %x\n",
+					ptr_sec_cap->crypto_capabilities->op);
+			}
+		}
+	}
+	STATS_BDR_STR(50, "");
 }
 
 static void
diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build
index a52b2ee4a..866b390d6 100644
--- a/app/proc-info/meson.build
+++ b/app/proc-info/meson.build
@@ -3,4 +3,4 @@
 
 sources = files('main.c')
 allow_experimental_apis = true
-deps += ['ethdev', 'metrics']
+deps += ['ethdev', 'metrics', 'security']
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v6 5/9] app/procinfo: add support for show tm
  2018-12-03  5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
                     ` (3 preceding siblings ...)
  2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 4/9] app/procinfo: add support for show port Vipin Varghese
@ 2018-12-03  5:49   ` Vipin Varghese
  2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 6/9] app/procinfo: add support for show crypto Vipin Varghese
                     ` (3 subsequent siblings)
  8 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-12-03  5:49 UTC (permalink / raw)
  To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara
  Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese

Function show_tm is used for displaying the tm PMD under the
primary process. This covers basic and per node|level details with
stats.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

V6:
 - replace or with logical or - Reshma Pathan & Konstantin Ananyev

V3:
 - memset for struct elements - Vipin Varghese
 - code cleanup for TM - Vipin Varghese
 - fetch for leaf nodes if node exist - Jasvinder Singh
 - display MARCO to function - Reshma Pathan & Stephen Hemminger

V2:
 - MACRO for display node|level - cap - Vipin Varghese
---
 app/proc-info/main.c | 276 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 275 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index dda6499b6..67e962878 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -32,6 +32,7 @@
 #include <rte_cycles.h>
 #include <rte_security.h>
 #include <rte_cryptodev.h>
+#include <rte_tm.h>
 
 /* Maximum long option length for option parsing. */
 #define MAX_LONG_OPT_SZ 64
@@ -759,10 +760,283 @@ show_port(void)
 	STATS_BDR_STR(50, "");
 }
 
+static void
+display_nodecap_info(int is_leaf, struct rte_tm_node_capabilities *cap)
+{
+	if (cap == NULL)
+		return;
+
+	if (!is_leaf) {
+		printf("\t  -- nonleaf sched max:\n"
+			"\t\t  + children (%u)\n"
+			"\t\t  + sp priorities (%u)\n"
+			"\t\t  + wfq children per group (%u)\n"
+			"\t\t  + wfq groups (%u)\n"
+			"\t\t  + wfq weight (%u)\n",
+			cap->nonleaf.sched_n_children_max,
+			cap->nonleaf.sched_sp_n_priorities_max,
+			cap->nonleaf.sched_wfq_n_children_per_group_max,
+			cap->nonleaf.sched_wfq_n_groups_max,
+			cap->nonleaf.sched_wfq_weight_max);
+	} else {
+		printf("\t  -- leaf cman support:\n"
+			"\t\t  + wred pkt mode (%d)\n"
+			"\t\t  + wred byte mode (%d)\n"
+			"\t\t  + head drop (%d)\n"
+			"\t\t  + wred context private (%d)\n"
+			"\t\t  + wred context shared (%u)\n",
+			cap->leaf.cman_wred_packet_mode_supported,
+			cap->leaf.cman_wred_byte_mode_supported,
+			cap->leaf.cman_head_drop_supported,
+			cap->leaf.cman_wred_context_private_supported,
+			cap->leaf.cman_wred_context_shared_n_max);
+	}
+}
+
+static void
+display_levelcap_info(int is_leaf, struct rte_tm_level_capabilities *cap)
+{
+	if (cap == NULL)
+		return;
+
+	if (!is_leaf) {
+		printf("\t  -- shaper private: (%d) dual rate (%d)\n",
+			cap->nonleaf.shaper_private_supported,
+			cap->nonleaf.shaper_private_dual_rate_supported);
+		printf("\t  -- shaper share: (%u)\n",
+			cap->nonleaf.shaper_shared_n_max);
+		printf("\t  -- non leaf sched MAX:\n"
+			"\t\t  + children (%u)\n"
+			"\t\t  + sp (%u)\n"
+			"\t\t  + wfq children per group (%u)\n"
+			"\t\t  + wfq groups (%u)\n"
+			"\t\t  + wfq weight (%u)\n",
+			cap->nonleaf.sched_n_children_max,
+			cap->nonleaf.sched_sp_n_priorities_max,
+			cap->nonleaf.sched_wfq_n_children_per_group_max,
+			cap->nonleaf.sched_wfq_n_groups_max,
+			cap->nonleaf.sched_wfq_weight_max);
+	} else {
+		printf("\t  -- shaper private: (%d) dual rate (%d)\n",
+			cap->leaf.shaper_private_supported,
+			cap->leaf.shaper_private_dual_rate_supported);
+		printf("\t  -- shaper share: (%u)\n",
+			cap->leaf.shaper_shared_n_max);
+		printf("  -- leaf cman support:\n"
+			"\t\t  + wred pkt mode (%d)\n"
+			"\t\t  + wred byte mode (%d)\n"
+			"\t\t  + head drop (%d)\n"
+			"\t\t  + wred context private (%d)\n"
+			"\t\t  + wred context shared (%u)\n",
+			cap->leaf.cman_wred_packet_mode_supported,
+			cap->leaf.cman_wred_byte_mode_supported,
+			cap->leaf.cman_head_drop_supported,
+			cap->leaf.cman_wred_context_private_supported,
+			cap->leaf.cman_wred_context_shared_n_max);
+	}
+}
+
 static void
 show_tm(void)
 {
-	printf(" tm\n");
+	int ret = 0, check_for_leaf = 0, is_leaf = 0;
+	unsigned int j, k;
+	uint16_t i = 0;
+
+	snprintf(bdr_str, MAX_STRING_LEN, " show - TM PMD %"PRIu64,
+			rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	RTE_ETH_FOREACH_DEV(i) {
+		struct rte_eth_dev_info dev_info;
+		struct rte_tm_capabilities cap;
+		struct rte_tm_error error;
+		struct rte_tm_node_capabilities capnode;
+		struct rte_tm_level_capabilities caplevel;
+		uint32_t n_leaf_nodes = 0;
+
+		memset(&dev_info, 0, sizeof(dev_info));
+		memset(&cap, 0, sizeof(cap));
+		memset(&error, 0, sizeof(error));
+
+		rte_eth_dev_info_get(i, &dev_info);
+		printf("  - Generic for port (%u)\n"
+			"\t  -- driver name %s\n"
+			"\t  -- max vf (%u)\n"
+			"\t  -- max tx queues (%u)\n"
+			"\t  -- number of tx queues (%u)\n",
+			i,
+			dev_info.driver_name,
+			dev_info.max_vfs,
+			dev_info.max_tx_queues,
+			dev_info.nb_tx_queues);
+
+		ret = rte_tm_capabilities_get(i, &cap, &error);
+		if (ret)
+			continue;
+
+		printf("  - MAX: nodes (%u) levels (%u) children (%u)\n",
+			cap.n_nodes_max,
+			cap.n_levels_max,
+			cap.sched_n_children_max);
+
+		printf("  - identical nodes: non leaf (%d) leaf (%d)\n",
+			cap.non_leaf_nodes_identical,
+			cap.leaf_nodes_identical);
+
+		printf("  - Shaper MAX:\n"
+			"\t  -- total (%u)\n"
+			"\t  -- private (%u) private dual (%d)\n"
+			"\t  -- shared (%u) shared dual (%u)\n",
+			cap.shaper_n_max,
+			cap.shaper_private_n_max,
+			cap.shaper_private_dual_rate_n_max,
+			cap.shaper_shared_n_max,
+			cap.shaper_shared_dual_rate_n_max);
+
+		printf("  - mark support:\n");
+		printf("\t  -- vlan dei: GREEN (%d) YELLOW (%d) RED (%d)\n",
+			cap.mark_vlan_dei_supported[RTE_TM_GREEN],
+			cap.mark_vlan_dei_supported[RTE_TM_YELLOW],
+			cap.mark_vlan_dei_supported[RTE_TM_RED]);
+		printf("\t  -- ip ecn tcp: GREEN (%d) YELLOW (%d) RED (%d)\n",
+			cap.mark_ip_ecn_tcp_supported[RTE_TM_GREEN],
+			cap.mark_ip_ecn_tcp_supported[RTE_TM_YELLOW],
+			cap.mark_ip_ecn_tcp_supported[RTE_TM_RED]);
+		printf("\t  -- ip ecn sctp: GREEN (%d) YELLOW (%d) RED (%d)\n",
+			cap.mark_ip_ecn_sctp_supported[RTE_TM_GREEN],
+			cap.mark_ip_ecn_sctp_supported[RTE_TM_YELLOW],
+			cap.mark_ip_ecn_sctp_supported[RTE_TM_RED]);
+		printf("\t  -- ip dscp: GREEN (%d) YELLOW (%d) RED (%d)\n",
+			cap.mark_ip_dscp_supported[RTE_TM_GREEN],
+			cap.mark_ip_dscp_supported[RTE_TM_YELLOW],
+			cap.mark_ip_dscp_supported[RTE_TM_RED]);
+
+		printf("  - mask stats (0x%"PRIx64")"
+			" dynamic update (0x%"PRIx64")\n",
+			cap.stats_mask,
+			cap.dynamic_update_mask);
+
+		printf("  - sched MAX:\n"
+			"\t  -- total (%u)\n"
+			"\t  -- sp levels (%u)\n"
+			"\t  -- wfq children per group (%u)\n"
+			"\t  -- wfq groups (%u)\n"
+			"\t  -- wfq weight (%u)\n",
+			cap.sched_sp_n_priorities_max,
+			cap.sched_sp_n_priorities_max,
+			cap.sched_wfq_n_children_per_group_max,
+			cap.sched_wfq_n_groups_max,
+			cap.sched_wfq_weight_max);
+
+		printf("  - CMAN support:\n"
+			"\t  -- WRED mode: pkt (%d) byte (%d)\n"
+			"\t  -- head drop (%d)\n",
+			cap.cman_wred_packet_mode_supported,
+			cap.cman_wred_byte_mode_supported,
+			cap.cman_head_drop_supported);
+		printf("\t  -- MAX WRED CONTEXT:"
+			" total (%u) private (%u) shared (%u)\n",
+			cap.cman_wred_context_n_max,
+			cap.cman_wred_context_private_n_max,
+			cap.cman_wred_context_shared_n_max);
+
+		for (j = 0; j < cap.n_nodes_max; j++) {
+			memset(&capnode, 0, sizeof(capnode));
+			ret = rte_tm_node_capabilities_get(i, j,
+				&capnode, &error);
+			if (ret)
+				continue;
+
+			check_for_leaf = 1;
+
+			printf("  NODE %u\n", j);
+			printf("\t  - shaper private: (%d) dual rate (%d)\n",
+				capnode.shaper_private_supported,
+				capnode.shaper_private_dual_rate_supported);
+			printf("\t  - shaper shared max: (%u)\n",
+				capnode.shaper_shared_n_max);
+			printf("\t  - stats mask %"PRIx64"\n",
+				capnode.stats_mask);
+
+			ret = rte_tm_node_type_get(i, j, &is_leaf, &error);
+			if (ret)
+				continue;
+
+			display_nodecap_info(is_leaf, &capnode);
+		}
+
+		for (j = 0; j < cap.n_levels_max; j++) {
+			memset(&caplevel, 0, sizeof(caplevel));
+			ret = rte_tm_level_capabilities_get(i, j,
+				&caplevel, &error);
+			if (ret)
+				continue;
+
+			printf("  - Level %u\n", j);
+			printf("\t  -- node MAX: %u non leaf %u leaf %u\n",
+				caplevel.n_nodes_max,
+				caplevel.n_nodes_nonleaf_max,
+				caplevel.n_nodes_leaf_max);
+			printf("\t  -- indetical: non leaf %u leaf %u\n",
+				caplevel.non_leaf_nodes_identical,
+				caplevel.leaf_nodes_identical);
+
+			for (k = 0; k < caplevel.n_nodes_max; k++) {
+				ret = rte_tm_node_type_get(i, k,
+					&is_leaf, &error);
+				if (ret)
+					continue;
+
+				display_levelcap_info(is_leaf, &caplevel);
+			}
+		}
+
+		if (check_for_leaf) {
+			ret = rte_tm_get_number_of_leaf_nodes(i,
+					&n_leaf_nodes, &error);
+			if (ret == 0)
+				printf("  - leaf nodes (%u)\n", n_leaf_nodes);
+		}
+
+		for (j = 0; j < n_leaf_nodes; j++) {
+			struct rte_tm_node_stats stats;
+			memset(&stats, 0, sizeof(stats));
+
+			ret = rte_tm_node_stats_read(i, j,
+				&stats, &cap.stats_mask, 0, &error);
+			if (ret)
+				continue;
+
+			printf("  - STATS for node (%u)\n", j);
+			printf("  -- pkts (%"PRIu64") bytes (%"PRIu64")\n",
+				stats.n_pkts, stats.n_bytes);
+
+			ret = rte_tm_node_type_get(i, j, &is_leaf, &error);
+			if (ret || (!is_leaf))
+				continue;
+
+			printf("  -- leaf queued:"
+				" pkts (%"PRIu64") bytes (%"PRIu64")\n",
+				stats.leaf.n_pkts_queued,
+				stats.leaf.n_bytes_queued);
+			printf("  - dropped:\n"
+				"\t  -- GREEN:"
+				" pkts (%"PRIu64") bytes (%"PRIu64")\n"
+				"\t  -- YELLOW:"
+				" pkts (%"PRIu64") bytes (%"PRIu64")\n"
+				"\t  -- RED:"
+				" pkts (%"PRIu64") bytes (%"PRIu64")\n",
+				stats.leaf.n_pkts_dropped[RTE_TM_GREEN],
+				stats.leaf.n_bytes_dropped[RTE_TM_GREEN],
+				stats.leaf.n_pkts_dropped[RTE_TM_YELLOW],
+				stats.leaf.n_bytes_dropped[RTE_TM_YELLOW],
+				stats.leaf.n_pkts_dropped[RTE_TM_RED],
+				stats.leaf.n_bytes_dropped[RTE_TM_RED]);
+		}
+	}
+
+	STATS_BDR_STR(50, "");
 }
 
 static void
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v6 6/9] app/procinfo: add support for show crypto
  2018-12-03  5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
                     ` (4 preceding siblings ...)
  2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 5/9] app/procinfo: add support for show tm Vipin Varghese
@ 2018-12-03  5:49   ` Vipin Varghese
  2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 7/9] app/procinfo: add support for debug ring Vipin Varghese
                     ` (2 subsequent siblings)
  8 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-12-03  5:49 UTC (permalink / raw)
  To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara
  Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese

Function show_crypto is used for displaying the crypto PMD under
the primary process.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

v4:
 - add space to compare - Vipin Varghese

V3:
 - replace MACRO to function - Reshma Pathan & Stephen Hemminger
 - add memset for struct elements - Reshma Pathan
 - change display formating of flags - Vipin Varghese
 - use MACRO for string - Vipin Varghese
---
 app/proc-info/main.c | 80 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 79 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 67e962878..2aa448605 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -1039,10 +1039,88 @@ show_tm(void)
 	STATS_BDR_STR(50, "");
 }
 
+static void
+display_crypto_feature_info(uint64_t x)
+{
+	if (x == 0)
+		return;
+
+	printf("\t  -- feature flags\n");
+	printf("\t\t  + symmetric (%c), asymmetric (%c)\n"
+		"\t\t  + symmetric operation chaining (%c)\n",
+		(x & RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING) ? 'y' : 'n');
+	printf("\t\t  + CPU: SSE (%c), AVX (%c), AVX2 (%c), AVX512 (%c)\n",
+		(x & RTE_CRYPTODEV_FF_CPU_SSE) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_CPU_AVX) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_CPU_AVX2) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_CPU_AVX512) ? 'y' : 'n');
+	printf("\t\t  + AESNI: CPU (%c), HW (%c)\n",
+		(x & RTE_CRYPTODEV_FF_CPU_AESNI) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_HW_ACCELERATED) ? 'y' : 'n');
+	printf("\t\t  + INLINE (%c)\n",
+		(x & RTE_CRYPTODEV_FF_SECURITY) ? 'y' : 'n');
+	printf("\t\t  + ARM: NEON (%c), CE (%c)\n",
+		(x & RTE_CRYPTODEV_FF_CPU_NEON) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_CPU_ARM_CE) ? 'y' : 'n');
+	printf("\t  -- buffer offload\n");
+	printf("\t\t  + IN_PLACE_SGL (%c)\n",
+		(x & RTE_CRYPTODEV_FF_IN_PLACE_SGL) ? 'y' : 'n');
+	printf("\t\t  + OOP_SGL_IN_SGL_OUT (%c)\n",
+		(x & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT) ? 'y' : 'n');
+	printf("\t\t  + OOP_SGL_IN_LB_OUT (%c)\n",
+		(x & RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT) ? 'y' : 'n');
+	printf("\t\t  + OOP_LB_IN_SGL_OUT (%c)\n",
+		(x & RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT) ? 'y' : 'n');
+	printf("\t\t  + OOP_LB_IN_LB_OUT (%c)\n",
+		(x & RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT) ? 'y' : 'n');
+}
+
 static void
 show_crypto(void)
 {
-	printf(" crypto\n");
+	uint8_t crypto_dev_count = rte_cryptodev_count(), i;
+
+	snprintf(bdr_str, MAX_STRING_LEN, " show - CRYPTO PMD %"PRIu64,
+		rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	for (i = 0; i < crypto_dev_count; i++) {
+		struct rte_cryptodev_info dev_info;
+		struct rte_cryptodev_stats stats;
+
+		memset(&dev_info, 0, sizeof(dev_info));
+		rte_cryptodev_info_get(i, &dev_info);
+
+		printf("  - device (%u)\n", i);
+		printf("\t  -- name (%s)\n"
+			"\t  -- driver (%s)\n"
+			"\t  -- id (%u) on socket (%d)\n"
+			"\t  -- queue pairs (%d)\n",
+			rte_cryptodev_name_get(i),
+			dev_info.driver_name,
+			dev_info.driver_id,
+			dev_info.device->numa_node,
+			rte_cryptodev_queue_pair_count(i));
+
+		display_crypto_feature_info(dev_info.feature_flags);
+
+		printf("\t  -- stats\n");
+		memset(&stats, 0, sizeof(0));
+		if (rte_cryptodev_stats_get(i, &stats) == 0) {
+			printf("\t\t  + enqueue count (%"PRIu64")"
+				" error (%"PRIu64")\n",
+				stats.enqueued_count,
+				stats.enqueue_err_count);
+			printf("\t\t  + dequeue count (%"PRIu64")"
+				" error (%"PRIu64")\n",
+				stats.dequeued_count,
+				stats.dequeue_err_count);
+		}
+	}
+
+	STATS_BDR_STR(50, "");
 }
 
 static void
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v6 7/9] app/procinfo: add support for debug ring
  2018-12-03  5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
                     ` (5 preceding siblings ...)
  2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 6/9] app/procinfo: add support for show crypto Vipin Varghese
@ 2018-12-03  5:49   ` Vipin Varghese
  2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 8/9] app/procinfo: add support for show iter mempool Vipin Varghese
  2018-12-03  5:50   ` [dpdk-dev] [PATCH v6 9/9] doc/procinfo: add information for debug options Vipin Varghese
  8 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-12-03  5:49 UTC (permalink / raw)
  To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara
  Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese

Function show_ring is used for displaying the RING of the
primary process.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

V3:
 - replace space to tab in printf - Reshma Pathan
 - change ring display information - Vipin Varghese
---
 app/proc-info/main.c | 34 +++++++++++++++++++++++++++++++++-
 1 file changed, 33 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 2aa448605..00b2d85f7 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -1126,7 +1126,39 @@ show_crypto(void)
 static void
 show_ring(char *name)
 {
-	printf(" ring Name (%s)\n", name);
+	snprintf(bdr_str, MAX_STRING_LEN, " show - RING %"PRIu64,
+		rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	if (name != NULL) {
+		struct rte_ring *ptr = rte_ring_lookup(name);
+		if (ptr != NULL) {
+			printf("  - Name (%s) on socket (%d)\n"
+				"  - flags:\n"
+				"\t  -- Single Producer Enqueue (%u)\n"
+				"\t  -- Single Consmer Dequeue (%u)\n",
+				ptr->name,
+				ptr->memzone->socket_id,
+				ptr->flags & RING_F_SP_ENQ,
+				ptr->flags & RING_F_SC_DEQ);
+			printf("  - size (%u) mask (0x%x) capacity (%u)\n",
+				ptr->size,
+				ptr->mask,
+				ptr->capacity);
+			printf("  - count (%u) free count (%u)\n",
+				rte_ring_count(ptr),
+				rte_ring_free_count(ptr));
+			printf("  - full (%d) empty (%d)\n",
+				rte_ring_full(ptr),
+				rte_ring_empty(ptr));
+
+			STATS_BDR_STR(50, "");
+			return;
+		}
+	}
+
+	rte_ring_list_dump(stdout);
+	STATS_BDR_STR(50, "");
 }
 
 static void
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v6 8/9] app/procinfo: add support for show iter mempool
  2018-12-03  5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
                     ` (6 preceding siblings ...)
  2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 7/9] app/procinfo: add support for debug ring Vipin Varghese
@ 2018-12-03  5:49   ` Vipin Varghese
  2018-12-12 16:10     ` Pattan, Reshma
  2018-12-03  5:50   ` [dpdk-dev] [PATCH v6 9/9] doc/procinfo: add information for debug options Vipin Varghese
  8 siblings, 1 reply; 68+ messages in thread
From: Vipin Varghese @ 2018-12-03  5:49 UTC (permalink / raw)
  To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara
  Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese

Function show_mempool is used for displaying valid MEMPOOL.
Function iter_mempool is used for iterating mempool elements for
a mempool for max of 256 bytes.

In case of show_mempool for invalid name, whole list is dump.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

V6:
 - split iter mempool - Vipin Varghese

V5:
 - update ret to uint32_t - Reshma Pattan

v4:
 - add spacing for flag compare - Vipin Varghese

V3:
 - add avail and in use - Vipin Varghese
 - add flag split - Vipin Varghese
---
 app/proc-info/main.c | 80 ++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 78 insertions(+), 2 deletions(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 00b2d85f7..7a7e7372e 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -33,6 +33,7 @@
 #include <rte_security.h>
 #include <rte_cryptodev.h>
 #include <rte_tm.h>
+#include <rte_hexdump.h>
 
 /* Maximum long option length for option parsing. */
 #define MAX_LONG_OPT_SZ 64
@@ -1161,16 +1162,91 @@ show_ring(char *name)
 	STATS_BDR_STR(50, "");
 }
 
+static void
+mempool_itr_obj(struct rte_mempool *mp,
+		void *opaque, void *obj,
+		unsigned int obj_idx)
+{
+	printf("  - obj_idx %u opaque %p obj %p\n",
+		obj_idx, opaque, obj);
+
+	if (obj)
+		rte_hexdump(stdout, " Obj Content",
+			obj, (mp->elt_size > 256)?256:mp->elt_size);
+}
+
 static void
 show_mempool(char *name)
 {
-	printf(" mempool Name (%s)\n", name);
+	uint64_t flags = 0;
+
+	snprintf(bdr_str, MAX_STRING_LEN, " show - MEMPOOL %"PRIu64,
+		rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	if (name != NULL) {
+		struct rte_mempool *ptr = rte_mempool_lookup(name);
+		if (ptr != NULL) {
+			flags = ptr->flags;
+			printf("  - Name: %s on socket %d\n"
+				"  - flags:\n"
+				"\t  -- No spread (%c)\n"
+				"\t  -- No cache align (%c)\n"
+				"\t  -- SP put (%c), SC get (%c)\n"
+				"\t  -- Pool created (%c)\n"
+				"\t  -- No IOVA config (%c)\n",
+				ptr->name,
+				ptr->socket_id,
+				(flags & MEMPOOL_F_NO_SPREAD) ? 'y' : 'n',
+				(flags & MEMPOOL_F_NO_CACHE_ALIGN) ? 'y' : 'n',
+				(flags & MEMPOOL_F_SP_PUT) ? 'y' : 'n',
+				(flags & MEMPOOL_F_SC_GET) ? 'y' : 'n',
+				(flags & MEMPOOL_F_POOL_CREATED) ? 'y' : 'n',
+				(flags & MEMPOOL_F_NO_IOVA_CONTIG) ? 'y' : 'n');
+			printf("  - Size %u Cache %u element %u\n"
+				"  - header %u trailer %u\n"
+				"  - private data size %u\n",
+				ptr->size,
+				ptr->cache_size,
+				ptr->elt_size,
+				ptr->header_size,
+				ptr->trailer_size,
+				ptr->private_data_size);
+			printf("  - memezone - socket %d\n",
+				ptr->mz->socket_id);
+			printf("  - Count: avail (%u), in use (%u)\n",
+				rte_mempool_avail_count(ptr),
+				rte_mempool_in_use_count(ptr));
+
+			STATS_BDR_STR(50, "");
+			return;
+		}
+	}
+
+	rte_mempool_list_dump(stdout);
+	STATS_BDR_STR(50, "");
 }
 
 static void
 iter_mempool(char *name)
 {
-	printf(" Iter elements in mempool (%s)\n", name);
+	snprintf(bdr_str, MAX_STRING_LEN, " iter - MEMPOOL %"PRIu64,
+		rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	if (name != NULL) {
+		struct rte_mempool *ptr = rte_mempool_lookup(name);
+		if (ptr != NULL) {
+			/* iterate each object */
+			uint32_t ret = rte_mempool_obj_iter(ptr,
+					mempool_itr_obj, NULL);
+			printf("  - iterated %u objects\n", ret);
+			STATS_BDR_STR(50, "");
+			return;
+		}
+	}
+
+	STATS_BDR_STR(50, "");
 }
 
 int
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v6 9/9] doc/procinfo: add information for debug options
  2018-12-03  5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
                     ` (7 preceding siblings ...)
  2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 8/9] app/procinfo: add support for show iter mempool Vipin Varghese
@ 2018-12-03  5:50   ` Vipin Varghese
  8 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-12-03  5:50 UTC (permalink / raw)
  To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara
  Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese

Document update for debug options and information for PMD instances
like port, traffic manager, crypto, mempool and ring instances.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>

---

V6:
 - add ack for v5 - John Mcnamara
 - update entry for mempool iter - Vipin Varghese

V3:
 - update document from dbg to show - Vipin Varghese

V2:
 - update word style for content - Vipin Varghese
---
 doc/guides/tools/proc_info.rst | 35 ++++++++++++++++++++++++++++++----
 1 file changed, 31 insertions(+), 4 deletions(-)

diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst
index d5b5ed6a6..ee0bd99bb 100644
--- a/doc/guides/tools/proc_info.rst
+++ b/doc/guides/tools/proc_info.rst
@@ -6,9 +6,9 @@ dpdk-procinfo Application
 
 The dpdk-procinfo application is a Data Plane Development Kit (DPDK) application
 that runs as a DPDK secondary process and is capable of retrieving port
-statistics, resetting port statistics and printing DPDK memory information.
-This application extends the original functionality that was supported by
-dump_cfg.
+statistics, resetting port statistics and printing DPDK memory information and
+debug information for port|tm|crypto|ring|mempool. This application extends the
+original functionality that was supported by dump_cfg.
 
 Running the Application
 -----------------------
@@ -17,7 +17,8 @@ The application has a number of command line options:
 .. code-block:: console
 
    ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats |
-   --stats-reset | --xstats-reset]
+   --stats-reset | --xstats-reset | --show-port | --show-tm | --show-crypto |
+   --show-mempool[=name] | --show-ring[=name] | --iter-mempool=name]
 
 Parameters
 ~~~~~~~~~~
@@ -41,6 +42,32 @@ If no port mask is specified xstats are reset for all DPDK ports.
 
 **-m**: Print DPDK memory information.
 
+**--show-port**
+The show-port parameter displays port level various configuration and
+mbuf pool information associated to RX queues.
+
+**--show-tm**
+The show-tm parameter displays per port traffic manager settings and
+current configuration. It also display statistics too.
+
+**--show-crypto**
+The show-crypto parameter displays available cryptodev configurations,
+settings and stats per node.
+
+**--show-mempool[=name]**
+The show-mempool parameter display current allocation of all mempool
+with debug information. Specifying the name allows display details for
+specific mempool. For invalid or no mempool name, whole list is dump.
+
+**--show-ring[=name]**
+The show-ring pararmeter display current allocation of all ring with
+debug information. Specifying the name allows to display details for specific
+ring. For invalid or no ring name, whole list is dump.
+
+**--iter-mempool=name**
+The iter-mempool parameter iterates and displays mempool elements specified
+by name. For invalid or no mempool name no elements are displayed.
+
 Limitations
 -----------
 
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v6 1/9] app/procinfo: add usage for new debug
  2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 1/9] app/procinfo: add usage for new debug Vipin Varghese
@ 2018-12-12 14:14     ` Pattan, Reshma
  2018-12-12 15:06       ` Varghese, Vipin
  2018-12-13  5:08     ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
  1 sibling, 1 reply; 68+ messages in thread
From: Pattan, Reshma @ 2018-12-12 14:14 UTC (permalink / raw)
  To: Varghese, Vipin, Ananyev, Konstantin, stephen, dev, Mcnamara, John
  Cc: thomas, Byrne, Stephen1, Patel, Amol



> -----Original Message-----
> From: Varghese, Vipin
> Sent: Monday, December 3, 2018 5:50 AM
> Subject: [PATCH v6 1/9] app/procinfo: add usage for new debug
> 
> @@ -83,7 +87,13 @@ proc_info_usage(const char *prgname)
>  		"  --stats-reset: to reset port statistics\n"
>  		"  --xstats-reset: to reset port extended statistics\n"
>  		"  --collectd-format: to print statistics to STDOUT in expected by
> collectd format\n"
> -		"  --host-id STRING: host id used to identify the system process
> is running on\n",
> +		"  --host-id STRING: host id used to identify the system process
> is running on\n"
> +		"  --show-port to display ports information\n"
> +		"  --show-tm to display traffic manager information for ports\n"
> +		"  --show-crypto to display crypto information\n"
> +		"  --show-ring[=name] to display ring information\n"
> +		"  --show-mempool[=name] to display mempool information\n"
> +		"  --iter-mempool=name to iterate mempool elements\n",
>  		prgname);
>  }
> 

Style related comment, add ' :'  between  command token  and token message, similar to host-id and other .

Is iter-mempool option, only to iterate only or to display the elements also? Then update the help message.

Thanks,
Reshma

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v6 1/9] app/procinfo: add usage for new debug
  2018-12-12 14:14     ` Pattan, Reshma
@ 2018-12-12 15:06       ` Varghese, Vipin
  0 siblings, 0 replies; 68+ messages in thread
From: Varghese, Vipin @ 2018-12-12 15:06 UTC (permalink / raw)
  To: Pattan, Reshma, Ananyev, Konstantin, stephen, dev, Mcnamara, John
  Cc: thomas, Byrne, Stephen1, Patel, Amol

> > @@ -83,7 +87,13 @@ proc_info_usage(const char *prgname)
> >  		"  --stats-reset: to reset port statistics\n"
> >  		"  --xstats-reset: to reset port extended statistics\n"
> >  		"  --collectd-format: to print statistics to STDOUT in expected
> by
> > collectd format\n"
> > -		"  --host-id STRING: host id used to identify the system process
> > is running on\n",
> > +		"  --host-id STRING: host id used to identify the system process
> > is running on\n"
> > +		"  --show-port to display ports information\n"
> > +		"  --show-tm to display traffic manager information for
> ports\n"
> > +		"  --show-crypto to display crypto information\n"
> > +		"  --show-ring[=name] to display ring information\n"
> > +		"  --show-mempool[=name] to display mempool
> information\n"
> > +		"  --iter-mempool=name to iterate mempool elements\n",
> >  		prgname);
> >  }
> >
> 
> Style related comment, add ' :'  between  command token  and token message,
> similar to host-id and other .
> 
> Is iter-mempool option, only to iterate only or to display the elements also?
> Then update the help message.

Thanks for sharing this thought, I am clear with the idea this does not convey the complete required message as explained 'Patch 9/9'. Hence I am ready to reword as ""  --iter-mempool=name: to iterate mempool elements and display content\n "
> 
> Thanks,
> Reshma

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v6 8/9] app/procinfo: add support for show iter mempool
  2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 8/9] app/procinfo: add support for show iter mempool Vipin Varghese
@ 2018-12-12 16:10     ` Pattan, Reshma
  2018-12-13  2:26       ` Varghese, Vipin
  0 siblings, 1 reply; 68+ messages in thread
From: Pattan, Reshma @ 2018-12-12 16:10 UTC (permalink / raw)
  To: Varghese, Vipin, Ananyev, Konstantin, stephen, dev, Mcnamara, John
  Cc: thomas, Byrne, Stephen1, Patel, Amol



> -----Original Message-----
> From: Varghese, Vipin
> Sent: Monday, December 3, 2018 5:50 AM

Since this patch displaying mepool and its elements both , edit heading to suit both? 

( or)

What about having iter mempool support as separate patch after this patch?  That looks more logical as iter-mempool is separate command option now.

Thanks,
Reshma

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v6 8/9] app/procinfo: add support for show iter mempool
  2018-12-12 16:10     ` Pattan, Reshma
@ 2018-12-13  2:26       ` Varghese, Vipin
  0 siblings, 0 replies; 68+ messages in thread
From: Varghese, Vipin @ 2018-12-13  2:26 UTC (permalink / raw)
  To: Pattan, Reshma, Ananyev, Konstantin, stephen, dev, Mcnamara, John
  Cc: thomas, Byrne, Stephen1, Patel, Amol

Hi Reshma,

snipped
> 
> Since this patch displaying mepool and its elements both , edit heading to suit
> both?
> 
> ( or)
> 
> What about having iter mempool support as separate patch after this patch?
> That looks more logical as iter-mempool is separate command option now.


This is good suggestion, but depending upon the function and debug option in my humble opinion it has to go with the current patch series.

> 
> Thanks,
> Reshma

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool
  2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 1/9] app/procinfo: add usage for new debug Vipin Varghese
  2018-12-12 14:14     ` Pattan, Reshma
@ 2018-12-13  5:08     ` Vipin Varghese
  2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 1/9] app/procinfo: add usage for new debug Vipin Varghese
                         ` (10 more replies)
  1 sibling, 11 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-12-13  5:08 UTC (permalink / raw)
  To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara
  Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese

This patch adds new debug functions to existing proc-info tool.

Motivation
==========

DPDK proc-info tool is been widely used as secondary process to collect
stats for any primary process. But these are limited to DPDK NIC ports and
basic memory usage.

Motivation
==========

This patch tries to address the short coming by adding debug for port,
traffic manager, crypto, ring and mempool. With these additional
information in tool will be able to deliver helpful data to debug issues
and performance variance.

Status
======

With the following patch set debug data has been collected from customers
using DPDK instances. Analysing the information helped to suggest the next
debug steps and solutions for fixing the issues.

Next Steps
==========

 - add event dev debug information.
 - enhance iter_mempool for INLINE crypto entries.
 - add debug for libraries like hash and acl.
 - explore debug possibility for ring and list.
 - add links and reference to 'how to guide' for 'debug and troubleshoot'.

Patch set Information
=====================

Patch includes set of 9 patches:
* 0 : to introduce the debug function enhancement for proc-info
* 1 : MACRO and help usage for new functions
* 2 : string compare for new functions
* 3 : invocation for the new prototypes
* 4 : show port
* 5 : show tm
* 6 : show crypto
* 7 : ring element debug
* 8 : mempool element debug
* 9 : iterate mempoool elements

Vipin Varghese (9):
  app/procinfo: add usage for new debug
  app/procinfo: add compare for new options
  app/procinfo: add prototype for debug instances
  app/procinfo: add support for show port
  app/procinfo: add support for show tm
  app/procinfo: add support for show crypto
  app/procinfo: add support for debug ring
  app/procinfo: add support for show iter mempool
  doc/procinfo: add information for debug options

 app/proc-info/main.c           | 681 ++++++++++++++++++++++++++++++++-
 app/proc-info/meson.build      |   2 +-
 doc/guides/tools/proc_info.rst |  35 +-
 3 files changed, 712 insertions(+), 6 deletions(-)

-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v7 1/9] app/procinfo: add usage for new debug
  2018-12-13  5:08     ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
@ 2018-12-13  5:08       ` Vipin Varghese
  2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 2/9] app/procinfo: add compare for new options Vipin Varghese
                         ` (9 subsequent siblings)
  10 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-12-13  5:08 UTC (permalink / raw)
  To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara
  Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese

Update the file with MACRO for stats border, usage text information
and string comparision.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---
V7:
 - update usage text with token ":" - Reshma Pattan
 - reword usage for 'iter-mempool' - Reshma Pattan

V6:
 - add mempool iterate elements option - Vipin Varghese

V3:
 - change the usage details - Vipin Varghese

V2:
 - change word dbg to show - Stephen Hemminger
---
 app/proc-info/main.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index c20effa4f..102778986 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -36,6 +36,10 @@
 
 #define MAX_STRING_LEN 256
 
+#define STATS_BDR_FMT "========================================"
+#define STATS_BDR_STR(w, s) printf("%.*s%s%.*s\n", w, \
+	STATS_BDR_FMT, s, w, STATS_BDR_FMT)
+
 /**< mask of enabled ports */
 static uint32_t enabled_port_mask;
 /**< Enable stats. */
@@ -83,7 +87,13 @@ proc_info_usage(const char *prgname)
 		"  --stats-reset: to reset port statistics\n"
 		"  --xstats-reset: to reset port extended statistics\n"
 		"  --collectd-format: to print statistics to STDOUT in expected by collectd format\n"
-		"  --host-id STRING: host id used to identify the system process is running on\n",
+		"  --host-id STRING: host id used to identify the system process is running on\n"
+		"  --show-port: to display ports information\n"
+		"  --show-tm: to display traffic manager information for ports\n"
+		"  --show-crypto: to display crypto information\n"
+		"  --show-ring[=name]: to display ring information\n"
+		"  --show-mempool[=name]: to display mempool information\n"
+		"  --iter-mempool=name: to iterate mempool elements and display content\n",
 		prgname);
 }
 
@@ -190,6 +200,12 @@ proc_info_parse_args(int argc, char **argv)
 		{"collectd-format", 0, NULL, 0},
 		{"xstats-ids", 1, NULL, 1},
 		{"host-id", 0, NULL, 0},
+		{"show-port", 0, NULL, 0},
+		{"show-tm", 0, NULL, 0},
+		{"show-crypto", 0, NULL, 0},
+		{"show-ring", optional_argument, NULL, 0},
+		{"show-mempool", optional_argument, NULL, 0},
+		{"iter-mempool", required_argument, NULL, 0},
 		{NULL, 0, 0, 0}
 	};
 
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v7 2/9] app/procinfo: add compare for new options
  2018-12-13  5:08     ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
  2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 1/9] app/procinfo: add usage for new debug Vipin Varghese
@ 2018-12-13  5:08       ` Vipin Varghese
  2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 3/9] app/procinfo: add prototype for debug instances Vipin Varghese
                         ` (8 subsequent siblings)
  10 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-12-13  5:08 UTC (permalink / raw)
  To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara
  Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese

Add code for new debug options to compare usage strings and set
enable flag.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

V6:
 - check for iter mempool - Vipin Varghese

V3:
 - variables from debug to show - Vipin Varghese

V2:
 - compare string from dbg to show - Stephen Hemminger
---
 app/proc-info/main.c | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 102778986..41c5bcea5 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -63,6 +63,21 @@ static uint32_t mem_info;
 /**< Enable displaying xstat name. */
 static uint32_t enable_xstats_name;
 static char *xstats_name;
+/**< Enable show port. */
+static uint32_t enable_shw_port;
+/**< Enable show tm. */
+static uint32_t enable_shw_tm;
+/**< Enable show crypto. */
+static uint32_t enable_shw_crypto;
+/**< Enable show ring. */
+static uint32_t enable_shw_ring;
+static char *ring_name;
+/**< Enable show mempool. */
+static uint32_t enable_shw_mempool;
+static char *mempool_name;
+/**< Enable iter mempool. */
+static uint32_t enable_iter_mempool;
+static char *mempool_iter_name;
 
 /**< Enable xstats by ids. */
 #define MAX_NB_XSTATS_IDS 1024
@@ -249,6 +264,29 @@ proc_info_parse_args(int argc, char **argv)
 			else if (!strncmp(long_option[option_index].name, "xstats-reset",
 					MAX_LONG_OPT_SZ))
 				reset_xstats = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-port", MAX_LONG_OPT_SZ))
+				enable_shw_port = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-tm", MAX_LONG_OPT_SZ))
+				enable_shw_tm = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-crypto", MAX_LONG_OPT_SZ))
+				enable_shw_crypto = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-ring", MAX_LONG_OPT_SZ)) {
+				enable_shw_ring = 1;
+				ring_name = optarg;
+			} else if (!strncmp(long_option[option_index].name,
+					"show-mempool", MAX_LONG_OPT_SZ)) {
+				enable_shw_mempool = 1;
+				mempool_name = optarg;
+			} else if (!strncmp(long_option[option_index].name,
+					"iter-mempool", MAX_LONG_OPT_SZ)) {
+				enable_iter_mempool = 1;
+				mempool_iter_name = optarg;
+			}
+
 			break;
 		case 1:
 			/* Print xstat single value given by name*/
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v7 3/9] app/procinfo: add prototype for debug instances
  2018-12-13  5:08     ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
  2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 1/9] app/procinfo: add usage for new debug Vipin Varghese
  2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 2/9] app/procinfo: add compare for new options Vipin Varghese
@ 2018-12-13  5:08       ` Vipin Varghese
  2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 4/9] app/procinfo: add support for show port Vipin Varghese
                         ` (7 subsequent siblings)
  10 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-12-13  5:08 UTC (permalink / raw)
  To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara
  Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese

Add prototype function calls for the show functions.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

V6:
 - add call to iter mempool - Vipin Varghese

V3:
 - update function names from debug to show - Vipin Varghese

V2:
 - removed if else ladder - Vipin Varghese
---
 app/proc-info/main.c | 50 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 41c5bcea5..c4e17668e 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -638,6 +638,42 @@ metrics_display(int port_id)
 	rte_free(names);
 }
 
+static void
+show_port(void)
+{
+	printf(" port\n");
+}
+
+static void
+show_tm(void)
+{
+	printf(" tm\n");
+}
+
+static void
+show_crypto(void)
+{
+	printf(" crypto\n");
+}
+
+static void
+show_ring(char *name)
+{
+	printf(" ring Name (%s)\n", name);
+}
+
+static void
+show_mempool(char *name)
+{
+	printf(" mempool Name (%s)\n", name);
+}
+
+static void
+iter_mempool(char *name)
+{
+	printf(" Iter elements in mempool (%s)\n", name);
+}
+
 int
 main(int argc, char **argv)
 {
@@ -718,6 +754,20 @@ main(int argc, char **argv)
 	if (enable_metrics)
 		metrics_display(RTE_METRICS_GLOBAL);
 
+	/* show information for PMD */
+	if (enable_shw_port)
+		show_port();
+	if (enable_shw_tm)
+		show_tm();
+	if (enable_shw_crypto)
+		show_crypto();
+	if (enable_shw_ring)
+		show_ring(ring_name);
+	if (enable_shw_mempool)
+		show_mempool(mempool_name);
+	if (enable_iter_mempool)
+		iter_mempool(mempool_iter_name);
+
 	ret = rte_eal_cleanup();
 	if (ret)
 		printf("Error from rte_eal_cleanup(), %d\n", ret);
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v7 4/9] app/procinfo: add support for show port
  2018-12-13  5:08     ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
                         ` (2 preceding siblings ...)
  2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 3/9] app/procinfo: add prototype for debug instances Vipin Varghese
@ 2018-12-13  5:08       ` Vipin Varghese
  2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 5/9] app/procinfo: add support for show tm Vipin Varghese
                         ` (6 subsequent siblings)
  10 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-12-13  5:08 UTC (permalink / raw)
  To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara
  Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese

Function show_port is used for displaying the port PMD information under
under primary process. The information shows basic, per queue and security.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

V5:
 - convert 100 to MAX_STRING_LEN - Reshma Pattan
 - RSS made for port - Reshma Pattan
 - update bdr_str to static - Stephen Hemminger
 - remove memset for link, dev_info, queue, stats - Stephen Hemminger

V3:
 - fix meson build - Reshma Pattan
 - change 100 to MAX_STRING_LEN - Reshma Pattan
 - memset to struct elements - Reshma Pattan
 - printf tab space - Reshma Pattan
 - remove 'drop packet information' - Vipin Varghese

V2:
 - redefine code format - Vipin Varghese
---
 app/proc-info/main.c      | 117 +++++++++++++++++++++++++++++++++++++-
 app/proc-info/meson.build |   2 +-
 2 files changed, 117 insertions(+), 2 deletions(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index c4e17668e..94dfdcd7f 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -29,6 +29,9 @@
 #include <rte_branch_prediction.h>
 #include <rte_string_fns.h>
 #include <rte_metrics.h>
+#include <rte_cycles.h>
+#include <rte_security.h>
+#include <rte_cryptodev.h>
 
 /* Maximum long option length for option parsing. */
 #define MAX_LONG_OPT_SZ 64
@@ -84,6 +87,9 @@ static char *mempool_iter_name;
 static uint32_t nb_xstats_ids;
 static uint64_t xstats_ids[MAX_NB_XSTATS_IDS];
 
+/* border variable to hold for show */
+static char bdr_str[MAX_STRING_LEN];
+
 /**< display usage */
 static void
 proc_info_usage(const char *prgname)
@@ -641,7 +647,116 @@ metrics_display(int port_id)
 static void
 show_port(void)
 {
-	printf(" port\n");
+	uint16_t i = 0;
+	int ret = 0, j, k;
+
+	snprintf(bdr_str, MAX_STRING_LEN, " show - Port PMD %"PRIu64,
+			rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	RTE_ETH_FOREACH_DEV(i) {
+		uint16_t mtu = 0;
+		struct rte_eth_link link;
+		struct rte_eth_dev_info dev_info;
+		struct rte_eth_rxq_info queue_info;
+		struct rte_eth_stats stats;
+		struct rte_eth_rss_conf rss_conf;
+
+		memset(&rss_conf, 0, sizeof(rss_conf));
+
+		snprintf(bdr_str, MAX_STRING_LEN, " Port (%u)", i);
+		STATS_BDR_STR(5, bdr_str);
+		printf("  - generic config\n");
+
+		printf("\t  -- Socket %d\n", rte_eth_dev_socket_id(i));
+		rte_eth_link_get(i, &link);
+		printf("\t  -- link speed %d duplex %d,"
+			" auto neg %d status %d\n",
+			link.link_speed,
+			link.link_duplex,
+			link.link_autoneg,
+			link.link_status);
+		printf("\t  -- promiscuous (%d)\n",
+			rte_eth_promiscuous_get(i));
+		ret = rte_eth_dev_get_mtu(i, &mtu);
+		if (ret == 0)
+			printf("\t  -- mtu (%d)\n", mtu);
+
+		printf("  - queue\n");
+
+		rte_eth_dev_info_get(i, &dev_info);
+
+		for (j = 0; j < dev_info.nb_rx_queues; j++) {
+			ret = rte_eth_rx_queue_info_get(i, j, &queue_info);
+			if (ret == 0) {
+				printf("\t  -- queue %d rx scatter %d"
+					" descriptors %d offloads 0x%"PRIx64
+					" mempool socket %d\n",
+					j,
+					queue_info.scattered_rx,
+					queue_info.nb_desc,
+					queue_info.conf.offloads,
+					queue_info.mp->socket_id);
+
+				ret = rte_eth_stats_get(i, &stats);
+				if (ret == 0) {
+					printf("\t  -- packet input %"PRIu64
+						" output %"PRIu64""
+						" error %"PRIu64"\n",
+						stats.q_ipackets[j],
+						stats.q_opackets[j],
+						stats.q_errors[j]);
+				}
+			}
+		}
+
+		ret = rte_eth_dev_rss_hash_conf_get(i, &rss_conf);
+		if (ret == 0) {
+			if (rss_conf.rss_key) {
+				printf("\t  -- RSS len %u key (hex):",
+					rss_conf.rss_key_len);
+				for (k = 0; k < rss_conf.rss_key_len; k++)
+					printf(" %x", rss_conf.rss_key[k]);
+				printf("\t  -- hf 0x%"PRIx64"\n",
+					rss_conf.rss_hf);
+			}
+		}
+
+		ret = rte_eth_stats_get(i, &stats);
+		if (ret == 0) {
+			printf("\t  -- packet input %"PRIu64
+				" output %"PRIu64"\n",
+				stats.ipackets,
+				stats.opackets);
+			printf("\t  -- packet error input %"PRIu64
+				" output %"PRIu64"\n",
+				stats.ierrors,
+				stats.oerrors);
+			printf("\t  -- RX no mbuf %"PRIu64"\n",
+				stats.rx_nombuf);
+		}
+
+		printf("  - cyrpto context\n");
+		void *ptr_ctx = rte_eth_dev_get_sec_ctx(i);
+		printf("\t  -- security context - %p\n", ptr_ctx);
+
+		if (ptr_ctx) {
+			printf("\t  -- size %u\n",
+				rte_security_session_get_size(ptr_ctx));
+			const struct rte_security_capability *ptr_sec_cap =
+				rte_security_capabilities_get(ptr_ctx);
+			if (ptr_sec_cap) {
+				printf("\t  -- action (0x%x), protocol (0x%x),"
+					" offload flags (0x%x)\n",
+					ptr_sec_cap->action,
+					ptr_sec_cap->protocol,
+					ptr_sec_cap->ol_flags);
+				printf("\t  -- capabilities - oper type %x\n",
+					ptr_sec_cap->crypto_capabilities->op);
+			}
+		}
+	}
+	STATS_BDR_STR(50, "");
 }
 
 static void
diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build
index a52b2ee4a..866b390d6 100644
--- a/app/proc-info/meson.build
+++ b/app/proc-info/meson.build
@@ -3,4 +3,4 @@
 
 sources = files('main.c')
 allow_experimental_apis = true
-deps += ['ethdev', 'metrics']
+deps += ['ethdev', 'metrics', 'security']
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v7 5/9] app/procinfo: add support for show tm
  2018-12-13  5:08     ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
                         ` (3 preceding siblings ...)
  2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 4/9] app/procinfo: add support for show port Vipin Varghese
@ 2018-12-13  5:08       ` Vipin Varghese
  2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 6/9] app/procinfo: add support for show crypto Vipin Varghese
                         ` (5 subsequent siblings)
  10 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-12-13  5:08 UTC (permalink / raw)
  To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara
  Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese

Function show_tm is used for displaying the tm PMD under the
primary process. This covers basic and per node|level details with
stats.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

V6:
 - replace or with logical or - Reshma Pathan & Konstantin Ananyev

V3:
 - memset for struct elements - Vipin Varghese
 - code cleanup for TM - Vipin Varghese
 - fetch for leaf nodes if node exist - Jasvinder Singh
 - display MARCO to function - Reshma Pathan & Stephen Hemminger

V2:
 - MACRO for display node|level - cap - Vipin Varghese
---
 app/proc-info/main.c | 276 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 275 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 94dfdcd7f..6f2b757cf 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -32,6 +32,7 @@
 #include <rte_cycles.h>
 #include <rte_security.h>
 #include <rte_cryptodev.h>
+#include <rte_tm.h>
 
 /* Maximum long option length for option parsing. */
 #define MAX_LONG_OPT_SZ 64
@@ -759,10 +760,283 @@ show_port(void)
 	STATS_BDR_STR(50, "");
 }
 
+static void
+display_nodecap_info(int is_leaf, struct rte_tm_node_capabilities *cap)
+{
+	if (cap == NULL)
+		return;
+
+	if (!is_leaf) {
+		printf("\t  -- nonleaf sched max:\n"
+			"\t\t  + children (%u)\n"
+			"\t\t  + sp priorities (%u)\n"
+			"\t\t  + wfq children per group (%u)\n"
+			"\t\t  + wfq groups (%u)\n"
+			"\t\t  + wfq weight (%u)\n",
+			cap->nonleaf.sched_n_children_max,
+			cap->nonleaf.sched_sp_n_priorities_max,
+			cap->nonleaf.sched_wfq_n_children_per_group_max,
+			cap->nonleaf.sched_wfq_n_groups_max,
+			cap->nonleaf.sched_wfq_weight_max);
+	} else {
+		printf("\t  -- leaf cman support:\n"
+			"\t\t  + wred pkt mode (%d)\n"
+			"\t\t  + wred byte mode (%d)\n"
+			"\t\t  + head drop (%d)\n"
+			"\t\t  + wred context private (%d)\n"
+			"\t\t  + wred context shared (%u)\n",
+			cap->leaf.cman_wred_packet_mode_supported,
+			cap->leaf.cman_wred_byte_mode_supported,
+			cap->leaf.cman_head_drop_supported,
+			cap->leaf.cman_wred_context_private_supported,
+			cap->leaf.cman_wred_context_shared_n_max);
+	}
+}
+
+static void
+display_levelcap_info(int is_leaf, struct rte_tm_level_capabilities *cap)
+{
+	if (cap == NULL)
+		return;
+
+	if (!is_leaf) {
+		printf("\t  -- shaper private: (%d) dual rate (%d)\n",
+			cap->nonleaf.shaper_private_supported,
+			cap->nonleaf.shaper_private_dual_rate_supported);
+		printf("\t  -- shaper share: (%u)\n",
+			cap->nonleaf.shaper_shared_n_max);
+		printf("\t  -- non leaf sched MAX:\n"
+			"\t\t  + children (%u)\n"
+			"\t\t  + sp (%u)\n"
+			"\t\t  + wfq children per group (%u)\n"
+			"\t\t  + wfq groups (%u)\n"
+			"\t\t  + wfq weight (%u)\n",
+			cap->nonleaf.sched_n_children_max,
+			cap->nonleaf.sched_sp_n_priorities_max,
+			cap->nonleaf.sched_wfq_n_children_per_group_max,
+			cap->nonleaf.sched_wfq_n_groups_max,
+			cap->nonleaf.sched_wfq_weight_max);
+	} else {
+		printf("\t  -- shaper private: (%d) dual rate (%d)\n",
+			cap->leaf.shaper_private_supported,
+			cap->leaf.shaper_private_dual_rate_supported);
+		printf("\t  -- shaper share: (%u)\n",
+			cap->leaf.shaper_shared_n_max);
+		printf("  -- leaf cman support:\n"
+			"\t\t  + wred pkt mode (%d)\n"
+			"\t\t  + wred byte mode (%d)\n"
+			"\t\t  + head drop (%d)\n"
+			"\t\t  + wred context private (%d)\n"
+			"\t\t  + wred context shared (%u)\n",
+			cap->leaf.cman_wred_packet_mode_supported,
+			cap->leaf.cman_wred_byte_mode_supported,
+			cap->leaf.cman_head_drop_supported,
+			cap->leaf.cman_wred_context_private_supported,
+			cap->leaf.cman_wred_context_shared_n_max);
+	}
+}
+
 static void
 show_tm(void)
 {
-	printf(" tm\n");
+	int ret = 0, check_for_leaf = 0, is_leaf = 0;
+	unsigned int j, k;
+	uint16_t i = 0;
+
+	snprintf(bdr_str, MAX_STRING_LEN, " show - TM PMD %"PRIu64,
+			rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	RTE_ETH_FOREACH_DEV(i) {
+		struct rte_eth_dev_info dev_info;
+		struct rte_tm_capabilities cap;
+		struct rte_tm_error error;
+		struct rte_tm_node_capabilities capnode;
+		struct rte_tm_level_capabilities caplevel;
+		uint32_t n_leaf_nodes = 0;
+
+		memset(&dev_info, 0, sizeof(dev_info));
+		memset(&cap, 0, sizeof(cap));
+		memset(&error, 0, sizeof(error));
+
+		rte_eth_dev_info_get(i, &dev_info);
+		printf("  - Generic for port (%u)\n"
+			"\t  -- driver name %s\n"
+			"\t  -- max vf (%u)\n"
+			"\t  -- max tx queues (%u)\n"
+			"\t  -- number of tx queues (%u)\n",
+			i,
+			dev_info.driver_name,
+			dev_info.max_vfs,
+			dev_info.max_tx_queues,
+			dev_info.nb_tx_queues);
+
+		ret = rte_tm_capabilities_get(i, &cap, &error);
+		if (ret)
+			continue;
+
+		printf("  - MAX: nodes (%u) levels (%u) children (%u)\n",
+			cap.n_nodes_max,
+			cap.n_levels_max,
+			cap.sched_n_children_max);
+
+		printf("  - identical nodes: non leaf (%d) leaf (%d)\n",
+			cap.non_leaf_nodes_identical,
+			cap.leaf_nodes_identical);
+
+		printf("  - Shaper MAX:\n"
+			"\t  -- total (%u)\n"
+			"\t  -- private (%u) private dual (%d)\n"
+			"\t  -- shared (%u) shared dual (%u)\n",
+			cap.shaper_n_max,
+			cap.shaper_private_n_max,
+			cap.shaper_private_dual_rate_n_max,
+			cap.shaper_shared_n_max,
+			cap.shaper_shared_dual_rate_n_max);
+
+		printf("  - mark support:\n");
+		printf("\t  -- vlan dei: GREEN (%d) YELLOW (%d) RED (%d)\n",
+			cap.mark_vlan_dei_supported[RTE_TM_GREEN],
+			cap.mark_vlan_dei_supported[RTE_TM_YELLOW],
+			cap.mark_vlan_dei_supported[RTE_TM_RED]);
+		printf("\t  -- ip ecn tcp: GREEN (%d) YELLOW (%d) RED (%d)\n",
+			cap.mark_ip_ecn_tcp_supported[RTE_TM_GREEN],
+			cap.mark_ip_ecn_tcp_supported[RTE_TM_YELLOW],
+			cap.mark_ip_ecn_tcp_supported[RTE_TM_RED]);
+		printf("\t  -- ip ecn sctp: GREEN (%d) YELLOW (%d) RED (%d)\n",
+			cap.mark_ip_ecn_sctp_supported[RTE_TM_GREEN],
+			cap.mark_ip_ecn_sctp_supported[RTE_TM_YELLOW],
+			cap.mark_ip_ecn_sctp_supported[RTE_TM_RED]);
+		printf("\t  -- ip dscp: GREEN (%d) YELLOW (%d) RED (%d)\n",
+			cap.mark_ip_dscp_supported[RTE_TM_GREEN],
+			cap.mark_ip_dscp_supported[RTE_TM_YELLOW],
+			cap.mark_ip_dscp_supported[RTE_TM_RED]);
+
+		printf("  - mask stats (0x%"PRIx64")"
+			" dynamic update (0x%"PRIx64")\n",
+			cap.stats_mask,
+			cap.dynamic_update_mask);
+
+		printf("  - sched MAX:\n"
+			"\t  -- total (%u)\n"
+			"\t  -- sp levels (%u)\n"
+			"\t  -- wfq children per group (%u)\n"
+			"\t  -- wfq groups (%u)\n"
+			"\t  -- wfq weight (%u)\n",
+			cap.sched_sp_n_priorities_max,
+			cap.sched_sp_n_priorities_max,
+			cap.sched_wfq_n_children_per_group_max,
+			cap.sched_wfq_n_groups_max,
+			cap.sched_wfq_weight_max);
+
+		printf("  - CMAN support:\n"
+			"\t  -- WRED mode: pkt (%d) byte (%d)\n"
+			"\t  -- head drop (%d)\n",
+			cap.cman_wred_packet_mode_supported,
+			cap.cman_wred_byte_mode_supported,
+			cap.cman_head_drop_supported);
+		printf("\t  -- MAX WRED CONTEXT:"
+			" total (%u) private (%u) shared (%u)\n",
+			cap.cman_wred_context_n_max,
+			cap.cman_wred_context_private_n_max,
+			cap.cman_wred_context_shared_n_max);
+
+		for (j = 0; j < cap.n_nodes_max; j++) {
+			memset(&capnode, 0, sizeof(capnode));
+			ret = rte_tm_node_capabilities_get(i, j,
+				&capnode, &error);
+			if (ret)
+				continue;
+
+			check_for_leaf = 1;
+
+			printf("  NODE %u\n", j);
+			printf("\t  - shaper private: (%d) dual rate (%d)\n",
+				capnode.shaper_private_supported,
+				capnode.shaper_private_dual_rate_supported);
+			printf("\t  - shaper shared max: (%u)\n",
+				capnode.shaper_shared_n_max);
+			printf("\t  - stats mask %"PRIx64"\n",
+				capnode.stats_mask);
+
+			ret = rte_tm_node_type_get(i, j, &is_leaf, &error);
+			if (ret)
+				continue;
+
+			display_nodecap_info(is_leaf, &capnode);
+		}
+
+		for (j = 0; j < cap.n_levels_max; j++) {
+			memset(&caplevel, 0, sizeof(caplevel));
+			ret = rte_tm_level_capabilities_get(i, j,
+				&caplevel, &error);
+			if (ret)
+				continue;
+
+			printf("  - Level %u\n", j);
+			printf("\t  -- node MAX: %u non leaf %u leaf %u\n",
+				caplevel.n_nodes_max,
+				caplevel.n_nodes_nonleaf_max,
+				caplevel.n_nodes_leaf_max);
+			printf("\t  -- indetical: non leaf %u leaf %u\n",
+				caplevel.non_leaf_nodes_identical,
+				caplevel.leaf_nodes_identical);
+
+			for (k = 0; k < caplevel.n_nodes_max; k++) {
+				ret = rte_tm_node_type_get(i, k,
+					&is_leaf, &error);
+				if (ret)
+					continue;
+
+				display_levelcap_info(is_leaf, &caplevel);
+			}
+		}
+
+		if (check_for_leaf) {
+			ret = rte_tm_get_number_of_leaf_nodes(i,
+					&n_leaf_nodes, &error);
+			if (ret == 0)
+				printf("  - leaf nodes (%u)\n", n_leaf_nodes);
+		}
+
+		for (j = 0; j < n_leaf_nodes; j++) {
+			struct rte_tm_node_stats stats;
+			memset(&stats, 0, sizeof(stats));
+
+			ret = rte_tm_node_stats_read(i, j,
+				&stats, &cap.stats_mask, 0, &error);
+			if (ret)
+				continue;
+
+			printf("  - STATS for node (%u)\n", j);
+			printf("  -- pkts (%"PRIu64") bytes (%"PRIu64")\n",
+				stats.n_pkts, stats.n_bytes);
+
+			ret = rte_tm_node_type_get(i, j, &is_leaf, &error);
+			if (ret || (!is_leaf))
+				continue;
+
+			printf("  -- leaf queued:"
+				" pkts (%"PRIu64") bytes (%"PRIu64")\n",
+				stats.leaf.n_pkts_queued,
+				stats.leaf.n_bytes_queued);
+			printf("  - dropped:\n"
+				"\t  -- GREEN:"
+				" pkts (%"PRIu64") bytes (%"PRIu64")\n"
+				"\t  -- YELLOW:"
+				" pkts (%"PRIu64") bytes (%"PRIu64")\n"
+				"\t  -- RED:"
+				" pkts (%"PRIu64") bytes (%"PRIu64")\n",
+				stats.leaf.n_pkts_dropped[RTE_TM_GREEN],
+				stats.leaf.n_bytes_dropped[RTE_TM_GREEN],
+				stats.leaf.n_pkts_dropped[RTE_TM_YELLOW],
+				stats.leaf.n_bytes_dropped[RTE_TM_YELLOW],
+				stats.leaf.n_pkts_dropped[RTE_TM_RED],
+				stats.leaf.n_bytes_dropped[RTE_TM_RED]);
+		}
+	}
+
+	STATS_BDR_STR(50, "");
 }
 
 static void
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v7 6/9] app/procinfo: add support for show crypto
  2018-12-13  5:08     ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
                         ` (4 preceding siblings ...)
  2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 5/9] app/procinfo: add support for show tm Vipin Varghese
@ 2018-12-13  5:08       ` Vipin Varghese
  2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 7/9] app/procinfo: add support for debug ring Vipin Varghese
                         ` (4 subsequent siblings)
  10 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-12-13  5:08 UTC (permalink / raw)
  To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara
  Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese

Function show_crypto is used for displaying the crypto PMD under
the primary process.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

v4:
 - add space to compare - Vipin Varghese

V3:
 - replace MACRO to function - Reshma Pathan & Stephen Hemminger
 - add memset for struct elements - Reshma Pathan
 - change display formating of flags - Vipin Varghese
 - use MACRO for string - Vipin Varghese
---
 app/proc-info/main.c | 80 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 79 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 6f2b757cf..626d44f71 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -1039,10 +1039,88 @@ show_tm(void)
 	STATS_BDR_STR(50, "");
 }
 
+static void
+display_crypto_feature_info(uint64_t x)
+{
+	if (x == 0)
+		return;
+
+	printf("\t  -- feature flags\n");
+	printf("\t\t  + symmetric (%c), asymmetric (%c)\n"
+		"\t\t  + symmetric operation chaining (%c)\n",
+		(x & RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING) ? 'y' : 'n');
+	printf("\t\t  + CPU: SSE (%c), AVX (%c), AVX2 (%c), AVX512 (%c)\n",
+		(x & RTE_CRYPTODEV_FF_CPU_SSE) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_CPU_AVX) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_CPU_AVX2) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_CPU_AVX512) ? 'y' : 'n');
+	printf("\t\t  + AESNI: CPU (%c), HW (%c)\n",
+		(x & RTE_CRYPTODEV_FF_CPU_AESNI) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_HW_ACCELERATED) ? 'y' : 'n');
+	printf("\t\t  + INLINE (%c)\n",
+		(x & RTE_CRYPTODEV_FF_SECURITY) ? 'y' : 'n');
+	printf("\t\t  + ARM: NEON (%c), CE (%c)\n",
+		(x & RTE_CRYPTODEV_FF_CPU_NEON) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_CPU_ARM_CE) ? 'y' : 'n');
+	printf("\t  -- buffer offload\n");
+	printf("\t\t  + IN_PLACE_SGL (%c)\n",
+		(x & RTE_CRYPTODEV_FF_IN_PLACE_SGL) ? 'y' : 'n');
+	printf("\t\t  + OOP_SGL_IN_SGL_OUT (%c)\n",
+		(x & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT) ? 'y' : 'n');
+	printf("\t\t  + OOP_SGL_IN_LB_OUT (%c)\n",
+		(x & RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT) ? 'y' : 'n');
+	printf("\t\t  + OOP_LB_IN_SGL_OUT (%c)\n",
+		(x & RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT) ? 'y' : 'n');
+	printf("\t\t  + OOP_LB_IN_LB_OUT (%c)\n",
+		(x & RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT) ? 'y' : 'n');
+}
+
 static void
 show_crypto(void)
 {
-	printf(" crypto\n");
+	uint8_t crypto_dev_count = rte_cryptodev_count(), i;
+
+	snprintf(bdr_str, MAX_STRING_LEN, " show - CRYPTO PMD %"PRIu64,
+		rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	for (i = 0; i < crypto_dev_count; i++) {
+		struct rte_cryptodev_info dev_info;
+		struct rte_cryptodev_stats stats;
+
+		memset(&dev_info, 0, sizeof(dev_info));
+		rte_cryptodev_info_get(i, &dev_info);
+
+		printf("  - device (%u)\n", i);
+		printf("\t  -- name (%s)\n"
+			"\t  -- driver (%s)\n"
+			"\t  -- id (%u) on socket (%d)\n"
+			"\t  -- queue pairs (%d)\n",
+			rte_cryptodev_name_get(i),
+			dev_info.driver_name,
+			dev_info.driver_id,
+			dev_info.device->numa_node,
+			rte_cryptodev_queue_pair_count(i));
+
+		display_crypto_feature_info(dev_info.feature_flags);
+
+		printf("\t  -- stats\n");
+		memset(&stats, 0, sizeof(0));
+		if (rte_cryptodev_stats_get(i, &stats) == 0) {
+			printf("\t\t  + enqueue count (%"PRIu64")"
+				" error (%"PRIu64")\n",
+				stats.enqueued_count,
+				stats.enqueue_err_count);
+			printf("\t\t  + dequeue count (%"PRIu64")"
+				" error (%"PRIu64")\n",
+				stats.dequeued_count,
+				stats.dequeue_err_count);
+		}
+	}
+
+	STATS_BDR_STR(50, "");
 }
 
 static void
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v7 7/9] app/procinfo: add support for debug ring
  2018-12-13  5:08     ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
                         ` (5 preceding siblings ...)
  2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 6/9] app/procinfo: add support for show crypto Vipin Varghese
@ 2018-12-13  5:08       ` Vipin Varghese
  2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 8/9] app/procinfo: add support for show iter mempool Vipin Varghese
                         ` (3 subsequent siblings)
  10 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-12-13  5:08 UTC (permalink / raw)
  To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara
  Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese

Function show_ring is used for displaying the RING of the
primary process.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

V3:
 - replace space to tab in printf - Reshma Pathan
 - change ring display information - Vipin Varghese
---
 app/proc-info/main.c | 34 +++++++++++++++++++++++++++++++++-
 1 file changed, 33 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 626d44f71..d9677959c 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -1126,7 +1126,39 @@ show_crypto(void)
 static void
 show_ring(char *name)
 {
-	printf(" ring Name (%s)\n", name);
+	snprintf(bdr_str, MAX_STRING_LEN, " show - RING %"PRIu64,
+		rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	if (name != NULL) {
+		struct rte_ring *ptr = rte_ring_lookup(name);
+		if (ptr != NULL) {
+			printf("  - Name (%s) on socket (%d)\n"
+				"  - flags:\n"
+				"\t  -- Single Producer Enqueue (%u)\n"
+				"\t  -- Single Consmer Dequeue (%u)\n",
+				ptr->name,
+				ptr->memzone->socket_id,
+				ptr->flags & RING_F_SP_ENQ,
+				ptr->flags & RING_F_SC_DEQ);
+			printf("  - size (%u) mask (0x%x) capacity (%u)\n",
+				ptr->size,
+				ptr->mask,
+				ptr->capacity);
+			printf("  - count (%u) free count (%u)\n",
+				rte_ring_count(ptr),
+				rte_ring_free_count(ptr));
+			printf("  - full (%d) empty (%d)\n",
+				rte_ring_full(ptr),
+				rte_ring_empty(ptr));
+
+			STATS_BDR_STR(50, "");
+			return;
+		}
+	}
+
+	rte_ring_list_dump(stdout);
+	STATS_BDR_STR(50, "");
 }
 
 static void
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v7 8/9] app/procinfo: add support for show iter mempool
  2018-12-13  5:08     ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
                         ` (6 preceding siblings ...)
  2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 7/9] app/procinfo: add support for debug ring Vipin Varghese
@ 2018-12-13  5:08       ` Vipin Varghese
  2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 9/9] doc/procinfo: add information for debug options Vipin Varghese
                         ` (2 subsequent siblings)
  10 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-12-13  5:08 UTC (permalink / raw)
  To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara
  Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese

Function show_mempool is used for displaying valid MEMPOOL.
Function iter_mempool is used for iterating mempool elements for
a mempool for max of 256 bytes.

In case of show_mempool for invalid name, whole list is dump.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---

V6:
 - split iter mempool - Vipin Varghese

V5:
 - update ret to uint32_t - Reshma Pattan

v4:
 - add spacing for flag compare - Vipin Varghese

V3:
 - add avail and in use - Vipin Varghese
 - add flag split - Vipin Varghese
---
 app/proc-info/main.c | 80 ++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 78 insertions(+), 2 deletions(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index d9677959c..6dfd01d6e 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -33,6 +33,7 @@
 #include <rte_security.h>
 #include <rte_cryptodev.h>
 #include <rte_tm.h>
+#include <rte_hexdump.h>
 
 /* Maximum long option length for option parsing. */
 #define MAX_LONG_OPT_SZ 64
@@ -1161,16 +1162,91 @@ show_ring(char *name)
 	STATS_BDR_STR(50, "");
 }
 
+static void
+mempool_itr_obj(struct rte_mempool *mp,
+		void *opaque, void *obj,
+		unsigned int obj_idx)
+{
+	printf("  - obj_idx %u opaque %p obj %p\n",
+		obj_idx, opaque, obj);
+
+	if (obj)
+		rte_hexdump(stdout, " Obj Content",
+			obj, (mp->elt_size > 256)?256:mp->elt_size);
+}
+
 static void
 show_mempool(char *name)
 {
-	printf(" mempool Name (%s)\n", name);
+	uint64_t flags = 0;
+
+	snprintf(bdr_str, MAX_STRING_LEN, " show - MEMPOOL %"PRIu64,
+		rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	if (name != NULL) {
+		struct rte_mempool *ptr = rte_mempool_lookup(name);
+		if (ptr != NULL) {
+			flags = ptr->flags;
+			printf("  - Name: %s on socket %d\n"
+				"  - flags:\n"
+				"\t  -- No spread (%c)\n"
+				"\t  -- No cache align (%c)\n"
+				"\t  -- SP put (%c), SC get (%c)\n"
+				"\t  -- Pool created (%c)\n"
+				"\t  -- No IOVA config (%c)\n",
+				ptr->name,
+				ptr->socket_id,
+				(flags & MEMPOOL_F_NO_SPREAD) ? 'y' : 'n',
+				(flags & MEMPOOL_F_NO_CACHE_ALIGN) ? 'y' : 'n',
+				(flags & MEMPOOL_F_SP_PUT) ? 'y' : 'n',
+				(flags & MEMPOOL_F_SC_GET) ? 'y' : 'n',
+				(flags & MEMPOOL_F_POOL_CREATED) ? 'y' : 'n',
+				(flags & MEMPOOL_F_NO_IOVA_CONTIG) ? 'y' : 'n');
+			printf("  - Size %u Cache %u element %u\n"
+				"  - header %u trailer %u\n"
+				"  - private data size %u\n",
+				ptr->size,
+				ptr->cache_size,
+				ptr->elt_size,
+				ptr->header_size,
+				ptr->trailer_size,
+				ptr->private_data_size);
+			printf("  - memezone - socket %d\n",
+				ptr->mz->socket_id);
+			printf("  - Count: avail (%u), in use (%u)\n",
+				rte_mempool_avail_count(ptr),
+				rte_mempool_in_use_count(ptr));
+
+			STATS_BDR_STR(50, "");
+			return;
+		}
+	}
+
+	rte_mempool_list_dump(stdout);
+	STATS_BDR_STR(50, "");
 }
 
 static void
 iter_mempool(char *name)
 {
-	printf(" Iter elements in mempool (%s)\n", name);
+	snprintf(bdr_str, MAX_STRING_LEN, " iter - MEMPOOL %"PRIu64,
+		rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	if (name != NULL) {
+		struct rte_mempool *ptr = rte_mempool_lookup(name);
+		if (ptr != NULL) {
+			/* iterate each object */
+			uint32_t ret = rte_mempool_obj_iter(ptr,
+					mempool_itr_obj, NULL);
+			printf("  - iterated %u objects\n", ret);
+			STATS_BDR_STR(50, "");
+			return;
+		}
+	}
+
+	STATS_BDR_STR(50, "");
 }
 
 int
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v7 9/9] doc/procinfo: add information for debug options
  2018-12-13  5:08     ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
                         ` (7 preceding siblings ...)
  2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 8/9] app/procinfo: add support for show iter mempool Vipin Varghese
@ 2018-12-13  5:08       ` Vipin Varghese
  2018-12-13 14:42       ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Pattan, Reshma
  2019-01-07 15:38       ` [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance " Vipin Varghese
  10 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2018-12-13  5:08 UTC (permalink / raw)
  To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara
  Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese

Document update for debug options and information for PMD instances
like port, traffic manager, crypto, mempool and ring instances.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>

---

V6:
 - add ack for v5 - John Mcnamara
 - update entry for mempool iter - Vipin Varghese

V3:
 - update document from dbg to show - Vipin Varghese

V2:
 - update word style for content - Vipin Varghese
---
 doc/guides/tools/proc_info.rst | 35 ++++++++++++++++++++++++++++++----
 1 file changed, 31 insertions(+), 4 deletions(-)

diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst
index d5b5ed6a6..ee0bd99bb 100644
--- a/doc/guides/tools/proc_info.rst
+++ b/doc/guides/tools/proc_info.rst
@@ -6,9 +6,9 @@ dpdk-procinfo Application
 
 The dpdk-procinfo application is a Data Plane Development Kit (DPDK) application
 that runs as a DPDK secondary process and is capable of retrieving port
-statistics, resetting port statistics and printing DPDK memory information.
-This application extends the original functionality that was supported by
-dump_cfg.
+statistics, resetting port statistics and printing DPDK memory information and
+debug information for port|tm|crypto|ring|mempool. This application extends the
+original functionality that was supported by dump_cfg.
 
 Running the Application
 -----------------------
@@ -17,7 +17,8 @@ The application has a number of command line options:
 .. code-block:: console
 
    ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats |
-   --stats-reset | --xstats-reset]
+   --stats-reset | --xstats-reset | --show-port | --show-tm | --show-crypto |
+   --show-mempool[=name] | --show-ring[=name] | --iter-mempool=name]
 
 Parameters
 ~~~~~~~~~~
@@ -41,6 +42,32 @@ If no port mask is specified xstats are reset for all DPDK ports.
 
 **-m**: Print DPDK memory information.
 
+**--show-port**
+The show-port parameter displays port level various configuration and
+mbuf pool information associated to RX queues.
+
+**--show-tm**
+The show-tm parameter displays per port traffic manager settings and
+current configuration. It also display statistics too.
+
+**--show-crypto**
+The show-crypto parameter displays available cryptodev configurations,
+settings and stats per node.
+
+**--show-mempool[=name]**
+The show-mempool parameter display current allocation of all mempool
+with debug information. Specifying the name allows display details for
+specific mempool. For invalid or no mempool name, whole list is dump.
+
+**--show-ring[=name]**
+The show-ring pararmeter display current allocation of all ring with
+debug information. Specifying the name allows to display details for specific
+ring. For invalid or no ring name, whole list is dump.
+
+**--iter-mempool=name**
+The iter-mempool parameter iterates and displays mempool elements specified
+by name. For invalid or no mempool name no elements are displayed.
+
 Limitations
 -----------
 
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool
  2018-12-13  5:08     ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
                         ` (8 preceding siblings ...)
  2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 9/9] doc/procinfo: add information for debug options Vipin Varghese
@ 2018-12-13 14:42       ` Pattan, Reshma
  2018-12-13 16:21         ` Varghese, Vipin
  2019-01-07 15:38       ` [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance " Vipin Varghese
  10 siblings, 1 reply; 68+ messages in thread
From: Pattan, Reshma @ 2018-12-13 14:42 UTC (permalink / raw)
  To: Varghese, Vipin, Ananyev, Konstantin, stephen, dev, Mcnamara, John
  Cc: thomas, Byrne, Stephen1, Patel, Amol

Hi

> -----Original Message-----
> From: Varghese, Vipin
> Sent: Thursday, December 13, 2018 5:09 AM
> To: Ananyev, Konstantin <konstantin.ananyev@intel.com>;
> stephen@networkplumber.org; Pattan, Reshma <reshma.pattan@intel.com>;
> dev@dpdk.org; Mcnamara, John <john.mcnamara@intel.com>
> Cc: thomas@monjalon.net; Byrne, Stephen1 <stephen1.byrne@intel.com>;
> Patel, Amol <amol.patel@intel.com>; Varghese, Vipin
> <vipin.varghese@intel.com>
> Subject: [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool
> 
> This patch adds new debug functions to existing proc-info tool.
> 
> Motivation
> ==========
> 
> DPDK proc-info tool is been widely used as secondary process to collect stats for
> any primary process. But these are limited to DPDK NIC ports and basic memory
> usage.
> 
> Motivation
> ==========
> 
> This patch tries to address the short coming by adding debug for port, traffic
> manager, crypto, ring and mempool. With these additional information in tool
> will be able to deliver helpful data to debug issues and performance variance.
> 
> Status
> ======
> 
> With the following patch set debug data has been collected from customers
> using DPDK instances. Analysing the information helped to suggest the next
> debug steps and solutions for fixing the issues.
> 
> Next Steps
> ==========
> 
>  - add event dev debug information.
>  - enhance iter_mempool for INLINE crypto entries.
>  - add debug for libraries like hash and acl.
>  - explore debug possibility for ring and list.
>  - add links and reference to 'how to guide' for 'debug and troubleshoot'.
> 
> Patch set Information
> =====================
> 
> Patch includes set of 9 patches:
> * 0 : to introduce the debug function enhancement for proc-info
> * 1 : MACRO and help usage for new functions
> * 2 : string compare for new functions
> * 3 : invocation for the new prototypes
> * 4 : show port
> * 5 : show tm
> * 6 : show crypto
> * 7 : ring element debug
> * 8 : mempool element debug
> * 9 : iterate mempoool elements
> 

Small nits
9th patch in this set is doc. So above info need to be corrected.  
if you are addressing my earlier comment of separating out mempool element iteration changes in to separate new patch 9/10 .Please keep my ack in next version

Reviewed-by: Reshma Pattan <reshma.pattan@intel.com>
Acked-by:  Reshma Pattan <reshma.pattan@intel.com>

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool
  2018-12-13 14:42       ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Pattan, Reshma
@ 2018-12-13 16:21         ` Varghese, Vipin
  2018-12-22 21:02           ` Thomas Monjalon
  0 siblings, 1 reply; 68+ messages in thread
From: Varghese, Vipin @ 2018-12-13 16:21 UTC (permalink / raw)
  To: Pattan, Reshma, Ananyev, Konstantin, stephen, dev, Mcnamara, John
  Cc: thomas, Byrne, Stephen1, Patel, Amol

HI Reshma

> -----Original Message-----
> From: Pattan, Reshma
> Sent: Thursday, December 13, 2018 8:13 PM
> To: Varghese, Vipin <vipin.varghese@intel.com>; Ananyev, Konstantin
> <konstantin.ananyev@intel.com>; stephen@networkplumber.org;
> dev@dpdk.org; Mcnamara, John <john.mcnamara@intel.com>
> Cc: thomas@monjalon.net; Byrne, Stephen1 <stephen1.byrne@intel.com>;
> Patel, Amol <amol.patel@intel.com>
> Subject: RE: [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool
> 
> Hi
> 
> > -----Original Message-----
> > From: Varghese, Vipin
> > Sent: Thursday, December 13, 2018 5:09 AM
> > To: Ananyev, Konstantin <konstantin.ananyev@intel.com>;
> > stephen@networkplumber.org; Pattan, Reshma
> <reshma.pattan@intel.com>;
> > dev@dpdk.org; Mcnamara, John <john.mcnamara@intel.com>
> > Cc: thomas@monjalon.net; Byrne, Stephen1 <stephen1.byrne@intel.com>;
> > Patel, Amol <amol.patel@intel.com>; Varghese, Vipin
> > <vipin.varghese@intel.com>
> > Subject: [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool
> >
> > This patch adds new debug functions to existing proc-info tool.
> >
> > Motivation
> > ==========
> >
> > DPDK proc-info tool is been widely used as secondary process to
> > collect stats for any primary process. But these are limited to DPDK
> > NIC ports and basic memory usage.
> >
> > Motivation
> > ==========
> >
> > This patch tries to address the short coming by adding debug for port,
> > traffic manager, crypto, ring and mempool. With these additional
> > information in tool will be able to deliver helpful data to debug issues and
> performance variance.
> >
> > Status
> > ======
> >
> > With the following patch set debug data has been collected from
> > customers using DPDK instances. Analysing the information helped to
> > suggest the next debug steps and solutions for fixing the issues.
> >
> > Next Steps
> > ==========
> >
> >  - add event dev debug information.
> >  - enhance iter_mempool for INLINE crypto entries.
> >  - add debug for libraries like hash and acl.
> >  - explore debug possibility for ring and list.
> >  - add links and reference to 'how to guide' for 'debug and troubleshoot'.
> >
> > Patch set Information
> > =====================
> >
> > Patch includes set of 9 patches:
> > * 0 : to introduce the debug function enhancement for proc-info
> > * 1 : MACRO and help usage for new functions
> > * 2 : string compare for new functions
> > * 3 : invocation for the new prototypes
> > * 4 : show port
> > * 5 : show tm
> > * 6 : show crypto
> > * 7 : ring element debug
> > * 8 : mempool element debug
> > * 9 : iterate mempoool elements
> >
> 
> Small nits
> 9th patch in this set is doc. So above info need to be corrected.
> if you are addressing my earlier comment of separating out mempool element
> iteration changes in to separate new patch 9/10 .Please keep my ack in next
> version

Thanks for pointing this out, Like updated in email and chat I am not planning to split it. Hence no version 8.

> 
> Reviewed-by: Reshma Pattan <reshma.pattan@intel.com>
> Acked-by:  Reshma Pattan <reshma.pattan@intel.com>
> 
> 
> 
> 
> 

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool
  2018-12-13 16:21         ` Varghese, Vipin
@ 2018-12-22 21:02           ` Thomas Monjalon
  2018-12-26  5:21             ` Varghese, Vipin
  0 siblings, 1 reply; 68+ messages in thread
From: Thomas Monjalon @ 2018-12-22 21:02 UTC (permalink / raw)
  To: Varghese, Vipin
  Cc: dev, Pattan, Reshma, Ananyev, Konstantin, stephen, Mcnamara,
	John, Byrne, Stephen1, Patel, Amol

13/12/2018 17:21, Varghese, Vipin:
> HI Reshma
> 
> From: Pattan, Reshma
> > From: Varghese, Vipin
> > >
> > > This patch adds new debug functions to existing proc-info tool.
> > >
> > > Motivation
> > > ==========
> > >
> > > DPDK proc-info tool is been widely used as secondary process to
> > > collect stats for any primary process. But these are limited to DPDK
> > > NIC ports and basic memory usage.
> > >
> > > Motivation
> > > ==========
> > >
> > > This patch tries to address the short coming by adding debug for port,
> > > traffic manager, crypto, ring and mempool. With these additional
> > > information in tool will be able to deliver helpful data to debug issues and
> > performance variance.
> > >
> > > Status
> > > ======
> > >
> > > With the following patch set debug data has been collected from
> > > customers using DPDK instances. Analysing the information helped to
> > > suggest the next debug steps and solutions for fixing the issues.
> > >
> > > Next Steps
> > > ==========
> > >
> > >  - add event dev debug information.
> > >  - enhance iter_mempool for INLINE crypto entries.
> > >  - add debug for libraries like hash and acl.
> > >  - explore debug possibility for ring and list.
> > >  - add links and reference to 'how to guide' for 'debug and troubleshoot'.
> > >
> > > Patch set Information
> > > =====================
> > >
> > > Patch includes set of 9 patches:
> > > * 0 : to introduce the debug function enhancement for proc-info
> > > * 1 : MACRO and help usage for new functions
> > > * 2 : string compare for new functions
> > > * 3 : invocation for the new prototypes
> > > * 4 : show port
> > > * 5 : show tm
> > > * 6 : show crypto
> > > * 7 : ring element debug
> > > * 8 : mempool element debug
> > > * 9 : iterate mempoool elements
> > >
> > 
> > Small nits
> > 9th patch in this set is doc. So above info need to be corrected.
> > if you are addressing my earlier comment of separating out mempool element
> > iteration changes in to separate new patch 9/10 .Please keep my ack in next
> > version
> 
> Thanks for pointing this out, Like updated in email and chat I am not planning to split it. Hence no version 8.

So, no ack and no merge?

Looking at the first patches + doc patch, the split is not meaningful.
You should merge doc and option parsing in the related patches.
For instance, parsing and doc of "tm" option should be in the "tm" patch.

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool
  2018-12-22 21:02           ` Thomas Monjalon
@ 2018-12-26  5:21             ` Varghese, Vipin
  2018-12-26 21:33               ` Thomas Monjalon
  0 siblings, 1 reply; 68+ messages in thread
From: Varghese, Vipin @ 2018-12-26  5:21 UTC (permalink / raw)
  To: Thomas Monjalon, Pattan, Reshma
  Cc: dev, Ananyev, Konstantin, stephen, Mcnamara, John, Byrne,
	Stephen1, Patel, Amol

HI Thomas,

Snipped

> > > Small nits
> > > 9th patch in this set is doc. So above info need to be corrected.
> > > if you are addressing my earlier comment of separating out mempool
> > > element iteration changes in to separate new patch 9/10 .Please keep
> > > my ack in next version
> >
> > Thanks for pointing this out, Like updated in email and chat I am not
> planning to split it. Hence no version 8.
> 
> So, no ack and no merge?
> 
> Looking at the first patches + doc patch, the split is not meaningful.
> You should merge doc and option parsing in the related patches.
> For instance, parsing and doc of "tm" option should be in the "tm" patch.
> 
> 

I did not follow you request. Are you stating, for each functionality I should be updating document rather than 1 document update after adding the new functions? If former is true I am not able to find such reasoning stated in guideline or documentation or from the maintainer. 

Thanks
Vipin Varghese

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool
  2018-12-26  5:21             ` Varghese, Vipin
@ 2018-12-26 21:33               ` Thomas Monjalon
  2018-12-27  2:46                 ` Varghese, Vipin
  0 siblings, 1 reply; 68+ messages in thread
From: Thomas Monjalon @ 2018-12-26 21:33 UTC (permalink / raw)
  To: Varghese, Vipin
  Cc: Pattan, Reshma, dev, Ananyev, Konstantin, stephen, Mcnamara,
	John, Byrne, Stephen1, Patel, Amol

26/12/2018 06:21, Varghese, Vipin:
> HI Thomas,
> 
> Snipped
> 
> > > > Small nits
> > > > 9th patch in this set is doc. So above info need to be corrected.
> > > > if you are addressing my earlier comment of separating out mempool
> > > > element iteration changes in to separate new patch 9/10 .Please keep
> > > > my ack in next version
> > >
> > > Thanks for pointing this out, Like updated in email and chat I am not
> > planning to split it. Hence no version 8.
> > 
> > So, no ack and no merge?
> > 
> > Looking at the first patches + doc patch, the split is not meaningful.
> > You should merge doc and option parsing in the related patches.
> > For instance, parsing and doc of "tm" option should be in the "tm" patch.
> 
> I did not follow you request. Are you stating, for each functionality I should be updating document rather than 1 document update after adding the new functions? If former is true I am not able to find such reasoning stated in guideline or documentation or from the maintainer. 

Yes, you should update the doc while adding a new feature.
But most importantly, there is no reason to do a patch adding some empty functions
and filling them later.
And please consider the option parsing is part of the feature.

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool
  2018-12-26 21:33               ` Thomas Monjalon
@ 2018-12-27  2:46                 ` Varghese, Vipin
  2018-12-27  9:32                   ` Thomas Monjalon
  0 siblings, 1 reply; 68+ messages in thread
From: Varghese, Vipin @ 2018-12-27  2:46 UTC (permalink / raw)
  To: Thomas Monjalon
  Cc: Pattan, Reshma, dev, Ananyev, Konstantin, stephen, Mcnamara,
	John, Byrne, Stephen1, Patel, Amol

snipped
> > > > > Small nits
> > > > > 9th patch in this set is doc. So above info need to be corrected.
> > > > > if you are addressing my earlier comment of separating out
> > > > > mempool element iteration changes in to separate new patch 9/10
> > > > > .Please keep my ack in next version
> > > >
> > > > Thanks for pointing this out, Like updated in email and chat I am
> > > > not
> > > planning to split it. Hence no version 8.
> > >
> > > So, no ack and no merge?
> > >
> > > Looking at the first patches + doc patch, the split is not meaningful.
> > > You should merge doc and option parsing in the related patches.
> > > For instance, parsing and doc of "tm" option should be in the "tm" patch.
> >
> > I did not follow you request. Are you stating, for each functionality I should
> be updating document rather than 1 document update after adding the new
> functions? If former is true I am not able to find such reasoning stated in
> guideline or documentation or from the maintainer.
> 
> Yes, you should update the doc while adding a new feature.
Ok, I will comply to your requirement even though it is not in 'guideline, documentation or from maintainer'. Humbly requesting to update documentation and guideline suggesting the same. This will also help others to submit patches according the new guideline. Once reflected it will be justified for sending a v8.

> But most importantly, there is no reason to do a patch adding some empty
> functions and filling them later.
Following are the reasons for using stub function from v1 onwards till v7
1. Without the dummy function there are compiler warnings for unused variables.
2. It is logical to have stub functions for the new parse option being added in one go.

These are based on the suggestion from the maintainer.

> And please consider the option parsing is part of the feature.
As mentioned above please find the reasoning stated for patches from v1 to v7.

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool
  2018-12-27  2:46                 ` Varghese, Vipin
@ 2018-12-27  9:32                   ` Thomas Monjalon
  2018-12-27 10:45                     ` Varghese, Vipin
  0 siblings, 1 reply; 68+ messages in thread
From: Thomas Monjalon @ 2018-12-27  9:32 UTC (permalink / raw)
  To: Varghese, Vipin
  Cc: Pattan, Reshma, dev, Ananyev, Konstantin, stephen, Mcnamara,
	John, Byrne, Stephen1, Patel, Amol

27/12/2018 03:46, Varghese, Vipin:
> snipped
> > > > > > Small nits
> > > > > > 9th patch in this set is doc. So above info need to be corrected.
> > > > > > if you are addressing my earlier comment of separating out
> > > > > > mempool element iteration changes in to separate new patch 9/10
> > > > > > .Please keep my ack in next version
> > > > >
> > > > > Thanks for pointing this out, Like updated in email and chat I am
> > > > > not
> > > > planning to split it. Hence no version 8.
> > > >
> > > > So, no ack and no merge?
> > > >
> > > > Looking at the first patches + doc patch, the split is not meaningful.
> > > > You should merge doc and option parsing in the related patches.
> > > > For instance, parsing and doc of "tm" option should be in the "tm" patch.
> > >
> > > I did not follow you request. Are you stating, for each functionality I should
> > be updating document rather than 1 document update after adding the new
> > functions? If former is true I am not able to find such reasoning stated in
> > guideline or documentation or from the maintainer.
> > 
> > Yes, you should update the doc while adding a new feature.
> Ok, I will comply to your requirement even though it is not in 'guideline, documentation or from maintainer'. Humbly requesting to update documentation and guideline suggesting the same. This will also help others to submit patches according the new guideline. Once reflected it will be justified for sending a v8.

Vipin, please read the doc carefully:
	http://git.dpdk.org/dpdk/commit/?id=9e0e4a00df775

> > But most importantly, there is no reason to do a patch adding some empty
> > functions and filling them later.
> Following are the reasons for using stub function from v1 onwards till v7
> 1. Without the dummy function there are compiler warnings for unused variables.
> 2. It is logical to have stub functions for the new parse option being added in one go.
> 
> These are based on the suggestion from the maintainer.
> 
> > And please consider the option parsing is part of the feature.
> As mentioned above please find the reasoning stated for patches from v1 to v7.

You keep thinking that parsing should be introduced separately.
I keep saying it is part of the feature.

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool
  2018-12-27  9:32                   ` Thomas Monjalon
@ 2018-12-27 10:45                     ` Varghese, Vipin
  0 siblings, 0 replies; 68+ messages in thread
From: Varghese, Vipin @ 2018-12-27 10:45 UTC (permalink / raw)
  To: Thomas Monjalon
  Cc: Pattan, Reshma, dev, Ananyev, Konstantin, stephen, Mcnamara,
	John, Byrne, Stephen1, Patel, Amol



> -----Original Message-----
> From: Thomas Monjalon <thomas@monjalon.net>
> Sent: Thursday, December 27, 2018 3:03 PM
> To: Varghese, Vipin <vipin.varghese@intel.com>
> Cc: Pattan, Reshma <reshma.pattan@intel.com>; dev@dpdk.org; Ananyev,
> Konstantin <konstantin.ananyev@intel.com>; stephen@networkplumber.org;
> Mcnamara, John <john.mcnamara@intel.com>; Byrne, Stephen1
> <stephen1.byrne@intel.com>; Patel, Amol <amol.patel@intel.com>
> Subject: Re: [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-
> info tool
> 
> 27/12/2018 03:46, Varghese, Vipin:
> > snipped
> > > > > > > Small nits
> > > > > > > 9th patch in this set is doc. So above info need to be corrected.
> > > > > > > if you are addressing my earlier comment of separating out
> > > > > > > mempool element iteration changes in to separate new patch
> > > > > > > 9/10 .Please keep my ack in next version
> > > > > >
> > > > > > Thanks for pointing this out, Like updated in email and chat I
> > > > > > am not
> > > > > planning to split it. Hence no version 8.
> > > > >
> > > > > So, no ack and no merge?
> > > > >
> > > > > Looking at the first patches + doc patch, the split is not meaningful.
> > > > > You should merge doc and option parsing in the related patches.
> > > > > For instance, parsing and doc of "tm" option should be in the "tm"
> patch.
> > > >
> > > > I did not follow you request. Are you stating, for each
> > > > functionality I should
> > > be updating document rather than 1 document update after adding the
> > > new functions? If former is true I am not able to find such
> > > reasoning stated in guideline or documentation or from the maintainer.
> > >
> > > Yes, you should update the doc while adding a new feature.
> > Ok, I will comply to your requirement even though it is not in 'guideline,
> documentation or from maintainer'. Humbly requesting to update
> documentation and guideline suggesting the same. This will also help others
> to submit patches according the new guideline. Once reflected it will be
> justified for sending a v8.
> 
> Vipin, please read the doc carefully:
> 	http://git.dpdk.org/dpdk/commit/?id=9e0e4a00df775
Thank you Thomas for this update, I will make the changes for v8 and wait for your ACK.

> 
> > > But most importantly, there is no reason to do a patch adding some
> > > empty functions and filling them later.
> > Following are the reasons for using stub function from v1 onwards till
> > v7 1. Without the dummy function there are compiler warnings for unused
> variables.
> > 2. It is logical to have stub functions for the new parse option being added in
> one go.
> >
> > These are based on the suggestion from the maintainer.
> >
> > > And please consider the option parsing is part of the feature.
> > As mentioned above please find the reasoning stated for patches from v1 to
> v7.
> 
> You keep thinking that parsing should be introduced separately.
> I keep saying it is part of the feature.
> 
> 

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance debug of proc-info tool
  2018-12-13  5:08     ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
                         ` (9 preceding siblings ...)
  2018-12-13 14:42       ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Pattan, Reshma
@ 2019-01-07 15:38       ` Vipin Varghese
  2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions Vipin Varghese
                           ` (6 more replies)
  10 siblings, 7 replies; 68+ messages in thread
From: Vipin Varghese @ 2019-01-07 15:38 UTC (permalink / raw)
  To: dev, thomas
  Cc: reshma.pattan, john.mcnamara, amol.patel, stephen,
	konstantin.ananyev, jasvinder.singh, Vipin Varghese

This patch adds new debug functions to existing proc-info tool.

Motivation
==========

DPDK proc-info tool is been widely used as secondary process to collect
stats for any primary process. But these are limited to DPDK NIC ports and
basic memory usage.

The patch series tries to address the missing debug information for PMD by
adding debug for port, traffic manager, crypto, ring and mempool. With
these additional information collected, it becomes easy to analyze issues
and performance variance.

Status
======

Reviews and changes accomadated. ACK received for documenation and code.

Patch Information
=================

Patch series has 7 patches as shared below:

Vipin Varghese (7):
  app/procinfo: prepare for new debug functions
  app/procinfo: add support for show port
  app/procinfo: add support for show tm
  app/procinfo: add support for show crypto
  app/procinfo: add support for debug ring
  app/procinfo: add support for show mempool
  app/procinfo: add support for iter mempool

 app/proc-info/main.c           | 658 ++++++++++++++++++++++++++++++++-
 app/proc-info/meson.build      |   2 +-
 doc/guides/tools/proc_info.rst |  32 +-
 3 files changed, 688 insertions(+), 4 deletions(-)

Change Log:
==========

v8:
 - merge documenation with code - Thomas Monjalon
 - split patch for iter_mempool - Reshma Pattan
 - add ack for code - Reshma Pattan

V7:
 - update usage text with token ":" - Reshma Pattan
 - reword usage for 'iter-mempool' - Reshma Pattan

V6:
 - add mempool iterate elements option - Vipin Varghese
 - check for iter mempool - Vipin Varghese
 - add call to iter mempool - Vipin Varghese
 - replace or with logical or - Reshma Pathan & Konstantin Ananyev
 - split iter mempool - Vipin Varghese
 - update entry for mempool iter - Vipin Varghese
 - add ack for v5 - John Mcnamara
 - update entry for mempool iter - Vipin Varghese

V5:
 - convert 100 to MAX_STRING_LEN - Reshma Pattan
 - RSS made for port - Reshma Pattan
 - update bdr_str to static - Stephen Hemminger
 - remove memset for link, dev_info, queue, stats - Stephen Hemminger
 - update ret to uint32_t - Reshma Pattan

v4:
 - add space to compare - Vipin Varghese
 - add spacing for flag compare - Vipin Varghese

V3:
 - change the usage details - Vipin Varghese
 - variables from debug to show - Vipin Varghese
 - update function names from debug to show - Vipin Varghese
 - fix meson build - Reshma Pattan
 - change 100 to MAX_STRING_LEN - Reshma Pattan
 - memset to struct elements - Reshma Pattan
 - printf tab space - Reshma Pattan
 - remove 'drop packet information' - Vipin Varghese
 - memset for struct elements - Vipin Varghese
 - code cleanup for TM - Vipin Varghese
 - fetch for leaf nodes if node exist - Jasvinder Singh
 - display MARCO to function - Reshma Pathan & Stephen Hemminger
 - add memset for struct elements - Reshma Pathan
 - change display formating of flags - Vipin Varghese
 - use MACRO for string - Vipin Varghese
 - replace space to tab in printf - Reshma Pathan
 - change ring display information - Vipin Varghese
 - update document from dbg to show - Vipin Varghese

V2:
 - change word dbg to show - Stephen Hemminger
 - compare string from dbg to show - Stephen Hemminger
 - removed if else ladder - Vipin Varghese
 - redefine code format - Vipin Varghese
 - MACRO for display node|level - cap - Vipin Varghese
 - update word style for content - Vipin Varghese

-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions
  2019-01-07 15:38       ` [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance " Vipin Varghese
@ 2019-01-07 15:38         ` Vipin Varghese
  2019-01-09 23:45           ` Thomas Monjalon
  2019-01-10 21:36           ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Vipin Varghese
  2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 2/7] app/procinfo: add support for show port Vipin Varghese
                           ` (5 subsequent siblings)
  6 siblings, 2 replies; 68+ messages in thread
From: Vipin Varghese @ 2019-01-07 15:38 UTC (permalink / raw)
  To: dev, thomas
  Cc: reshma.pattan, john.mcnamara, amol.patel, stephen,
	konstantin.ananyev, jasvinder.singh, Vipin Varghese

Update code base and meson build file to accomadate changes for the
new functionality.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
Acked-by: Reshma  Pattan <reshma.pattan@intel.com>
---
 app/proc-info/main.c      | 13 +++++++++++++
 app/proc-info/meson.build |  2 +-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index c20effa4f..c7697389c 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -29,6 +29,9 @@
 #include <rte_branch_prediction.h>
 #include <rte_string_fns.h>
 #include <rte_metrics.h>
+#include <rte_cycles.h>
+#include <rte_security.h>
+#include <rte_cryptodev.h>
 
 /* Maximum long option length for option parsing. */
 #define MAX_LONG_OPT_SZ 64
@@ -36,6 +39,10 @@
 
 #define MAX_STRING_LEN 256
 
+#define STATS_BDR_FMT "========================================"
+#define STATS_BDR_STR(w, s) printf("%.*s%s%.*s\n", w, \
+	STATS_BDR_FMT, s, w, STATS_BDR_FMT)
+
 /**< mask of enabled ports */
 static uint32_t enabled_port_mask;
 /**< Enable stats. */
@@ -65,6 +72,9 @@ static char *xstats_name;
 static uint32_t nb_xstats_ids;
 static uint64_t xstats_ids[MAX_NB_XSTATS_IDS];
 
+/* show border */
+static char bdr_str[MAX_STRING_LEN];
+
 /**< display usage */
 static void
 proc_info_usage(const char *prgname)
@@ -668,5 +678,8 @@ main(int argc, char **argv)
 	if (ret)
 		printf("Error from rte_eal_cleanup(), %d\n", ret);
 
+	snprintf(bdr_str, MAX_STRING_LEN, " ");
+	STATS_BDR_STR(50, bdr_str);
+
 	return 0;
 }
diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build
index a52b2ee4a..866b390d6 100644
--- a/app/proc-info/meson.build
+++ b/app/proc-info/meson.build
@@ -3,4 +3,4 @@
 
 sources = files('main.c')
 allow_experimental_apis = true
-deps += ['ethdev', 'metrics']
+deps += ['ethdev', 'metrics', 'security']
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v8 2/7] app/procinfo: add support for show port
  2019-01-07 15:38       ` [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance " Vipin Varghese
  2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions Vipin Varghese
@ 2019-01-07 15:38         ` Vipin Varghese
  2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 3/7] app/procinfo: add support for show tm Vipin Varghese
                           ` (4 subsequent siblings)
  6 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2019-01-07 15:38 UTC (permalink / raw)
  To: dev, thomas
  Cc: reshma.pattan, john.mcnamara, amol.patel, stephen,
	konstantin.ananyev, jasvinder.singh, Vipin Varghese

Function show_port is used for displaying the port PMD information under
primary process. The information shows basic, per queue and security.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
Acked-by: Reshma  Pattan <reshma.pattan@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
---
 app/proc-info/main.c           | 106 ++++++++++++++++++++++++++++++++-
 doc/guides/tools/proc_info.rst |   9 ++-
 2 files changed, 112 insertions(+), 3 deletions(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index c7697389c..2108c24b0 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -75,6 +75,9 @@ static uint64_t xstats_ids[MAX_NB_XSTATS_IDS];
 /* show border */
 static char bdr_str[MAX_STRING_LEN];
 
+/**< Enable show port. */
+static uint32_t enable_shw_port;
+
 /**< display usage */
 static void
 proc_info_usage(const char *prgname)
@@ -93,7 +96,8 @@ proc_info_usage(const char *prgname)
 		"  --stats-reset: to reset port statistics\n"
 		"  --xstats-reset: to reset port extended statistics\n"
 		"  --collectd-format: to print statistics to STDOUT in expected by collectd format\n"
-		"  --host-id STRING: host id used to identify the system process is running on\n",
+		"  --host-id STRING: host id used to identify the system process is running on\n"
+		"  --show-port: to display ports information\n",
 		prgname);
 }
 
@@ -200,6 +204,7 @@ proc_info_parse_args(int argc, char **argv)
 		{"collectd-format", 0, NULL, 0},
 		{"xstats-ids", 1, NULL, 1},
 		{"host-id", 0, NULL, 0},
+		{"show-port", 0, NULL, 0},
 		{NULL, 0, 0, 0}
 	};
 
@@ -243,6 +248,9 @@ proc_info_parse_args(int argc, char **argv)
 			else if (!strncmp(long_option[option_index].name, "xstats-reset",
 					MAX_LONG_OPT_SZ))
 				reset_xstats = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-port", MAX_LONG_OPT_SZ))
+				enable_shw_port = 1;
 			break;
 		case 1:
 			/* Print xstat single value given by name*/
@@ -594,6 +602,98 @@ metrics_display(int port_id)
 	rte_free(names);
 }
 
+static void
+show_port(void)
+{
+	uint16_t i = 0;
+	int ret = 0, j, k;
+
+	snprintf(bdr_str, MAX_STRING_LEN, " show - Port PMD %"PRIu64,
+			rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	RTE_ETH_FOREACH_DEV(i) {
+		uint16_t mtu = 0;
+		struct rte_eth_link link;
+		struct rte_eth_dev_info dev_info;
+		struct rte_eth_rxq_info queue_info;
+		struct rte_eth_rss_conf rss_conf;
+
+		memset(&rss_conf, 0, sizeof(rss_conf));
+
+		snprintf(bdr_str, MAX_STRING_LEN, " Port (%u)", i);
+		STATS_BDR_STR(5, bdr_str);
+		printf("  - generic config\n");
+
+		printf("\t  -- Socket %d\n", rte_eth_dev_socket_id(i));
+		rte_eth_link_get(i, &link);
+		printf("\t  -- link speed %d duplex %d,"
+				" auto neg %d status %d\n",
+				link.link_speed,
+				link.link_duplex,
+				link.link_autoneg,
+				link.link_status);
+		printf("\t  -- promiscuous (%d)\n",
+				rte_eth_promiscuous_get(i));
+		ret = rte_eth_dev_get_mtu(i, &mtu);
+		if (ret == 0)
+			printf("\t  -- mtu (%d)\n", mtu);
+
+		rte_eth_dev_info_get(i, &dev_info);
+
+		printf("  - queue\n");
+		for (j = 0; j < dev_info.nb_rx_queues; j++) {
+			ret = rte_eth_rx_queue_info_get(i, j, &queue_info);
+			if (ret == 0) {
+				printf("\t  -- queue %d rx scatter %d"
+						" descriptors %d"
+						" offloads 0x%"PRIx64
+						" mempool socket %d\n",
+						j,
+						queue_info.scattered_rx,
+						queue_info.nb_desc,
+						queue_info.conf.offloads,
+						queue_info.mp->socket_id);
+			}
+		}
+
+		ret = rte_eth_dev_rss_hash_conf_get(i, &rss_conf);
+		if (ret == 0) {
+			if (rss_conf.rss_key) {
+				printf("  - RSS\n");
+				printf("\t  -- RSS len %u key (hex):",
+						rss_conf.rss_key_len);
+				for (k = 0; k < rss_conf.rss_key_len; k++)
+					printf(" %x", rss_conf.rss_key[k]);
+				printf("\t  -- hf 0x%"PRIx64"\n",
+						rss_conf.rss_hf);
+			}
+		}
+
+		printf("  - cyrpto context\n");
+		void *p_ctx = rte_eth_dev_get_sec_ctx(i);
+		printf("\t  -- security context - %p\n", p_ctx);
+
+		if (p_ctx) {
+			printf("\t  -- size %u\n",
+					rte_security_session_get_size(p_ctx));
+			const struct rte_security_capability *s_cap =
+				rte_security_capabilities_get(p_ctx);
+			if (s_cap) {
+				printf("\t  -- action (0x%x), protocol (0x%x),"
+						" offload flags (0x%x)\n",
+						s_cap->action,
+						s_cap->protocol,
+						s_cap->ol_flags);
+				printf("\t  -- capabilities - oper type %x\n",
+						s_cap->crypto_capabilities->op);
+			}
+		}
+	}
+
+	STATS_BDR_STR(50, "");
+}
+
 int
 main(int argc, char **argv)
 {
@@ -674,6 +774,10 @@ main(int argc, char **argv)
 	if (enable_metrics)
 		metrics_display(RTE_METRICS_GLOBAL);
 
+	/* show information for PMD */
+	if (enable_shw_port)
+		show_port();
+
 	ret = rte_eal_cleanup();
 	if (ret)
 		printf("Error from rte_eal_cleanup(), %d\n", ret);
diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst
index d5b5ed6a6..6baa1db9a 100644
--- a/doc/guides/tools/proc_info.rst
+++ b/doc/guides/tools/proc_info.rst
@@ -6,7 +6,8 @@ dpdk-procinfo Application
 
 The dpdk-procinfo application is a Data Plane Development Kit (DPDK) application
 that runs as a DPDK secondary process and is capable of retrieving port
-statistics, resetting port statistics and printing DPDK memory information.
+statistics, resetting port statistics, printing DPDK memory information and
+displaying debug information for port.
 This application extends the original functionality that was supported by
 dump_cfg.
 
@@ -17,7 +18,7 @@ The application has a number of command line options:
 .. code-block:: console
 
    ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats |
-   --stats-reset | --xstats-reset]
+   --stats-reset | --xstats-reset] [ --show-port ]
 
 Parameters
 ~~~~~~~~~~
@@ -41,6 +42,10 @@ If no port mask is specified xstats are reset for all DPDK ports.
 
 **-m**: Print DPDK memory information.
 
+**--show-port**
+The show-port parameter displays port level various configuration informationi
+associated to RX port queue pair.
+
 Limitations
 -----------
 
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v8 3/7] app/procinfo: add support for show tm
  2019-01-07 15:38       ` [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance " Vipin Varghese
  2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions Vipin Varghese
  2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 2/7] app/procinfo: add support for show port Vipin Varghese
@ 2019-01-07 15:38         ` Vipin Varghese
  2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 4/7] app/procinfo: add support for show crypto Vipin Varghese
                           ` (3 subsequent siblings)
  6 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2019-01-07 15:38 UTC (permalink / raw)
  To: dev, thomas
  Cc: reshma.pattan, john.mcnamara, amol.patel, stephen,
	konstantin.ananyev, jasvinder.singh, Vipin Varghese

Function show_tm is used for displaying the tm PMD under the primary
process. This covers basic and per node|level details with statistics.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
Acked-by: Reshma  Pattan <reshma.pattan@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
---
 app/proc-info/main.c           | 290 ++++++++++++++++++++++++++++++++-
 doc/guides/tools/proc_info.rst |   6 +-
 2 files changed, 294 insertions(+), 2 deletions(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 2108c24b0..ea15ae1a6 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -32,6 +32,7 @@
 #include <rte_cycles.h>
 #include <rte_security.h>
 #include <rte_cryptodev.h>
+#include <rte_tm.h>
 
 /* Maximum long option length for option parsing. */
 #define MAX_LONG_OPT_SZ 64
@@ -77,6 +78,8 @@ static char bdr_str[MAX_STRING_LEN];
 
 /**< Enable show port. */
 static uint32_t enable_shw_port;
+/**< Enable show tm. */
+static uint32_t enable_shw_tm;
 
 /**< display usage */
 static void
@@ -97,7 +100,8 @@ proc_info_usage(const char *prgname)
 		"  --xstats-reset: to reset port extended statistics\n"
 		"  --collectd-format: to print statistics to STDOUT in expected by collectd format\n"
 		"  --host-id STRING: host id used to identify the system process is running on\n"
-		"  --show-port: to display ports information\n",
+		"  --show-port: to display ports information\n"
+		"  --show-tm: to display traffic manager information for ports\n",
 		prgname);
 }
 
@@ -205,6 +209,7 @@ proc_info_parse_args(int argc, char **argv)
 		{"xstats-ids", 1, NULL, 1},
 		{"host-id", 0, NULL, 0},
 		{"show-port", 0, NULL, 0},
+		{"show-tm", 0, NULL, 0},
 		{NULL, 0, 0, 0}
 	};
 
@@ -251,6 +256,9 @@ proc_info_parse_args(int argc, char **argv)
 			else if (!strncmp(long_option[option_index].name,
 					"show-port", MAX_LONG_OPT_SZ))
 				enable_shw_port = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-tm", MAX_LONG_OPT_SZ))
+				enable_shw_tm = 1;
 			break;
 		case 1:
 			/* Print xstat single value given by name*/
@@ -694,6 +702,284 @@ show_port(void)
 	STATS_BDR_STR(50, "");
 }
 
+static void
+display_nodecap_info(int is_leaf, struct rte_tm_node_capabilities *cap)
+{
+	if (cap == NULL)
+		return;
+
+	if (!is_leaf) {
+		printf("\t  -- nonleaf sched max:\n"
+			"\t\t  + children (%u)\n"
+			"\t\t  + sp priorities (%u)\n"
+			"\t\t  + wfq children per group (%u)\n"
+			"\t\t  + wfq groups (%u)\n"
+			"\t\t  + wfq weight (%u)\n",
+			cap->nonleaf.sched_n_children_max,
+			cap->nonleaf.sched_sp_n_priorities_max,
+			cap->nonleaf.sched_wfq_n_children_per_group_max,
+			cap->nonleaf.sched_wfq_n_groups_max,
+			cap->nonleaf.sched_wfq_weight_max);
+	} else {
+		printf("\t  -- leaf cman support:\n"
+			"\t\t  + wred pkt mode (%d)\n"
+			"\t\t  + wred byte mode (%d)\n"
+			"\t\t  + head drop (%d)\n"
+			"\t\t  + wred context private (%d)\n"
+			"\t\t  + wred context shared (%u)\n",
+			cap->leaf.cman_wred_packet_mode_supported,
+			cap->leaf.cman_wred_byte_mode_supported,
+			cap->leaf.cman_head_drop_supported,
+			cap->leaf.cman_wred_context_private_supported,
+			cap->leaf.cman_wred_context_shared_n_max);
+	}
+}
+
+static void
+display_levelcap_info(int is_leaf, struct rte_tm_level_capabilities *cap)
+{
+	if (cap == NULL)
+		return;
+
+	if (!is_leaf) {
+		printf("\t  -- shaper private: (%d) dual rate (%d)\n",
+			cap->nonleaf.shaper_private_supported,
+			cap->nonleaf.shaper_private_dual_rate_supported);
+		printf("\t  -- shaper share: (%u)\n",
+			cap->nonleaf.shaper_shared_n_max);
+		printf("\t  -- non leaf sched MAX:\n"
+			"\t\t  + children (%u)\n"
+			"\t\t  + sp (%u)\n"
+			"\t\t  + wfq children per group (%u)\n"
+			"\t\t  + wfq groups (%u)\n"
+			"\t\t  + wfq weight (%u)\n",
+			cap->nonleaf.sched_n_children_max,
+			cap->nonleaf.sched_sp_n_priorities_max,
+			cap->nonleaf.sched_wfq_n_children_per_group_max,
+			cap->nonleaf.sched_wfq_n_groups_max,
+			cap->nonleaf.sched_wfq_weight_max);
+	} else {
+		printf("\t  -- shaper private: (%d) dual rate (%d)\n",
+			cap->leaf.shaper_private_supported,
+			cap->leaf.shaper_private_dual_rate_supported);
+		printf("\t  -- shaper share: (%u)\n",
+			cap->leaf.shaper_shared_n_max);
+		printf("  -- leaf cman support:\n"
+			"\t\t  + wred pkt mode (%d)\n"
+			"\t\t  + wred byte mode (%d)\n"
+			"\t\t  + head drop (%d)\n"
+			"\t\t  + wred context private (%d)\n"
+			"\t\t  + wred context shared (%u)\n",
+			cap->leaf.cman_wred_packet_mode_supported,
+			cap->leaf.cman_wred_byte_mode_supported,
+			cap->leaf.cman_head_drop_supported,
+			cap->leaf.cman_wred_context_private_supported,
+			cap->leaf.cman_wred_context_shared_n_max);
+	}
+}
+
+static void
+show_tm(void)
+{
+	int ret = 0, check_for_leaf = 0, is_leaf = 0;
+	unsigned int j, k;
+	uint16_t i = 0;
+
+	snprintf(bdr_str, MAX_STRING_LEN, " show - TM PMD %"PRIu64,
+			rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	RTE_ETH_FOREACH_DEV(i) {
+		struct rte_eth_dev_info dev_info;
+		struct rte_tm_capabilities cap;
+		struct rte_tm_error error;
+		struct rte_tm_node_capabilities capnode;
+		struct rte_tm_level_capabilities caplevel;
+		uint32_t n_leaf_nodes = 0;
+
+		memset(&cap, 0, sizeof(cap));
+		memset(&error, 0, sizeof(error));
+
+		rte_eth_dev_info_get(i, &dev_info);
+		printf("  - Generic for port (%u)\n"
+			"\t  -- driver name %s\n"
+			"\t  -- max vf (%u)\n"
+			"\t  -- max tx queues (%u)\n"
+			"\t  -- number of tx queues (%u)\n",
+			i,
+			dev_info.driver_name,
+			dev_info.max_vfs,
+			dev_info.max_tx_queues,
+			dev_info.nb_tx_queues);
+
+		ret = rte_tm_capabilities_get(i, &cap, &error);
+		if (ret)
+			continue;
+
+		printf("  - MAX: nodes (%u) levels (%u) children (%u)\n",
+			cap.n_nodes_max,
+			cap.n_levels_max,
+			cap.sched_n_children_max);
+
+		printf("  - identical nodes: non leaf (%d) leaf (%d)\n",
+			cap.non_leaf_nodes_identical,
+			cap.leaf_nodes_identical);
+
+		printf("  - Shaper MAX:\n"
+			"\t  -- total (%u)\n"
+			"\t  -- private (%u) private dual (%d)\n"
+			"\t  -- shared (%u) shared dual (%u)\n",
+			cap.shaper_n_max,
+			cap.shaper_private_n_max,
+			cap.shaper_private_dual_rate_n_max,
+			cap.shaper_shared_n_max,
+			cap.shaper_shared_dual_rate_n_max);
+
+		printf("  - mark support:\n");
+		printf("\t  -- vlan dei: GREEN (%d) YELLOW (%d) RED (%d)\n",
+			cap.mark_vlan_dei_supported[RTE_TM_GREEN],
+			cap.mark_vlan_dei_supported[RTE_TM_YELLOW],
+			cap.mark_vlan_dei_supported[RTE_TM_RED]);
+		printf("\t  -- ip ecn tcp: GREEN (%d) YELLOW (%d) RED (%d)\n",
+			cap.mark_ip_ecn_tcp_supported[RTE_TM_GREEN],
+			cap.mark_ip_ecn_tcp_supported[RTE_TM_YELLOW],
+			cap.mark_ip_ecn_tcp_supported[RTE_TM_RED]);
+		printf("\t  -- ip ecn sctp: GREEN (%d) YELLOW (%d) RED (%d)\n",
+			cap.mark_ip_ecn_sctp_supported[RTE_TM_GREEN],
+			cap.mark_ip_ecn_sctp_supported[RTE_TM_YELLOW],
+			cap.mark_ip_ecn_sctp_supported[RTE_TM_RED]);
+		printf("\t  -- ip dscp: GREEN (%d) YELLOW (%d) RED (%d)\n",
+			cap.mark_ip_dscp_supported[RTE_TM_GREEN],
+			cap.mark_ip_dscp_supported[RTE_TM_YELLOW],
+			cap.mark_ip_dscp_supported[RTE_TM_RED]);
+
+		printf("  - mask stats (0x%"PRIx64")"
+			" dynamic update (0x%"PRIx64")\n",
+			cap.stats_mask,
+			cap.dynamic_update_mask);
+
+		printf("  - sched MAX:\n"
+			"\t  -- total (%u)\n"
+			"\t  -- sp levels (%u)\n"
+			"\t  -- wfq children per group (%u)\n"
+			"\t  -- wfq groups (%u)\n"
+			"\t  -- wfq weight (%u)\n",
+			cap.sched_sp_n_priorities_max,
+			cap.sched_sp_n_priorities_max,
+			cap.sched_wfq_n_children_per_group_max,
+			cap.sched_wfq_n_groups_max,
+			cap.sched_wfq_weight_max);
+
+		printf("  - CMAN support:\n"
+			"\t  -- WRED mode: pkt (%d) byte (%d)\n"
+			"\t  -- head drop (%d)\n",
+			cap.cman_wred_packet_mode_supported,
+			cap.cman_wred_byte_mode_supported,
+			cap.cman_head_drop_supported);
+		printf("\t  -- MAX WRED CONTEXT:"
+			" total (%u) private (%u) shared (%u)\n",
+			cap.cman_wred_context_n_max,
+			cap.cman_wred_context_private_n_max,
+			cap.cman_wred_context_shared_n_max);
+
+		for (j = 0; j < cap.n_nodes_max; j++) {
+			memset(&capnode, 0, sizeof(capnode));
+			ret = rte_tm_node_capabilities_get(i, j,
+					&capnode, &error);
+			if (ret)
+				continue;
+
+			check_for_leaf = 1;
+
+			printf("  NODE %u\n", j);
+			printf("\t  - shaper private: (%d) dual rate (%d)\n",
+				capnode.shaper_private_supported,
+				capnode.shaper_private_dual_rate_supported);
+			printf("\t  - shaper shared max: (%u)\n",
+				capnode.shaper_shared_n_max);
+			printf("\t  - stats mask %"PRIx64"\n",
+				capnode.stats_mask);
+
+			ret = rte_tm_node_type_get(i, j, &is_leaf, &error);
+			if (ret)
+				continue;
+
+			display_nodecap_info(is_leaf, &capnode);
+		}
+
+		for (j = 0; j < cap.n_levels_max; j++) {
+			memset(&caplevel, 0, sizeof(caplevel));
+			ret = rte_tm_level_capabilities_get(i, j,
+					&caplevel, &error);
+			if (ret)
+				continue;
+
+			printf("  - Level %u\n", j);
+			printf("\t  -- node MAX: %u non leaf %u leaf %u\n",
+				caplevel.n_nodes_max,
+				caplevel.n_nodes_nonleaf_max,
+				caplevel.n_nodes_leaf_max);
+			printf("\t  -- indetical: non leaf %u leaf %u\n",
+				caplevel.non_leaf_nodes_identical,
+				caplevel.leaf_nodes_identical);
+
+			for (k = 0; k < caplevel.n_nodes_max; k++) {
+				ret = rte_tm_node_type_get(i, k,
+					&is_leaf, &error);
+				if (ret)
+					continue;
+
+				display_levelcap_info(is_leaf, &caplevel);
+			}
+		}
+
+		if (check_for_leaf) {
+			ret = rte_tm_get_number_of_leaf_nodes(i,
+					&n_leaf_nodes, &error);
+			if (ret == 0)
+				printf("  - leaf nodes (%u)\n", n_leaf_nodes);
+		}
+
+		for (j = 0; j < n_leaf_nodes; j++) {
+			struct rte_tm_node_stats stats;
+			memset(&stats, 0, sizeof(stats));
+
+			ret = rte_tm_node_stats_read(i, j,
+					&stats, &cap.stats_mask, 0, &error);
+			if (ret)
+				continue;
+
+			printf("  - STATS for node (%u)\n", j);
+			printf("  -- pkts (%"PRIu64") bytes (%"PRIu64")\n",
+				stats.n_pkts, stats.n_bytes);
+
+			ret = rte_tm_node_type_get(i, j, &is_leaf, &error);
+			if (ret || (!is_leaf))
+				continue;
+
+			printf("  -- leaf queued:"
+				" pkts (%"PRIu64") bytes (%"PRIu64")\n",
+				stats.leaf.n_pkts_queued,
+				stats.leaf.n_bytes_queued);
+			printf("  - dropped:\n"
+				"\t  -- GREEN:"
+				" pkts (%"PRIu64") bytes (%"PRIu64")\n"
+				"\t  -- YELLOW:"
+				" pkts (%"PRIu64") bytes (%"PRIu64")\n"
+				"\t  -- RED:"
+				" pkts (%"PRIu64") bytes (%"PRIu64")\n",
+				stats.leaf.n_pkts_dropped[RTE_TM_GREEN],
+				stats.leaf.n_bytes_dropped[RTE_TM_GREEN],
+				stats.leaf.n_pkts_dropped[RTE_TM_YELLOW],
+				stats.leaf.n_bytes_dropped[RTE_TM_YELLOW],
+				stats.leaf.n_pkts_dropped[RTE_TM_RED],
+				stats.leaf.n_bytes_dropped[RTE_TM_RED]);
+		}
+	}
+
+	STATS_BDR_STR(50, "");
+}
+
 int
 main(int argc, char **argv)
 {
@@ -777,6 +1063,8 @@ main(int argc, char **argv)
 	/* show information for PMD */
 	if (enable_shw_port)
 		show_port();
+	if (enable_shw_tm)
+		show_tm();
 
 	ret = rte_eal_cleanup();
 	if (ret)
diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst
index 6baa1db9a..5f9afdb79 100644
--- a/doc/guides/tools/proc_info.rst
+++ b/doc/guides/tools/proc_info.rst
@@ -18,7 +18,7 @@ The application has a number of command line options:
 .. code-block:: console
 
    ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats |
-   --stats-reset | --xstats-reset] [ --show-port ]
+   --stats-reset | --xstats-reset] [ --show-port | --show-tm ]
 
 Parameters
 ~~~~~~~~~~
@@ -46,6 +46,10 @@ If no port mask is specified xstats are reset for all DPDK ports.
 The show-port parameter displays port level various configuration informationi
 associated to RX port queue pair.
 
+**--show-tm**
+The show-tm parameter displays per port traffic manager settings, current
+configurations and statistics.
+
 Limitations
 -----------
 
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v8 4/7] app/procinfo: add support for show crypto
  2019-01-07 15:38       ` [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance " Vipin Varghese
                           ` (2 preceding siblings ...)
  2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 3/7] app/procinfo: add support for show tm Vipin Varghese
@ 2019-01-07 15:38         ` Vipin Varghese
  2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 5/7] app/procinfo: add support for debug ring Vipin Varghese
                           ` (2 subsequent siblings)
  6 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2019-01-07 15:38 UTC (permalink / raw)
  To: dev, thomas
  Cc: reshma.pattan, john.mcnamara, amol.patel, stephen,
	konstantin.ananyev, jasvinder.singh, Vipin Varghese

Function show_crypto is used for displaying the crypto PMD under primary
process.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
Acked-by: Reshma  Pattan <reshma.pattan@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
---
 app/proc-info/main.c           | 94 +++++++++++++++++++++++++++++++++-
 doc/guides/tools/proc_info.rst |  6 ++-
 2 files changed, 98 insertions(+), 2 deletions(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index ea15ae1a6..4f625a371 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -80,6 +80,8 @@ static char bdr_str[MAX_STRING_LEN];
 static uint32_t enable_shw_port;
 /**< Enable show tm. */
 static uint32_t enable_shw_tm;
+/**< Enable show crypto. */
+static uint32_t enable_shw_crypto;
 
 /**< display usage */
 static void
@@ -101,7 +103,8 @@ proc_info_usage(const char *prgname)
 		"  --collectd-format: to print statistics to STDOUT in expected by collectd format\n"
 		"  --host-id STRING: host id used to identify the system process is running on\n"
 		"  --show-port: to display ports information\n"
-		"  --show-tm: to display traffic manager information for ports\n",
+		"  --show-tm: to display traffic manager information for ports\n"
+		"  --show-crypto: to display crypto information\n",
 		prgname);
 }
 
@@ -210,6 +213,7 @@ proc_info_parse_args(int argc, char **argv)
 		{"host-id", 0, NULL, 0},
 		{"show-port", 0, NULL, 0},
 		{"show-tm", 0, NULL, 0},
+		{"show-crypto", 0, NULL, 0},
 		{NULL, 0, 0, 0}
 	};
 
@@ -259,6 +263,9 @@ proc_info_parse_args(int argc, char **argv)
 			else if (!strncmp(long_option[option_index].name,
 					"show-tm", MAX_LONG_OPT_SZ))
 				enable_shw_tm = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-crypto", MAX_LONG_OPT_SZ))
+				enable_shw_crypto = 1;
 			break;
 		case 1:
 			/* Print xstat single value given by name*/
@@ -980,6 +987,89 @@ show_tm(void)
 	STATS_BDR_STR(50, "");
 }
 
+static void
+display_crypto_feature_info(uint64_t x)
+{
+	if (x == 0)
+		return;
+
+	printf("\t  -- feature flags\n");
+	printf("\t\t  + symmetric (%c), asymmetric (%c)\n"
+		"\t\t  + symmetric operation chaining (%c)\n",
+		(x & RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING) ? 'y' : 'n');
+	printf("\t\t  + CPU: SSE (%c), AVX (%c), AVX2 (%c), AVX512 (%c)\n",
+		(x & RTE_CRYPTODEV_FF_CPU_SSE) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_CPU_AVX) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_CPU_AVX2) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_CPU_AVX512) ? 'y' : 'n');
+	printf("\t\t  + AESNI: CPU (%c), HW (%c)\n",
+		(x & RTE_CRYPTODEV_FF_CPU_AESNI) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_HW_ACCELERATED) ? 'y' : 'n');
+	printf("\t\t  + INLINE (%c)\n",
+		(x & RTE_CRYPTODEV_FF_SECURITY) ? 'y' : 'n');
+	printf("\t\t  + ARM: NEON (%c), CE (%c)\n",
+		(x & RTE_CRYPTODEV_FF_CPU_NEON) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_CPU_ARM_CE) ? 'y' : 'n');
+	printf("\t  -- buffer offload\n");
+	printf("\t\t  + IN_PLACE_SGL (%c)\n",
+		(x & RTE_CRYPTODEV_FF_IN_PLACE_SGL) ? 'y' : 'n');
+	printf("\t\t  + OOP_SGL_IN_SGL_OUT (%c)\n",
+		(x & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT) ? 'y' : 'n');
+	printf("\t\t  + OOP_SGL_IN_LB_OUT (%c)\n",
+		(x & RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT) ? 'y' : 'n');
+	printf("\t\t  + OOP_LB_IN_SGL_OUT (%c)\n",
+		(x & RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT) ? 'y' : 'n');
+	printf("\t\t  + OOP_LB_IN_LB_OUT (%c)\n",
+		(x & RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT) ? 'y' : 'n');
+}
+
+static void
+show_crypto(void)
+{
+	uint8_t crypto_dev_count = rte_cryptodev_count(), i;
+
+	snprintf(bdr_str, MAX_STRING_LEN, " show - CRYPTO PMD %"PRIu64,
+			rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	for (i = 0; i < crypto_dev_count; i++) {
+		struct rte_cryptodev_info dev_info;
+		struct rte_cryptodev_stats stats;
+
+		rte_cryptodev_info_get(i, &dev_info);
+
+		printf("  - device (%u)\n", i);
+		printf("\t  -- name (%s)\n"
+			"\t  -- driver (%s)\n"
+			"\t  -- id (%u) on socket (%d)\n"
+			"\t  -- queue pairs (%d)\n",
+			rte_cryptodev_name_get(i),
+			dev_info.driver_name,
+			dev_info.driver_id,
+			dev_info.device->numa_node,
+			rte_cryptodev_queue_pair_count(i));
+
+		display_crypto_feature_info(dev_info.feature_flags);
+
+		memset(&stats, 0, sizeof(0));
+		if (rte_cryptodev_stats_get(i, &stats) == 0) {
+			printf("\t  -- stats\n");
+			printf("\t\t  + enqueue count (%"PRIu64")"
+				" error (%"PRIu64")\n",
+				stats.enqueued_count,
+				stats.enqueue_err_count);
+			printf("\t\t  + dequeue count (%"PRIu64")"
+				" error (%"PRIu64")\n",
+				stats.dequeued_count,
+				stats.dequeue_err_count);
+		}
+	}
+
+	STATS_BDR_STR(50, "");
+}
+
 int
 main(int argc, char **argv)
 {
@@ -1065,6 +1155,8 @@ main(int argc, char **argv)
 		show_port();
 	if (enable_shw_tm)
 		show_tm();
+	if (enable_shw_crypto)
+		show_crypto();
 
 	ret = rte_eal_cleanup();
 	if (ret)
diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst
index 5f9afdb79..883864d18 100644
--- a/doc/guides/tools/proc_info.rst
+++ b/doc/guides/tools/proc_info.rst
@@ -18,7 +18,7 @@ The application has a number of command line options:
 .. code-block:: console
 
    ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats |
-   --stats-reset | --xstats-reset] [ --show-port | --show-tm ]
+   --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto ]
 
 Parameters
 ~~~~~~~~~~
@@ -50,6 +50,10 @@ associated to RX port queue pair.
 The show-tm parameter displays per port traffic manager settings, current
 configurations and statistics.
 
+**--show-crypto**
+The show-crypto parameter displays available cryptodev configurations,
+settings and stats per node.
+
 Limitations
 -----------
 
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v8 5/7] app/procinfo: add support for debug ring
  2019-01-07 15:38       ` [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance " Vipin Varghese
                           ` (3 preceding siblings ...)
  2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 4/7] app/procinfo: add support for show crypto Vipin Varghese
@ 2019-01-07 15:38         ` Vipin Varghese
  2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 6/7] app/procinfo: add support for show mempool Vipin Varghese
  2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 7/7] app/procinfo: add support for iter mempool Vipin Varghese
  6 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2019-01-07 15:38 UTC (permalink / raw)
  To: dev, thomas
  Cc: reshma.pattan, john.mcnamara, amol.patel, stephen,
	konstantin.ananyev, jasvinder.singh, Vipin Varghese

Function show_ring is used for displaying information of RING instance
of the primary process.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
Acked-by: Reshma  Pattan <reshma.pattan@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
---
 app/proc-info/main.c           | 52 +++++++++++++++++++++++++++++++++-
 doc/guides/tools/proc_info.rst |  8 +++++-
 2 files changed, 58 insertions(+), 2 deletions(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 4f625a371..ed136d828 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -82,6 +82,9 @@ static uint32_t enable_shw_port;
 static uint32_t enable_shw_tm;
 /**< Enable show crypto. */
 static uint32_t enable_shw_crypto;
+/**< Enable show ring. */
+static uint32_t enable_shw_ring;
+static char *ring_name;
 
 /**< display usage */
 static void
@@ -104,7 +107,8 @@ proc_info_usage(const char *prgname)
 		"  --host-id STRING: host id used to identify the system process is running on\n"
 		"  --show-port: to display ports information\n"
 		"  --show-tm: to display traffic manager information for ports\n"
-		"  --show-crypto: to display crypto information\n",
+		"  --show-crypto: to display crypto information\n"
+		"  --show-ring[=name]: to display ring information\n",
 		prgname);
 }
 
@@ -214,6 +218,7 @@ proc_info_parse_args(int argc, char **argv)
 		{"show-port", 0, NULL, 0},
 		{"show-tm", 0, NULL, 0},
 		{"show-crypto", 0, NULL, 0},
+		{"show-ring", optional_argument, NULL, 0},
 		{NULL, 0, 0, 0}
 	};
 
@@ -266,6 +271,11 @@ proc_info_parse_args(int argc, char **argv)
 			else if (!strncmp(long_option[option_index].name,
 					"show-crypto", MAX_LONG_OPT_SZ))
 				enable_shw_crypto = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-ring", MAX_LONG_OPT_SZ)) {
+				enable_shw_ring = 1;
+				ring_name = optarg;
+			}
 			break;
 		case 1:
 			/* Print xstat single value given by name*/
@@ -1070,6 +1080,44 @@ show_crypto(void)
 	STATS_BDR_STR(50, "");
 }
 
+static void
+show_ring(char *name)
+{
+	snprintf(bdr_str, MAX_STRING_LEN, " show - RING %"PRIu64,
+			rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	if (name != NULL) {
+		struct rte_ring *ptr = rte_ring_lookup(name);
+		if (ptr != NULL) {
+			printf("  - Name (%s) on socket (%d)\n"
+				"  - flags:\n"
+				"\t  -- Single Producer Enqueue (%u)\n"
+				"\t  -- Single Consmer Dequeue (%u)\n",
+				ptr->name,
+				ptr->memzone->socket_id,
+				ptr->flags & RING_F_SP_ENQ,
+				ptr->flags & RING_F_SC_DEQ);
+			printf("  - size (%u) mask (0x%x) capacity (%u)\n",
+				ptr->size,
+				ptr->mask,
+				ptr->capacity);
+			printf("  - count (%u) free count (%u)\n",
+				rte_ring_count(ptr),
+				rte_ring_free_count(ptr));
+			printf("  - full (%d) empty (%d)\n",
+				rte_ring_full(ptr),
+				rte_ring_empty(ptr));
+
+			STATS_BDR_STR(50, "");
+			return;
+		}
+	}
+
+	rte_ring_list_dump(stdout);
+	STATS_BDR_STR(50, "");
+}
+
 int
 main(int argc, char **argv)
 {
@@ -1157,6 +1205,8 @@ main(int argc, char **argv)
 		show_tm();
 	if (enable_shw_crypto)
 		show_crypto();
+	if (enable_shw_ring)
+		show_ring(ring_name);
 
 	ret = rte_eal_cleanup();
 	if (ret)
diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst
index 883864d18..ba5c3dbd1 100644
--- a/doc/guides/tools/proc_info.rst
+++ b/doc/guides/tools/proc_info.rst
@@ -18,7 +18,8 @@ The application has a number of command line options:
 .. code-block:: console
 
    ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats |
-   --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto ]
+   --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto |
+   --show-ring[=name] ]
 
 Parameters
 ~~~~~~~~~~
@@ -54,6 +55,11 @@ configurations and statistics.
 The show-crypto parameter displays available cryptodev configurations,
 settings and stats per node.
 
+**--show-ring[=name]**
+The show-ring pararmeter display current allocation of all ring with
+debug information. Specifying the name allows to display details for specific
+ring. For invalid or no ring name, whole list is dump.
+
 Limitations
 -----------
 
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v8 6/7] app/procinfo: add support for show mempool
  2019-01-07 15:38       ` [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance " Vipin Varghese
                           ` (4 preceding siblings ...)
  2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 5/7] app/procinfo: add support for debug ring Vipin Varghese
@ 2019-01-07 15:38         ` Vipin Varghese
  2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 7/7] app/procinfo: add support for iter mempool Vipin Varghese
  6 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2019-01-07 15:38 UTC (permalink / raw)
  To: dev, thomas
  Cc: reshma.pattan, john.mcnamara, amol.patel, stephen,
	konstantin.ananyev, jasvinder.singh, Vipin Varghese

Function show_mempool is used for displaying valid MEMPOOL.
In case of invalid or no name, whole list is dump.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
Acked-by: Reshma  Pattan <reshma.pattan@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
---
 app/proc-info/main.c           | 65 +++++++++++++++++++++++++++++++++-
 doc/guides/tools/proc_info.rst |  7 +++-
 2 files changed, 70 insertions(+), 2 deletions(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index ed136d828..4aeab926d 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -85,6 +85,9 @@ static uint32_t enable_shw_crypto;
 /**< Enable show ring. */
 static uint32_t enable_shw_ring;
 static char *ring_name;
+/**< Enable show mempool. */
+static uint32_t enable_shw_mempool;
+static char *mempool_name;
 
 /**< display usage */
 static void
@@ -108,7 +111,8 @@ proc_info_usage(const char *prgname)
 		"  --show-port: to display ports information\n"
 		"  --show-tm: to display traffic manager information for ports\n"
 		"  --show-crypto: to display crypto information\n"
-		"  --show-ring[=name]: to display ring information\n",
+		"  --show-ring[=name]: to display ring information\n"
+		"  --show-mempool[=name]: to display mempool information\n",
 		prgname);
 }
 
@@ -219,6 +223,7 @@ proc_info_parse_args(int argc, char **argv)
 		{"show-tm", 0, NULL, 0},
 		{"show-crypto", 0, NULL, 0},
 		{"show-ring", optional_argument, NULL, 0},
+		{"show-mempool", optional_argument, NULL, 0},
 		{NULL, 0, 0, 0}
 	};
 
@@ -275,6 +280,10 @@ proc_info_parse_args(int argc, char **argv)
 					"show-ring", MAX_LONG_OPT_SZ)) {
 				enable_shw_ring = 1;
 				ring_name = optarg;
+			} else if (!strncmp(long_option[option_index].name,
+					"show-mempool", MAX_LONG_OPT_SZ)) {
+				enable_shw_mempool = 1;
+				mempool_name = optarg;
 			}
 			break;
 		case 1:
@@ -1118,6 +1127,58 @@ show_ring(char *name)
 	STATS_BDR_STR(50, "");
 }
 
+static void
+show_mempool(char *name)
+{
+	uint64_t flags = 0;
+
+	snprintf(bdr_str, MAX_STRING_LEN, " show - MEMPOOL %"PRIu64,
+			rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	if (name != NULL) {
+		struct rte_mempool *ptr = rte_mempool_lookup(name);
+		if (ptr != NULL) {
+			flags = ptr->flags;
+			printf("  - Name: %s on socket %d\n"
+				"  - flags:\n"
+				"\t  -- No spread (%c)\n"
+				"\t  -- No cache align (%c)\n"
+				"\t  -- SP put (%c), SC get (%c)\n"
+				"\t  -- Pool created (%c)\n"
+				"\t  -- No IOVA config (%c)\n",
+				ptr->name,
+				ptr->socket_id,
+				(flags & MEMPOOL_F_NO_SPREAD) ? 'y' : 'n',
+				(flags & MEMPOOL_F_NO_CACHE_ALIGN) ? 'y' : 'n',
+				(flags & MEMPOOL_F_SP_PUT) ? 'y' : 'n',
+				(flags & MEMPOOL_F_SC_GET) ? 'y' : 'n',
+				(flags & MEMPOOL_F_POOL_CREATED) ? 'y' : 'n',
+				(flags & MEMPOOL_F_NO_IOVA_CONTIG) ? 'y' : 'n');
+			printf("  - Size %u Cache %u element %u\n"
+				"  - header %u trailer %u\n"
+				"  - private data size %u\n",
+				ptr->size,
+				ptr->cache_size,
+				ptr->elt_size,
+				ptr->header_size,
+				ptr->trailer_size,
+				ptr->private_data_size);
+			printf("  - memezone - socket %d\n",
+				ptr->mz->socket_id);
+			printf("  - Count: avail (%u), in use (%u)\n",
+				rte_mempool_avail_count(ptr),
+				rte_mempool_in_use_count(ptr));
+
+			STATS_BDR_STR(50, "");
+			return;
+		}
+	}
+
+	rte_mempool_list_dump(stdout);
+	STATS_BDR_STR(50, "");
+}
+
 int
 main(int argc, char **argv)
 {
@@ -1207,6 +1268,8 @@ main(int argc, char **argv)
 		show_crypto();
 	if (enable_shw_ring)
 		show_ring(ring_name);
+	if (enable_shw_mempool)
+		show_mempool(mempool_name);
 
 	ret = rte_eal_cleanup();
 	if (ret)
diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst
index ba5c3dbd1..42c5d45e0 100644
--- a/doc/guides/tools/proc_info.rst
+++ b/doc/guides/tools/proc_info.rst
@@ -19,7 +19,7 @@ The application has a number of command line options:
 
    ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats |
    --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto |
-   --show-ring[=name] ]
+   --show-ring[=name] | --show-mempool[=name] ]
 
 Parameters
 ~~~~~~~~~~
@@ -60,6 +60,11 @@ The show-ring pararmeter display current allocation of all ring with
 debug information. Specifying the name allows to display details for specific
 ring. For invalid or no ring name, whole list is dump.
 
+**--show-mempool[=name]**
+The show-mempool parameter display current allocation of all mempool
+debug information. Specifying the name allows to display details for specific
+specific mempool. For invalid or no mempool name, whole list is dump.
+
 Limitations
 -----------
 
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v8 7/7] app/procinfo: add support for iter mempool
  2019-01-07 15:38       ` [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance " Vipin Varghese
                           ` (5 preceding siblings ...)
  2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 6/7] app/procinfo: add support for show mempool Vipin Varghese
@ 2019-01-07 15:38         ` Vipin Varghese
  6 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2019-01-07 15:38 UTC (permalink / raw)
  To: dev, thomas
  Cc: reshma.pattan, john.mcnamara, amol.patel, stephen,
	konstantin.ananyev, jasvinder.singh, Vipin Varghese

Function iter_mempool is used for iterating slected mempool elements
and display the contents of elements for a max of 256 bytes. In case
of invalid or no name for mempool, no information is displayed.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
Acked-by: Reshma  Pattan <reshma.pattan@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
---
 app/proc-info/main.c           | 48 +++++++++++++++++++++++++++++++++-
 doc/guides/tools/proc_info.rst |  6 ++++-
 2 files changed, 52 insertions(+), 2 deletions(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 4aeab926d..b9acfa9ec 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -33,6 +33,7 @@
 #include <rte_security.h>
 #include <rte_cryptodev.h>
 #include <rte_tm.h>
+#include <rte_hexdump.h>
 
 /* Maximum long option length for option parsing. */
 #define MAX_LONG_OPT_SZ 64
@@ -88,6 +89,9 @@ static char *ring_name;
 /**< Enable show mempool. */
 static uint32_t enable_shw_mempool;
 static char *mempool_name;
+/**< Enable iter mempool. */
+static uint32_t enable_iter_mempool;
+static char *mempool_iter_name;
 
 /**< display usage */
 static void
@@ -112,7 +116,8 @@ proc_info_usage(const char *prgname)
 		"  --show-tm: to display traffic manager information for ports\n"
 		"  --show-crypto: to display crypto information\n"
 		"  --show-ring[=name]: to display ring information\n"
-		"  --show-mempool[=name]: to display mempool information\n",
+		"  --show-mempool[=name]: to display mempool information\n"
+		"  --iter-mempool=name: iterate mempool elements to display content\n",
 		prgname);
 }
 
@@ -224,6 +229,7 @@ proc_info_parse_args(int argc, char **argv)
 		{"show-crypto", 0, NULL, 0},
 		{"show-ring", optional_argument, NULL, 0},
 		{"show-mempool", optional_argument, NULL, 0},
+		{"iter-mempool", required_argument, NULL, 0},
 		{NULL, 0, 0, 0}
 	};
 
@@ -284,6 +290,10 @@ proc_info_parse_args(int argc, char **argv)
 					"show-mempool", MAX_LONG_OPT_SZ)) {
 				enable_shw_mempool = 1;
 				mempool_name = optarg;
+			} else if (!strncmp(long_option[option_index].name,
+					"iter-mempool", MAX_LONG_OPT_SZ)) {
+				enable_iter_mempool = 1;
+				mempool_iter_name = optarg;
 			}
 			break;
 		case 1:
@@ -1179,6 +1189,40 @@ show_mempool(char *name)
 	STATS_BDR_STR(50, "");
 }
 
+static void
+mempool_itr_obj(struct rte_mempool *mp, void *opaque,
+		void *obj, unsigned int obj_idx)
+{
+	printf("  - obj_idx %u opaque %p obj %p\n",
+			obj_idx, opaque, obj);
+
+	if (obj)
+		rte_hexdump(stdout, " Obj Content",
+				obj, (mp->elt_size > 256)?256:mp->elt_size);
+}
+
+static void
+iter_mempool(char *name)
+{
+	snprintf(bdr_str, MAX_STRING_LEN, " iter - MEMPOOL %"PRIu64,
+			rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	if (name != NULL) {
+		struct rte_mempool *ptr = rte_mempool_lookup(name);
+		if (ptr != NULL) {
+			/* iterate each object */
+			uint32_t ret = rte_mempool_obj_iter(ptr,
+					mempool_itr_obj, NULL);
+			printf("\n  - iterated %u objects\n", ret);
+			STATS_BDR_STR(50, "");
+			return;
+		}
+	}
+
+	STATS_BDR_STR(50, "");
+}
+
 int
 main(int argc, char **argv)
 {
@@ -1270,6 +1314,8 @@ main(int argc, char **argv)
 		show_ring(ring_name);
 	if (enable_shw_mempool)
 		show_mempool(mempool_name);
+	if (enable_iter_mempool)
+		iter_mempool(mempool_iter_name);
 
 	ret = rte_eal_cleanup();
 	if (ret)
diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst
index 42c5d45e0..6bdf5a861 100644
--- a/doc/guides/tools/proc_info.rst
+++ b/doc/guides/tools/proc_info.rst
@@ -19,7 +19,7 @@ The application has a number of command line options:
 
    ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats |
    --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto |
-   --show-ring[=name] | --show-mempool[=name] ]
+   --show-ring[=name] | --show-mempool[=name] | --iter-mempool=name ]
 
 Parameters
 ~~~~~~~~~~
@@ -65,6 +65,10 @@ The show-mempool parameter display current allocation of all mempool
 debug information. Specifying the name allows to display details for specific
 specific mempool. For invalid or no mempool name, whole list is dump.
 
+**--iter-mempool=name**
+The iter-mempool parameter iterates and displays mempool elements specified
+by name. For invalid or no mempool name no elements are displayed.
+
 Limitations
 -----------
 
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions
  2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions Vipin Varghese
@ 2019-01-09 23:45           ` Thomas Monjalon
  2019-01-10  3:08             ` Varghese, Vipin
  2019-01-10 21:36           ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Vipin Varghese
  1 sibling, 1 reply; 68+ messages in thread
From: Thomas Monjalon @ 2019-01-09 23:45 UTC (permalink / raw)
  To: Vipin Varghese
  Cc: dev, reshma.pattan, john.mcnamara, amol.patel, stephen,
	konstantin.ananyev, jasvinder.singh

Hi Vipin,

The code split in this v8 looks really better,
except this patch which makes no sense alone.
I feel you can move these changes in next patches,
where appropriate, isn't it?

07/01/2019 16:38, Vipin Varghese:
> Update code base and meson build file to accomadate changes for the
> new functionality.
> 
> Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
> Acked-by: Reshma  Pattan <reshma.pattan@intel.com>
> ---
>  app/proc-info/main.c      | 13 +++++++++++++
>  app/proc-info/meson.build |  2 +-
>  2 files changed, 14 insertions(+), 1 deletion(-)
> 
> diff --git a/app/proc-info/main.c b/app/proc-info/main.c
> index c20effa4f..c7697389c 100644
> --- a/app/proc-info/main.c
> +++ b/app/proc-info/main.c
> @@ -29,6 +29,9 @@
>  #include <rte_branch_prediction.h>
>  #include <rte_string_fns.h>
>  #include <rte_metrics.h>
> +#include <rte_cycles.h>
> +#include <rte_security.h>
> +#include <rte_cryptodev.h>
>  
>  /* Maximum long option length for option parsing. */
>  #define MAX_LONG_OPT_SZ 64
> @@ -36,6 +39,10 @@
>  
>  #define MAX_STRING_LEN 256
>  
> +#define STATS_BDR_FMT "========================================"
> +#define STATS_BDR_STR(w, s) printf("%.*s%s%.*s\n", w, \
> +	STATS_BDR_FMT, s, w, STATS_BDR_FMT)
> +
>  /**< mask of enabled ports */
>  static uint32_t enabled_port_mask;
>  /**< Enable stats. */
> @@ -65,6 +72,9 @@ static char *xstats_name;
>  static uint32_t nb_xstats_ids;
>  static uint64_t xstats_ids[MAX_NB_XSTATS_IDS];
>  
> +/* show border */
> +static char bdr_str[MAX_STRING_LEN];
> +
>  /**< display usage */
>  static void
>  proc_info_usage(const char *prgname)
> @@ -668,5 +678,8 @@ main(int argc, char **argv)
>  	if (ret)
>  		printf("Error from rte_eal_cleanup(), %d\n", ret);
>  
> +	snprintf(bdr_str, MAX_STRING_LEN, " ");
> +	STATS_BDR_STR(50, bdr_str);
> +
>  	return 0;
>  }
> diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build
> index a52b2ee4a..866b390d6 100644
> --- a/app/proc-info/meson.build
> +++ b/app/proc-info/meson.build
> @@ -3,4 +3,4 @@
>  
>  sources = files('main.c')
>  allow_experimental_apis = true
> -deps += ['ethdev', 'metrics']
> +deps += ['ethdev', 'metrics', 'security']
> 

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions
  2019-01-09 23:45           ` Thomas Monjalon
@ 2019-01-10  3:08             ` Varghese, Vipin
  2019-01-10  8:39               ` Thomas Monjalon
  0 siblings, 1 reply; 68+ messages in thread
From: Varghese, Vipin @ 2019-01-10  3:08 UTC (permalink / raw)
  To: Thomas Monjalon
  Cc: dev, Pattan, Reshma, Mcnamara, John, Patel, Amol, stephen,
	Ananyev, Konstantin, Singh, Jasvinder

snipped
> 
> Hi Vipin,
> 
> The code split in this v8 looks really better, except this patch which makes no
> sense alone.
Hi Thomas, I need this base patch as first one. These include the helper MACRO and include which pans out for next 7 patches.

> I feel you can move these changes in next patches, where appropriate, isn't it?
Patches v2 to v7 uses common features from v1. 

> 
> 07/01/2019 16:38, Vipin Varghese:
> > Update code base and meson build file to accomadate changes for the
> > new functionality.
> >
> > Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
> > Acked-by: Reshma  Pattan <reshma.pattan@intel.com>
> > ---
> >  app/proc-info/main.c      | 13 +++++++++++++
> >  app/proc-info/meson.build |  2 +-
> >  2 files changed, 14 insertions(+), 1 deletion(-)
> >
> > diff --git a/app/proc-info/main.c b/app/proc-info/main.c index
> > c20effa4f..c7697389c 100644
> > --- a/app/proc-info/main.c
> > +++ b/app/proc-info/main.c
> > @@ -29,6 +29,9 @@
> >  #include <rte_branch_prediction.h>
> >  #include <rte_string_fns.h>
> >  #include <rte_metrics.h>
> > +#include <rte_cycles.h>
> > +#include <rte_security.h>
> > +#include <rte_cryptodev.h>
> >
> >  /* Maximum long option length for option parsing. */  #define
> > MAX_LONG_OPT_SZ 64 @@ -36,6 +39,10 @@
> >
> >  #define MAX_STRING_LEN 256
> >
> > +#define STATS_BDR_FMT
> "========================================"
> > +#define STATS_BDR_STR(w, s) printf("%.*s%s%.*s\n", w, \
> > +	STATS_BDR_FMT, s, w, STATS_BDR_FMT)
> > +
> >  /**< mask of enabled ports */
> >  static uint32_t enabled_port_mask;
> >  /**< Enable stats. */
> > @@ -65,6 +72,9 @@ static char *xstats_name;  static uint32_t
> > nb_xstats_ids;  static uint64_t xstats_ids[MAX_NB_XSTATS_IDS];
> >
> > +/* show border */
> > +static char bdr_str[MAX_STRING_LEN];
> > +
> >  /**< display usage */
> >  static void
> >  proc_info_usage(const char *prgname)
> > @@ -668,5 +678,8 @@ main(int argc, char **argv)
> >  	if (ret)
> >  		printf("Error from rte_eal_cleanup(), %d\n", ret);
> >
> > +	snprintf(bdr_str, MAX_STRING_LEN, " ");
> > +	STATS_BDR_STR(50, bdr_str);
> > +
> >  	return 0;
> >  }
> > diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build
> > index a52b2ee4a..866b390d6 100644
> > --- a/app/proc-info/meson.build
> > +++ b/app/proc-info/meson.build
> > @@ -3,4 +3,4 @@
> >
> >  sources = files('main.c')
> >  allow_experimental_apis = true
> > -deps += ['ethdev', 'metrics']
> > +deps += ['ethdev', 'metrics', 'security']
> >
> 
> 
> 
> 

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions
  2019-01-10  3:08             ` Varghese, Vipin
@ 2019-01-10  8:39               ` Thomas Monjalon
  2019-01-10  8:53                 ` Varghese, Vipin
  0 siblings, 1 reply; 68+ messages in thread
From: Thomas Monjalon @ 2019-01-10  8:39 UTC (permalink / raw)
  To: Varghese, Vipin
  Cc: dev, Pattan, Reshma, Mcnamara, John, Patel, Amol, stephen,
	Ananyev, Konstantin, Singh, Jasvinder

10/01/2019 04:08, Varghese, Vipin:
> snipped
> > 
> > Hi Vipin,
> > 
> > The code split in this v8 looks really better, except this patch which makes no
> > sense alone.
> Hi Thomas, I need this base patch as first one. These include the helper MACRO and include which pans out for next 7 patches.
> 
> > I feel you can move these changes in next patches, where appropriate, isn't it?
> Patches v2 to v7 uses common features from v1. 

At least, you should introduce the includes when needed.
If you need this patch for introducing some macros,
then rename it and explain the macros in the message.


> > 07/01/2019 16:38, Vipin Varghese:
> > > Update code base and meson build file to accomadate changes for the
> > > new functionality.
> > >
> > > Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
> > > Acked-by: Reshma  Pattan <reshma.pattan@intel.com>
> > > ---
> > >  app/proc-info/main.c      | 13 +++++++++++++
> > >  app/proc-info/meson.build |  2 +-
> > >  2 files changed, 14 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/app/proc-info/main.c b/app/proc-info/main.c index
> > > c20effa4f..c7697389c 100644
> > > --- a/app/proc-info/main.c
> > > +++ b/app/proc-info/main.c
> > > @@ -29,6 +29,9 @@
> > >  #include <rte_branch_prediction.h>
> > >  #include <rte_string_fns.h>
> > >  #include <rte_metrics.h>
> > > +#include <rte_cycles.h>
> > > +#include <rte_security.h>
> > > +#include <rte_cryptodev.h>
> > >
> > >  /* Maximum long option length for option parsing. */  #define
> > > MAX_LONG_OPT_SZ 64 @@ -36,6 +39,10 @@
> > >
> > >  #define MAX_STRING_LEN 256
> > >
> > > +#define STATS_BDR_FMT
> > "========================================"
> > > +#define STATS_BDR_STR(w, s) printf("%.*s%s%.*s\n", w, \
> > > +	STATS_BDR_FMT, s, w, STATS_BDR_FMT)
> > > +
> > >  /**< mask of enabled ports */
> > >  static uint32_t enabled_port_mask;
> > >  /**< Enable stats. */
> > > @@ -65,6 +72,9 @@ static char *xstats_name;  static uint32_t
> > > nb_xstats_ids;  static uint64_t xstats_ids[MAX_NB_XSTATS_IDS];
> > >
> > > +/* show border */
> > > +static char bdr_str[MAX_STRING_LEN];
> > > +
> > >  /**< display usage */
> > >  static void
> > >  proc_info_usage(const char *prgname)
> > > @@ -668,5 +678,8 @@ main(int argc, char **argv)
> > >  	if (ret)
> > >  		printf("Error from rte_eal_cleanup(), %d\n", ret);
> > >
> > > +	snprintf(bdr_str, MAX_STRING_LEN, " ");
> > > +	STATS_BDR_STR(50, bdr_str);
> > > +
> > >  	return 0;
> > >  }
> > > diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build
> > > index a52b2ee4a..866b390d6 100644
> > > --- a/app/proc-info/meson.build
> > > +++ b/app/proc-info/meson.build
> > > @@ -3,4 +3,4 @@
> > >
> > >  sources = files('main.c')
> > >  allow_experimental_apis = true
> > > -deps += ['ethdev', 'metrics']
> > > +deps += ['ethdev', 'metrics', 'security']

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions
  2019-01-10  8:39               ` Thomas Monjalon
@ 2019-01-10  8:53                 ` Varghese, Vipin
  2019-01-10  9:09                   ` Thomas Monjalon
  0 siblings, 1 reply; 68+ messages in thread
From: Varghese, Vipin @ 2019-01-10  8:53 UTC (permalink / raw)
  To: Thomas Monjalon
  Cc: dev, Pattan, Reshma, Mcnamara, John, Patel, Amol, stephen,
	Ananyev, Konstantin, Singh, Jasvinder

Hi Thomas,

snipped
> 
> 10/01/2019 04:08, Varghese, Vipin:
> > snipped
> > >
> > > Hi Vipin,
> > >
> > > The code split in this v8 looks really better, except this patch
> > > which makes no sense alone.
> > Hi Thomas, I need this base patch as first one. These include the helper
> MACRO and include which pans out for next 7 patches.
> >
> > > I feel you can move these changes in next patches, where appropriate, isn't
> it?
> > Patches v2 to v7 uses common features from v1.
> 
> At least, you should introduce the includes when needed.
As mentioned earlier these are used in v2 to v7.

> If you need this patch for introducing some macros, then rename it and
> explain the macros in the message.
The MACRO introduced in this patch are 'MAX_STRING_LEN, STATS_BDR_FMT and STATS_BDR_STR'. As per code contribution guideline I may have missed out the stipulation requesting for explaining the same.

> 
> 
> > > 07/01/2019 16:38, Vipin Varghese:
> > > > Update code base and meson build file to accommodate changes for
> > > > the new functionality.
> > > >
> > > > Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
> > > > Acked-by: Reshma  Pattan <reshma.pattan@intel.com>
> > > > ---
snipped

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions
  2019-01-10  8:53                 ` Varghese, Vipin
@ 2019-01-10  9:09                   ` Thomas Monjalon
  0 siblings, 0 replies; 68+ messages in thread
From: Thomas Monjalon @ 2019-01-10  9:09 UTC (permalink / raw)
  To: Varghese, Vipin
  Cc: dev, Pattan, Reshma, Mcnamara, John, Patel, Amol, stephen,
	Ananyev, Konstantin, Singh, Jasvinder

10/01/2019 09:53, Varghese, Vipin:
> Hi Thomas,
> 
> snipped
> > 
> > 10/01/2019 04:08, Varghese, Vipin:
> > > snipped
> > > >
> > > > Hi Vipin,
> > > >
> > > > The code split in this v8 looks really better, except this patch
> > > > which makes no sense alone.
> > > Hi Thomas, I need this base patch as first one. These include the helper
> > MACRO and include which pans out for next 7 patches.
> > >
> > > > I feel you can move these changes in next patches, where appropriate, isn't
> > it?
> > > Patches v2 to v7 uses common features from v1.
> > 
> > At least, you should introduce the includes when needed.
> As mentioned earlier these are used in v2 to v7.

So?
They must be introduced first time they are used.
Vipin, please be cooperative.

> > If you need this patch for introducing some macros, then rename it and
> > explain the macros in the message.
> The MACRO introduced in this patch are 'MAX_STRING_LEN, STATS_BDR_FMT and STATS_BDR_STR'. As per code contribution guideline I may have missed out the stipulation requesting for explaining the same.
> 
> > 
> > 
> > > > 07/01/2019 16:38, Vipin Varghese:
> > > > > Update code base and meson build file to accommodate changes for
> > > > > the new functionality.
> > > > >
> > > > > Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
> > > > > Acked-by: Reshma  Pattan <reshma.pattan@intel.com>
> > > > > ---
> snipped
> 

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v9 1/6] app/procinfo: add support for show port
  2019-01-10 21:36             ` [dpdk-dev] [PATCH v9 1/6] app/procinfo: add support for show port Vipin Varghese
@ 2019-01-10 17:40               ` Thomas Monjalon
  2019-01-11  3:57                 ` Varghese, Vipin
  0 siblings, 1 reply; 68+ messages in thread
From: Thomas Monjalon @ 2019-01-10 17:40 UTC (permalink / raw)
  To: Vipin Varghese
  Cc: dev, john.mcnamara, konstantin.ananyev, stephen, reshma.pattan,
	jasvinder.singh, stephen1.byrne, amol.patel

10/01/2019 22:36, Vipin Varghese:
> Function show_port is used for displaying the port PMD information under
> primary process. The information shows basic, per queue and security.
> Also helper MACRO 'MAX_STRING_LEN, STATS_BDR_FMT and STATS_BDR_STR' and
> meson build file is updated for new functionality.
> 
> Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
> Acked-by: Reshma  Pattan <reshma.pattan@intel.com>
> Acked-by: John McNamara <john.mcnamara@intel.com>
> ---
>  app/proc-info/main.c           | 119 ++++++++++++++++++++++++++++++++-
>  app/proc-info/meson.build      |   2 +-
>  doc/guides/tools/proc_info.rst |   9 ++-
>  3 files changed, 126 insertions(+), 4 deletions(-)
> 
> diff --git a/app/proc-info/main.c b/app/proc-info/main.c
> index c20effa4f..2108c24b0 100644
> --- a/app/proc-info/main.c
> +++ b/app/proc-info/main.c
> @@ -29,6 +29,9 @@
>  #include <rte_branch_prediction.h>
>  #include <rte_string_fns.h>
>  #include <rte_metrics.h>
> +#include <rte_cycles.h>
> +#include <rte_security.h>
> +#include <rte_cryptodev.h>

Is the crypto include really required in this patch?

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool
  2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions Vipin Varghese
  2019-01-09 23:45           ` Thomas Monjalon
@ 2019-01-10 21:36           ` Vipin Varghese
  2019-01-10 21:36             ` [dpdk-dev] [PATCH v9 1/6] app/procinfo: add support for show port Vipin Varghese
                               ` (6 more replies)
  1 sibling, 7 replies; 68+ messages in thread
From: Vipin Varghese @ 2019-01-10 21:36 UTC (permalink / raw)
  To: dev, thomas, john.mcnamara
  Cc: konstantin.ananyev, stephen, reshma.pattan, jasvinder.singh,
	stephen1.byrne, amol.patel, Vipin Varghese

This patch adds new debug functions to existing proc-info tool.

Motivation
==========

DPDK proc-info tool is been widely used as secondary process to collect
stats for any primary process. But these are limited to DPDK NIC ports and
basic memory usage.

The patch series tries to address the missing debug information for PMD by
adding debug for port, traffic manager, crypto, ring and mempool. With
these additional information collected, it becomes easy to analyze issues
and performance variance.

Status
======

Reviews and changes accomadated. ACK received for documenation and code.

  app/procinfo: add support for show port
  app/procinfo: add support for show tm
  app/procinfo: add support for show crypto
  app/procinfo: add support for debug ring
  app/procinfo: add support for show mempool
  app/procinfo: add support for iter mempool

 app/proc-info/main.c           | 658 ++++++++++++++++++++++++++++++++-
 app/proc-info/meson.build      |   2 +-
 doc/guides/tools/proc_info.rst |  32 +-
 3 files changed, 688 insertions(+), 4 deletions(-)

Change Log:
==========

v9:
 - merge v8/1 and v8/2 and define about macros - Thomas Monjalon

v8:
 - merge documenation with code - Thomas Monjalon
 - split patch for iter_mempool - Reshma Pattan
 - add ack for code - Reshma Pattan

V7:
 - update usage text with token ":" - Reshma Pattan
 - reword usage for 'iter-mempool' - Reshma Pattan

V6:
 - add mempool iterate elements option - Vipin Varghese
 - check for iter mempool - Vipin Varghese
 - add call to iter mempool - Vipin Varghese
 - replace or with logical or - Reshma Pathan & Konstantin Ananyev
 - split iter mempool - Vipin Varghese
 - update entry for mempool iter - Vipin Varghese
 - add ack for v5 - John Mcnamara
 - update entry for mempool iter - Vipin Varghese

V5:
 - convert 100 to MAX_STRING_LEN - Reshma Pattan
 - RSS made for port - Reshma Pattan
 - update bdr_str to static - Stephen Hemminger
 - remove memset for link, dev_info, queue, stats - Stephen Hemminger
 - update ret to uint32_t - Reshma Pattan

v4:
 - add space to compare - Vipin Varghese
 - add spacing for flag compare - Vipin Varghese

V3:
 - change the usage details - Vipin Varghese
 - variables from debug to show - Vipin Varghese
 - update function names from debug to show - Vipin Varghese
 - fix meson build - Reshma Pattan
 - change 100 to MAX_STRING_LEN - Reshma Pattan
 - memset to struct elements - Reshma Pattan
 - printf tab space - Reshma Pattan
 - remove 'drop packet information' - Vipin Varghese
 - memset for struct elements - Vipin Varghese
 - code cleanup for TM - Vipin Varghese
 - fetch for leaf nodes if node exist - Jasvinder Singh
 - display MARCO to function - Reshma Pathan & Stephen Hemminger
 - add memset for struct elements - Reshma Pathan
 - change display formating of flags - Vipin Varghese
 - use MACRO for string - Vipin Varghese
 - replace space to tab in printf - Reshma Pathan
 - change ring display information - Vipin Varghese
 - update document from dbg to show - Vipin Varghese

V2:
 - change word dbg to show - Stephen Hemminger
 - compare string from dbg to show - Stephen Hemminger
 - removed if else ladder - Vipin Varghese
 - redefine code format - Vipin Varghese
 - MACRO for display node|level - cap - Vipin Varghese
 - update word style for content - Vipin Varghese

-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v9 1/6] app/procinfo: add support for show port
  2019-01-10 21:36           ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Vipin Varghese
@ 2019-01-10 21:36             ` Vipin Varghese
  2019-01-10 17:40               ` Thomas Monjalon
  2019-01-10 21:36             ` [dpdk-dev] [PATCH v9 2/6] app/procinfo: add support for show tm Vipin Varghese
                               ` (5 subsequent siblings)
  6 siblings, 1 reply; 68+ messages in thread
From: Vipin Varghese @ 2019-01-10 21:36 UTC (permalink / raw)
  To: dev, thomas, john.mcnamara
  Cc: konstantin.ananyev, stephen, reshma.pattan, jasvinder.singh,
	stephen1.byrne, amol.patel, Vipin Varghese

Function show_port is used for displaying the port PMD information under
primary process. The information shows basic, per queue and security.
Also helper MACRO 'MAX_STRING_LEN, STATS_BDR_FMT and STATS_BDR_STR' and
meson build file is updated for new functionality.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
Acked-by: Reshma  Pattan <reshma.pattan@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
---
 app/proc-info/main.c           | 119 ++++++++++++++++++++++++++++++++-
 app/proc-info/meson.build      |   2 +-
 doc/guides/tools/proc_info.rst |   9 ++-
 3 files changed, 126 insertions(+), 4 deletions(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index c20effa4f..2108c24b0 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -29,6 +29,9 @@
 #include <rte_branch_prediction.h>
 #include <rte_string_fns.h>
 #include <rte_metrics.h>
+#include <rte_cycles.h>
+#include <rte_security.h>
+#include <rte_cryptodev.h>
 
 /* Maximum long option length for option parsing. */
 #define MAX_LONG_OPT_SZ 64
@@ -36,6 +39,10 @@
 
 #define MAX_STRING_LEN 256
 
+#define STATS_BDR_FMT "========================================"
+#define STATS_BDR_STR(w, s) printf("%.*s%s%.*s\n", w, \
+	STATS_BDR_FMT, s, w, STATS_BDR_FMT)
+
 /**< mask of enabled ports */
 static uint32_t enabled_port_mask;
 /**< Enable stats. */
@@ -65,6 +72,12 @@ static char *xstats_name;
 static uint32_t nb_xstats_ids;
 static uint64_t xstats_ids[MAX_NB_XSTATS_IDS];
 
+/* show border */
+static char bdr_str[MAX_STRING_LEN];
+
+/**< Enable show port. */
+static uint32_t enable_shw_port;
+
 /**< display usage */
 static void
 proc_info_usage(const char *prgname)
@@ -83,7 +96,8 @@ proc_info_usage(const char *prgname)
 		"  --stats-reset: to reset port statistics\n"
 		"  --xstats-reset: to reset port extended statistics\n"
 		"  --collectd-format: to print statistics to STDOUT in expected by collectd format\n"
-		"  --host-id STRING: host id used to identify the system process is running on\n",
+		"  --host-id STRING: host id used to identify the system process is running on\n"
+		"  --show-port: to display ports information\n",
 		prgname);
 }
 
@@ -190,6 +204,7 @@ proc_info_parse_args(int argc, char **argv)
 		{"collectd-format", 0, NULL, 0},
 		{"xstats-ids", 1, NULL, 1},
 		{"host-id", 0, NULL, 0},
+		{"show-port", 0, NULL, 0},
 		{NULL, 0, 0, 0}
 	};
 
@@ -233,6 +248,9 @@ proc_info_parse_args(int argc, char **argv)
 			else if (!strncmp(long_option[option_index].name, "xstats-reset",
 					MAX_LONG_OPT_SZ))
 				reset_xstats = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-port", MAX_LONG_OPT_SZ))
+				enable_shw_port = 1;
 			break;
 		case 1:
 			/* Print xstat single value given by name*/
@@ -584,6 +602,98 @@ metrics_display(int port_id)
 	rte_free(names);
 }
 
+static void
+show_port(void)
+{
+	uint16_t i = 0;
+	int ret = 0, j, k;
+
+	snprintf(bdr_str, MAX_STRING_LEN, " show - Port PMD %"PRIu64,
+			rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	RTE_ETH_FOREACH_DEV(i) {
+		uint16_t mtu = 0;
+		struct rte_eth_link link;
+		struct rte_eth_dev_info dev_info;
+		struct rte_eth_rxq_info queue_info;
+		struct rte_eth_rss_conf rss_conf;
+
+		memset(&rss_conf, 0, sizeof(rss_conf));
+
+		snprintf(bdr_str, MAX_STRING_LEN, " Port (%u)", i);
+		STATS_BDR_STR(5, bdr_str);
+		printf("  - generic config\n");
+
+		printf("\t  -- Socket %d\n", rte_eth_dev_socket_id(i));
+		rte_eth_link_get(i, &link);
+		printf("\t  -- link speed %d duplex %d,"
+				" auto neg %d status %d\n",
+				link.link_speed,
+				link.link_duplex,
+				link.link_autoneg,
+				link.link_status);
+		printf("\t  -- promiscuous (%d)\n",
+				rte_eth_promiscuous_get(i));
+		ret = rte_eth_dev_get_mtu(i, &mtu);
+		if (ret == 0)
+			printf("\t  -- mtu (%d)\n", mtu);
+
+		rte_eth_dev_info_get(i, &dev_info);
+
+		printf("  - queue\n");
+		for (j = 0; j < dev_info.nb_rx_queues; j++) {
+			ret = rte_eth_rx_queue_info_get(i, j, &queue_info);
+			if (ret == 0) {
+				printf("\t  -- queue %d rx scatter %d"
+						" descriptors %d"
+						" offloads 0x%"PRIx64
+						" mempool socket %d\n",
+						j,
+						queue_info.scattered_rx,
+						queue_info.nb_desc,
+						queue_info.conf.offloads,
+						queue_info.mp->socket_id);
+			}
+		}
+
+		ret = rte_eth_dev_rss_hash_conf_get(i, &rss_conf);
+		if (ret == 0) {
+			if (rss_conf.rss_key) {
+				printf("  - RSS\n");
+				printf("\t  -- RSS len %u key (hex):",
+						rss_conf.rss_key_len);
+				for (k = 0; k < rss_conf.rss_key_len; k++)
+					printf(" %x", rss_conf.rss_key[k]);
+				printf("\t  -- hf 0x%"PRIx64"\n",
+						rss_conf.rss_hf);
+			}
+		}
+
+		printf("  - cyrpto context\n");
+		void *p_ctx = rte_eth_dev_get_sec_ctx(i);
+		printf("\t  -- security context - %p\n", p_ctx);
+
+		if (p_ctx) {
+			printf("\t  -- size %u\n",
+					rte_security_session_get_size(p_ctx));
+			const struct rte_security_capability *s_cap =
+				rte_security_capabilities_get(p_ctx);
+			if (s_cap) {
+				printf("\t  -- action (0x%x), protocol (0x%x),"
+						" offload flags (0x%x)\n",
+						s_cap->action,
+						s_cap->protocol,
+						s_cap->ol_flags);
+				printf("\t  -- capabilities - oper type %x\n",
+						s_cap->crypto_capabilities->op);
+			}
+		}
+	}
+
+	STATS_BDR_STR(50, "");
+}
+
 int
 main(int argc, char **argv)
 {
@@ -664,9 +774,16 @@ main(int argc, char **argv)
 	if (enable_metrics)
 		metrics_display(RTE_METRICS_GLOBAL);
 
+	/* show information for PMD */
+	if (enable_shw_port)
+		show_port();
+
 	ret = rte_eal_cleanup();
 	if (ret)
 		printf("Error from rte_eal_cleanup(), %d\n", ret);
 
+	snprintf(bdr_str, MAX_STRING_LEN, " ");
+	STATS_BDR_STR(50, bdr_str);
+
 	return 0;
 }
diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build
index a52b2ee4a..866b390d6 100644
--- a/app/proc-info/meson.build
+++ b/app/proc-info/meson.build
@@ -3,4 +3,4 @@
 
 sources = files('main.c')
 allow_experimental_apis = true
-deps += ['ethdev', 'metrics']
+deps += ['ethdev', 'metrics', 'security']
diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst
index d5b5ed6a6..6baa1db9a 100644
--- a/doc/guides/tools/proc_info.rst
+++ b/doc/guides/tools/proc_info.rst
@@ -6,7 +6,8 @@ dpdk-procinfo Application
 
 The dpdk-procinfo application is a Data Plane Development Kit (DPDK) application
 that runs as a DPDK secondary process and is capable of retrieving port
-statistics, resetting port statistics and printing DPDK memory information.
+statistics, resetting port statistics, printing DPDK memory information and
+displaying debug information for port.
 This application extends the original functionality that was supported by
 dump_cfg.
 
@@ -17,7 +18,7 @@ The application has a number of command line options:
 .. code-block:: console
 
    ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats |
-   --stats-reset | --xstats-reset]
+   --stats-reset | --xstats-reset] [ --show-port ]
 
 Parameters
 ~~~~~~~~~~
@@ -41,6 +42,10 @@ If no port mask is specified xstats are reset for all DPDK ports.
 
 **-m**: Print DPDK memory information.
 
+**--show-port**
+The show-port parameter displays port level various configuration informationi
+associated to RX port queue pair.
+
 Limitations
 -----------
 
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v9 2/6] app/procinfo: add support for show tm
  2019-01-10 21:36           ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Vipin Varghese
  2019-01-10 21:36             ` [dpdk-dev] [PATCH v9 1/6] app/procinfo: add support for show port Vipin Varghese
@ 2019-01-10 21:36             ` Vipin Varghese
  2019-01-10 21:36             ` [dpdk-dev] [PATCH v9 3/6] app/procinfo: add support for show crypto Vipin Varghese
                               ` (4 subsequent siblings)
  6 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2019-01-10 21:36 UTC (permalink / raw)
  To: dev, thomas, john.mcnamara
  Cc: konstantin.ananyev, stephen, reshma.pattan, jasvinder.singh,
	stephen1.byrne, amol.patel, Vipin Varghese

Function show_tm is used for displaying the tm PMD under the primary
process. This covers basic and per node|level details with statistics.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
Acked-by: Reshma  Pattan <reshma.pattan@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
---
 app/proc-info/main.c           | 290 ++++++++++++++++++++++++++++++++-
 doc/guides/tools/proc_info.rst |   6 +-
 2 files changed, 294 insertions(+), 2 deletions(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 2108c24b0..ea15ae1a6 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -32,6 +32,7 @@
 #include <rte_cycles.h>
 #include <rte_security.h>
 #include <rte_cryptodev.h>
+#include <rte_tm.h>
 
 /* Maximum long option length for option parsing. */
 #define MAX_LONG_OPT_SZ 64
@@ -77,6 +78,8 @@ static char bdr_str[MAX_STRING_LEN];
 
 /**< Enable show port. */
 static uint32_t enable_shw_port;
+/**< Enable show tm. */
+static uint32_t enable_shw_tm;
 
 /**< display usage */
 static void
@@ -97,7 +100,8 @@ proc_info_usage(const char *prgname)
 		"  --xstats-reset: to reset port extended statistics\n"
 		"  --collectd-format: to print statistics to STDOUT in expected by collectd format\n"
 		"  --host-id STRING: host id used to identify the system process is running on\n"
-		"  --show-port: to display ports information\n",
+		"  --show-port: to display ports information\n"
+		"  --show-tm: to display traffic manager information for ports\n",
 		prgname);
 }
 
@@ -205,6 +209,7 @@ proc_info_parse_args(int argc, char **argv)
 		{"xstats-ids", 1, NULL, 1},
 		{"host-id", 0, NULL, 0},
 		{"show-port", 0, NULL, 0},
+		{"show-tm", 0, NULL, 0},
 		{NULL, 0, 0, 0}
 	};
 
@@ -251,6 +256,9 @@ proc_info_parse_args(int argc, char **argv)
 			else if (!strncmp(long_option[option_index].name,
 					"show-port", MAX_LONG_OPT_SZ))
 				enable_shw_port = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-tm", MAX_LONG_OPT_SZ))
+				enable_shw_tm = 1;
 			break;
 		case 1:
 			/* Print xstat single value given by name*/
@@ -694,6 +702,284 @@ show_port(void)
 	STATS_BDR_STR(50, "");
 }
 
+static void
+display_nodecap_info(int is_leaf, struct rte_tm_node_capabilities *cap)
+{
+	if (cap == NULL)
+		return;
+
+	if (!is_leaf) {
+		printf("\t  -- nonleaf sched max:\n"
+			"\t\t  + children (%u)\n"
+			"\t\t  + sp priorities (%u)\n"
+			"\t\t  + wfq children per group (%u)\n"
+			"\t\t  + wfq groups (%u)\n"
+			"\t\t  + wfq weight (%u)\n",
+			cap->nonleaf.sched_n_children_max,
+			cap->nonleaf.sched_sp_n_priorities_max,
+			cap->nonleaf.sched_wfq_n_children_per_group_max,
+			cap->nonleaf.sched_wfq_n_groups_max,
+			cap->nonleaf.sched_wfq_weight_max);
+	} else {
+		printf("\t  -- leaf cman support:\n"
+			"\t\t  + wred pkt mode (%d)\n"
+			"\t\t  + wred byte mode (%d)\n"
+			"\t\t  + head drop (%d)\n"
+			"\t\t  + wred context private (%d)\n"
+			"\t\t  + wred context shared (%u)\n",
+			cap->leaf.cman_wred_packet_mode_supported,
+			cap->leaf.cman_wred_byte_mode_supported,
+			cap->leaf.cman_head_drop_supported,
+			cap->leaf.cman_wred_context_private_supported,
+			cap->leaf.cman_wred_context_shared_n_max);
+	}
+}
+
+static void
+display_levelcap_info(int is_leaf, struct rte_tm_level_capabilities *cap)
+{
+	if (cap == NULL)
+		return;
+
+	if (!is_leaf) {
+		printf("\t  -- shaper private: (%d) dual rate (%d)\n",
+			cap->nonleaf.shaper_private_supported,
+			cap->nonleaf.shaper_private_dual_rate_supported);
+		printf("\t  -- shaper share: (%u)\n",
+			cap->nonleaf.shaper_shared_n_max);
+		printf("\t  -- non leaf sched MAX:\n"
+			"\t\t  + children (%u)\n"
+			"\t\t  + sp (%u)\n"
+			"\t\t  + wfq children per group (%u)\n"
+			"\t\t  + wfq groups (%u)\n"
+			"\t\t  + wfq weight (%u)\n",
+			cap->nonleaf.sched_n_children_max,
+			cap->nonleaf.sched_sp_n_priorities_max,
+			cap->nonleaf.sched_wfq_n_children_per_group_max,
+			cap->nonleaf.sched_wfq_n_groups_max,
+			cap->nonleaf.sched_wfq_weight_max);
+	} else {
+		printf("\t  -- shaper private: (%d) dual rate (%d)\n",
+			cap->leaf.shaper_private_supported,
+			cap->leaf.shaper_private_dual_rate_supported);
+		printf("\t  -- shaper share: (%u)\n",
+			cap->leaf.shaper_shared_n_max);
+		printf("  -- leaf cman support:\n"
+			"\t\t  + wred pkt mode (%d)\n"
+			"\t\t  + wred byte mode (%d)\n"
+			"\t\t  + head drop (%d)\n"
+			"\t\t  + wred context private (%d)\n"
+			"\t\t  + wred context shared (%u)\n",
+			cap->leaf.cman_wred_packet_mode_supported,
+			cap->leaf.cman_wred_byte_mode_supported,
+			cap->leaf.cman_head_drop_supported,
+			cap->leaf.cman_wred_context_private_supported,
+			cap->leaf.cman_wred_context_shared_n_max);
+	}
+}
+
+static void
+show_tm(void)
+{
+	int ret = 0, check_for_leaf = 0, is_leaf = 0;
+	unsigned int j, k;
+	uint16_t i = 0;
+
+	snprintf(bdr_str, MAX_STRING_LEN, " show - TM PMD %"PRIu64,
+			rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	RTE_ETH_FOREACH_DEV(i) {
+		struct rte_eth_dev_info dev_info;
+		struct rte_tm_capabilities cap;
+		struct rte_tm_error error;
+		struct rte_tm_node_capabilities capnode;
+		struct rte_tm_level_capabilities caplevel;
+		uint32_t n_leaf_nodes = 0;
+
+		memset(&cap, 0, sizeof(cap));
+		memset(&error, 0, sizeof(error));
+
+		rte_eth_dev_info_get(i, &dev_info);
+		printf("  - Generic for port (%u)\n"
+			"\t  -- driver name %s\n"
+			"\t  -- max vf (%u)\n"
+			"\t  -- max tx queues (%u)\n"
+			"\t  -- number of tx queues (%u)\n",
+			i,
+			dev_info.driver_name,
+			dev_info.max_vfs,
+			dev_info.max_tx_queues,
+			dev_info.nb_tx_queues);
+
+		ret = rte_tm_capabilities_get(i, &cap, &error);
+		if (ret)
+			continue;
+
+		printf("  - MAX: nodes (%u) levels (%u) children (%u)\n",
+			cap.n_nodes_max,
+			cap.n_levels_max,
+			cap.sched_n_children_max);
+
+		printf("  - identical nodes: non leaf (%d) leaf (%d)\n",
+			cap.non_leaf_nodes_identical,
+			cap.leaf_nodes_identical);
+
+		printf("  - Shaper MAX:\n"
+			"\t  -- total (%u)\n"
+			"\t  -- private (%u) private dual (%d)\n"
+			"\t  -- shared (%u) shared dual (%u)\n",
+			cap.shaper_n_max,
+			cap.shaper_private_n_max,
+			cap.shaper_private_dual_rate_n_max,
+			cap.shaper_shared_n_max,
+			cap.shaper_shared_dual_rate_n_max);
+
+		printf("  - mark support:\n");
+		printf("\t  -- vlan dei: GREEN (%d) YELLOW (%d) RED (%d)\n",
+			cap.mark_vlan_dei_supported[RTE_TM_GREEN],
+			cap.mark_vlan_dei_supported[RTE_TM_YELLOW],
+			cap.mark_vlan_dei_supported[RTE_TM_RED]);
+		printf("\t  -- ip ecn tcp: GREEN (%d) YELLOW (%d) RED (%d)\n",
+			cap.mark_ip_ecn_tcp_supported[RTE_TM_GREEN],
+			cap.mark_ip_ecn_tcp_supported[RTE_TM_YELLOW],
+			cap.mark_ip_ecn_tcp_supported[RTE_TM_RED]);
+		printf("\t  -- ip ecn sctp: GREEN (%d) YELLOW (%d) RED (%d)\n",
+			cap.mark_ip_ecn_sctp_supported[RTE_TM_GREEN],
+			cap.mark_ip_ecn_sctp_supported[RTE_TM_YELLOW],
+			cap.mark_ip_ecn_sctp_supported[RTE_TM_RED]);
+		printf("\t  -- ip dscp: GREEN (%d) YELLOW (%d) RED (%d)\n",
+			cap.mark_ip_dscp_supported[RTE_TM_GREEN],
+			cap.mark_ip_dscp_supported[RTE_TM_YELLOW],
+			cap.mark_ip_dscp_supported[RTE_TM_RED]);
+
+		printf("  - mask stats (0x%"PRIx64")"
+			" dynamic update (0x%"PRIx64")\n",
+			cap.stats_mask,
+			cap.dynamic_update_mask);
+
+		printf("  - sched MAX:\n"
+			"\t  -- total (%u)\n"
+			"\t  -- sp levels (%u)\n"
+			"\t  -- wfq children per group (%u)\n"
+			"\t  -- wfq groups (%u)\n"
+			"\t  -- wfq weight (%u)\n",
+			cap.sched_sp_n_priorities_max,
+			cap.sched_sp_n_priorities_max,
+			cap.sched_wfq_n_children_per_group_max,
+			cap.sched_wfq_n_groups_max,
+			cap.sched_wfq_weight_max);
+
+		printf("  - CMAN support:\n"
+			"\t  -- WRED mode: pkt (%d) byte (%d)\n"
+			"\t  -- head drop (%d)\n",
+			cap.cman_wred_packet_mode_supported,
+			cap.cman_wred_byte_mode_supported,
+			cap.cman_head_drop_supported);
+		printf("\t  -- MAX WRED CONTEXT:"
+			" total (%u) private (%u) shared (%u)\n",
+			cap.cman_wred_context_n_max,
+			cap.cman_wred_context_private_n_max,
+			cap.cman_wred_context_shared_n_max);
+
+		for (j = 0; j < cap.n_nodes_max; j++) {
+			memset(&capnode, 0, sizeof(capnode));
+			ret = rte_tm_node_capabilities_get(i, j,
+					&capnode, &error);
+			if (ret)
+				continue;
+
+			check_for_leaf = 1;
+
+			printf("  NODE %u\n", j);
+			printf("\t  - shaper private: (%d) dual rate (%d)\n",
+				capnode.shaper_private_supported,
+				capnode.shaper_private_dual_rate_supported);
+			printf("\t  - shaper shared max: (%u)\n",
+				capnode.shaper_shared_n_max);
+			printf("\t  - stats mask %"PRIx64"\n",
+				capnode.stats_mask);
+
+			ret = rte_tm_node_type_get(i, j, &is_leaf, &error);
+			if (ret)
+				continue;
+
+			display_nodecap_info(is_leaf, &capnode);
+		}
+
+		for (j = 0; j < cap.n_levels_max; j++) {
+			memset(&caplevel, 0, sizeof(caplevel));
+			ret = rte_tm_level_capabilities_get(i, j,
+					&caplevel, &error);
+			if (ret)
+				continue;
+
+			printf("  - Level %u\n", j);
+			printf("\t  -- node MAX: %u non leaf %u leaf %u\n",
+				caplevel.n_nodes_max,
+				caplevel.n_nodes_nonleaf_max,
+				caplevel.n_nodes_leaf_max);
+			printf("\t  -- indetical: non leaf %u leaf %u\n",
+				caplevel.non_leaf_nodes_identical,
+				caplevel.leaf_nodes_identical);
+
+			for (k = 0; k < caplevel.n_nodes_max; k++) {
+				ret = rte_tm_node_type_get(i, k,
+					&is_leaf, &error);
+				if (ret)
+					continue;
+
+				display_levelcap_info(is_leaf, &caplevel);
+			}
+		}
+
+		if (check_for_leaf) {
+			ret = rte_tm_get_number_of_leaf_nodes(i,
+					&n_leaf_nodes, &error);
+			if (ret == 0)
+				printf("  - leaf nodes (%u)\n", n_leaf_nodes);
+		}
+
+		for (j = 0; j < n_leaf_nodes; j++) {
+			struct rte_tm_node_stats stats;
+			memset(&stats, 0, sizeof(stats));
+
+			ret = rte_tm_node_stats_read(i, j,
+					&stats, &cap.stats_mask, 0, &error);
+			if (ret)
+				continue;
+
+			printf("  - STATS for node (%u)\n", j);
+			printf("  -- pkts (%"PRIu64") bytes (%"PRIu64")\n",
+				stats.n_pkts, stats.n_bytes);
+
+			ret = rte_tm_node_type_get(i, j, &is_leaf, &error);
+			if (ret || (!is_leaf))
+				continue;
+
+			printf("  -- leaf queued:"
+				" pkts (%"PRIu64") bytes (%"PRIu64")\n",
+				stats.leaf.n_pkts_queued,
+				stats.leaf.n_bytes_queued);
+			printf("  - dropped:\n"
+				"\t  -- GREEN:"
+				" pkts (%"PRIu64") bytes (%"PRIu64")\n"
+				"\t  -- YELLOW:"
+				" pkts (%"PRIu64") bytes (%"PRIu64")\n"
+				"\t  -- RED:"
+				" pkts (%"PRIu64") bytes (%"PRIu64")\n",
+				stats.leaf.n_pkts_dropped[RTE_TM_GREEN],
+				stats.leaf.n_bytes_dropped[RTE_TM_GREEN],
+				stats.leaf.n_pkts_dropped[RTE_TM_YELLOW],
+				stats.leaf.n_bytes_dropped[RTE_TM_YELLOW],
+				stats.leaf.n_pkts_dropped[RTE_TM_RED],
+				stats.leaf.n_bytes_dropped[RTE_TM_RED]);
+		}
+	}
+
+	STATS_BDR_STR(50, "");
+}
+
 int
 main(int argc, char **argv)
 {
@@ -777,6 +1063,8 @@ main(int argc, char **argv)
 	/* show information for PMD */
 	if (enable_shw_port)
 		show_port();
+	if (enable_shw_tm)
+		show_tm();
 
 	ret = rte_eal_cleanup();
 	if (ret)
diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst
index 6baa1db9a..5f9afdb79 100644
--- a/doc/guides/tools/proc_info.rst
+++ b/doc/guides/tools/proc_info.rst
@@ -18,7 +18,7 @@ The application has a number of command line options:
 .. code-block:: console
 
    ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats |
-   --stats-reset | --xstats-reset] [ --show-port ]
+   --stats-reset | --xstats-reset] [ --show-port | --show-tm ]
 
 Parameters
 ~~~~~~~~~~
@@ -46,6 +46,10 @@ If no port mask is specified xstats are reset for all DPDK ports.
 The show-port parameter displays port level various configuration informationi
 associated to RX port queue pair.
 
+**--show-tm**
+The show-tm parameter displays per port traffic manager settings, current
+configurations and statistics.
+
 Limitations
 -----------
 
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v9 3/6] app/procinfo: add support for show crypto
  2019-01-10 21:36           ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Vipin Varghese
  2019-01-10 21:36             ` [dpdk-dev] [PATCH v9 1/6] app/procinfo: add support for show port Vipin Varghese
  2019-01-10 21:36             ` [dpdk-dev] [PATCH v9 2/6] app/procinfo: add support for show tm Vipin Varghese
@ 2019-01-10 21:36             ` Vipin Varghese
  2019-01-10 21:36             ` [dpdk-dev] [PATCH v9 4/6] app/procinfo: add support for debug ring Vipin Varghese
                               ` (3 subsequent siblings)
  6 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2019-01-10 21:36 UTC (permalink / raw)
  To: dev, thomas, john.mcnamara
  Cc: konstantin.ananyev, stephen, reshma.pattan, jasvinder.singh,
	stephen1.byrne, amol.patel, Vipin Varghese

Function show_crypto is used for displaying the crypto PMD under primary
process.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
Acked-by: Reshma  Pattan <reshma.pattan@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
---
 app/proc-info/main.c           | 94 +++++++++++++++++++++++++++++++++-
 doc/guides/tools/proc_info.rst |  6 ++-
 2 files changed, 98 insertions(+), 2 deletions(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index ea15ae1a6..4f625a371 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -80,6 +80,8 @@ static char bdr_str[MAX_STRING_LEN];
 static uint32_t enable_shw_port;
 /**< Enable show tm. */
 static uint32_t enable_shw_tm;
+/**< Enable show crypto. */
+static uint32_t enable_shw_crypto;
 
 /**< display usage */
 static void
@@ -101,7 +103,8 @@ proc_info_usage(const char *prgname)
 		"  --collectd-format: to print statistics to STDOUT in expected by collectd format\n"
 		"  --host-id STRING: host id used to identify the system process is running on\n"
 		"  --show-port: to display ports information\n"
-		"  --show-tm: to display traffic manager information for ports\n",
+		"  --show-tm: to display traffic manager information for ports\n"
+		"  --show-crypto: to display crypto information\n",
 		prgname);
 }
 
@@ -210,6 +213,7 @@ proc_info_parse_args(int argc, char **argv)
 		{"host-id", 0, NULL, 0},
 		{"show-port", 0, NULL, 0},
 		{"show-tm", 0, NULL, 0},
+		{"show-crypto", 0, NULL, 0},
 		{NULL, 0, 0, 0}
 	};
 
@@ -259,6 +263,9 @@ proc_info_parse_args(int argc, char **argv)
 			else if (!strncmp(long_option[option_index].name,
 					"show-tm", MAX_LONG_OPT_SZ))
 				enable_shw_tm = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-crypto", MAX_LONG_OPT_SZ))
+				enable_shw_crypto = 1;
 			break;
 		case 1:
 			/* Print xstat single value given by name*/
@@ -980,6 +987,89 @@ show_tm(void)
 	STATS_BDR_STR(50, "");
 }
 
+static void
+display_crypto_feature_info(uint64_t x)
+{
+	if (x == 0)
+		return;
+
+	printf("\t  -- feature flags\n");
+	printf("\t\t  + symmetric (%c), asymmetric (%c)\n"
+		"\t\t  + symmetric operation chaining (%c)\n",
+		(x & RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING) ? 'y' : 'n');
+	printf("\t\t  + CPU: SSE (%c), AVX (%c), AVX2 (%c), AVX512 (%c)\n",
+		(x & RTE_CRYPTODEV_FF_CPU_SSE) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_CPU_AVX) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_CPU_AVX2) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_CPU_AVX512) ? 'y' : 'n');
+	printf("\t\t  + AESNI: CPU (%c), HW (%c)\n",
+		(x & RTE_CRYPTODEV_FF_CPU_AESNI) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_HW_ACCELERATED) ? 'y' : 'n');
+	printf("\t\t  + INLINE (%c)\n",
+		(x & RTE_CRYPTODEV_FF_SECURITY) ? 'y' : 'n');
+	printf("\t\t  + ARM: NEON (%c), CE (%c)\n",
+		(x & RTE_CRYPTODEV_FF_CPU_NEON) ? 'y' : 'n',
+		(x & RTE_CRYPTODEV_FF_CPU_ARM_CE) ? 'y' : 'n');
+	printf("\t  -- buffer offload\n");
+	printf("\t\t  + IN_PLACE_SGL (%c)\n",
+		(x & RTE_CRYPTODEV_FF_IN_PLACE_SGL) ? 'y' : 'n');
+	printf("\t\t  + OOP_SGL_IN_SGL_OUT (%c)\n",
+		(x & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT) ? 'y' : 'n');
+	printf("\t\t  + OOP_SGL_IN_LB_OUT (%c)\n",
+		(x & RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT) ? 'y' : 'n');
+	printf("\t\t  + OOP_LB_IN_SGL_OUT (%c)\n",
+		(x & RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT) ? 'y' : 'n');
+	printf("\t\t  + OOP_LB_IN_LB_OUT (%c)\n",
+		(x & RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT) ? 'y' : 'n');
+}
+
+static void
+show_crypto(void)
+{
+	uint8_t crypto_dev_count = rte_cryptodev_count(), i;
+
+	snprintf(bdr_str, MAX_STRING_LEN, " show - CRYPTO PMD %"PRIu64,
+			rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	for (i = 0; i < crypto_dev_count; i++) {
+		struct rte_cryptodev_info dev_info;
+		struct rte_cryptodev_stats stats;
+
+		rte_cryptodev_info_get(i, &dev_info);
+
+		printf("  - device (%u)\n", i);
+		printf("\t  -- name (%s)\n"
+			"\t  -- driver (%s)\n"
+			"\t  -- id (%u) on socket (%d)\n"
+			"\t  -- queue pairs (%d)\n",
+			rte_cryptodev_name_get(i),
+			dev_info.driver_name,
+			dev_info.driver_id,
+			dev_info.device->numa_node,
+			rte_cryptodev_queue_pair_count(i));
+
+		display_crypto_feature_info(dev_info.feature_flags);
+
+		memset(&stats, 0, sizeof(0));
+		if (rte_cryptodev_stats_get(i, &stats) == 0) {
+			printf("\t  -- stats\n");
+			printf("\t\t  + enqueue count (%"PRIu64")"
+				" error (%"PRIu64")\n",
+				stats.enqueued_count,
+				stats.enqueue_err_count);
+			printf("\t\t  + dequeue count (%"PRIu64")"
+				" error (%"PRIu64")\n",
+				stats.dequeued_count,
+				stats.dequeue_err_count);
+		}
+	}
+
+	STATS_BDR_STR(50, "");
+}
+
 int
 main(int argc, char **argv)
 {
@@ -1065,6 +1155,8 @@ main(int argc, char **argv)
 		show_port();
 	if (enable_shw_tm)
 		show_tm();
+	if (enable_shw_crypto)
+		show_crypto();
 
 	ret = rte_eal_cleanup();
 	if (ret)
diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst
index 5f9afdb79..883864d18 100644
--- a/doc/guides/tools/proc_info.rst
+++ b/doc/guides/tools/proc_info.rst
@@ -18,7 +18,7 @@ The application has a number of command line options:
 .. code-block:: console
 
    ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats |
-   --stats-reset | --xstats-reset] [ --show-port | --show-tm ]
+   --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto ]
 
 Parameters
 ~~~~~~~~~~
@@ -50,6 +50,10 @@ associated to RX port queue pair.
 The show-tm parameter displays per port traffic manager settings, current
 configurations and statistics.
 
+**--show-crypto**
+The show-crypto parameter displays available cryptodev configurations,
+settings and stats per node.
+
 Limitations
 -----------
 
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v9 4/6] app/procinfo: add support for debug ring
  2019-01-10 21:36           ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Vipin Varghese
                               ` (2 preceding siblings ...)
  2019-01-10 21:36             ` [dpdk-dev] [PATCH v9 3/6] app/procinfo: add support for show crypto Vipin Varghese
@ 2019-01-10 21:36             ` Vipin Varghese
  2019-01-10 21:36             ` [dpdk-dev] [PATCH v9 5/6] app/procinfo: add support for show mempool Vipin Varghese
                               ` (2 subsequent siblings)
  6 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2019-01-10 21:36 UTC (permalink / raw)
  To: dev, thomas, john.mcnamara
  Cc: konstantin.ananyev, stephen, reshma.pattan, jasvinder.singh,
	stephen1.byrne, amol.patel, Vipin Varghese

Function show_ring is used for displaying information of RING instance
of the primary process.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
Acked-by: Reshma  Pattan <reshma.pattan@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
---
 app/proc-info/main.c           | 52 +++++++++++++++++++++++++++++++++-
 doc/guides/tools/proc_info.rst |  8 +++++-
 2 files changed, 58 insertions(+), 2 deletions(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 4f625a371..ed136d828 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -82,6 +82,9 @@ static uint32_t enable_shw_port;
 static uint32_t enable_shw_tm;
 /**< Enable show crypto. */
 static uint32_t enable_shw_crypto;
+/**< Enable show ring. */
+static uint32_t enable_shw_ring;
+static char *ring_name;
 
 /**< display usage */
 static void
@@ -104,7 +107,8 @@ proc_info_usage(const char *prgname)
 		"  --host-id STRING: host id used to identify the system process is running on\n"
 		"  --show-port: to display ports information\n"
 		"  --show-tm: to display traffic manager information for ports\n"
-		"  --show-crypto: to display crypto information\n",
+		"  --show-crypto: to display crypto information\n"
+		"  --show-ring[=name]: to display ring information\n",
 		prgname);
 }
 
@@ -214,6 +218,7 @@ proc_info_parse_args(int argc, char **argv)
 		{"show-port", 0, NULL, 0},
 		{"show-tm", 0, NULL, 0},
 		{"show-crypto", 0, NULL, 0},
+		{"show-ring", optional_argument, NULL, 0},
 		{NULL, 0, 0, 0}
 	};
 
@@ -266,6 +271,11 @@ proc_info_parse_args(int argc, char **argv)
 			else if (!strncmp(long_option[option_index].name,
 					"show-crypto", MAX_LONG_OPT_SZ))
 				enable_shw_crypto = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-ring", MAX_LONG_OPT_SZ)) {
+				enable_shw_ring = 1;
+				ring_name = optarg;
+			}
 			break;
 		case 1:
 			/* Print xstat single value given by name*/
@@ -1070,6 +1080,44 @@ show_crypto(void)
 	STATS_BDR_STR(50, "");
 }
 
+static void
+show_ring(char *name)
+{
+	snprintf(bdr_str, MAX_STRING_LEN, " show - RING %"PRIu64,
+			rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	if (name != NULL) {
+		struct rte_ring *ptr = rte_ring_lookup(name);
+		if (ptr != NULL) {
+			printf("  - Name (%s) on socket (%d)\n"
+				"  - flags:\n"
+				"\t  -- Single Producer Enqueue (%u)\n"
+				"\t  -- Single Consmer Dequeue (%u)\n",
+				ptr->name,
+				ptr->memzone->socket_id,
+				ptr->flags & RING_F_SP_ENQ,
+				ptr->flags & RING_F_SC_DEQ);
+			printf("  - size (%u) mask (0x%x) capacity (%u)\n",
+				ptr->size,
+				ptr->mask,
+				ptr->capacity);
+			printf("  - count (%u) free count (%u)\n",
+				rte_ring_count(ptr),
+				rte_ring_free_count(ptr));
+			printf("  - full (%d) empty (%d)\n",
+				rte_ring_full(ptr),
+				rte_ring_empty(ptr));
+
+			STATS_BDR_STR(50, "");
+			return;
+		}
+	}
+
+	rte_ring_list_dump(stdout);
+	STATS_BDR_STR(50, "");
+}
+
 int
 main(int argc, char **argv)
 {
@@ -1157,6 +1205,8 @@ main(int argc, char **argv)
 		show_tm();
 	if (enable_shw_crypto)
 		show_crypto();
+	if (enable_shw_ring)
+		show_ring(ring_name);
 
 	ret = rte_eal_cleanup();
 	if (ret)
diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst
index 883864d18..ba5c3dbd1 100644
--- a/doc/guides/tools/proc_info.rst
+++ b/doc/guides/tools/proc_info.rst
@@ -18,7 +18,8 @@ The application has a number of command line options:
 .. code-block:: console
 
    ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats |
-   --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto ]
+   --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto |
+   --show-ring[=name] ]
 
 Parameters
 ~~~~~~~~~~
@@ -54,6 +55,11 @@ configurations and statistics.
 The show-crypto parameter displays available cryptodev configurations,
 settings and stats per node.
 
+**--show-ring[=name]**
+The show-ring pararmeter display current allocation of all ring with
+debug information. Specifying the name allows to display details for specific
+ring. For invalid or no ring name, whole list is dump.
+
 Limitations
 -----------
 
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v9 5/6] app/procinfo: add support for show mempool
  2019-01-10 21:36           ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Vipin Varghese
                               ` (3 preceding siblings ...)
  2019-01-10 21:36             ` [dpdk-dev] [PATCH v9 4/6] app/procinfo: add support for debug ring Vipin Varghese
@ 2019-01-10 21:36             ` Vipin Varghese
  2019-01-10 21:36             ` [dpdk-dev] [PATCH v9 6/6] app/procinfo: add support for iter mempool Vipin Varghese
  2019-01-11 14:46             ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Thomas Monjalon
  6 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2019-01-10 21:36 UTC (permalink / raw)
  To: dev, thomas, john.mcnamara
  Cc: konstantin.ananyev, stephen, reshma.pattan, jasvinder.singh,
	stephen1.byrne, amol.patel, Vipin Varghese

Function show_mempool is used for displaying valid MEMPOOL.
In case of invalid or no name, whole list is dump.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
Acked-by: Reshma  Pattan <reshma.pattan@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
---
 app/proc-info/main.c           | 65 +++++++++++++++++++++++++++++++++-
 doc/guides/tools/proc_info.rst |  7 +++-
 2 files changed, 70 insertions(+), 2 deletions(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index ed136d828..4aeab926d 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -85,6 +85,9 @@ static uint32_t enable_shw_crypto;
 /**< Enable show ring. */
 static uint32_t enable_shw_ring;
 static char *ring_name;
+/**< Enable show mempool. */
+static uint32_t enable_shw_mempool;
+static char *mempool_name;
 
 /**< display usage */
 static void
@@ -108,7 +111,8 @@ proc_info_usage(const char *prgname)
 		"  --show-port: to display ports information\n"
 		"  --show-tm: to display traffic manager information for ports\n"
 		"  --show-crypto: to display crypto information\n"
-		"  --show-ring[=name]: to display ring information\n",
+		"  --show-ring[=name]: to display ring information\n"
+		"  --show-mempool[=name]: to display mempool information\n",
 		prgname);
 }
 
@@ -219,6 +223,7 @@ proc_info_parse_args(int argc, char **argv)
 		{"show-tm", 0, NULL, 0},
 		{"show-crypto", 0, NULL, 0},
 		{"show-ring", optional_argument, NULL, 0},
+		{"show-mempool", optional_argument, NULL, 0},
 		{NULL, 0, 0, 0}
 	};
 
@@ -275,6 +280,10 @@ proc_info_parse_args(int argc, char **argv)
 					"show-ring", MAX_LONG_OPT_SZ)) {
 				enable_shw_ring = 1;
 				ring_name = optarg;
+			} else if (!strncmp(long_option[option_index].name,
+					"show-mempool", MAX_LONG_OPT_SZ)) {
+				enable_shw_mempool = 1;
+				mempool_name = optarg;
 			}
 			break;
 		case 1:
@@ -1118,6 +1127,58 @@ show_ring(char *name)
 	STATS_BDR_STR(50, "");
 }
 
+static void
+show_mempool(char *name)
+{
+	uint64_t flags = 0;
+
+	snprintf(bdr_str, MAX_STRING_LEN, " show - MEMPOOL %"PRIu64,
+			rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	if (name != NULL) {
+		struct rte_mempool *ptr = rte_mempool_lookup(name);
+		if (ptr != NULL) {
+			flags = ptr->flags;
+			printf("  - Name: %s on socket %d\n"
+				"  - flags:\n"
+				"\t  -- No spread (%c)\n"
+				"\t  -- No cache align (%c)\n"
+				"\t  -- SP put (%c), SC get (%c)\n"
+				"\t  -- Pool created (%c)\n"
+				"\t  -- No IOVA config (%c)\n",
+				ptr->name,
+				ptr->socket_id,
+				(flags & MEMPOOL_F_NO_SPREAD) ? 'y' : 'n',
+				(flags & MEMPOOL_F_NO_CACHE_ALIGN) ? 'y' : 'n',
+				(flags & MEMPOOL_F_SP_PUT) ? 'y' : 'n',
+				(flags & MEMPOOL_F_SC_GET) ? 'y' : 'n',
+				(flags & MEMPOOL_F_POOL_CREATED) ? 'y' : 'n',
+				(flags & MEMPOOL_F_NO_IOVA_CONTIG) ? 'y' : 'n');
+			printf("  - Size %u Cache %u element %u\n"
+				"  - header %u trailer %u\n"
+				"  - private data size %u\n",
+				ptr->size,
+				ptr->cache_size,
+				ptr->elt_size,
+				ptr->header_size,
+				ptr->trailer_size,
+				ptr->private_data_size);
+			printf("  - memezone - socket %d\n",
+				ptr->mz->socket_id);
+			printf("  - Count: avail (%u), in use (%u)\n",
+				rte_mempool_avail_count(ptr),
+				rte_mempool_in_use_count(ptr));
+
+			STATS_BDR_STR(50, "");
+			return;
+		}
+	}
+
+	rte_mempool_list_dump(stdout);
+	STATS_BDR_STR(50, "");
+}
+
 int
 main(int argc, char **argv)
 {
@@ -1207,6 +1268,8 @@ main(int argc, char **argv)
 		show_crypto();
 	if (enable_shw_ring)
 		show_ring(ring_name);
+	if (enable_shw_mempool)
+		show_mempool(mempool_name);
 
 	ret = rte_eal_cleanup();
 	if (ret)
diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst
index ba5c3dbd1..42c5d45e0 100644
--- a/doc/guides/tools/proc_info.rst
+++ b/doc/guides/tools/proc_info.rst
@@ -19,7 +19,7 @@ The application has a number of command line options:
 
    ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats |
    --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto |
-   --show-ring[=name] ]
+   --show-ring[=name] | --show-mempool[=name] ]
 
 Parameters
 ~~~~~~~~~~
@@ -60,6 +60,11 @@ The show-ring pararmeter display current allocation of all ring with
 debug information. Specifying the name allows to display details for specific
 ring. For invalid or no ring name, whole list is dump.
 
+**--show-mempool[=name]**
+The show-mempool parameter display current allocation of all mempool
+debug information. Specifying the name allows to display details for specific
+specific mempool. For invalid or no mempool name, whole list is dump.
+
 Limitations
 -----------
 
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* [dpdk-dev] [PATCH v9 6/6] app/procinfo: add support for iter mempool
  2019-01-10 21:36           ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Vipin Varghese
                               ` (4 preceding siblings ...)
  2019-01-10 21:36             ` [dpdk-dev] [PATCH v9 5/6] app/procinfo: add support for show mempool Vipin Varghese
@ 2019-01-10 21:36             ` Vipin Varghese
  2019-01-11 14:46             ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Thomas Monjalon
  6 siblings, 0 replies; 68+ messages in thread
From: Vipin Varghese @ 2019-01-10 21:36 UTC (permalink / raw)
  To: dev, thomas, john.mcnamara
  Cc: konstantin.ananyev, stephen, reshma.pattan, jasvinder.singh,
	stephen1.byrne, amol.patel, Vipin Varghese

Function iter_mempool is used for iterating slected mempool elements
and display the contents of elements for a max of 256 bytes. In case
of invalid or no name for mempool, no information is displayed.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
Acked-by: Reshma  Pattan <reshma.pattan@intel.com>
Acked-by: John McNamara <john.mcnamara@intel.com>
---
 app/proc-info/main.c           | 48 +++++++++++++++++++++++++++++++++-
 doc/guides/tools/proc_info.rst |  6 ++++-
 2 files changed, 52 insertions(+), 2 deletions(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 4aeab926d..b9acfa9ec 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -33,6 +33,7 @@
 #include <rte_security.h>
 #include <rte_cryptodev.h>
 #include <rte_tm.h>
+#include <rte_hexdump.h>
 
 /* Maximum long option length for option parsing. */
 #define MAX_LONG_OPT_SZ 64
@@ -88,6 +89,9 @@ static char *ring_name;
 /**< Enable show mempool. */
 static uint32_t enable_shw_mempool;
 static char *mempool_name;
+/**< Enable iter mempool. */
+static uint32_t enable_iter_mempool;
+static char *mempool_iter_name;
 
 /**< display usage */
 static void
@@ -112,7 +116,8 @@ proc_info_usage(const char *prgname)
 		"  --show-tm: to display traffic manager information for ports\n"
 		"  --show-crypto: to display crypto information\n"
 		"  --show-ring[=name]: to display ring information\n"
-		"  --show-mempool[=name]: to display mempool information\n",
+		"  --show-mempool[=name]: to display mempool information\n"
+		"  --iter-mempool=name: iterate mempool elements to display content\n",
 		prgname);
 }
 
@@ -224,6 +229,7 @@ proc_info_parse_args(int argc, char **argv)
 		{"show-crypto", 0, NULL, 0},
 		{"show-ring", optional_argument, NULL, 0},
 		{"show-mempool", optional_argument, NULL, 0},
+		{"iter-mempool", required_argument, NULL, 0},
 		{NULL, 0, 0, 0}
 	};
 
@@ -284,6 +290,10 @@ proc_info_parse_args(int argc, char **argv)
 					"show-mempool", MAX_LONG_OPT_SZ)) {
 				enable_shw_mempool = 1;
 				mempool_name = optarg;
+			} else if (!strncmp(long_option[option_index].name,
+					"iter-mempool", MAX_LONG_OPT_SZ)) {
+				enable_iter_mempool = 1;
+				mempool_iter_name = optarg;
 			}
 			break;
 		case 1:
@@ -1179,6 +1189,40 @@ show_mempool(char *name)
 	STATS_BDR_STR(50, "");
 }
 
+static void
+mempool_itr_obj(struct rte_mempool *mp, void *opaque,
+		void *obj, unsigned int obj_idx)
+{
+	printf("  - obj_idx %u opaque %p obj %p\n",
+			obj_idx, opaque, obj);
+
+	if (obj)
+		rte_hexdump(stdout, " Obj Content",
+				obj, (mp->elt_size > 256)?256:mp->elt_size);
+}
+
+static void
+iter_mempool(char *name)
+{
+	snprintf(bdr_str, MAX_STRING_LEN, " iter - MEMPOOL %"PRIu64,
+			rte_get_tsc_hz());
+	STATS_BDR_STR(10, bdr_str);
+
+	if (name != NULL) {
+		struct rte_mempool *ptr = rte_mempool_lookup(name);
+		if (ptr != NULL) {
+			/* iterate each object */
+			uint32_t ret = rte_mempool_obj_iter(ptr,
+					mempool_itr_obj, NULL);
+			printf("\n  - iterated %u objects\n", ret);
+			STATS_BDR_STR(50, "");
+			return;
+		}
+	}
+
+	STATS_BDR_STR(50, "");
+}
+
 int
 main(int argc, char **argv)
 {
@@ -1270,6 +1314,8 @@ main(int argc, char **argv)
 		show_ring(ring_name);
 	if (enable_shw_mempool)
 		show_mempool(mempool_name);
+	if (enable_iter_mempool)
+		iter_mempool(mempool_iter_name);
 
 	ret = rte_eal_cleanup();
 	if (ret)
diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst
index 42c5d45e0..6bdf5a861 100644
--- a/doc/guides/tools/proc_info.rst
+++ b/doc/guides/tools/proc_info.rst
@@ -19,7 +19,7 @@ The application has a number of command line options:
 
    ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats |
    --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto |
-   --show-ring[=name] | --show-mempool[=name] ]
+   --show-ring[=name] | --show-mempool[=name] | --iter-mempool=name ]
 
 Parameters
 ~~~~~~~~~~
@@ -65,6 +65,10 @@ The show-mempool parameter display current allocation of all mempool
 debug information. Specifying the name allows to display details for specific
 specific mempool. For invalid or no mempool name, whole list is dump.
 
+**--iter-mempool=name**
+The iter-mempool parameter iterates and displays mempool elements specified
+by name. For invalid or no mempool name no elements are displayed.
+
 Limitations
 -----------
 
-- 
2.17.1

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v9 1/6] app/procinfo: add support for show port
  2019-01-10 17:40               ` Thomas Monjalon
@ 2019-01-11  3:57                 ` Varghese, Vipin
  2019-01-11 10:22                   ` Thomas Monjalon
  0 siblings, 1 reply; 68+ messages in thread
From: Varghese, Vipin @ 2019-01-11  3:57 UTC (permalink / raw)
  To: Thomas Monjalon
  Cc: dev, Mcnamara, John, Ananyev, Konstantin, stephen, Pattan,
	Reshma, Singh, Jasvinder, Byrne, Stephen1, Patel, Amol

Hi Thomas

snipped
> > +#include <rte_cryptodev.h>
> 
> Is the crypto include really required in this patch?
Function 'show_port' requires the include file. Removing the same results

In function 'show_port':
/home/saesrv02/Downloads/dpdksrc/procifno/dpdk/app/proc-info/main.c:733:33: error: dereferencing pointer to incomplete type 'const struct rte_cryptodev_capabilities'
       s_cap->crypto_capabilities->op);

> 
> 

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v9 1/6] app/procinfo: add support for show port
  2019-01-11  3:57                 ` Varghese, Vipin
@ 2019-01-11 10:22                   ` Thomas Monjalon
  0 siblings, 0 replies; 68+ messages in thread
From: Thomas Monjalon @ 2019-01-11 10:22 UTC (permalink / raw)
  To: Varghese, Vipin
  Cc: dev, Mcnamara, John, Ananyev, Konstantin, stephen, Pattan,
	Reshma, Singh, Jasvinder, Byrne, Stephen1, Patel, Amol

11/01/2019 04:57, Varghese, Vipin:
> Hi Thomas
> 
> snipped
> > > +#include <rte_cryptodev.h>
> > 
> > Is the crypto include really required in this patch?
> Function 'show_port' requires the include file. Removing the same results
> 
> In function 'show_port':
> /home/saesrv02/Downloads/dpdksrc/procifno/dpdk/app/proc-info/main.c:733:33: error: dereferencing pointer to incomplete type 'const struct rte_cryptodev_capabilities'
>        s_cap->crypto_capabilities->op);

OK I see, thanks

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool
  2019-01-10 21:36           ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Vipin Varghese
                               ` (5 preceding siblings ...)
  2019-01-10 21:36             ` [dpdk-dev] [PATCH v9 6/6] app/procinfo: add support for iter mempool Vipin Varghese
@ 2019-01-11 14:46             ` Thomas Monjalon
  2019-01-14  0:07               ` Varghese, Vipin
  6 siblings, 1 reply; 68+ messages in thread
From: Thomas Monjalon @ 2019-01-11 14:46 UTC (permalink / raw)
  To: Vipin Varghese
  Cc: dev, john.mcnamara, konstantin.ananyev, stephen, reshma.pattan,
	jasvinder.singh, stephen1.byrne, amol.patel

10/01/2019 22:36, Vipin Varghese:
> This patch adds new debug functions to existing proc-info tool.
> 
> Motivation
> ==========
> 
> DPDK proc-info tool is been widely used as secondary process to collect
> stats for any primary process. But these are limited to DPDK NIC ports and
> basic memory usage.
> 
> The patch series tries to address the missing debug information for PMD by
> adding debug for port, traffic manager, crypto, ring and mempool. With
> these additional information collected, it becomes easy to analyze issues
> and performance variance.

Applied, thanks

^ permalink raw reply	[flat|nested] 68+ messages in thread

* Re: [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool
  2019-01-11 14:46             ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Thomas Monjalon
@ 2019-01-14  0:07               ` Varghese, Vipin
  0 siblings, 0 replies; 68+ messages in thread
From: Varghese, Vipin @ 2019-01-14  0:07 UTC (permalink / raw)
  To: Thomas Monjalon
  Cc: dev, Mcnamara, John, Ananyev, Konstantin, stephen, Pattan,
	Reshma, Singh, Jasvinder, Byrne, Stephen1, Patel, Amol

thanks

> -----Original Message-----
> From: Thomas Monjalon <thomas@monjalon.net>
> Sent: Friday, January 11, 2019 8:17 PM
> To: Varghese, Vipin <vipin.varghese@intel.com>
> Cc: dev@dpdk.org; Mcnamara, John <john.mcnamara@intel.com>; Ananyev,
> Konstantin <konstantin.ananyev@intel.com>; stephen@networkplumber.org;
> Pattan, Reshma <reshma.pattan@intel.com>; Singh, Jasvinder
> <jasvinder.singh@intel.com>; Byrne, Stephen1 <stephen1.byrne@intel.com>;
> Patel, Amol <amol.patel@intel.com>
> Subject: Re: [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-
> info tool
> 
> 10/01/2019 22:36, Vipin Varghese:
> > This patch adds new debug functions to existing proc-info tool.
> >
> > Motivation
> > ==========
> >
> > DPDK proc-info tool is been widely used as secondary process to
> > collect stats for any primary process. But these are limited to DPDK
> > NIC ports and basic memory usage.
> >
> > The patch series tries to address the missing debug information for
> > PMD by adding debug for port, traffic manager, crypto, ring and
> > mempool. With these additional information collected, it becomes easy
> > to analyze issues and performance variance.
> 
> Applied, thanks
> 
> 

^ permalink raw reply	[flat|nested] 68+ messages in thread

end of thread, other threads:[~2019-01-14  0:07 UTC | newest]

Thread overview: 68+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-11-22 14:15 [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese
2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 2/9] app/procinfo: add compare for new options Vipin Varghese
2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 3/9] app/procinfo: add prototype for debug instances Vipin Varghese
2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 4/9] app/procinfo: add support for show port Vipin Varghese
2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 5/9] app/procinfo: add support for show tm Vipin Varghese
2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 6/9] app/procinfo: add support for show crypto Vipin Varghese
2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 7/9] app/procinfo: add support for debug ring Vipin Varghese
2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 8/9] app/procinfo: add support for show mempool Vipin Varghese
2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 9/9] doc/procinfo: add information for debug options Vipin Varghese
2018-11-22 18:08   ` Mcnamara, John
2018-11-23  4:58     ` Varghese, Vipin
2018-12-03  5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 1/9] app/procinfo: add usage for new debug Vipin Varghese
2018-12-12 14:14     ` Pattan, Reshma
2018-12-12 15:06       ` Varghese, Vipin
2018-12-13  5:08     ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese
2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 1/9] app/procinfo: add usage for new debug Vipin Varghese
2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 2/9] app/procinfo: add compare for new options Vipin Varghese
2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 3/9] app/procinfo: add prototype for debug instances Vipin Varghese
2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 4/9] app/procinfo: add support for show port Vipin Varghese
2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 5/9] app/procinfo: add support for show tm Vipin Varghese
2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 6/9] app/procinfo: add support for show crypto Vipin Varghese
2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 7/9] app/procinfo: add support for debug ring Vipin Varghese
2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 8/9] app/procinfo: add support for show iter mempool Vipin Varghese
2018-12-13  5:08       ` [dpdk-dev] [PATCH v7 9/9] doc/procinfo: add information for debug options Vipin Varghese
2018-12-13 14:42       ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Pattan, Reshma
2018-12-13 16:21         ` Varghese, Vipin
2018-12-22 21:02           ` Thomas Monjalon
2018-12-26  5:21             ` Varghese, Vipin
2018-12-26 21:33               ` Thomas Monjalon
2018-12-27  2:46                 ` Varghese, Vipin
2018-12-27  9:32                   ` Thomas Monjalon
2018-12-27 10:45                     ` Varghese, Vipin
2019-01-07 15:38       ` [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance " Vipin Varghese
2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions Vipin Varghese
2019-01-09 23:45           ` Thomas Monjalon
2019-01-10  3:08             ` Varghese, Vipin
2019-01-10  8:39               ` Thomas Monjalon
2019-01-10  8:53                 ` Varghese, Vipin
2019-01-10  9:09                   ` Thomas Monjalon
2019-01-10 21:36           ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Vipin Varghese
2019-01-10 21:36             ` [dpdk-dev] [PATCH v9 1/6] app/procinfo: add support for show port Vipin Varghese
2019-01-10 17:40               ` Thomas Monjalon
2019-01-11  3:57                 ` Varghese, Vipin
2019-01-11 10:22                   ` Thomas Monjalon
2019-01-10 21:36             ` [dpdk-dev] [PATCH v9 2/6] app/procinfo: add support for show tm Vipin Varghese
2019-01-10 21:36             ` [dpdk-dev] [PATCH v9 3/6] app/procinfo: add support for show crypto Vipin Varghese
2019-01-10 21:36             ` [dpdk-dev] [PATCH v9 4/6] app/procinfo: add support for debug ring Vipin Varghese
2019-01-10 21:36             ` [dpdk-dev] [PATCH v9 5/6] app/procinfo: add support for show mempool Vipin Varghese
2019-01-10 21:36             ` [dpdk-dev] [PATCH v9 6/6] app/procinfo: add support for iter mempool Vipin Varghese
2019-01-11 14:46             ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Thomas Monjalon
2019-01-14  0:07               ` Varghese, Vipin
2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 2/7] app/procinfo: add support for show port Vipin Varghese
2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 3/7] app/procinfo: add support for show tm Vipin Varghese
2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 4/7] app/procinfo: add support for show crypto Vipin Varghese
2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 5/7] app/procinfo: add support for debug ring Vipin Varghese
2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 6/7] app/procinfo: add support for show mempool Vipin Varghese
2019-01-07 15:38         ` [dpdk-dev] [PATCH v8 7/7] app/procinfo: add support for iter mempool Vipin Varghese
2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 2/9] app/procinfo: add compare for new options Vipin Varghese
2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 3/9] app/procinfo: add prototype for debug instances Vipin Varghese
2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 4/9] app/procinfo: add support for show port Vipin Varghese
2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 5/9] app/procinfo: add support for show tm Vipin Varghese
2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 6/9] app/procinfo: add support for show crypto Vipin Varghese
2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 7/9] app/procinfo: add support for debug ring Vipin Varghese
2018-12-03  5:49   ` [dpdk-dev] [PATCH v6 8/9] app/procinfo: add support for show iter mempool Vipin Varghese
2018-12-12 16:10     ` Pattan, Reshma
2018-12-13  2:26       ` Varghese, Vipin
2018-12-03  5:50   ` [dpdk-dev] [PATCH v6 9/9] doc/procinfo: add information for debug options Vipin Varghese

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).