DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH v1 1/9] app/procinfo: add usage for new debug
@ 2018-10-23 13:57 Vipin Varghese
  2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 2/9] app/procinfo: add compare for new options Vipin Varghese
                   ` (9 more replies)
  0 siblings, 10 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-10-23 13:57 UTC (permalink / raw)
  To: dev, maryam.tahhan, reshma.pattan
  Cc: amol.patel, sivaprasad.tummala, stephen1.byrne, michael.j.glynn,
	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>
---
 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..92854f5ba 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"
+		"  --dbg-port to display information for all available ports\n"
+		"  --dbg-tm to display information for traffic manager\n"
+		"  --dbg-crypto to display information for crypto\n"
+		"  --dbg-ring[=name] to display information for ring\n"
+		"  --dbg-mempool[=name] to display information for mempool\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},
+		{"dbg-port", 0, NULL, 0},
+		{"dbg-tm", 0, NULL, 0},
+		{"dbg-crypto", 0, NULL, 0},
+		{"dbg-ring", optional_argument, NULL, 0},
+		{"dbg-mempool", optional_argument, NULL, 0},
 		{NULL, 0, 0, 0}
 	};
 
-- 
2.17.1

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

* [dpdk-dev] [PATCH v1 2/9] app/procinfo: add compare for new options
  2018-10-23 13:57 [dpdk-dev] [PATCH v1 1/9] app/procinfo: add usage for new debug Vipin Varghese
@ 2018-10-23 13:57 ` Vipin Varghese
  2018-10-25 15:18   ` Pattan, Reshma
  2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 3/9] app/procinfo: add prototype for debug instances Vipin Varghese
                   ` (8 subsequent siblings)
  9 siblings, 1 reply; 65+ messages in thread
From: Vipin Varghese @ 2018-10-23 13:57 UTC (permalink / raw)
  To: dev, maryam.tahhan, reshma.pattan
  Cc: amol.patel, sivaprasad.tummala, stephen1.byrne, michael.j.glynn,
	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>
---
 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 92854f5ba..5505d3fe3 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 port debug. */
+static uint32_t enable_dbg_port;
+/**< Enable tm debug. */
+static uint32_t enable_dbg_tm;
+/**< Enable crypto debug. */
+static uint32_t enable_dbg_crypto;
+/**< Enable ring debug. */
+static uint32_t enable_dbg_ring;
+static char *ring_name;
+/**< Enable mempool debug. */
+static uint32_t enable_dbg_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,
+					"dbg-port", MAX_LONG_OPT_SZ))
+				enable_dbg_port = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"dbg-tm", MAX_LONG_OPT_SZ))
+				enable_dbg_tm = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"dbg-crypto", MAX_LONG_OPT_SZ))
+				enable_dbg_crypto = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"dbg-ring", MAX_LONG_OPT_SZ)) {
+				enable_dbg_ring = 1;
+				ring_name = optarg;
+			} else if (!strncmp(long_option[option_index].name,
+					"dbg-mempool", MAX_LONG_OPT_SZ)) {
+				enable_dbg_mempool = 1;
+				mempool_name = optarg;
+			}
 			break;
 		case 1:
 			/* Print xstat single value given by name*/
-- 
2.17.1

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

* [dpdk-dev] [PATCH v1 3/9] app/procinfo: add prototype for debug instances
  2018-10-23 13:57 [dpdk-dev] [PATCH v1 1/9] app/procinfo: add usage for new debug Vipin Varghese
  2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 2/9] app/procinfo: add compare for new options Vipin Varghese
@ 2018-10-23 13:57 ` Vipin Varghese
  2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 4/9] app/procinfo: add code for debug port Vipin Varghese
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-10-23 13:57 UTC (permalink / raw)
  To: dev, maryam.tahhan, reshma.pattan
  Cc: amol.patel, sivaprasad.tummala, stephen1.byrne, michael.j.glynn,
	Vipin Varghese

Add prototype and function calls for the debug functions.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---
 app/proc-info/main.c | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 5505d3fe3..5511fcb71 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
+debug_port(void)
+{
+	printf(" port");
+}
+
+static void
+debug_tm(void)
+{
+	printf(" tm");
+}
+
+static void
+debug_crypto(void)
+{
+	printf(" crypto");
+}
+
+static void
+debug_ring(char *name)
+{
+	printf(" rings Name (%s)", name);
+}
+
+static void
+debug_mempool(char *name)
+{
+	printf(" mempools Name (%s)", name);
+}
+
 int
 main(int argc, char **argv)
 {
@@ -707,6 +737,17 @@ main(int argc, char **argv)
 	/* print port independent stats */
 	if (enable_metrics)
 		metrics_display(RTE_METRICS_GLOBAL);
+	/* print debug information for PMD */
+	if (enable_dbg_port)
+		debug_port();
+	if (enable_dbg_tm)
+		debug_tm();
+	if (enable_dbg_crypto)
+		debug_crypto();
+	if (enable_dbg_ring)
+		debug_ring(ring_name);
+	if (enable_dbg_mempool)
+		debug_mempool(mempool_name);
 
 	ret = rte_eal_cleanup();
 	if (ret)
-- 
2.17.1

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

* [dpdk-dev] [PATCH v1 4/9] app/procinfo: add code for debug port
  2018-10-23 13:57 [dpdk-dev] [PATCH v1 1/9] app/procinfo: add usage for new debug Vipin Varghese
  2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 2/9] app/procinfo: add compare for new options Vipin Varghese
  2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 3/9] app/procinfo: add prototype for debug instances Vipin Varghese
@ 2018-10-23 13:57 ` Vipin Varghese
  2018-10-25 15:38   ` Pattan, Reshma
  2018-10-25 15:46   ` Pattan, Reshma
  2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 5/9] app/procinfo: add code for debug tm Vipin Varghese
                   ` (6 subsequent siblings)
  9 siblings, 2 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-10-23 13:57 UTC (permalink / raw)
  To: dev, maryam.tahhan, reshma.pattan
  Cc: amol.patel, sivaprasad.tummala, stephen1.byrne, michael.j.glynn,
	Vipin Varghese

Function debug_port is used for displaying the port PMD under the
primary process. This covers basic and per queue configuration.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---
 app/proc-info/main.c | 113 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 112 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 5511fcb71..668f7febf 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
@@ -40,6 +43,8 @@
 #define STATS_BDR_STR(w, s) printf("%.*s%s%.*s\n", w, \
 	STATS_BDR_FMT, s, w, STATS_BDR_FMT)
 
+char bdr_str[100];
+
 /**< mask of enabled ports */
 static uint32_t enabled_port_mask;
 /**< Enable stats. */
@@ -631,7 +636,113 @@ metrics_display(int port_id)
 static void
 debug_port(void)
 {
-	printf(" port");
+	uint16_t i = 0;
+	int ret = 0, j, k;
+
+	snprintf(bdr_str, 100, " debug - 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 = {0};
+		struct rte_eth_dev_info dev_info = {0};
+		struct rte_eth_rxq_info qinfo = {0};
+		struct rte_eth_stats stats = {0};
+		struct rte_eth_rss_conf rss_conf = {0};
+
+		snprintf(bdr_str, 100, " 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, &qinfo);
+			if (ret == 0) {
+				printf("\t  -- queue %d rx scatter %d"
+				       " descriptors %d offloads 0x%"PRIx64
+				       " mempool socket %d\n",
+				       j,
+				       qinfo.scattered_rx,
+				       qinfo.nb_desc,
+				       qinfo.conf.offloads,
+				       qinfo.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) || (rss_conf.rss_key == NULL))
+				continue;
+
+			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("  - drop packet information\n");
+		ret = rte_eth_stats_get(i, &stats);
+		if (ret == 0) {
+			printf("\t  -- input %"PRIu64
+			       " output %"PRIu64"\n",
+			       stats.ipackets,
+			       stats.opackets);
+			printf("\t  -- 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
-- 
2.17.1

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

* [dpdk-dev] [PATCH v1 5/9] app/procinfo: add code for debug tm
  2018-10-23 13:57 [dpdk-dev] [PATCH v1 1/9] app/procinfo: add usage for new debug Vipin Varghese
                   ` (2 preceding siblings ...)
  2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 4/9] app/procinfo: add code for debug port Vipin Varghese
@ 2018-10-23 13:57 ` Vipin Varghese
  2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 6/9] app/procinfo: add code for debug crypto Vipin Varghese
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-10-23 13:57 UTC (permalink / raw)
  To: dev, maryam.tahhan, reshma.pattan
  Cc: amol.patel, sivaprasad.tummala, stephen1.byrne, michael.j.glynn,
	Vipin Varghese

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

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---
 app/proc-info/main.c | 247 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 246 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 668f7febf..4766a5ea3 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
@@ -748,7 +749,251 @@ debug_port(void)
 static void
 debug_tm(void)
 {
-	printf(" tm");
+	int ret = 0, is_leaf = 0;
+	unsigned int j, k;
+	uint16_t i = 0;
+
+	snprintf(bdr_str, 100, "debug - 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 = {0};
+		struct rte_tm_capabilities cap = {0};
+		struct rte_tm_error error = {0};
+		struct rte_tm_node_capabilities	capnode = {0};
+		struct rte_tm_level_capabilities caplevel = {0};
+		uint32_t n_leaf_nodes = 0;
+
+		snprintf(bdr_str, 100, " TM for port (%u) ", i);
+		STATS_BDR_STR(5, bdr_str);
+
+		rte_eth_dev_info_get(i, &dev_info);
+		printf("  - Generic\n"
+		       "\t  -- driver name %s\n"
+		       "\t  -- max vf (%u)\n"
+		       "\t  -- max tx queues (%u)\n"
+		       "\t  -- number of tx queues (%u)\n",
+		       dev_info.driver_name,
+		       dev_info.max_vfs,
+		       dev_info.max_tx_queues,
+		       dev_info.nb_tx_queues);
+
+		ret = rte_tm_get_number_of_leaf_nodes(i, &n_leaf_nodes, &error);
+		if (ret == 0)
+			printf("  - leaf nodes (%u)\n", n_leaf_nodes);
+
+		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++) {
+			ret = rte_tm_node_capabilities_get(i, j,
+				&capnode, &error);
+			if (ret)
+				continue;
+
+			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;
+
+			if (!is_leaf) {
+#define DSP_CAP_NODE_NON_LEAF(x) printf("\t  -- nonleaf sched max:" \
+" children (%u) sp priorities (%u) " \
+" wfq children per group (%u) wfq groups (%u) wfq weight (%u)\n", \
+x.sched_n_children_max, x.sched_sp_n_priorities_max, \
+x.sched_wfq_n_children_per_group_max, x.sched_wfq_n_groups_max, \
+x.sched_wfq_weight_max)
+				DSP_CAP_NODE_NON_LEAF(capnode.nonleaf);
+			} else {
+#define DSP_CAP_NODE_LEAF(x) printf("\t  -- leaf cman support:" \
+" wred pkt mode (%d) wred byte mode (%d) head drop (%d)" \
+" wred context private (%d) wred context shared (%u)\n", \
+x.cman_wred_packet_mode_supported, x.cman_wred_byte_mode_supported, \
+x.cman_head_drop_supported, x.cman_wred_context_private_supported, \
+x.cman_wred_context_shared_n_max)
+				DSP_CAP_NODE_LEAF(capnode.leaf);
+			}
+		}
+
+		for (j = 0; j < cap.n_levels_max; j++) {
+			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;
+
+				if (!is_leaf) {
+#define DSP_CAP_LVL_NON_LEAF(x) do { \
+printf("\t  - shaper private:" \
+" (%d) dual rate (%d)\n", x.shaper_private_supported, \
+x.shaper_private_dual_rate_supported); \
+printf("\t  - shaper share: (%u)\n", \
+x.shaper_shared_n_max); \
+printf("\t  - non leaf sched MAX:" \
+" children (%u) sp (%u)" \
+" wfq children per group (%u)" \
+" wfq groups (%u) wfq weight (%u)\n", \
+x.sched_n_children_max, x.sched_sp_n_priorities_max, \
+x.sched_wfq_n_children_per_group_max, \
+x.sched_wfq_n_groups_max, x.sched_wfq_weight_max); \
+} while (0)
+					DSP_CAP_LVL_NON_LEAF(caplevel.nonleaf);
+				} else {
+#define DSP_CAP_LVL_LEAF(x) do { \
+printf("\t  - shaper private: (%d) dual rate (%d)\n", \
+x.shaper_private_supported, x.shaper_private_dual_rate_supported); \
+printf("\t - shaper share: (%u)\n", x.shaper_shared_n_max); \
+printf("  -- leaf cman support: wred pkt mode (%d)" \
+" wred byte mode (%d) head drop (%d)" \
+" wred context private (%d) wred context shared (%u)\n", \
+x.cman_wred_packet_mode_supported, x.cman_wred_byte_mode_supported, \
+x.cman_head_drop_supported, x.cman_wred_context_private_supported, \
+x.cman_wred_context_shared_n_max); \
+} while (0)
+
+					DSP_CAP_LVL_LEAF(caplevel.leaf);
+				}
+			}
+		}
+
+		for (unsigned int j = 0; j < n_leaf_nodes; j++) {
+			struct rte_tm_node_stats stats = {0};
+
+			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] 65+ messages in thread

* [dpdk-dev] [PATCH v1 6/9] app/procinfo: add code for debug crypto
  2018-10-23 13:57 [dpdk-dev] [PATCH v1 1/9] app/procinfo: add usage for new debug Vipin Varghese
                   ` (3 preceding siblings ...)
  2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 5/9] app/procinfo: add code for debug tm Vipin Varghese
@ 2018-10-23 13:57 ` Vipin Varghese
  2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 7/9] app/procinfo: add code for debug ring Vipin Varghese
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-10-23 13:57 UTC (permalink / raw)
  To: dev, maryam.tahhan, reshma.pattan
  Cc: amol.patel, sivaprasad.tummala, stephen1.byrne, michael.j.glynn,
	Vipin Varghese

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

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---
 app/proc-info/main.c | 70 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 69 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 4766a5ea3..0f2045858 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -999,7 +999,75 @@ x.cman_wred_context_shared_n_max); \
 static void
 debug_crypto(void)
 {
-	printf(" crypto");
+	uint8_t crypto_dev_count = rte_cryptodev_count(), i;
+
+	snprintf(bdr_str, 100, "debug - 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 = {0};
+		struct rte_cryptodev_stats stats = {0};
+
+		rte_cryptodev_info_get(i, &dev_info);
+
+		printf("  - device (%u)\n", i);
+		printf("\t  -- name (%s) driver (%s)\n"
+		       "\t  -- id (%u) flags (0x%"PRIx64") socket (%d)\n"
+		       "\t  -- queue pairs (%d)\n",
+		       rte_cryptodev_name_get(i),
+		       dev_info.driver_name, dev_info.driver_id,
+		       dev_info.feature_flags, dev_info.device->numa_node,
+		       rte_cryptodev_queue_pair_count(i));
+
+#define DSP_CRYPTO_FLAG(x) do { \
+printf("  - feature flags\n"); \
+printf("\t  -- symmetric (%c) asymmetric (%c)" \
+" 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  -- 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  -- Acclerate CPU AESNI (%c) HW (%c)\n", \
+(x & RTE_CRYPTODEV_FF_CPU_AESNI)?'y':'n', \
+(x & RTE_CRYPTODEV_FF_HW_ACCELERATED)?'y':'n'); \
+printf("\t  -- INLINE (%c)\n", \
+(x & RTE_CRYPTODEV_FF_SECURITY)?'y':'n'); \
+printf("\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("  - buffer offload\n"); \
+printf("\t  -- IN_PLACE_SGL (%c)\n", \
+(x & RTE_CRYPTODEV_FF_IN_PLACE_SGL)?'y':'n'); \
+printf("\t  -- OOP_SGL_IN_SGL_OUT (%c)\n", \
+(x & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)?'y':'n'); \
+printf("\t  -- OOP_SGL_IN_LB_OUT (%c)\n", \
+(x & RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT)?'y':'n'); \
+printf("\t  -- OOP_LB_IN_SGL_OUT (%c)\n", \
+(x & RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT)?'y':'n'); \
+printf("\t  -- OOP_LB_IN_LB_OUT (%c)\n", \
+(x & RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT)?'y':'n'); \
+} while (0)
+
+		DSP_CRYPTO_FLAG(dev_info.feature_flags);
+
+		printf("  - stats\n");
+		if (rte_cryptodev_stats_get(i, &stats) == 0) {
+			printf("\t  -- enqueue count (%"PRIu64")"
+			       " error (%"PRIu64")\n",
+			       stats.enqueued_count,
+			       stats.enqueue_err_count);
+			printf("\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] 65+ messages in thread

* [dpdk-dev] [PATCH v1 7/9] app/procinfo: add code for debug ring
  2018-10-23 13:57 [dpdk-dev] [PATCH v1 1/9] app/procinfo: add usage for new debug Vipin Varghese
                   ` (4 preceding siblings ...)
  2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 6/9] app/procinfo: add code for debug crypto Vipin Varghese
@ 2018-10-23 13:57 ` Vipin Varghese
  2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 8/9] app/procinfo: add code for debug mempool Vipin Varghese
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-10-23 13:57 UTC (permalink / raw)
  To: dev, maryam.tahhan, reshma.pattan
  Cc: amol.patel, sivaprasad.tummala, stephen1.byrne, michael.j.glynn,
	Vipin Varghese

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

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---
 app/proc-info/main.c | 29 ++++++++++++++++++++++++++++-
 1 file changed, 28 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 0f2045858..f8b28d47f 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -1073,7 +1073,34 @@ printf("\t  -- OOP_LB_IN_LB_OUT (%c)\n", \
 static void
 debug_ring(char *name)
 {
-	printf(" rings Name (%s)", name);
+	snprintf(bdr_str, 100, "debug - 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) Socket (%d) flags (0x%x)\n",
+			       ptr->name,
+			       ptr->memzone->socket_id,
+			       ptr->flags);
+			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] 65+ messages in thread

* [dpdk-dev] [PATCH v1 8/9] app/procinfo: add code for debug mempool
  2018-10-23 13:57 [dpdk-dev] [PATCH v1 1/9] app/procinfo: add usage for new debug Vipin Varghese
                   ` (5 preceding siblings ...)
  2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 7/9] app/procinfo: add code for debug ring Vipin Varghese
@ 2018-10-23 13:57 ` Vipin Varghese
  2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 9/9] doc/proc_info: add information for debug options Vipin Varghese
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-10-23 13:57 UTC (permalink / raw)
  To: dev, maryam.tahhan, reshma.pattan
  Cc: amol.patel, sivaprasad.tummala, stephen1.byrne, michael.j.glynn,
	Vipin Varghese

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

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---
 app/proc-info/main.c | 47 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 46 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index f8b28d47f..764ef5731 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
@@ -1103,10 +1104,54 @@ debug_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("  - name %s, obj_idx %u opaque %p obj %p\n",
+	       mp->name, obj_idx, opaque, obj);
+
+	if (obj)
+		rte_hexdump(stdout, " Mempool Obj Content",
+			obj, (mp->elt_size > 256)?256:mp->elt_size);
+}
+
 static void
 debug_mempool(char *name)
 {
-	printf(" mempools Name (%s)", name);
+	snprintf(bdr_str, 100, "debug - 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) {
+			printf("  - Name: %s on socket %d flags %u\n",
+			       ptr->name, ptr->socket_id, ptr->flags);
+			printf("  - Size %u Cache %u element %u"
+			       " header %u trailer %u "
+			       " 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);
+
+			/* iterate each object */
+			int 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] 65+ messages in thread

* [dpdk-dev] [PATCH v1 9/9] doc/proc_info: add information for debug options
  2018-10-23 13:57 [dpdk-dev] [PATCH v1 1/9] app/procinfo: add usage for new debug Vipin Varghese
                   ` (6 preceding siblings ...)
  2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 8/9] app/procinfo: add code for debug mempool Vipin Varghese
@ 2018-10-23 13:57 ` Vipin Varghese
  2018-10-23 15:19 ` [dpdk-dev] [PATCH v1 1/9] app/procinfo: add usage for new debug Stephen Hemminger
  2018-10-24  6:47 ` [dpdk-dev] [PATCH v2 " Vipin Varghese
  9 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-10-23 13:57 UTC (permalink / raw)
  To: dev, maryam.tahhan, reshma.pattan
  Cc: amol.patel, sivaprasad.tummala, stephen1.byrne, michael.j.glynn,
	Vipin Varghese

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

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---
 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..2b06e2f86 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, 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 --dbg-port | --dbg-tm | --dbg-crypto |
+   --dbg-mempool[=name] | --dbg-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.
 
+**--dbg-port**
+The dbg-port parameter displays port level various configuration and
+mbuf pool information associated to RX queues.
+
+**--dbg-tm**
+The dbg-tm parameter displays per port traffic manager settings and
+current configuration. It also display statistics too.
+
+**--dbg-crypto**
+The dbg-crypto parameter displays available cryptodev configurations,
+settings and stats per node.
+
+**--dbg-mempool[=name]**
+The dbg-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.
+
+**--dbg-ring[=name]**
+The dbg-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] 65+ messages in thread

* Re: [dpdk-dev] [PATCH v1 1/9] app/procinfo: add usage for new debug
  2018-10-23 13:57 [dpdk-dev] [PATCH v1 1/9] app/procinfo: add usage for new debug Vipin Varghese
                   ` (7 preceding siblings ...)
  2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 9/9] doc/proc_info: add information for debug options Vipin Varghese
@ 2018-10-23 15:19 ` Stephen Hemminger
  2018-10-24  5:41   ` Varghese, Vipin
  2018-10-24  6:47 ` [dpdk-dev] [PATCH v2 " Vipin Varghese
  9 siblings, 1 reply; 65+ messages in thread
From: Stephen Hemminger @ 2018-10-23 15:19 UTC (permalink / raw)
  To: Vipin Varghese
  Cc: dev, maryam.tahhan, reshma.pattan, amol.patel,
	sivaprasad.tummala, stephen1.byrne, michael.j.glynn

On Tue, 23 Oct 2018 19:27:43 +0530
Vipin Varghese <vipin.varghese@intel.com> wrote:

> +		"  --dbg-port to display information for all available ports\n"
> +		"  --dbg-tm to display information for traffic manager\n"
> +		"  --dbg-crypto to display information for crypto\n"
> +		"  --dbg-ring[=name] to display information for ring\n"
> +		"  --dbg-mempool[=name] to display information for mempool\n",

These might be useful outside of debugging, why not give them names like
  --dbg-port == --show-port
  --dpb-tm   == --show-tm 

etc.

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

* Re: [dpdk-dev] [PATCH v1 1/9] app/procinfo: add usage for new debug
  2018-10-23 15:19 ` [dpdk-dev] [PATCH v1 1/9] app/procinfo: add usage for new debug Stephen Hemminger
@ 2018-10-24  5:41   ` Varghese, Vipin
  2018-10-24 15:56     ` Stephen Hemminger
  0 siblings, 1 reply; 65+ messages in thread
From: Varghese, Vipin @ 2018-10-24  5:41 UTC (permalink / raw)
  To: Stephen Hemminger
  Cc: dev, Tahhan, Maryam, Pattan, Reshma, Patel, Amol, Tummala,
	Sivaprasad, Byrne, Stephen1, Glynn, Michael J

Hi Stephen,

<snipped>

> 
> > +		"  --dbg-port to display information for all available ports\n"
> > +		"  --dbg-tm to display information for traffic manager\n"
> > +		"  --dbg-crypto to display information for crypto\n"
> > +		"  --dbg-ring[=name] to display information for ring\n"
> > +		"  --dbg-mempool[=name] to display information for
> mempool\n",
> 
> These might be useful outside of debugging, why not give them names like
>   --dbg-port == --show-port
>   --dpb-tm   == --show-tm
> 
 
Ok, as I understand you would like to reword 'dbg' to 'show' for 'port|tm|crypto|ring|mempool'. Sure I will do the same and share v2

Thanks
Vipin Varghese

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

* [dpdk-dev] [PATCH v2 1/9] app/procinfo: add usage for new debug
  2018-10-23 13:57 [dpdk-dev] [PATCH v1 1/9] app/procinfo: add usage for new debug Vipin Varghese
                   ` (8 preceding siblings ...)
  2018-10-23 15:19 ` [dpdk-dev] [PATCH v1 1/9] app/procinfo: add usage for new debug Stephen Hemminger
@ 2018-10-24  6:47 ` Vipin Varghese
  2018-10-24  6:47   ` [dpdk-dev] [PATCH v2 2/9] app/procinfo: add compare for new options Vipin Varghese
                     ` (7 more replies)
  9 siblings, 8 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-10-24  6:47 UTC (permalink / raw)
  To: dev, stephen, maryam.tahhan, reshma.pattan
  Cc: amol.patel, sivaprasad.tummala, stephen1.byrne, michael.j.glynn,
	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>
---
 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..b62b314b2 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 information for all available ports\n"
+		"  --show-tm to display information for traffic manager\n"
+		"  --show-crypto to display information for crypto\n"
+		"  --show-ring[=name] to display information for ring\n"
+		"  --show-mempool[=name] to display information for mempool\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] 65+ messages in thread

* [dpdk-dev] [PATCH v2 2/9] app/procinfo: add compare for new options
  2018-10-24  6:47 ` [dpdk-dev] [PATCH v2 " Vipin Varghese
@ 2018-10-24  6:47   ` Vipin Varghese
  2018-10-24  6:47   ` [dpdk-dev] [PATCH v2 3/9] app/procinfo: add prototype for debug instances Vipin Varghese
                     ` (6 subsequent siblings)
  7 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-10-24  6:47 UTC (permalink / raw)
  To: dev, stephen, maryam.tahhan, reshma.pattan
  Cc: amol.patel, sivaprasad.tummala, stephen1.byrne, michael.j.glynn,
	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>
---
 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 b62b314b2..0da148c8c 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 port debug. */
+static uint32_t enable_dbg_port;
+/**< Enable tm debug. */
+static uint32_t enable_dbg_tm;
+/**< Enable crypto debug. */
+static uint32_t enable_dbg_crypto;
+/**< Enable ring debug. */
+static uint32_t enable_dbg_ring;
+static char *ring_name;
+/**< Enable mempool debug. */
+static uint32_t enable_dbg_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_dbg_port = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-tm", MAX_LONG_OPT_SZ))
+				enable_dbg_tm = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-crypto", MAX_LONG_OPT_SZ))
+				enable_dbg_crypto = 1;
+			else if (!strncmp(long_option[option_index].name,
+					"show-ring", MAX_LONG_OPT_SZ)) {
+				enable_dbg_ring = 1;
+				ring_name = optarg;
+			} else if (!strncmp(long_option[option_index].name,
+					"show-mempool", MAX_LONG_OPT_SZ)) {
+				enable_dbg_mempool = 1;
+				mempool_name = optarg;
+			}
 			break;
 		case 1:
 			/* Print xstat single value given by name*/
-- 
2.17.1

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

* [dpdk-dev] [PATCH v2 3/9] app/procinfo: add prototype for debug instances
  2018-10-24  6:47 ` [dpdk-dev] [PATCH v2 " Vipin Varghese
  2018-10-24  6:47   ` [dpdk-dev] [PATCH v2 2/9] app/procinfo: add compare for new options Vipin Varghese
@ 2018-10-24  6:47   ` Vipin Varghese
  2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 4/9] app/procinfo: add code for debug port Vipin Varghese
                     ` (5 subsequent siblings)
  7 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-10-24  6:47 UTC (permalink / raw)
  To: dev, stephen, maryam.tahhan, reshma.pattan
  Cc: amol.patel, sivaprasad.tummala, stephen1.byrne, michael.j.glynn,
	Vipin Varghese

Add prototype and function calls for the debug functions.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---
 app/proc-info/main.c | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 0da148c8c..e2791aaab 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
+debug_port(void)
+{
+	printf(" port");
+}
+
+static void
+debug_tm(void)
+{
+	printf(" tm");
+}
+
+static void
+debug_crypto(void)
+{
+	printf(" crypto");
+}
+
+static void
+debug_ring(char *name)
+{
+	printf(" rings Name (%s)", name);
+}
+
+static void
+debug_mempool(char *name)
+{
+	printf(" mempools Name (%s)", name);
+}
+
 int
 main(int argc, char **argv)
 {
@@ -707,6 +737,17 @@ main(int argc, char **argv)
 	/* print port independent stats */
 	if (enable_metrics)
 		metrics_display(RTE_METRICS_GLOBAL);
+	/* print debug information for PMD */
+	if (enable_dbg_port)
+		debug_port();
+	if (enable_dbg_tm)
+		debug_tm();
+	if (enable_dbg_crypto)
+		debug_crypto();
+	if (enable_dbg_ring)
+		debug_ring(ring_name);
+	if (enable_dbg_mempool)
+		debug_mempool(mempool_name);
 
 	ret = rte_eal_cleanup();
 	if (ret)
-- 
2.17.1

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

* [dpdk-dev] [PATCH v2 4/9] app/procinfo: add code for debug port
  2018-10-24  6:47 ` [dpdk-dev] [PATCH v2 " Vipin Varghese
  2018-10-24  6:47   ` [dpdk-dev] [PATCH v2 2/9] app/procinfo: add compare for new options Vipin Varghese
  2018-10-24  6:47   ` [dpdk-dev] [PATCH v2 3/9] app/procinfo: add prototype for debug instances Vipin Varghese
@ 2018-10-24  6:48   ` Vipin Varghese
  2018-10-25 16:20     ` Pattan, Reshma
  2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 5/9] app/procinfo: add code for debug tm Vipin Varghese
                     ` (4 subsequent siblings)
  7 siblings, 1 reply; 65+ messages in thread
From: Vipin Varghese @ 2018-10-24  6:48 UTC (permalink / raw)
  To: dev, stephen, maryam.tahhan, reshma.pattan
  Cc: amol.patel, sivaprasad.tummala, stephen1.byrne, michael.j.glynn,
	Vipin Varghese

Function debug_port is used for displaying the port PMD under the
primary process. This covers basic and per queue configuration.

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---
 app/proc-info/main.c | 113 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 112 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index e2791aaab..5c75764a1 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
@@ -40,6 +43,8 @@
 #define STATS_BDR_STR(w, s) printf("%.*s%s%.*s\n", w, \
 	STATS_BDR_FMT, s, w, STATS_BDR_FMT)
 
+char bdr_str[100];
+
 /**< mask of enabled ports */
 static uint32_t enabled_port_mask;
 /**< Enable stats. */
@@ -631,7 +636,113 @@ metrics_display(int port_id)
 static void
 debug_port(void)
 {
-	printf(" port");
+	uint16_t i = 0;
+	int ret = 0, j, k;
+
+	snprintf(bdr_str, 100, " debug - 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 = {0};
+		struct rte_eth_dev_info dev_info = {0};
+		struct rte_eth_rxq_info qinfo = {0};
+		struct rte_eth_stats stats = {0};
+		struct rte_eth_rss_conf rss_conf = {0};
+
+		snprintf(bdr_str, 100, " 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, &qinfo);
+			if (ret == 0) {
+				printf("\t  -- queue %d rx scatter %d"
+				       " descriptors %d offloads 0x%"PRIx64
+				       " mempool socket %d\n",
+				       j,
+				       qinfo.scattered_rx,
+				       qinfo.nb_desc,
+				       qinfo.conf.offloads,
+				       qinfo.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) || (rss_conf.rss_key == NULL))
+				continue;
+
+			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("  - drop packet information\n");
+		ret = rte_eth_stats_get(i, &stats);
+		if (ret == 0) {
+			printf("\t  -- input %"PRIu64
+			       " output %"PRIu64"\n",
+			       stats.ipackets,
+			       stats.opackets);
+			printf("\t  -- 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
-- 
2.17.1

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

* [dpdk-dev] [PATCH v2 5/9] app/procinfo: add code for debug tm
  2018-10-24  6:47 ` [dpdk-dev] [PATCH v2 " Vipin Varghese
                     ` (2 preceding siblings ...)
  2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 4/9] app/procinfo: add code for debug port Vipin Varghese
@ 2018-10-24  6:48   ` Vipin Varghese
  2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 6/9] app/procinfo: add code for debug crypto Vipin Varghese
                     ` (3 subsequent siblings)
  7 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-10-24  6:48 UTC (permalink / raw)
  To: dev, stephen, maryam.tahhan, reshma.pattan
  Cc: amol.patel, sivaprasad.tummala, stephen1.byrne, michael.j.glynn,
	Vipin Varghese

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

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---
 app/proc-info/main.c | 247 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 246 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 5c75764a1..f518935a2 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
@@ -748,7 +749,251 @@ debug_port(void)
 static void
 debug_tm(void)
 {
-	printf(" tm");
+	int ret = 0, is_leaf = 0;
+	unsigned int j, k;
+	uint16_t i = 0;
+
+	snprintf(bdr_str, 100, "debug - 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 = {0};
+		struct rte_tm_capabilities cap = {0};
+		struct rte_tm_error error = {0};
+		struct rte_tm_node_capabilities	capnode = {0};
+		struct rte_tm_level_capabilities caplevel = {0};
+		uint32_t n_leaf_nodes = 0;
+
+		snprintf(bdr_str, 100, " TM for port (%u) ", i);
+		STATS_BDR_STR(5, bdr_str);
+
+		rte_eth_dev_info_get(i, &dev_info);
+		printf("  - Generic\n"
+		       "\t  -- driver name %s\n"
+		       "\t  -- max vf (%u)\n"
+		       "\t  -- max tx queues (%u)\n"
+		       "\t  -- number of tx queues (%u)\n",
+		       dev_info.driver_name,
+		       dev_info.max_vfs,
+		       dev_info.max_tx_queues,
+		       dev_info.nb_tx_queues);
+
+		ret = rte_tm_get_number_of_leaf_nodes(i, &n_leaf_nodes, &error);
+		if (ret == 0)
+			printf("  - leaf nodes (%u)\n", n_leaf_nodes);
+
+		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++) {
+			ret = rte_tm_node_capabilities_get(i, j,
+				&capnode, &error);
+			if (ret)
+				continue;
+
+			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;
+
+			if (!is_leaf) {
+#define DSP_CAP_NODE_NON_LEAF(x) printf("\t  -- nonleaf sched max:" \
+" children (%u) sp priorities (%u) " \
+" wfq children per group (%u) wfq groups (%u) wfq weight (%u)\n", \
+x.sched_n_children_max, x.sched_sp_n_priorities_max, \
+x.sched_wfq_n_children_per_group_max, x.sched_wfq_n_groups_max, \
+x.sched_wfq_weight_max)
+				DSP_CAP_NODE_NON_LEAF(capnode.nonleaf);
+			} else {
+#define DSP_CAP_NODE_LEAF(x) printf("\t  -- leaf cman support:" \
+" wred pkt mode (%d) wred byte mode (%d) head drop (%d)" \
+" wred context private (%d) wred context shared (%u)\n", \
+x.cman_wred_packet_mode_supported, x.cman_wred_byte_mode_supported, \
+x.cman_head_drop_supported, x.cman_wred_context_private_supported, \
+x.cman_wred_context_shared_n_max)
+				DSP_CAP_NODE_LEAF(capnode.leaf);
+			}
+		}
+
+		for (j = 0; j < cap.n_levels_max; j++) {
+			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;
+
+				if (!is_leaf) {
+#define DSP_CAP_LVL_NON_LEAF(x) do { \
+printf("\t  - shaper private:" \
+" (%d) dual rate (%d)\n", x.shaper_private_supported, \
+x.shaper_private_dual_rate_supported); \
+printf("\t  - shaper share: (%u)\n", \
+x.shaper_shared_n_max); \
+printf("\t  - non leaf sched MAX:" \
+" children (%u) sp (%u)" \
+" wfq children per group (%u)" \
+" wfq groups (%u) wfq weight (%u)\n", \
+x.sched_n_children_max, x.sched_sp_n_priorities_max, \
+x.sched_wfq_n_children_per_group_max, \
+x.sched_wfq_n_groups_max, x.sched_wfq_weight_max); \
+} while (0)
+					DSP_CAP_LVL_NON_LEAF(caplevel.nonleaf);
+				} else {
+#define DSP_CAP_LVL_LEAF(x) do { \
+printf("\t  - shaper private: (%d) dual rate (%d)\n", \
+x.shaper_private_supported, x.shaper_private_dual_rate_supported); \
+printf("\t - shaper share: (%u)\n", x.shaper_shared_n_max); \
+printf("  -- leaf cman support: wred pkt mode (%d)" \
+" wred byte mode (%d) head drop (%d)" \
+" wred context private (%d) wred context shared (%u)\n", \
+x.cman_wred_packet_mode_supported, x.cman_wred_byte_mode_supported, \
+x.cman_head_drop_supported, x.cman_wred_context_private_supported, \
+x.cman_wred_context_shared_n_max); \
+} while (0)
+
+					DSP_CAP_LVL_LEAF(caplevel.leaf);
+				}
+			}
+		}
+
+		for (j = 0; j < n_leaf_nodes; j++) {
+			struct rte_tm_node_stats stats = {0};
+
+			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] 65+ messages in thread

* [dpdk-dev] [PATCH v2 6/9] app/procinfo: add code for debug crypto
  2018-10-24  6:47 ` [dpdk-dev] [PATCH v2 " Vipin Varghese
                     ` (3 preceding siblings ...)
  2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 5/9] app/procinfo: add code for debug tm Vipin Varghese
@ 2018-10-24  6:48   ` Vipin Varghese
  2018-10-26 13:01     ` Pattan, Reshma
  2018-10-26 13:16     ` Pattan, Reshma
  2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 7/9] app/procinfo: add code for debug ring Vipin Varghese
                     ` (2 subsequent siblings)
  7 siblings, 2 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-10-24  6:48 UTC (permalink / raw)
  To: dev, stephen, maryam.tahhan, reshma.pattan
  Cc: amol.patel, sivaprasad.tummala, stephen1.byrne, michael.j.glynn,
	Vipin Varghese

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

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---
 app/proc-info/main.c | 70 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 69 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index f518935a2..d48334bd0 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -999,7 +999,75 @@ x.cman_wred_context_shared_n_max); \
 static void
 debug_crypto(void)
 {
-	printf(" crypto");
+	uint8_t crypto_dev_count = rte_cryptodev_count(), i;
+
+	snprintf(bdr_str, 100, "debug - 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 = {0};
+		struct rte_cryptodev_stats stats = {0};
+
+		rte_cryptodev_info_get(i, &dev_info);
+
+		printf("  - device (%u)\n", i);
+		printf("\t  -- name (%s) driver (%s)\n"
+		       "\t  -- id (%u) flags (0x%"PRIx64") socket (%d)\n"
+		       "\t  -- queue pairs (%d)\n",
+		       rte_cryptodev_name_get(i),
+		       dev_info.driver_name, dev_info.driver_id,
+		       dev_info.feature_flags, dev_info.device->numa_node,
+		       rte_cryptodev_queue_pair_count(i));
+
+#define DSP_CRYPTO_FLAG(x) do { \
+printf("  - feature flags\n"); \
+printf("\t  -- symmetric (%c) asymmetric (%c)" \
+" 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  -- 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  -- Acclerate CPU AESNI (%c) HW (%c)\n", \
+(x & RTE_CRYPTODEV_FF_CPU_AESNI)?'y':'n', \
+(x & RTE_CRYPTODEV_FF_HW_ACCELERATED)?'y':'n'); \
+printf("\t  -- INLINE (%c)\n", \
+(x & RTE_CRYPTODEV_FF_SECURITY)?'y':'n'); \
+printf("\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("  - buffer offload\n"); \
+printf("\t  -- IN_PLACE_SGL (%c)\n", \
+(x & RTE_CRYPTODEV_FF_IN_PLACE_SGL)?'y':'n'); \
+printf("\t  -- OOP_SGL_IN_SGL_OUT (%c)\n", \
+(x & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)?'y':'n'); \
+printf("\t  -- OOP_SGL_IN_LB_OUT (%c)\n", \
+(x & RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT)?'y':'n'); \
+printf("\t  -- OOP_LB_IN_SGL_OUT (%c)\n", \
+(x & RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT)?'y':'n'); \
+printf("\t  -- OOP_LB_IN_LB_OUT (%c)\n", \
+(x & RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT)?'y':'n'); \
+} while (0)
+
+		DSP_CRYPTO_FLAG(dev_info.feature_flags);
+
+		printf("  - stats\n");
+		if (rte_cryptodev_stats_get(i, &stats) == 0) {
+			printf("\t  -- enqueue count (%"PRIu64")"
+			       " error (%"PRIu64")\n",
+			       stats.enqueued_count,
+			       stats.enqueue_err_count);
+			printf("\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] 65+ messages in thread

* [dpdk-dev] [PATCH v2 7/9] app/procinfo: add code for debug ring
  2018-10-24  6:47 ` [dpdk-dev] [PATCH v2 " Vipin Varghese
                     ` (4 preceding siblings ...)
  2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 6/9] app/procinfo: add code for debug crypto Vipin Varghese
@ 2018-10-24  6:48   ` Vipin Varghese
  2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 8/9] app/procinfo: add code for debug mempool Vipin Varghese
  2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 9/9] doc/procinfo: add information for debug options Vipin Varghese
  7 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-10-24  6:48 UTC (permalink / raw)
  To: dev, stephen, maryam.tahhan, reshma.pattan
  Cc: amol.patel, sivaprasad.tummala, stephen1.byrne, michael.j.glynn,
	Vipin Varghese

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

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---
 app/proc-info/main.c | 29 ++++++++++++++++++++++++++++-
 1 file changed, 28 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index d48334bd0..a4cf9f2ad 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -1073,7 +1073,34 @@ printf("\t  -- OOP_LB_IN_LB_OUT (%c)\n", \
 static void
 debug_ring(char *name)
 {
-	printf(" rings Name (%s)", name);
+	snprintf(bdr_str, 100, "debug - 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) Socket (%d) flags (0x%x)\n",
+			       ptr->name,
+			       ptr->memzone->socket_id,
+			       ptr->flags);
+			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] 65+ messages in thread

* [dpdk-dev] [PATCH v2 8/9] app/procinfo: add code for debug mempool
  2018-10-24  6:47 ` [dpdk-dev] [PATCH v2 " Vipin Varghese
                     ` (5 preceding siblings ...)
  2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 7/9] app/procinfo: add code for debug ring Vipin Varghese
@ 2018-10-24  6:48   ` Vipin Varghese
  2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 9/9] doc/procinfo: add information for debug options Vipin Varghese
  7 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-10-24  6:48 UTC (permalink / raw)
  To: dev, stephen, maryam.tahhan, reshma.pattan
  Cc: amol.patel, sivaprasad.tummala, stephen1.byrne, michael.j.glynn,
	Vipin Varghese

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

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---
 app/proc-info/main.c | 47 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 46 insertions(+), 1 deletion(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index a4cf9f2ad..0668dac1c 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
@@ -1103,10 +1104,54 @@ debug_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("  - name %s, obj_idx %u opaque %p obj %p\n",
+	       mp->name, obj_idx, opaque, obj);
+
+	if (obj)
+		rte_hexdump(stdout, " Mempool Obj Content",
+			obj, (mp->elt_size > 256)?256:mp->elt_size);
+}
+
 static void
 debug_mempool(char *name)
 {
-	printf(" mempools Name (%s)", name);
+	snprintf(bdr_str, 100, "debug - 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) {
+			printf("  - Name: %s on socket %d flags %u\n",
+			       ptr->name, ptr->socket_id, ptr->flags);
+			printf("  - Size %u Cache %u element %u"
+			       " header %u trailer %u "
+			       " 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);
+
+			/* iterate each object */
+			int 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] 65+ messages in thread

* [dpdk-dev] [PATCH v2 9/9] doc/procinfo: add information for debug options
  2018-10-24  6:47 ` [dpdk-dev] [PATCH v2 " Vipin Varghese
                     ` (6 preceding siblings ...)
  2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 8/9] app/procinfo: add code for debug mempool Vipin Varghese
@ 2018-10-24  6:48   ` Vipin Varghese
  2018-10-25 15:11     ` Varghese, Vipin
  2018-11-05 17:51     ` [dpdk-dev] [PATCH v3 1/9] app/procinfo: add usage for new debug Vipin Varghese
  7 siblings, 2 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-10-24  6:48 UTC (permalink / raw)
  To: dev, stephen, maryam.tahhan, reshma.pattan
  Cc: amol.patel, sivaprasad.tummala, stephen1.byrne, michael.j.glynn,
	Vipin Varghese

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

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
---
 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..2b06e2f86 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, 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 --dbg-port | --dbg-tm | --dbg-crypto |
+   --dbg-mempool[=name] | --dbg-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.
 
+**--dbg-port**
+The dbg-port parameter displays port level various configuration and
+mbuf pool information associated to RX queues.
+
+**--dbg-tm**
+The dbg-tm parameter displays per port traffic manager settings and
+current configuration. It also display statistics too.
+
+**--dbg-crypto**
+The dbg-crypto parameter displays available cryptodev configurations,
+settings and stats per node.
+
+**--dbg-mempool[=name]**
+The dbg-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.
+
+**--dbg-ring[=name]**
+The dbg-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] 65+ messages in thread

* Re: [dpdk-dev] [PATCH v1 1/9] app/procinfo: add usage for new debug
  2018-10-24  5:41   ` Varghese, Vipin
@ 2018-10-24 15:56     ` Stephen Hemminger
  0 siblings, 0 replies; 65+ messages in thread
From: Stephen Hemminger @ 2018-10-24 15:56 UTC (permalink / raw)
  To: Varghese, Vipin
  Cc: dev, Tahhan, Maryam, Pattan, Reshma, Patel, Amol, Tummala,
	Sivaprasad, Byrne, Stephen1, Glynn, Michael J

On Wed, 24 Oct 2018 05:41:32 +0000
"Varghese, Vipin" <vipin.varghese@intel.com> wrote:

> Hi Stephen,
> 
> <snipped>
> 
> >   
> > > +		"  --dbg-port to display information for all available ports\n"
> > > +		"  --dbg-tm to display information for traffic manager\n"
> > > +		"  --dbg-crypto to display information for crypto\n"
> > > +		"  --dbg-ring[=name] to display information for ring\n"
> > > +		"  --dbg-mempool[=name] to display information for  
> > mempool\n",
> > 
> > These might be useful outside of debugging, why not give them names like
> >   --dbg-port == --show-port
> >   --dpb-tm   == --show-tm
> >   
>  
> Ok, as I understand you would like to reword 'dbg' to 'show' for 'port|tm|crypto|ring|mempool'. Sure I will do the same and share v2
> 
> Thanks
> Vipin Varghese
> 

Yes. sorry if I wasn't clear enough.

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

* Re: [dpdk-dev] [PATCH v2 9/9] doc/procinfo: add information for debug options
  2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 9/9] doc/procinfo: add information for debug options Vipin Varghese
@ 2018-10-25 15:11     ` Varghese, Vipin
  2018-11-05 17:51     ` [dpdk-dev] [PATCH v3 1/9] app/procinfo: add usage for new debug Vipin Varghese
  1 sibling, 0 replies; 65+ messages in thread
From: Varghese, Vipin @ 2018-10-25 15:11 UTC (permalink / raw)
  To: dev, stephen, Tahhan, Maryam, Pattan, Reshma
  Cc: Patel, Amol, Tummala, Sivaprasad, Byrne, Stephen1, Glynn, Michael J

<snipped>

> -   --stats-reset | --xstats-reset]
> +   --stats-reset | --xstats-reset --dbg-port | --dbg-tm | --dbg-crypto |
> +   --dbg-mempool[=name] | --dbg-ring[=name]]

I have noticed that the word 'dbg' has not been updated to 'show'. I will send v3.

<snipped>

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

* Re: [dpdk-dev] [PATCH v1 2/9] app/procinfo: add compare for new options
  2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 2/9] app/procinfo: add compare for new options Vipin Varghese
@ 2018-10-25 15:18   ` Pattan, Reshma
  2018-10-27  7:17     ` Varghese, Vipin
  0 siblings, 1 reply; 65+ messages in thread
From: Pattan, Reshma @ 2018-10-25 15:18 UTC (permalink / raw)
  To: Varghese, Vipin, dev, Tahhan, Maryam
  Cc: Patel, Amol, Tummala, Sivaprasad, Byrne, Stephen1, Glynn, Michael J



> -----Original Message-----
> From: Varghese, Vipin

> +/**< Enable port debug. */
In comment , Enable displaying port info?

> +static uint32_t enable_dbg_port;
Do you want to consider replacing "debug" to "show" in code here other places? As you have already changed the commands to "show."

				ring_name = optarg;
How about doing memcpy instead of pointer assignment? Similarly below. Though I don't see issue here. But safe to use memcpy.

> +			} else if (!strncmp(long_option[option_index].name,
> +					"dbg-mempool",
> MAX_LONG_OPT_SZ)) {
> +				enable_dbg_mempool = 1;
> +				mempool_name = optarg;
> +			}

Thanks,
Reshma

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

* Re: [dpdk-dev] [PATCH v1 4/9] app/procinfo: add code for debug port
  2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 4/9] app/procinfo: add code for debug port Vipin Varghese
@ 2018-10-25 15:38   ` Pattan, Reshma
  2018-10-27  7:09     ` Varghese, Vipin
  2018-10-25 15:46   ` Pattan, Reshma
  1 sibling, 1 reply; 65+ messages in thread
From: Pattan, Reshma @ 2018-10-25 15:38 UTC (permalink / raw)
  To: Varghese, Vipin, dev, Tahhan, Maryam
  Cc: Patel, Amol, Tummala, Sivaprasad, Byrne, Stephen1, Glynn, Michael J



> -----Original Message-----
> From: Varghese, Vipin
> Sent: Tuesday, October 23, 2018 2:58 PM
> To: dev@dpdk.org; Tahhan, Maryam <maryam.tahhan@intel.com>; Pattan,
> Reshma <reshma.pattan@intel.com>
> Cc: Patel, Amol <amol.patel@intel.com>; Tummala, Sivaprasad
> <sivaprasad.tummala@intel.com>; Byrne, Stephen1
> <stephen1.byrne@intel.com>; Glynn, Michael J
> <michael.j.glynn@intel.com>; Varghese, Vipin <vipin.varghese@intel.com>
> Subject: [PATCH v1 4/9] app/procinfo: add code for debug port
> 
> Function debug_port is used for displaying the port PMD under the primary
> process. This covers basic and per queue configuration.
> 
> Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
> ---
>  app/proc-info/main.c | 113
> ++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 112 insertions(+), 1 deletion(-)
> 
> diff --git a/app/proc-info/main.c b/app/proc-info/main.c index
> 5511fcb71..668f7febf 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 @@ -40,6 +43,8 @@  #define STATS_BDR_STR(w, s)
> printf("%.*s%s%.*s\n", w, \
>  	STATS_BDR_FMT, s, w, STATS_BDR_FMT)
> 
> +char bdr_str[100];

#define for marco size would be good. Instead of hard code.
> +
> +	snprintf(bdr_str, 100, " debug - 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 = {0};

Initialize structs using memset here and in other places.

> +
> +		for (j = 0; j < dev_info.nb_rx_queues; j++) {
> +
> +			ret = rte_eth_dev_rss_hash_conf_get(i, &rss_conf);
> +			if ((ret) || (rss_conf.rss_key == NULL))
> +				continue;
> +
> +			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);

Is this per port? not per queue. Can this be moved to outside of the queue for loop.
> +		}
> +
> +		printf("  - drop packet information\n");

Printf heading can be changed as it is printing input and output packets also.

> +		ret = rte_eth_stats_get(i, &stats);
> +		if (ret == 0) {
> +			printf("\t  -- input %"PRIu64
> +			       " output %"PRIu64"\n",
> +			       stats.ipackets,
> +			       stats.opackets);

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

* Re: [dpdk-dev] [PATCH v1 4/9] app/procinfo: add code for debug port
  2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 4/9] app/procinfo: add code for debug port Vipin Varghese
  2018-10-25 15:38   ` Pattan, Reshma
@ 2018-10-25 15:46   ` Pattan, Reshma
  2018-10-27  4:47     ` Varghese, Vipin
  1 sibling, 1 reply; 65+ messages in thread
From: Pattan, Reshma @ 2018-10-25 15:46 UTC (permalink / raw)
  To: Varghese, Vipin, dev, Tahhan, Maryam
  Cc: Patel, Amol, Tummala, Sivaprasad, Byrne, Stephen1, Glynn, Michael J



> -----Original Message-----
> From: Varghese, Vipin
> Sent: Tuesday, October 23, 2018 2:58 PM
> +			printf("\t  -- RSS len %u key (hex):",

Why "(hex)" in  printf?

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

* Re: [dpdk-dev] [PATCH v2 4/9] app/procinfo: add code for debug port
  2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 4/9] app/procinfo: add code for debug port Vipin Varghese
@ 2018-10-25 16:20     ` Pattan, Reshma
  2018-10-27  4:45       ` Varghese, Vipin
  0 siblings, 1 reply; 65+ messages in thread
From: Pattan, Reshma @ 2018-10-25 16:20 UTC (permalink / raw)
  To: Varghese, Vipin, dev, stephen, Tahhan, Maryam
  Cc: Patel, Amol, Tummala, Sivaprasad, Byrne, Stephen1, Glynn, Michael J



> -----Original Message-----
> From: Varghese, Vipin
> +#include <rte_cycles.h>
> +#include <rte_security.h>

I am getting meson build error on this include. Make is fine though.
Can you run "./devtools/test-meson-builds.sh" script to fix  meson build errors if any .

Thanks,
Reshma

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

* Re: [dpdk-dev] [PATCH v2 6/9] app/procinfo: add code for debug crypto
  2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 6/9] app/procinfo: add code for debug crypto Vipin Varghese
@ 2018-10-26 13:01     ` Pattan, Reshma
  2018-10-27  4:42       ` Varghese, Vipin
  2018-10-26 13:16     ` Pattan, Reshma
  1 sibling, 1 reply; 65+ messages in thread
From: Pattan, Reshma @ 2018-10-26 13:01 UTC (permalink / raw)
  To: Varghese, Vipin, dev, stephen, Tahhan, Maryam
  Cc: Patel, Amol, Tummala, Sivaprasad, Byrne, Stephen1, Glynn, Michael J

Hi

-----Original Message-----
From: Varghese, Vipin 

---
+		struct rte_cryptodev_info dev_info = {0};
+		struct rte_cryptodev_stats stats = {0};
+

Memset for initialization as mentioned in other patch.

+
+#define DSP_CRYPTO_FLAG(x) do { \
+printf("  - feature flags\n"); \
+printf("\t  -- symmetric (%c) asymmetric (%c)" \ " 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  -- 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  -- Acclerate CPU 
+AESNI (%c) HW (%c)\n", \ (x & RTE_CRYPTODEV_FF_CPU_AESNI)?'y':'n', \ (x 
+& RTE_CRYPTODEV_FF_HW_ACCELERATED)?'y':'n'); \ printf("\t  -- INLINE 
+(%c)\n", \ (x & RTE_CRYPTODEV_FF_SECURITY)?'y':'n'); \ printf("\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("  - buffer 
+offload\n"); \ printf("\t  -- IN_PLACE_SGL (%c)\n", \ (x & 
+RTE_CRYPTODEV_FF_IN_PLACE_SGL)?'y':'n'); \ printf("\t  -- 
+OOP_SGL_IN_SGL_OUT (%c)\n", \ (x & 
+RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)?'y':'n'); \ printf("\t  -- 
+OOP_SGL_IN_LB_OUT (%c)\n", \ (x & 
+RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT)?'y':'n'); \ printf("\t  -- 
+OOP_LB_IN_SGL_OUT (%c)\n", \ (x & 
+RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT)?'y':'n'); \ printf("\t  -- 
+OOP_LB_IN_LB_OUT (%c)\n", \ (x & 
+RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT)?'y':'n'); \ } while (0)

This is a very big macro, better have static function for this instead of macro.

 Thanks,
Reshma

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

* Re: [dpdk-dev] [PATCH v2 6/9] app/procinfo: add code for debug crypto
  2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 6/9] app/procinfo: add code for debug crypto Vipin Varghese
  2018-10-26 13:01     ` Pattan, Reshma
@ 2018-10-26 13:16     ` Pattan, Reshma
  2018-10-27  4:37       ` Varghese, Vipin
  1 sibling, 1 reply; 65+ messages in thread
From: Pattan, Reshma @ 2018-10-26 13:16 UTC (permalink / raw)
  To: Varghese, Vipin, dev, stephen, Tahhan, Maryam
  Cc: Patel, Amol, Tummala, Sivaprasad, Byrne, Stephen1, Glynn, Michael J

Hi,

-----Original Message-----
From: Varghese, Vipin 

+		       "\t  -- id (%u) flags (0x%"PRIx64") socket (%d)\n"
+		       "\t  -- queue pairs (%d)\n",
+		       rte_cryptodev_name_get(i),
+		       dev_info.driver_name, dev_info.driver_id,
+		       dev_info.feature_flags, dev_info.device->numa_node,
+		       rte_cryptodev_queue_pair_count(i));

Above 6lines have spaces+ tabs mixed, should use only tabs.

Thanks,
Reshma

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

* Re: [dpdk-dev] [PATCH v2 6/9] app/procinfo: add code for debug crypto
  2018-10-26 13:16     ` Pattan, Reshma
@ 2018-10-27  4:37       ` Varghese, Vipin
  0 siblings, 0 replies; 65+ messages in thread
From: Varghese, Vipin @ 2018-10-27  4:37 UTC (permalink / raw)
  To: Pattan, Reshma, dev, stephen, Tahhan, Maryam
  Cc: Patel, Amol, Tummala, Sivaprasad, Byrne, Stephen1, Glynn, Michael J

Hi Reshma,

<snipped>

> 
> +		       "\t  -- id (%u) flags (0x%"PRIx64") socket (%d)\n"
> +		       "\t  -- queue pairs (%d)\n",
> +		       rte_cryptodev_name_get(i),
> +		       dev_info.driver_name, dev_info.driver_id,
> +		       dev_info.feature_flags, dev_info.device->numa_node,
> +		       rte_cryptodev_queue_pair_count(i));
> 
> Above 6lines have spaces+ tabs mixed, should use only tabs.

<snipped>

Thanks for the feedback, can you please help me understand usage pattern in nic_stats_display, nic_stats_clear and nic_xstats_by_name_display. 

I always use tabs, but since its mixed usage it forced me to follow the same. But since the suggestion is right one, I will share the V3 with the fixes for the newly added functions. 

Let us decide format correction for nic_stats_display, nic_stats_clear and nic_xstats_by_name_display separately too.

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

* Re: [dpdk-dev] [PATCH v2 6/9] app/procinfo: add code for debug crypto
  2018-10-26 13:01     ` Pattan, Reshma
@ 2018-10-27  4:42       ` Varghese, Vipin
  2018-10-28 15:29         ` Stephen Hemminger
  0 siblings, 1 reply; 65+ messages in thread
From: Varghese, Vipin @ 2018-10-27  4:42 UTC (permalink / raw)
  To: Pattan, Reshma, dev, stephen, Tahhan, Maryam
  Cc: Patel, Amol, Tummala, Sivaprasad, Byrne, Stephen1, Glynn, Michael J

Hi,

<snipped>

> ---
> +		struct rte_cryptodev_info dev_info = {0};
> +		struct rte_cryptodev_stats stats = {0};
> +
> 
> Memset for initialization as mentioned in other patch.
> 

Yes, I will correct the same as certain compiler flag combination will treat this as incorrect use.

> +
> +#define DSP_CRYPTO_FLAG(x) do { \
> +printf("  - feature flags\n"); \
> +printf("\t  -- symmetric (%c) asymmetric (%c)" \ " 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  -- 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  -- Acclerate CPU
> +AESNI (%c) HW (%c)\n", \ (x & RTE_CRYPTODEV_FF_CPU_AESNI)?'y':'n', \ (x
> +& RTE_CRYPTODEV_FF_HW_ACCELERATED)?'y':'n'); \ printf("\t  -- INLINE
> +(%c)\n", \ (x & RTE_CRYPTODEV_FF_SECURITY)?'y':'n'); \ printf("\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("  - buffer
> +offload\n"); \ printf("\t  -- IN_PLACE_SGL (%c)\n", \ (x &
> +RTE_CRYPTODEV_FF_IN_PLACE_SGL)?'y':'n'); \ printf("\t  --
> +OOP_SGL_IN_SGL_OUT (%c)\n", \ (x &
> +RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)?'y':'n'); \ printf("\t  --
> +OOP_SGL_IN_LB_OUT (%c)\n", \ (x &
> +RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT)?'y':'n'); \ printf("\t  --
> +OOP_LB_IN_SGL_OUT (%c)\n", \ (x &
> +RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT)?'y':'n'); \ printf("\t  --
> +OOP_LB_IN_LB_OUT (%c)\n", \ (x &
> +RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT)?'y':'n'); \ } while (0)
> 
> This is a very big macro, better have static function for this instead of macro.
> 

There are two thoughts in choosing MACRO over function.
1. The information need to display in certain format within the same context. 
2. As the API are modified, co locating all at same scope is easier to clean up and correct in future.

So I feel use of MACRO over function in this instance.

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

* Re: [dpdk-dev] [PATCH v2 4/9] app/procinfo: add code for debug port
  2018-10-25 16:20     ` Pattan, Reshma
@ 2018-10-27  4:45       ` Varghese, Vipin
  2018-11-05 11:39         ` Thomas Monjalon
  0 siblings, 1 reply; 65+ messages in thread
From: Varghese, Vipin @ 2018-10-27  4:45 UTC (permalink / raw)
  To: Pattan, Reshma, dev, stephen, Tahhan, Maryam
  Cc: Patel, Amol, Tummala, Sivaprasad, Byrne, Stephen1, Glynn, Michael J

Thanks, I found the correction for the error. I will send the v3.

Since this information was missed out in ' 5.10. Checking Compilation' I will send a separate patch trying to update documentation.

> -----Original Message-----
> From: Pattan, Reshma
> Sent: Thursday, October 25, 2018 9:51 PM
> To: Varghese, Vipin <vipin.varghese@intel.com>; dev@dpdk.org;
> stephen@networkplumber.org; Tahhan, Maryam
> <maryam.tahhan@intel.com>
> Cc: Patel, Amol <amol.patel@intel.com>; Tummala, Sivaprasad
> <sivaprasad.tummala@intel.com>; Byrne, Stephen1
> <stephen1.byrne@intel.com>; Glynn, Michael J <michael.j.glynn@intel.com>
> Subject: RE: [PATCH v2 4/9] app/procinfo: add code for debug port
> 
> 
> 
> > -----Original Message-----
> > From: Varghese, Vipin
> > +#include <rte_cycles.h>
> > +#include <rte_security.h>
> 
> I am getting meson build error on this include. Make is fine though.
> Can you run "./devtools/test-meson-builds.sh" script to fix  meson build errors
> if any .
> 
> Thanks,
> Reshma

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

* Re: [dpdk-dev] [PATCH v1 4/9] app/procinfo: add code for debug port
  2018-10-25 15:46   ` Pattan, Reshma
@ 2018-10-27  4:47     ` Varghese, Vipin
  0 siblings, 0 replies; 65+ messages in thread
From: Varghese, Vipin @ 2018-10-27  4:47 UTC (permalink / raw)
  To: Pattan, Reshma, dev, Tahhan, Maryam
  Cc: Patel, Amol, Tummala, Sivaprasad, Byrne, Stephen1, Glynn, Michael J

<snipped>

> > +			printf("\t  -- RSS len %u key (hex):",
> 
> Why "(hex)" in  printf?

In the follow up lines, we are disapplying the RSS key used in HEX values.

for (k = 0; k < rss_conf.rss_key_len; k++)
	printf(" %x", rss_conf.rss_key[k]);

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

* Re: [dpdk-dev] [PATCH v1 4/9] app/procinfo: add code for debug port
  2018-10-25 15:38   ` Pattan, Reshma
@ 2018-10-27  7:09     ` Varghese, Vipin
  0 siblings, 0 replies; 65+ messages in thread
From: Varghese, Vipin @ 2018-10-27  7:09 UTC (permalink / raw)
  To: Pattan, Reshma, dev, Tahhan, Maryam
  Cc: Patel, Amol, Tummala, Sivaprasad, Byrne, Stephen1, Glynn, Michael J

<snipped>
> >
> > +char bdr_str[100];
> 
> #define for marco size would be good. Instead of hard code.

Yes, agreed.

<snipped>
> > +		struct rte_eth_link link = {0};
> 
> Initialize structs using memset here and in other places.
> 

Will change for v3

<snipped>
> > +			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);
> 
> Is this per port? not per queue. Can this be moved to outside of the queue for
> loop.

Yes, currently RSS is set for all rx queues so it is per port. I think I coded for upcoming feature rx RSS queue group,. I will correct and send v3.

> > +		}
> > +
> > +		printf("  - drop packet information\n");
> 
> Printf heading can be changed as it is printing input and output packets also.
> 
ok

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

* Re: [dpdk-dev] [PATCH v1 2/9] app/procinfo: add compare for new options
  2018-10-25 15:18   ` Pattan, Reshma
@ 2018-10-27  7:17     ` Varghese, Vipin
  0 siblings, 0 replies; 65+ messages in thread
From: Varghese, Vipin @ 2018-10-27  7:17 UTC (permalink / raw)
  To: Pattan, Reshma, dev, Tahhan, Maryam
  Cc: Patel, Amol, Tummala, Sivaprasad, Byrne, Stephen1, Glynn, Michael J

HI

<snipped>
> 
> > +/**< Enable port debug. */
> In comment , Enable displaying port info?

ok

> 
> > +static uint32_t enable_dbg_port;
> Do you want to consider replacing "debug" to "show" in code here other
> places? As you have already changed the commands to "show."
> 

If the variable naming has to change, I can do

> 				ring_name = optarg;
> How about doing memcpy instead of pointer assignment? Similarly below.
> Though I don't see issue here. But safe to use memcpy.
> 

I will check this internally, I also think this is safe as it is pointer argv elements. I have taken the same design from

/* Print xstat single value given by name*/
if (!strncmp(long_option[option_index].name,
	"xstats-name", MAX_LONG_OPT_SZ)) {
	enable_xstats_name = 1;
	xstats_name = optarg;

<snipped>

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

* Re: [dpdk-dev] [PATCH v2 6/9] app/procinfo: add code for debug crypto
  2018-10-27  4:42       ` Varghese, Vipin
@ 2018-10-28 15:29         ` Stephen Hemminger
  2018-10-29 14:29           ` Varghese, Vipin
  0 siblings, 1 reply; 65+ messages in thread
From: Stephen Hemminger @ 2018-10-28 15:29 UTC (permalink / raw)
  To: Varghese, Vipin
  Cc: Pattan, Reshma, dev, Tahhan, Maryam, Patel, Amol, Tummala,
	Sivaprasad, Byrne, Stephen1, Glynn, Michael J

On Sat, 27 Oct 2018 04:42:19 +0000
"Varghese, Vipin" <vipin.varghese@intel.com> wrote:

> Hi,
> 
> <snipped>
> 
> > ---
> > +		struct rte_cryptodev_info dev_info = {0};
> > +		struct rte_cryptodev_stats stats = {0};
> > +
> > 
> > Memset for initialization as mentioned in other patch.
> >   
> 
> Yes, I will correct the same as certain compiler flag combination will treat this as incorrect use.
> 
> > +
> > +#define DSP_CRYPTO_FLAG(x) do { \
> > +printf("  - feature flags\n"); \
> > +printf("\t  -- symmetric (%c) asymmetric (%c)" \ " 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  -- 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  -- Acclerate CPU
> > +AESNI (%c) HW (%c)\n", \ (x & RTE_CRYPTODEV_FF_CPU_AESNI)?'y':'n', \ (x
> > +& RTE_CRYPTODEV_FF_HW_ACCELERATED)?'y':'n'); \ printf("\t  -- INLINE
> > +(%c)\n", \ (x & RTE_CRYPTODEV_FF_SECURITY)?'y':'n'); \ printf("\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("  - buffer
> > +offload\n"); \ printf("\t  -- IN_PLACE_SGL (%c)\n", \ (x &
> > +RTE_CRYPTODEV_FF_IN_PLACE_SGL)?'y':'n'); \ printf("\t  --
> > +OOP_SGL_IN_SGL_OUT (%c)\n", \ (x &
> > +RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT)?'y':'n'); \ printf("\t  --
> > +OOP_SGL_IN_LB_OUT (%c)\n", \ (x &
> > +RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT)?'y':'n'); \ printf("\t  --
> > +OOP_LB_IN_SGL_OUT (%c)\n", \ (x &
> > +RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT)?'y':'n'); \ printf("\t  --
> > +OOP_LB_IN_LB_OUT (%c)\n", \ (x &
> > +RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT)?'y':'n'); \ } while (0)
> > 
> > This is a very big macro, better have static function for this instead of macro.
> >   
> 
> There are two thoughts in choosing MACRO over function.
> 1. The information need to display in certain format within the same context. 
> 2. As the API are modified, co locating all at same scope is easier to clean up and correct in future.
> 
> So I feel use of MACRO over function in this instance.


I don't agree with your arguments. Macros, are ugly and error prone. This is not performance
critical so it should be a function. The only reason to use macro's is if it is not possible to
write it as a function (as in a template for code generation).

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

* Re: [dpdk-dev] [PATCH v2 6/9] app/procinfo: add code for debug crypto
  2018-10-28 15:29         ` Stephen Hemminger
@ 2018-10-29 14:29           ` Varghese, Vipin
  0 siblings, 0 replies; 65+ messages in thread
From: Varghese, Vipin @ 2018-10-29 14:29 UTC (permalink / raw)
  To: Stephen Hemminger
  Cc: Pattan, Reshma, dev, Tahhan, Maryam, Patel, Amol, Tummala,
	Sivaprasad, Byrne, Stephen1, Glynn, Michael J

Hi Stepehen,

<snipped>

> > > This is a very big macro, better have static function for this instead of
> macro.
> > >
> >
> > There are two thoughts in choosing MACRO over function.
> > 1. The information need to display in certain format within the same context.
> > 2. As the API are modified, co locating all at same scope is easier to clean up
> and correct in future.
> >
> > So I feel use of MACRO over function in this instance.
> 
> 
> I don't agree with your arguments. Macros, are ugly and error prone. This is
> not performance critical so it should be a function. The only reason to use
> macro's is if it is not possible to write it as a function (as in a template for code
> generation).

Thanks for the sharing your feedback. But In my comments I never stated the MACRO were used for performance or critical blocks. As mentioned in my explanation, the MACRO is used for printing the desired format and format the code. 

Since I have received 2 request for change, I will do the same and release v3.

Thanks
Vipin Varghese

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

* Re: [dpdk-dev] [PATCH v2 4/9] app/procinfo: add code for debug port
  2018-10-27  4:45       ` Varghese, Vipin
@ 2018-11-05 11:39         ` Thomas Monjalon
  2018-11-05 15:31           ` Varghese, Vipin
  0 siblings, 1 reply; 65+ messages in thread
From: Thomas Monjalon @ 2018-11-05 11:39 UTC (permalink / raw)
  To: Varghese, Vipin
  Cc: dev, Pattan, Reshma, stephen, Tahhan, Maryam, Patel, Amol,
	Tummala, Sivaprasad, Byrne, Stephen1, Glynn, Michael J

27/10/2018 06:45, Varghese, Vipin:
> From: Pattan, Reshma
> > I am getting meson build error on this include. Make is fine though.
> > Can you run "./devtools/test-meson-builds.sh" script to fix  meson build errors
> > if any .
> 
> Thanks, I found the correction for the error. I will send the v3.

No news about v3?
It may be too late for 18.11.

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

* Re: [dpdk-dev] [PATCH v2 4/9] app/procinfo: add code for debug port
  2018-11-05 11:39         ` Thomas Monjalon
@ 2018-11-05 15:31           ` Varghese, Vipin
  0 siblings, 0 replies; 65+ messages in thread
From: Varghese, Vipin @ 2018-11-05 15:31 UTC (permalink / raw)
  To: Thomas Monjalon
  Cc: dev, Pattan, Reshma, stephen, Tahhan, Maryam, Patel, Amol,
	Tummala,  Sivaprasad, Byrne, Stephen1, Glynn, Michael J

Hi Thomas,

Thank you for the update in timeline. I am working on it and will share ASAP.

Thanks
Vipin Varghese

> -----Original Message-----
> From: Thomas Monjalon <thomas@monjalon.net>
> Sent: Monday, November 5, 2018 5:10 PM
> To: Varghese, Vipin <vipin.varghese@intel.com>
> Cc: dev@dpdk.org; Pattan, Reshma <reshma.pattan@intel.com>;
> stephen@networkplumber.org; Tahhan, Maryam
> <maryam.tahhan@intel.com>; Patel, Amol <amol.patel@intel.com>;
> Tummala, Sivaprasad <sivaprasad.tummala@intel.com>; Byrne, Stephen1
> <stephen1.byrne@intel.com>; Glynn, Michael J <michael.j.glynn@intel.com>
> Subject: Re: [dpdk-dev] [PATCH v2 4/9] app/procinfo: add code for debug port
> 
> 27/10/2018 06:45, Varghese, Vipin:
> > From: Pattan, Reshma
> > > I am getting meson build error on this include. Make is fine though.
> > > Can you run "./devtools/test-meson-builds.sh" script to fix  meson
> > > build errors if any .
> >
> > Thanks, I found the correction for the error. I will send the v3.
> 
> No news about v3?
> It may be too late for 18.11.
> 

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

* [dpdk-dev] [PATCH v3 1/9] app/procinfo: add usage for new debug
  2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 9/9] doc/procinfo: add information for debug options Vipin Varghese
  2018-10-25 15:11     ` Varghese, Vipin
@ 2018-11-05 17:51     ` Vipin Varghese
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 2/9] app/procinfo: add compare for new options Vipin Varghese
                         ` (7 more replies)
  1 sibling, 8 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-05 17:51 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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] 65+ messages in thread

* [dpdk-dev] [PATCH v3 2/9] app/procinfo: add compare for new options
  2018-11-05 17:51     ` [dpdk-dev] [PATCH v3 1/9] app/procinfo: add usage for new debug Vipin Varghese
@ 2018-11-05 17:51       ` Vipin Varghese
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 3/9] app/procinfo: add prototype for debug instances Vipin Varghese
                         ` (6 subsequent siblings)
  7 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-05 17:51 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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] 65+ messages in thread

* [dpdk-dev] [PATCH v3 3/9] app/procinfo: add prototype for debug instances
  2018-11-05 17:51     ` [dpdk-dev] [PATCH v3 1/9] app/procinfo: add usage for new debug Vipin Varghese
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 2/9] app/procinfo: add compare for new options Vipin Varghese
@ 2018-11-05 17:51       ` Vipin Varghese
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 4/9] app/procinfo: add support for show port Vipin Varghese
                         ` (5 subsequent siblings)
  7 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-05 17:51 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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] 65+ messages in thread

* [dpdk-dev] [PATCH v3 4/9] app/procinfo: add support for show port
  2018-11-05 17:51     ` [dpdk-dev] [PATCH v3 1/9] app/procinfo: add usage for new debug Vipin Varghese
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 2/9] app/procinfo: add compare for new options Vipin Varghese
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 3/9] app/procinfo: add prototype for debug instances Vipin Varghese
@ 2018-11-05 17:51       ` Vipin Varghese
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 5/9] app/procinfo: add support for show tm Vipin Varghese
                         ` (4 subsequent siblings)
  7 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-05 17:51 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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>
---

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      | 120 +++++++++++++++++++++++++++++++++++++-
 app/proc-info/meson.build |   2 +-
 2 files changed, 120 insertions(+), 2 deletions(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 8b9cf629d..48477097f 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 */
+char bdr_str[MAX_STRING_LEN];
+
 /**< display usage */
 static void
 proc_info_usage(const char *prgname)
@@ -631,7 +637,119 @@ 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(&link, 0, sizeof(link));
+		memset(&dev_info, 0, sizeof(dev_info));
+		memset(&queue_info, 0, sizeof(queue_info));
+		memset(&stats, 0, sizeof(stats));
+		memset(&rss_conf, 0, sizeof(rss_conf));
+
+		snprintf(bdr_str, 100, " 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) || (rss_conf.rss_key == NULL))
+				continue;
+
+			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] 65+ messages in thread

* [dpdk-dev] [PATCH v3 5/9] app/procinfo: add support for show tm
  2018-11-05 17:51     ` [dpdk-dev] [PATCH v3 1/9] app/procinfo: add usage for new debug Vipin Varghese
                         ` (2 preceding siblings ...)
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 4/9] app/procinfo: add support for show port Vipin Varghese
@ 2018-11-05 17:51       ` Vipin Varghese
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 6/9] app/procinfo: add support for show crypto Vipin Varghese
                         ` (3 subsequent siblings)
  7 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-05 17:51 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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 48477097f..8ec2e9474 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
@@ -752,10 +753,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] 65+ messages in thread

* [dpdk-dev] [PATCH v3 6/9] app/procinfo: add support for show crypto
  2018-11-05 17:51     ` [dpdk-dev] [PATCH v3 1/9] app/procinfo: add usage for new debug Vipin Varghese
                         ` (3 preceding siblings ...)
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 5/9] app/procinfo: add support for show tm Vipin Varghese
@ 2018-11-05 17:51       ` Vipin Varghese
  2018-11-05 18:08         ` [dpdk-dev] [PATCH " Vipin Varghese
                           ` (2 more replies)
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 7/9] app/procinfo: add support for debug ring Vipin Varghese
                         ` (2 subsequent siblings)
  7 siblings, 3 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-05 17:51 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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>
---

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 8ec2e9474..2e7f63639 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -1032,10 +1032,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] 65+ messages in thread

* [dpdk-dev] [PATCH v3 7/9] app/procinfo: add support for debug ring
  2018-11-05 17:51     ` [dpdk-dev] [PATCH v3 1/9] app/procinfo: add usage for new debug Vipin Varghese
                         ` (4 preceding siblings ...)
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 6/9] app/procinfo: add support for show crypto Vipin Varghese
@ 2018-11-05 17:51       ` Vipin Varghese
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 8/9] app/procinfo: add support for show mempool Vipin Varghese
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 " Vipin Varghese
  7 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-05 17:51 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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 2e7f63639..ced0c7303 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -1119,7 +1119,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] 65+ messages in thread

* [dpdk-dev] [PATCH v3 8/9] app/procinfo: add support for show mempool
  2018-11-05 17:51     ` [dpdk-dev] [PATCH v3 1/9] app/procinfo: add usage for new debug Vipin Varghese
                         ` (5 preceding siblings ...)
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 7/9] app/procinfo: add support for debug ring Vipin Varghese
@ 2018-11-05 17:51       ` Vipin Varghese
  2018-11-05 18:06         ` [dpdk-dev] [PATCH " Vipin Varghese
                           ` (6 more replies)
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 " Vipin Varghese
  7 siblings, 7 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-05 17:51 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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>
---

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 ced0c7303..3fd408f9f 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
@@ -1154,10 +1155,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 */
+			int 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] 65+ messages in thread

* [dpdk-dev] [PATCH v3 9/9] doc/procinfo: add information for debug options
  2018-11-05 17:51     ` [dpdk-dev] [PATCH v3 1/9] app/procinfo: add usage for new debug Vipin Varghese
                         ` (6 preceding siblings ...)
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 8/9] app/procinfo: add support for show mempool Vipin Varghese
@ 2018-11-05 17:51       ` Vipin Varghese
  7 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-05 17:51 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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] 65+ messages in thread

* [dpdk-dev] [PATCH 8/9] app/procinfo: add support for show mempool
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 8/9] app/procinfo: add support for show mempool Vipin Varghese
@ 2018-11-05 18:06         ` Vipin Varghese
  2018-11-05 18:09         ` [dpdk-dev] [PATCH v3 " Varghese, Vipin
                           ` (5 subsequent siblings)
  6 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-05 18:06 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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>
---

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 b97668d7f..bd28556ed 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
@@ -1154,10 +1155,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 */
+			int 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] 65+ messages in thread

* [dpdk-dev] [PATCH 6/9] app/procinfo: add support for show crypto
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 6/9] app/procinfo: add support for show crypto Vipin Varghese
@ 2018-11-05 18:08         ` Vipin Varghese
  2018-11-05 18:08         ` [dpdk-dev] [PATCH v3 " Varghese, Vipin
  2018-11-05 18:17         ` [dpdk-dev] [PATCH " Vipin Varghese
  2 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-05 18:08 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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 8ec2e9474..7213b43fe 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -1032,10 +1032,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] 65+ messages in thread

* Re: [dpdk-dev] [PATCH v3 6/9] app/procinfo: add support for show crypto
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 6/9] app/procinfo: add support for show crypto Vipin Varghese
  2018-11-05 18:08         ` [dpdk-dev] [PATCH " Vipin Varghese
@ 2018-11-05 18:08         ` Varghese, Vipin
  2018-11-05 18:17         ` [dpdk-dev] [PATCH " Vipin Varghese
  2 siblings, 0 replies; 65+ messages in thread
From: Varghese, Vipin @ 2018-11-05 18:08 UTC (permalink / raw)
  To: dev, thomas, Pattan, Reshma, stephen, Mcnamara, John
  Cc: Byrne, Stephen1, Glynn, Michael J, Patel, Amol

Sending v4 for fixing spacing issue

<snipped>

> +		(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'); }

<snipped>

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

* Re: [dpdk-dev] [PATCH v3 8/9] app/procinfo: add support for show mempool
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 8/9] app/procinfo: add support for show mempool Vipin Varghese
  2018-11-05 18:06         ` [dpdk-dev] [PATCH " Vipin Varghese
@ 2018-11-05 18:09         ` Varghese, Vipin
  2018-11-05 18:18         ` [dpdk-dev] [PATCH " Vipin Varghese
                           ` (4 subsequent siblings)
  6 siblings, 0 replies; 65+ messages in thread
From: Varghese, Vipin @ 2018-11-05 18:09 UTC (permalink / raw)
  To: dev, thomas, Pattan, Reshma, stephen, Mcnamara, John
  Cc: Byrne, Stephen1, Glynn, Michael J, Patel, Amol

Sending v4 for spacing issue

<snipped>
> +				(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');
<snipped>

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

* [dpdk-dev] [PATCH 6/9] app/procinfo: add support for show crypto
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 6/9] app/procinfo: add support for show crypto Vipin Varghese
  2018-11-05 18:08         ` [dpdk-dev] [PATCH " Vipin Varghese
  2018-11-05 18:08         ` [dpdk-dev] [PATCH v3 " Varghese, Vipin
@ 2018-11-05 18:17         ` Vipin Varghese
  2 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-05 18:17 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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 8ec2e9474..7213b43fe 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -1032,10 +1032,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] 65+ messages in thread

* [dpdk-dev] [PATCH 8/9] app/procinfo: add support for show mempool
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 8/9] app/procinfo: add support for show mempool Vipin Varghese
  2018-11-05 18:06         ` [dpdk-dev] [PATCH " Vipin Varghese
  2018-11-05 18:09         ` [dpdk-dev] [PATCH v3 " Varghese, Vipin
@ 2018-11-05 18:18         ` Vipin Varghese
  2018-11-05 18:22         ` Vipin Varghese
                           ` (3 subsequent siblings)
  6 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-05 18:18 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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>
---

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 b97668d7f..bd28556ed 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
@@ -1154,10 +1155,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 */
+			int 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] 65+ messages in thread

* [dpdk-dev] [PATCH 8/9] app/procinfo: add support for show mempool
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 8/9] app/procinfo: add support for show mempool Vipin Varghese
                           ` (2 preceding siblings ...)
  2018-11-05 18:18         ` [dpdk-dev] [PATCH " Vipin Varghese
@ 2018-11-05 18:22         ` Vipin Varghese
  2018-11-06  2:24         ` [dpdk-dev] [PATCH v4 " Vipin Varghese
                           ` (2 subsequent siblings)
  6 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-05 18:22 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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>
---

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 b97668d7f..bd28556ed 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
@@ -1154,10 +1155,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 */
+			int 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] 65+ messages in thread

* [dpdk-dev] [PATCH v4 8/9] app/procinfo: add support for show mempool
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 8/9] app/procinfo: add support for show mempool Vipin Varghese
                           ` (3 preceding siblings ...)
  2018-11-05 18:22         ` Vipin Varghese
@ 2018-11-06  2:24         ` Vipin Varghese
  2018-11-06  2:25         ` Vipin Varghese
  2018-11-06  2:31         ` [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese
  6 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-06  2:24 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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>
---

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 b97668d7f..bd28556ed 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
@@ -1154,10 +1155,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 */
+			int 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] 65+ messages in thread

* [dpdk-dev] [PATCH v4 8/9] app/procinfo: add support for show mempool
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 8/9] app/procinfo: add support for show mempool Vipin Varghese
                           ` (4 preceding siblings ...)
  2018-11-06  2:24         ` [dpdk-dev] [PATCH v4 " Vipin Varghese
@ 2018-11-06  2:25         ` Vipin Varghese
  2018-11-06  2:31         ` [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese
  6 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-06  2:25 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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>
---

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 b97668d7f..bd28556ed 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
@@ -1154,10 +1155,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 */
+			int 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] 65+ messages in thread

* [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug
  2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 8/9] app/procinfo: add support for show mempool Vipin Varghese
                           ` (5 preceding siblings ...)
  2018-11-06  2:25         ` Vipin Varghese
@ 2018-11-06  2:31         ` Vipin Varghese
  2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 2/9] app/procinfo: add compare for new options Vipin Varghese
                             ` (7 more replies)
  6 siblings, 8 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-06  2:31 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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] 65+ messages in thread

* [dpdk-dev] [PATCH v5 2/9] app/procinfo: add compare for new options
  2018-11-06  2:31         ` [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese
@ 2018-11-06  2:31           ` Vipin Varghese
  2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 3/9] app/procinfo: add prototype for debug instances Vipin Varghese
                             ` (6 subsequent siblings)
  7 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-06  2:31 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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] 65+ messages in thread

* [dpdk-dev] [PATCH v5 3/9] app/procinfo: add prototype for debug instances
  2018-11-06  2:31         ` [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese
  2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 2/9] app/procinfo: add compare for new options Vipin Varghese
@ 2018-11-06  2:31           ` Vipin Varghese
  2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 4/9] app/procinfo: add support for show port Vipin Varghese
                             ` (5 subsequent siblings)
  7 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-06  2:31 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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] 65+ messages in thread

* [dpdk-dev] [PATCH v5 4/9] app/procinfo: add support for show port
  2018-11-06  2:31         ` [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese
  2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 2/9] app/procinfo: add compare for new options Vipin Varghese
  2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 3/9] app/procinfo: add prototype for debug instances Vipin Varghese
@ 2018-11-06  2:31           ` Vipin Varghese
  2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 5/9] app/procinfo: add support for show tm Vipin Varghese
                             ` (4 subsequent siblings)
  7 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-06  2:31 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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>
---

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      | 120 +++++++++++++++++++++++++++++++++++++-
 app/proc-info/meson.build |   2 +-
 2 files changed, 120 insertions(+), 2 deletions(-)

diff --git a/app/proc-info/main.c b/app/proc-info/main.c
index 8b9cf629d..48477097f 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 */
+char bdr_str[MAX_STRING_LEN];
+
 /**< display usage */
 static void
 proc_info_usage(const char *prgname)
@@ -631,7 +637,119 @@ 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(&link, 0, sizeof(link));
+		memset(&dev_info, 0, sizeof(dev_info));
+		memset(&queue_info, 0, sizeof(queue_info));
+		memset(&stats, 0, sizeof(stats));
+		memset(&rss_conf, 0, sizeof(rss_conf));
+
+		snprintf(bdr_str, 100, " 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) || (rss_conf.rss_key == NULL))
+				continue;
+
+			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] 65+ messages in thread

* [dpdk-dev] [PATCH v5 5/9] app/procinfo: add support for show tm
  2018-11-06  2:31         ` [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese
                             ` (2 preceding siblings ...)
  2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 4/9] app/procinfo: add support for show port Vipin Varghese
@ 2018-11-06  2:31           ` Vipin Varghese
  2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 6/9] app/procinfo: add support for show crypto Vipin Varghese
                             ` (3 subsequent siblings)
  7 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-06  2:31 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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 48477097f..8ec2e9474 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
@@ -752,10 +753,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] 65+ messages in thread

* [dpdk-dev] [PATCH v5 6/9] app/procinfo: add support for show crypto
  2018-11-06  2:31         ` [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese
                             ` (3 preceding siblings ...)
  2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 5/9] app/procinfo: add support for show tm Vipin Varghese
@ 2018-11-06  2:31           ` Vipin Varghese
  2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 7/9] app/procinfo: add support for debug ring Vipin Varghese
                             ` (2 subsequent siblings)
  7 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-06  2:31 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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 8ec2e9474..7213b43fe 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -1032,10 +1032,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] 65+ messages in thread

* [dpdk-dev] [PATCH v5 7/9] app/procinfo: add support for debug ring
  2018-11-06  2:31         ` [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese
                             ` (4 preceding siblings ...)
  2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 6/9] app/procinfo: add support for show crypto Vipin Varghese
@ 2018-11-06  2:31           ` Vipin Varghese
  2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 8/9] app/procinfo: add support for show mempool Vipin Varghese
  2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 9/9] doc/procinfo: add information for debug options Vipin Varghese
  7 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-06  2:31 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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 7213b43fe..b97668d7f 100644
--- a/app/proc-info/main.c
+++ b/app/proc-info/main.c
@@ -1119,7 +1119,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] 65+ messages in thread

* [dpdk-dev] [PATCH v5 8/9] app/procinfo: add support for show mempool
  2018-11-06  2:31         ` [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese
                             ` (5 preceding siblings ...)
  2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 7/9] app/procinfo: add support for debug ring Vipin Varghese
@ 2018-11-06  2:31           ` Vipin Varghese
  2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 9/9] doc/procinfo: add information for debug options Vipin Varghese
  7 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-06  2:31 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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>
---

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 b97668d7f..bd28556ed 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
@@ -1154,10 +1155,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 */
+			int 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] 65+ messages in thread

* [dpdk-dev] [PATCH v5 9/9] doc/procinfo: add information for debug options
  2018-11-06  2:31         ` [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese
                             ` (6 preceding siblings ...)
  2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 8/9] app/procinfo: add support for show mempool Vipin Varghese
@ 2018-11-06  2:31           ` Vipin Varghese
  7 siblings, 0 replies; 65+ messages in thread
From: Vipin Varghese @ 2018-11-06  2:31 UTC (permalink / raw)
  To: dev, thomas, reshma.pattan, stephen, john.mcnamara
  Cc: stephen1.byrne, michael.j.glynn, 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] 65+ messages in thread

end of thread, other threads:[~2018-11-06  2:36 UTC | newest]

Thread overview: 65+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-23 13:57 [dpdk-dev] [PATCH v1 1/9] app/procinfo: add usage for new debug Vipin Varghese
2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 2/9] app/procinfo: add compare for new options Vipin Varghese
2018-10-25 15:18   ` Pattan, Reshma
2018-10-27  7:17     ` Varghese, Vipin
2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 3/9] app/procinfo: add prototype for debug instances Vipin Varghese
2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 4/9] app/procinfo: add code for debug port Vipin Varghese
2018-10-25 15:38   ` Pattan, Reshma
2018-10-27  7:09     ` Varghese, Vipin
2018-10-25 15:46   ` Pattan, Reshma
2018-10-27  4:47     ` Varghese, Vipin
2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 5/9] app/procinfo: add code for debug tm Vipin Varghese
2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 6/9] app/procinfo: add code for debug crypto Vipin Varghese
2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 7/9] app/procinfo: add code for debug ring Vipin Varghese
2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 8/9] app/procinfo: add code for debug mempool Vipin Varghese
2018-10-23 13:57 ` [dpdk-dev] [PATCH v1 9/9] doc/proc_info: add information for debug options Vipin Varghese
2018-10-23 15:19 ` [dpdk-dev] [PATCH v1 1/9] app/procinfo: add usage for new debug Stephen Hemminger
2018-10-24  5:41   ` Varghese, Vipin
2018-10-24 15:56     ` Stephen Hemminger
2018-10-24  6:47 ` [dpdk-dev] [PATCH v2 " Vipin Varghese
2018-10-24  6:47   ` [dpdk-dev] [PATCH v2 2/9] app/procinfo: add compare for new options Vipin Varghese
2018-10-24  6:47   ` [dpdk-dev] [PATCH v2 3/9] app/procinfo: add prototype for debug instances Vipin Varghese
2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 4/9] app/procinfo: add code for debug port Vipin Varghese
2018-10-25 16:20     ` Pattan, Reshma
2018-10-27  4:45       ` Varghese, Vipin
2018-11-05 11:39         ` Thomas Monjalon
2018-11-05 15:31           ` Varghese, Vipin
2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 5/9] app/procinfo: add code for debug tm Vipin Varghese
2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 6/9] app/procinfo: add code for debug crypto Vipin Varghese
2018-10-26 13:01     ` Pattan, Reshma
2018-10-27  4:42       ` Varghese, Vipin
2018-10-28 15:29         ` Stephen Hemminger
2018-10-29 14:29           ` Varghese, Vipin
2018-10-26 13:16     ` Pattan, Reshma
2018-10-27  4:37       ` Varghese, Vipin
2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 7/9] app/procinfo: add code for debug ring Vipin Varghese
2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 8/9] app/procinfo: add code for debug mempool Vipin Varghese
2018-10-24  6:48   ` [dpdk-dev] [PATCH v2 9/9] doc/procinfo: add information for debug options Vipin Varghese
2018-10-25 15:11     ` Varghese, Vipin
2018-11-05 17:51     ` [dpdk-dev] [PATCH v3 1/9] app/procinfo: add usage for new debug Vipin Varghese
2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 2/9] app/procinfo: add compare for new options Vipin Varghese
2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 3/9] app/procinfo: add prototype for debug instances Vipin Varghese
2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 4/9] app/procinfo: add support for show port Vipin Varghese
2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 5/9] app/procinfo: add support for show tm Vipin Varghese
2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 6/9] app/procinfo: add support for show crypto Vipin Varghese
2018-11-05 18:08         ` [dpdk-dev] [PATCH " Vipin Varghese
2018-11-05 18:08         ` [dpdk-dev] [PATCH v3 " Varghese, Vipin
2018-11-05 18:17         ` [dpdk-dev] [PATCH " Vipin Varghese
2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 7/9] app/procinfo: add support for debug ring Vipin Varghese
2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 8/9] app/procinfo: add support for show mempool Vipin Varghese
2018-11-05 18:06         ` [dpdk-dev] [PATCH " Vipin Varghese
2018-11-05 18:09         ` [dpdk-dev] [PATCH v3 " Varghese, Vipin
2018-11-05 18:18         ` [dpdk-dev] [PATCH " Vipin Varghese
2018-11-05 18:22         ` Vipin Varghese
2018-11-06  2:24         ` [dpdk-dev] [PATCH v4 " Vipin Varghese
2018-11-06  2:25         ` Vipin Varghese
2018-11-06  2:31         ` [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese
2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 2/9] app/procinfo: add compare for new options Vipin Varghese
2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 3/9] app/procinfo: add prototype for debug instances Vipin Varghese
2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 4/9] app/procinfo: add support for show port Vipin Varghese
2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 5/9] app/procinfo: add support for show tm Vipin Varghese
2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 6/9] app/procinfo: add support for show crypto Vipin Varghese
2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 7/9] app/procinfo: add support for debug ring Vipin Varghese
2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 8/9] app/procinfo: add support for show mempool Vipin Varghese
2018-11-06  2:31           ` [dpdk-dev] [PATCH v5 9/9] doc/procinfo: add information for debug options Vipin Varghese
2018-11-05 17:51       ` [dpdk-dev] [PATCH v3 " 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).