* [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug @ 2018-11-22 14:15 Vipin Varghese 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 2/9] app/procinfo: add compare for new options Vipin Varghese ` (8 more replies) 0 siblings, 9 replies; 69+ messages in thread From: Vipin Varghese @ 2018-11-22 14:15 UTC (permalink / raw) To: dev, reshma.pattan, thomas, stephen, john.mcnamara Cc: amol.patel, Vipin Varghese Update the file with MACRO for stats border, usage text information and string comparision. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V3: - change the usage details - Vipin Varghese V2: - change word dbg to show - Stephen Hemminger --- app/proc-info/main.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index c20effa4f..5779f07e7 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -36,6 +36,10 @@ #define MAX_STRING_LEN 256 +#define STATS_BDR_FMT "========================================" +#define STATS_BDR_STR(w, s) printf("%.*s%s%.*s\n", w, \ + STATS_BDR_FMT, s, w, STATS_BDR_FMT) + /**< mask of enabled ports */ static uint32_t enabled_port_mask; /**< Enable stats. */ @@ -83,7 +87,12 @@ proc_info_usage(const char *prgname) " --stats-reset: to reset port statistics\n" " --xstats-reset: to reset port extended statistics\n" " --collectd-format: to print statistics to STDOUT in expected by collectd format\n" - " --host-id STRING: host id used to identify the system process is running on\n", + " --host-id STRING: host id used to identify the system process is running on\n" + " --show-port to display ports information\n" + " --show-tm to display traffic manager information for ports\n" + " --show-crypto to display crypto information\n" + " --show-ring[=name] to display ring information\n" + " --show-mempool[=name] to display mempool information\n", prgname); } @@ -190,6 +199,11 @@ proc_info_parse_args(int argc, char **argv) {"collectd-format", 0, NULL, 0}, {"xstats-ids", 1, NULL, 1}, {"host-id", 0, NULL, 0}, + {"show-port", 0, NULL, 0}, + {"show-tm", 0, NULL, 0}, + {"show-crypto", 0, NULL, 0}, + {"show-ring", optional_argument, NULL, 0}, + {"show-mempool", optional_argument, NULL, 0}, {NULL, 0, 0, 0} }; -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v5 2/9] app/procinfo: add compare for new options 2018-11-22 14:15 [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese @ 2018-11-22 14:15 ` Vipin Varghese 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 3/9] app/procinfo: add prototype for debug instances Vipin Varghese ` (7 subsequent siblings) 8 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-11-22 14:15 UTC (permalink / raw) To: dev, reshma.pattan, thomas, stephen, john.mcnamara Cc: amol.patel, Vipin Varghese Add code for new debug options to compare usage strings and set enable flag. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V3: - variables from debug to show - Vipin Varghese V2: - compare string from dbg to show - Stephen Hemminger --- app/proc-info/main.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 5779f07e7..76266d5cb 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -63,6 +63,18 @@ static uint32_t mem_info; /**< Enable displaying xstat name. */ static uint32_t enable_xstats_name; static char *xstats_name; +/**< Enable show port. */ +static uint32_t enable_shw_port; +/**< Enable show tm. */ +static uint32_t enable_shw_tm; +/**< Enable show crypto. */ +static uint32_t enable_shw_crypto; +/**< Enable show ring. */ +static uint32_t enable_shw_ring; +static char *ring_name; +/**< Enable show mempool. */ +static uint32_t enable_shw_mempool; +static char *mempool_name; /**< Enable xstats by ids. */ #define MAX_NB_XSTATS_IDS 1024 @@ -247,6 +259,24 @@ proc_info_parse_args(int argc, char **argv) else if (!strncmp(long_option[option_index].name, "xstats-reset", MAX_LONG_OPT_SZ)) reset_xstats = 1; + else if (!strncmp(long_option[option_index].name, + "show-port", MAX_LONG_OPT_SZ)) + enable_shw_port = 1; + else if (!strncmp(long_option[option_index].name, + "show-tm", MAX_LONG_OPT_SZ)) + enable_shw_tm = 1; + else if (!strncmp(long_option[option_index].name, + "show-crypto", MAX_LONG_OPT_SZ)) + enable_shw_crypto = 1; + else if (!strncmp(long_option[option_index].name, + "show-ring", MAX_LONG_OPT_SZ)) { + enable_shw_ring = 1; + ring_name = optarg; + } else if (!strncmp(long_option[option_index].name, + "show-mempool", MAX_LONG_OPT_SZ)) { + enable_shw_mempool = 1; + mempool_name = optarg; + } break; case 1: /* Print xstat single value given by name*/ -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v5 3/9] app/procinfo: add prototype for debug instances 2018-11-22 14:15 [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 2/9] app/procinfo: add compare for new options Vipin Varghese @ 2018-11-22 14:15 ` Vipin Varghese 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 4/9] app/procinfo: add support for show port Vipin Varghese ` (6 subsequent siblings) 8 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-11-22 14:15 UTC (permalink / raw) To: dev, reshma.pattan, thomas, stephen, john.mcnamara Cc: amol.patel, Vipin Varghese Add prototype function calls for the show functions. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V3: - update function names from debug to show - Vipin Varghese V2: - removed if else ladder - Vipin Varghese --- app/proc-info/main.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 76266d5cb..8b9cf629d 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -628,6 +628,36 @@ metrics_display(int port_id) rte_free(names); } +static void +show_port(void) +{ + printf(" port\n"); +} + +static void +show_tm(void) +{ + printf(" tm\n"); +} + +static void +show_crypto(void) +{ + printf(" crypto\n"); +} + +static void +show_ring(char *name) +{ + printf(" rings Name (%s)\n", name); +} + +static void +show_mempool(char *name) +{ + printf(" mempools Name (%s)\n", name); +} + int main(int argc, char **argv) { @@ -708,6 +738,18 @@ main(int argc, char **argv) if (enable_metrics) metrics_display(RTE_METRICS_GLOBAL); + /* show information for PMD */ + if (enable_shw_port) + show_port(); + if (enable_shw_tm) + show_tm(); + if (enable_shw_crypto) + show_crypto(); + if (enable_shw_ring) + show_ring(ring_name); + if (enable_shw_mempool) + show_mempool(mempool_name); + ret = rte_eal_cleanup(); if (ret) printf("Error from rte_eal_cleanup(), %d\n", ret); -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v5 4/9] app/procinfo: add support for show port 2018-11-22 14:15 [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 2/9] app/procinfo: add compare for new options Vipin Varghese 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 3/9] app/procinfo: add prototype for debug instances Vipin Varghese @ 2018-11-22 14:15 ` Vipin Varghese 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 5/9] app/procinfo: add support for show tm Vipin Varghese ` (5 subsequent siblings) 8 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-11-22 14:15 UTC (permalink / raw) To: dev, reshma.pattan, thomas, stephen, john.mcnamara Cc: amol.patel, Vipin Varghese Function show_port is used for displaying the port PMD information under under primary process. The information shows basic, per queue and security. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V5: - convert 100 to MAX_STRING_LEN - Reshma Pattan - RSS made for port - Reshma Pattan - update bdr_str to static - Stephen Hemminger - remove memset for link, dev_info, queue, stats - Stephen Hemminger V3: - fix meson build - Reshma Pattan - change 100 to MAX_STRING_LEN - Reshma Pattan - memset to struct elements - Reshma Pattan - printf tab space - Reshma Pattan - remove 'drop packet information' - Vipin Varghese V2: - redefine code format - Vipin Varghese --- app/proc-info/main.c | 117 +++++++++++++++++++++++++++++++++++++- app/proc-info/meson.build | 2 +- 2 files changed, 117 insertions(+), 2 deletions(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 8b9cf629d..4af154794 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -29,6 +29,9 @@ #include <rte_branch_prediction.h> #include <rte_string_fns.h> #include <rte_metrics.h> +#include <rte_cycles.h> +#include <rte_security.h> +#include <rte_cryptodev.h> /* Maximum long option length for option parsing. */ #define MAX_LONG_OPT_SZ 64 @@ -81,6 +84,9 @@ static char *mempool_name; static uint32_t nb_xstats_ids; static uint64_t xstats_ids[MAX_NB_XSTATS_IDS]; +/* border variable to hold for show */ +static char bdr_str[MAX_STRING_LEN]; + /**< display usage */ static void proc_info_usage(const char *prgname) @@ -631,7 +637,116 @@ metrics_display(int port_id) static void show_port(void) { - printf(" port\n"); + uint16_t i = 0; + int ret = 0, j, k; + + snprintf(bdr_str, MAX_STRING_LEN, " show - Port PMD %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + RTE_ETH_FOREACH_DEV(i) { + uint16_t mtu = 0; + struct rte_eth_link link; + struct rte_eth_dev_info dev_info; + struct rte_eth_rxq_info queue_info; + struct rte_eth_stats stats; + struct rte_eth_rss_conf rss_conf; + + memset(&rss_conf, 0, sizeof(rss_conf)); + + snprintf(bdr_str, MAX_STRING_LEN, " Port (%u)", i); + STATS_BDR_STR(5, bdr_str); + printf(" - generic config\n"); + + printf("\t -- Socket %d\n", rte_eth_dev_socket_id(i)); + rte_eth_link_get(i, &link); + printf("\t -- link speed %d duplex %d," + " auto neg %d status %d\n", + link.link_speed, + link.link_duplex, + link.link_autoneg, + link.link_status); + printf("\t -- promiscuous (%d)\n", + rte_eth_promiscuous_get(i)); + ret = rte_eth_dev_get_mtu(i, &mtu); + if (ret == 0) + printf("\t -- mtu (%d)\n", mtu); + + printf(" - queue\n"); + + rte_eth_dev_info_get(i, &dev_info); + + for (j = 0; j < dev_info.nb_rx_queues; j++) { + ret = rte_eth_rx_queue_info_get(i, j, &queue_info); + if (ret == 0) { + printf("\t -- queue %d rx scatter %d" + " descriptors %d offloads 0x%"PRIx64 + " mempool socket %d\n", + j, + queue_info.scattered_rx, + queue_info.nb_desc, + queue_info.conf.offloads, + queue_info.mp->socket_id); + + ret = rte_eth_stats_get(i, &stats); + if (ret == 0) { + printf("\t -- packet input %"PRIu64 + " output %"PRIu64"" + " error %"PRIu64"\n", + stats.q_ipackets[j], + stats.q_opackets[j], + stats.q_errors[j]); + } + } + } + + ret = rte_eth_dev_rss_hash_conf_get(i, &rss_conf); + if (ret == 0) { + if (rss_conf.rss_key) { + printf("\t -- RSS len %u key (hex):", + rss_conf.rss_key_len); + for (k = 0; k < rss_conf.rss_key_len; k++) + printf(" %x", rss_conf.rss_key[k]); + printf("\t -- hf 0x%"PRIx64"\n", + rss_conf.rss_hf); + } + } + + ret = rte_eth_stats_get(i, &stats); + if (ret == 0) { + printf("\t -- packet input %"PRIu64 + " output %"PRIu64"\n", + stats.ipackets, + stats.opackets); + printf("\t -- packet error input %"PRIu64 + " output %"PRIu64"\n", + stats.ierrors, + stats.oerrors); + printf("\t -- RX no mbuf %"PRIu64"\n", + stats.rx_nombuf); + } + + printf(" - cyrpto context\n"); + void *ptr_ctx = rte_eth_dev_get_sec_ctx(i); + printf("\t -- security context - %p\n", ptr_ctx); + + if (ptr_ctx) { + printf("\t -- size %u\n", + rte_security_session_get_size(ptr_ctx)); + const struct rte_security_capability *ptr_sec_cap = + rte_security_capabilities_get(ptr_ctx); + if (ptr_sec_cap) { + printf("\t -- action (0x%x), protocol (0x%x)," + " offload flags (0x%x)\n", + ptr_sec_cap->action, + ptr_sec_cap->protocol, + ptr_sec_cap->ol_flags); + printf("\t -- capabilities - oper type %x\n", + ptr_sec_cap->crypto_capabilities->op); + } + } + } + STATS_BDR_STR(50, ""); } static void diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build index a52b2ee4a..866b390d6 100644 --- a/app/proc-info/meson.build +++ b/app/proc-info/meson.build @@ -3,4 +3,4 @@ sources = files('main.c') allow_experimental_apis = true -deps += ['ethdev', 'metrics'] +deps += ['ethdev', 'metrics', 'security'] -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v5 5/9] app/procinfo: add support for show tm 2018-11-22 14:15 [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese ` (2 preceding siblings ...) 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 4/9] app/procinfo: add support for show port Vipin Varghese @ 2018-11-22 14:15 ` Vipin Varghese 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 6/9] app/procinfo: add support for show crypto Vipin Varghese ` (4 subsequent siblings) 8 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-11-22 14:15 UTC (permalink / raw) To: dev, reshma.pattan, thomas, stephen, john.mcnamara Cc: amol.patel, Vipin Varghese Function show_tm is used for displaying the tm PMD under the primary process. This covers basic and per node|level details with stats. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V3: - memset for struct elements - Vipin Varghese - code cleanup for TM - Vipin Varghese - fetch for leaf nodes if node exist - Jasvinder Singh - display MARCO to function - Reshma Pathan & Stephen Hemminger V2: - MACRO for display node|level - cap - Vipin Varghese --- app/proc-info/main.c | 276 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 275 insertions(+), 1 deletion(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 4af154794..2e074caf2 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -32,6 +32,7 @@ #include <rte_cycles.h> #include <rte_security.h> #include <rte_cryptodev.h> +#include <rte_tm.h> /* Maximum long option length for option parsing. */ #define MAX_LONG_OPT_SZ 64 @@ -749,10 +750,283 @@ show_port(void) STATS_BDR_STR(50, ""); } +static void +display_nodecap_info(int is_leaf, struct rte_tm_node_capabilities *cap) +{ + if (cap == NULL) + return; + + if (!is_leaf) { + printf("\t -- nonleaf sched max:\n" + "\t\t + children (%u)\n" + "\t\t + sp priorities (%u)\n" + "\t\t + wfq children per group (%u)\n" + "\t\t + wfq groups (%u)\n" + "\t\t + wfq weight (%u)\n", + cap->nonleaf.sched_n_children_max, + cap->nonleaf.sched_sp_n_priorities_max, + cap->nonleaf.sched_wfq_n_children_per_group_max, + cap->nonleaf.sched_wfq_n_groups_max, + cap->nonleaf.sched_wfq_weight_max); + } else { + printf("\t -- leaf cman support:\n" + "\t\t + wred pkt mode (%d)\n" + "\t\t + wred byte mode (%d)\n" + "\t\t + head drop (%d)\n" + "\t\t + wred context private (%d)\n" + "\t\t + wred context shared (%u)\n", + cap->leaf.cman_wred_packet_mode_supported, + cap->leaf.cman_wred_byte_mode_supported, + cap->leaf.cman_head_drop_supported, + cap->leaf.cman_wred_context_private_supported, + cap->leaf.cman_wred_context_shared_n_max); + } +} + +static void +display_levelcap_info(int is_leaf, struct rte_tm_level_capabilities *cap) +{ + if (cap == NULL) + return; + + if (!is_leaf) { + printf("\t -- shaper private: (%d) dual rate (%d)\n", + cap->nonleaf.shaper_private_supported, + cap->nonleaf.shaper_private_dual_rate_supported); + printf("\t -- shaper share: (%u)\n", + cap->nonleaf.shaper_shared_n_max); + printf("\t -- non leaf sched MAX:\n" + "\t\t + children (%u)\n" + "\t\t + sp (%u)\n" + "\t\t + wfq children per group (%u)\n" + "\t\t + wfq groups (%u)\n" + "\t\t + wfq weight (%u)\n", + cap->nonleaf.sched_n_children_max, + cap->nonleaf.sched_sp_n_priorities_max, + cap->nonleaf.sched_wfq_n_children_per_group_max, + cap->nonleaf.sched_wfq_n_groups_max, + cap->nonleaf.sched_wfq_weight_max); + } else { + printf("\t -- shaper private: (%d) dual rate (%d)\n", + cap->leaf.shaper_private_supported, + cap->leaf.shaper_private_dual_rate_supported); + printf("\t -- shaper share: (%u)\n", + cap->leaf.shaper_shared_n_max); + printf(" -- leaf cman support:\n" + "\t\t + wred pkt mode (%d)\n" + "\t\t + wred byte mode (%d)\n" + "\t\t + head drop (%d)\n" + "\t\t + wred context private (%d)\n" + "\t\t + wred context shared (%u)\n", + cap->leaf.cman_wred_packet_mode_supported, + cap->leaf.cman_wred_byte_mode_supported, + cap->leaf.cman_head_drop_supported, + cap->leaf.cman_wred_context_private_supported, + cap->leaf.cman_wred_context_shared_n_max); + } +} + static void show_tm(void) { - printf(" tm\n"); + int ret = 0, check_for_leaf = 0, is_leaf = 0; + unsigned int j, k; + uint16_t i = 0; + + snprintf(bdr_str, MAX_STRING_LEN, " show - TM PMD %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + RTE_ETH_FOREACH_DEV(i) { + struct rte_eth_dev_info dev_info; + struct rte_tm_capabilities cap; + struct rte_tm_error error; + struct rte_tm_node_capabilities capnode; + struct rte_tm_level_capabilities caplevel; + uint32_t n_leaf_nodes = 0; + + memset(&dev_info, 0, sizeof(dev_info)); + memset(&cap, 0, sizeof(cap)); + memset(&error, 0, sizeof(error)); + + rte_eth_dev_info_get(i, &dev_info); + printf(" - Generic for port (%u)\n" + "\t -- driver name %s\n" + "\t -- max vf (%u)\n" + "\t -- max tx queues (%u)\n" + "\t -- number of tx queues (%u)\n", + i, + dev_info.driver_name, + dev_info.max_vfs, + dev_info.max_tx_queues, + dev_info.nb_tx_queues); + + ret = rte_tm_capabilities_get(i, &cap, &error); + if (ret) + continue; + + printf(" - MAX: nodes (%u) levels (%u) children (%u)\n", + cap.n_nodes_max, + cap.n_levels_max, + cap.sched_n_children_max); + + printf(" - identical nodes: non leaf (%d) leaf (%d)\n", + cap.non_leaf_nodes_identical, + cap.leaf_nodes_identical); + + printf(" - Shaper MAX:\n" + "\t -- total (%u)\n" + "\t -- private (%u) private dual (%d)\n" + "\t -- shared (%u) shared dual (%u)\n", + cap.shaper_n_max, + cap.shaper_private_n_max, + cap.shaper_private_dual_rate_n_max, + cap.shaper_shared_n_max, + cap.shaper_shared_dual_rate_n_max); + + printf(" - mark support:\n"); + printf("\t -- vlan dei: GREEN (%d) YELLOW (%d) RED (%d)\n", + cap.mark_vlan_dei_supported[RTE_TM_GREEN], + cap.mark_vlan_dei_supported[RTE_TM_YELLOW], + cap.mark_vlan_dei_supported[RTE_TM_RED]); + printf("\t -- ip ecn tcp: GREEN (%d) YELLOW (%d) RED (%d)\n", + cap.mark_ip_ecn_tcp_supported[RTE_TM_GREEN], + cap.mark_ip_ecn_tcp_supported[RTE_TM_YELLOW], + cap.mark_ip_ecn_tcp_supported[RTE_TM_RED]); + printf("\t -- ip ecn sctp: GREEN (%d) YELLOW (%d) RED (%d)\n", + cap.mark_ip_ecn_sctp_supported[RTE_TM_GREEN], + cap.mark_ip_ecn_sctp_supported[RTE_TM_YELLOW], + cap.mark_ip_ecn_sctp_supported[RTE_TM_RED]); + printf("\t -- ip dscp: GREEN (%d) YELLOW (%d) RED (%d)\n", + cap.mark_ip_dscp_supported[RTE_TM_GREEN], + cap.mark_ip_dscp_supported[RTE_TM_YELLOW], + cap.mark_ip_dscp_supported[RTE_TM_RED]); + + printf(" - mask stats (0x%"PRIx64")" + " dynamic update (0x%"PRIx64")\n", + cap.stats_mask, + cap.dynamic_update_mask); + + printf(" - sched MAX:\n" + "\t -- total (%u)\n" + "\t -- sp levels (%u)\n" + "\t -- wfq children per group (%u)\n" + "\t -- wfq groups (%u)\n" + "\t -- wfq weight (%u)\n", + cap.sched_sp_n_priorities_max, + cap.sched_sp_n_priorities_max, + cap.sched_wfq_n_children_per_group_max, + cap.sched_wfq_n_groups_max, + cap.sched_wfq_weight_max); + + printf(" - CMAN support:\n" + "\t -- WRED mode: pkt (%d) byte (%d)\n" + "\t -- head drop (%d)\n", + cap.cman_wred_packet_mode_supported, + cap.cman_wred_byte_mode_supported, + cap.cman_head_drop_supported); + printf("\t -- MAX WRED CONTEXT:" + " total (%u) private (%u) shared (%u)\n", + cap.cman_wred_context_n_max, + cap.cman_wred_context_private_n_max, + cap.cman_wred_context_shared_n_max); + + for (j = 0; j < cap.n_nodes_max; j++) { + memset(&capnode, 0, sizeof(capnode)); + ret = rte_tm_node_capabilities_get(i, j, + &capnode, &error); + if (ret) + continue; + + check_for_leaf = 1; + + printf(" NODE %u\n", j); + printf("\t - shaper private: (%d) dual rate (%d)\n", + capnode.shaper_private_supported, + capnode.shaper_private_dual_rate_supported); + printf("\t - shaper shared max: (%u)\n", + capnode.shaper_shared_n_max); + printf("\t - stats mask %"PRIx64"\n", + capnode.stats_mask); + + ret = rte_tm_node_type_get(i, j, &is_leaf, &error); + if (ret) + continue; + + display_nodecap_info(is_leaf, &capnode); + } + + for (j = 0; j < cap.n_levels_max; j++) { + memset(&caplevel, 0, sizeof(caplevel)); + ret = rte_tm_level_capabilities_get(i, j, + &caplevel, &error); + if (ret) + continue; + + printf(" - Level %u\n", j); + printf("\t -- node MAX: %u non leaf %u leaf %u\n", + caplevel.n_nodes_max, + caplevel.n_nodes_nonleaf_max, + caplevel.n_nodes_leaf_max); + printf("\t -- indetical: non leaf %u leaf %u\n", + caplevel.non_leaf_nodes_identical, + caplevel.leaf_nodes_identical); + + for (k = 0; k < caplevel.n_nodes_max; k++) { + ret = rte_tm_node_type_get(i, k, + &is_leaf, &error); + if (ret) + continue; + + display_levelcap_info(is_leaf, &caplevel); + } + } + + if (check_for_leaf) { + ret = rte_tm_get_number_of_leaf_nodes(i, + &n_leaf_nodes, &error); + if (ret == 0) + printf(" - leaf nodes (%u)\n", n_leaf_nodes); + } + + for (j = 0; j < n_leaf_nodes; j++) { + struct rte_tm_node_stats stats; + memset(&stats, 0, sizeof(stats)); + + ret = rte_tm_node_stats_read(i, j, + &stats, &cap.stats_mask, 0, &error); + if (ret) + continue; + + printf(" - STATS for node (%u)\n", j); + printf(" -- pkts (%"PRIu64") bytes (%"PRIu64")\n", + stats.n_pkts, stats.n_bytes); + + ret = rte_tm_node_type_get(i, j, &is_leaf, &error); + if ((ret) | (!is_leaf)) + continue; + + printf(" -- leaf queued:" + " pkts (%"PRIu64") bytes (%"PRIu64")\n", + stats.leaf.n_pkts_queued, + stats.leaf.n_bytes_queued); + printf(" - dropped:\n" + "\t -- GREEN:" + " pkts (%"PRIu64") bytes (%"PRIu64")\n" + "\t -- YELLOW:" + " pkts (%"PRIu64") bytes (%"PRIu64")\n" + "\t -- RED:" + " pkts (%"PRIu64") bytes (%"PRIu64")\n", + stats.leaf.n_pkts_dropped[RTE_TM_GREEN], + stats.leaf.n_bytes_dropped[RTE_TM_GREEN], + stats.leaf.n_pkts_dropped[RTE_TM_YELLOW], + stats.leaf.n_bytes_dropped[RTE_TM_YELLOW], + stats.leaf.n_pkts_dropped[RTE_TM_RED], + stats.leaf.n_bytes_dropped[RTE_TM_RED]); + } + } + + STATS_BDR_STR(50, ""); } static void -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v5 6/9] app/procinfo: add support for show crypto 2018-11-22 14:15 [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese ` (3 preceding siblings ...) 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 5/9] app/procinfo: add support for show tm Vipin Varghese @ 2018-11-22 14:15 ` Vipin Varghese 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 7/9] app/procinfo: add support for debug ring Vipin Varghese ` (3 subsequent siblings) 8 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-11-22 14:15 UTC (permalink / raw) To: dev, reshma.pattan, thomas, stephen, john.mcnamara Cc: amol.patel, Vipin Varghese Function show_crypto is used for displaying the crypto PMD under the primary process. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- v4: - add space to compare - Vipin Varghese V3: - replace MACRO to function - Reshma Pathan & Stephen Hemminger - add memset for struct elements - Reshma Pathan - change display formating of flags - Vipin Varghese - use MACRO for string - Vipin Varghese --- app/proc-info/main.c | 80 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 2e074caf2..858ac6df9 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -1029,10 +1029,88 @@ show_tm(void) STATS_BDR_STR(50, ""); } +static void +display_crypto_feature_info(uint64_t x) +{ + if (x == 0) + return; + + printf("\t -- feature flags\n"); + printf("\t\t + symmetric (%c), asymmetric (%c)\n" + "\t\t + symmetric operation chaining (%c)\n", + (x & RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING) ? 'y' : 'n'); + printf("\t\t + CPU: SSE (%c), AVX (%c), AVX2 (%c), AVX512 (%c)\n", + (x & RTE_CRYPTODEV_FF_CPU_SSE) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_CPU_AVX) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_CPU_AVX2) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_CPU_AVX512) ? 'y' : 'n'); + printf("\t\t + AESNI: CPU (%c), HW (%c)\n", + (x & RTE_CRYPTODEV_FF_CPU_AESNI) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_HW_ACCELERATED) ? 'y' : 'n'); + printf("\t\t + INLINE (%c)\n", + (x & RTE_CRYPTODEV_FF_SECURITY) ? 'y' : 'n'); + printf("\t\t + ARM: NEON (%c), CE (%c)\n", + (x & RTE_CRYPTODEV_FF_CPU_NEON) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_CPU_ARM_CE) ? 'y' : 'n'); + printf("\t -- buffer offload\n"); + printf("\t\t + IN_PLACE_SGL (%c)\n", + (x & RTE_CRYPTODEV_FF_IN_PLACE_SGL) ? 'y' : 'n'); + printf("\t\t + OOP_SGL_IN_SGL_OUT (%c)\n", + (x & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT) ? 'y' : 'n'); + printf("\t\t + OOP_SGL_IN_LB_OUT (%c)\n", + (x & RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT) ? 'y' : 'n'); + printf("\t\t + OOP_LB_IN_SGL_OUT (%c)\n", + (x & RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT) ? 'y' : 'n'); + printf("\t\t + OOP_LB_IN_LB_OUT (%c)\n", + (x & RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT) ? 'y' : 'n'); +} + static void show_crypto(void) { - printf(" crypto\n"); + uint8_t crypto_dev_count = rte_cryptodev_count(), i; + + snprintf(bdr_str, MAX_STRING_LEN, " show - CRYPTO PMD %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + for (i = 0; i < crypto_dev_count; i++) { + struct rte_cryptodev_info dev_info; + struct rte_cryptodev_stats stats; + + memset(&dev_info, 0, sizeof(dev_info)); + rte_cryptodev_info_get(i, &dev_info); + + printf(" - device (%u)\n", i); + printf("\t -- name (%s)\n" + "\t -- driver (%s)\n" + "\t -- id (%u) on socket (%d)\n" + "\t -- queue pairs (%d)\n", + rte_cryptodev_name_get(i), + dev_info.driver_name, + dev_info.driver_id, + dev_info.device->numa_node, + rte_cryptodev_queue_pair_count(i)); + + display_crypto_feature_info(dev_info.feature_flags); + + printf("\t -- stats\n"); + memset(&stats, 0, sizeof(0)); + if (rte_cryptodev_stats_get(i, &stats) == 0) { + printf("\t\t + enqueue count (%"PRIu64")" + " error (%"PRIu64")\n", + stats.enqueued_count, + stats.enqueue_err_count); + printf("\t\t + dequeue count (%"PRIu64")" + " error (%"PRIu64")\n", + stats.dequeued_count, + stats.dequeue_err_count); + } + } + + STATS_BDR_STR(50, ""); } static void -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v5 7/9] app/procinfo: add support for debug ring 2018-11-22 14:15 [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese ` (4 preceding siblings ...) 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 6/9] app/procinfo: add support for show crypto Vipin Varghese @ 2018-11-22 14:15 ` Vipin Varghese 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 8/9] app/procinfo: add support for show mempool Vipin Varghese ` (2 subsequent siblings) 8 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-11-22 14:15 UTC (permalink / raw) To: dev, reshma.pattan, thomas, stephen, john.mcnamara Cc: amol.patel, Vipin Varghese Function show_ring is used for displaying the RING of the primary process. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V3: - replace space to tab in printf - Reshma Pathan - change ring display information - Vipin Varghese --- app/proc-info/main.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 858ac6df9..7e57f296c 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -1116,7 +1116,39 @@ show_crypto(void) static void show_ring(char *name) { - printf(" rings Name (%s)\n", name); + snprintf(bdr_str, MAX_STRING_LEN, " show - RING %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + if (name != NULL) { + struct rte_ring *ptr = rte_ring_lookup(name); + if (ptr != NULL) { + printf(" - Name (%s) on socket (%d)\n" + " - flags:\n" + "\t -- Single Producer Enqueue (%u)\n" + "\t -- Single Consmer Dequeue (%u)\n", + ptr->name, + ptr->memzone->socket_id, + ptr->flags & RING_F_SP_ENQ, + ptr->flags & RING_F_SC_DEQ); + printf(" - size (%u) mask (0x%x) capacity (%u)\n", + ptr->size, + ptr->mask, + ptr->capacity); + printf(" - count (%u) free count (%u)\n", + rte_ring_count(ptr), + rte_ring_free_count(ptr)); + printf(" - full (%d) empty (%d)\n", + rte_ring_full(ptr), + rte_ring_empty(ptr)); + + STATS_BDR_STR(50, ""); + return; + } + } + + rte_ring_list_dump(stdout); + STATS_BDR_STR(50, ""); } static void -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v5 8/9] app/procinfo: add support for show mempool 2018-11-22 14:15 [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese ` (5 preceding siblings ...) 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 7/9] app/procinfo: add support for debug ring Vipin Varghese @ 2018-11-22 14:15 ` Vipin Varghese 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 9/9] doc/procinfo: add information for debug options Vipin Varghese 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese 8 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-11-22 14:15 UTC (permalink / raw) To: dev, reshma.pattan, thomas, stephen, john.mcnamara Cc: amol.patel, Vipin Varghese Function show_mempool is used for displaying the MEMPOOL of the primary process. For valid mempool elements are iterated for max of 256 bytes. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V5: - update ret to uint32_t - Reshma Pattan v4: - add spacing for flag compare - Vipin Varghese V3: - add avail and in use - Vipin Varghese - add flag split - Vipin Varghese --- app/proc-info/main.c | 67 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 7e57f296c..690b702a2 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -33,6 +33,7 @@ #include <rte_security.h> #include <rte_cryptodev.h> #include <rte_tm.h> +#include <rte_hexdump.h> /* Maximum long option length for option parsing. */ #define MAX_LONG_OPT_SZ 64 @@ -1151,10 +1152,74 @@ show_ring(char *name) STATS_BDR_STR(50, ""); } +static void +mempool_itr_obj(struct rte_mempool *mp, + void *opaque, void *obj, + unsigned int obj_idx) +{ + printf(" - obj_idx %u opaque %p obj %p\n", + obj_idx, opaque, obj); + + if (obj) + rte_hexdump(stdout, " Obj Content", + obj, (mp->elt_size > 256)?256:mp->elt_size); +} + static void show_mempool(char *name) { - printf(" mempools Name (%s)\n", name); + uint64_t flags = 0; + + snprintf(bdr_str, MAX_STRING_LEN, " show - MEMPOOL %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + if (name != NULL) { + struct rte_mempool *ptr = rte_mempool_lookup(name); + if (ptr != NULL) { + flags = ptr->flags; + printf(" - Name: %s on socket %d\n" + " - flags:\n" + "\t -- No spread (%c)\n" + "\t -- No cache align (%c)\n" + "\t -- SP put (%c), SC get (%c)\n" + "\t -- Pool created (%c)\n" + "\t -- No IOVA config (%c)\n", + ptr->name, + ptr->socket_id, + (flags & MEMPOOL_F_NO_SPREAD) ? 'y' : 'n', + (flags & MEMPOOL_F_NO_CACHE_ALIGN) ? 'y' : 'n', + (flags & MEMPOOL_F_SP_PUT) ? 'y' : 'n', + (flags & MEMPOOL_F_SC_GET) ? 'y' : 'n', + (flags & MEMPOOL_F_POOL_CREATED) ? 'y' : 'n', + (flags & MEMPOOL_F_NO_IOVA_CONTIG) ? 'y' : 'n'); + printf(" - Size %u Cache %u element %u\n" + " - header %u trailer %u\n" + " - private data size %u\n", + ptr->size, + ptr->cache_size, + ptr->elt_size, + ptr->header_size, + ptr->trailer_size, + ptr->private_data_size); + printf(" - memezone - socket %d\n", + ptr->mz->socket_id); + printf(" - Count: avail (%u), in use (%u)\n", + rte_mempool_avail_count(ptr), + rte_mempool_in_use_count(ptr)); + + /* iterate each object */ + uint32_t ret = rte_mempool_obj_iter(ptr, + mempool_itr_obj, NULL); + printf(" - iterated %u objects\n", ret); + + STATS_BDR_STR(50, ""); + return; + } + } + + rte_mempool_list_dump(stdout); + STATS_BDR_STR(50, ""); } int -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v5 9/9] doc/procinfo: add information for debug options 2018-11-22 14:15 [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese ` (6 preceding siblings ...) 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 8/9] app/procinfo: add support for show mempool Vipin Varghese @ 2018-11-22 14:15 ` Vipin Varghese 2018-11-22 18:08 ` Mcnamara, John 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese 8 siblings, 1 reply; 69+ messages in thread From: Vipin Varghese @ 2018-11-22 14:15 UTC (permalink / raw) To: dev, reshma.pattan, thomas, stephen, john.mcnamara Cc: amol.patel, Vipin Varghese Document update for debug options and information for PMD instances like port, traffic manager, crypto, mempool and ring instances. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V3: - update document from dbg to show - Vipin Varghese V2: - update word style for content - Vipin Varghese --- doc/guides/tools/proc_info.rst | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst index d5b5ed6a6..5c2ce762b 100644 --- a/doc/guides/tools/proc_info.rst +++ b/doc/guides/tools/proc_info.rst @@ -6,9 +6,9 @@ dpdk-procinfo Application The dpdk-procinfo application is a Data Plane Development Kit (DPDK) application that runs as a DPDK secondary process and is capable of retrieving port -statistics, resetting port statistics and printing DPDK memory information. -This application extends the original functionality that was supported by -dump_cfg. +statistics, resetting port statistics and printing DPDK memory information and +debug information for port|tm|crypto|ring|mempool. This application extends the +original functionality that was supported by dump_cfg. Running the Application ----------------------- @@ -17,7 +17,8 @@ The application has a number of command line options: .. code-block:: console ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats | - --stats-reset | --xstats-reset] + --stats-reset | --xstats-reset | --show-port | --show-tm | --show-crypto | + --show-mempool[=name] | --show-ring[=name]] Parameters ~~~~~~~~~~ @@ -41,6 +42,28 @@ If no port mask is specified xstats are reset for all DPDK ports. **-m**: Print DPDK memory information. +**--show-port** +The show-port parameter displays port level various configuration and +mbuf pool information associated to RX queues. + +**--show-tm** +The show-tm parameter displays per port traffic manager settings and +current configuration. It also display statistics too. + +**--show-crypto** +The show-crypto parameter displays available cryptodev configurations, +settings and stats per node. + +**--show-mempool[=name]** +The show-mempool parameter display current allocation of all mempool +with debug information. Specifying the name allows display details for +specific mempool. For invalid|no mempool name, whole list is dump. + +**--show-ring[=name]** +The show-ring pararmeter display current allocation of all ring with +debug information. Specifying the name allows to display details for specific +ring. For invalid|no ring name, whole list is dump. + Limitations ----------- -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v5 9/9] doc/procinfo: add information for debug options 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 9/9] doc/procinfo: add information for debug options Vipin Varghese @ 2018-11-22 18:08 ` Mcnamara, John 2018-11-23 4:58 ` Varghese, Vipin 0 siblings, 1 reply; 69+ messages in thread From: Mcnamara, John @ 2018-11-22 18:08 UTC (permalink / raw) To: Varghese, Vipin, dev, Pattan, Reshma, thomas, stephen; +Cc: Patel, Amol > -----Original Message----- > From: Varghese, Vipin > Sent: Thursday, November 22, 2018 2:16 PM > To: dev@dpdk.org; Pattan, Reshma <reshma.pattan@intel.com>; > thomas@monjalon.net; stephen@networkplumber.org; Mcnamara, John > <john.mcnamara@intel.com> > Cc: Patel, Amol <amol.patel@intel.com>; Varghese, Vipin > <vipin.varghese@intel.com> > Subject: [PATCH v5 9/9] doc/procinfo: add information for debug options > > Document update for debug options and information for PMD instances like > port, traffic manager, crypto, mempool and ring instances. Acked-by: John McNamara <john.mcnamara@intel.com> ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v5 9/9] doc/procinfo: add information for debug options 2018-11-22 18:08 ` Mcnamara, John @ 2018-11-23 4:58 ` Varghese, Vipin 0 siblings, 0 replies; 69+ messages in thread From: Varghese, Vipin @ 2018-11-23 4:58 UTC (permalink / raw) To: Mcnamara, John, dev, Pattan, Reshma, thomas, stephen; +Cc: Patel, Amol Thanks John for ACK for documentation. > -----Original Message----- > From: Mcnamara, John > Sent: Thursday, November 22, 2018 11:39 PM > To: Varghese, Vipin <vipin.varghese@intel.com>; dev@dpdk.org; Pattan, > Reshma <reshma.pattan@intel.com>; thomas@monjalon.net; > stephen@networkplumber.org > Cc: Patel, Amol <amol.patel@intel.com> > Subject: RE: [PATCH v5 9/9] doc/procinfo: add information for debug options > > > > > -----Original Message----- > > From: Varghese, Vipin > > Sent: Thursday, November 22, 2018 2:16 PM > > To: dev@dpdk.org; Pattan, Reshma <reshma.pattan@intel.com>; > > thomas@monjalon.net; stephen@networkplumber.org; Mcnamara, John > > <john.mcnamara@intel.com> > > Cc: Patel, Amol <amol.patel@intel.com>; Varghese, Vipin > > <vipin.varghese@intel.com> > > Subject: [PATCH v5 9/9] doc/procinfo: add information for debug > > options > > > > Document update for debug options and information for PMD instances > > like port, traffic manager, crypto, mempool and ring instances. > > Acked-by: John McNamara <john.mcnamara@intel.com> ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool 2018-11-22 14:15 [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese ` (7 preceding siblings ...) 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 9/9] doc/procinfo: add information for debug options Vipin Varghese @ 2018-12-03 5:49 ` Vipin Varghese 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 1/9] app/procinfo: add usage for new debug Vipin Varghese ` (8 more replies) 8 siblings, 9 replies; 69+ messages in thread From: Vipin Varghese @ 2018-12-03 5:49 UTC (permalink / raw) To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese This patch adds new debug functions to existing proc-info tool. Motivation ========== DPDK proc-info tool is been widely used as secondary process to collect stats for any primary process. But these are limited to DPDK NIC ports and basic memory usage. Motivation ========== This patch tries to address the short coming by adding debug for port, traffic manager, crypto, ring and mempool. With these additional information in tool will be able to deliver helpful data to debug issues and performance variance. Status ====== With the following patch set debug data has been collected from customers using DPDK instances. Analysing the information helped to suggest the next debug steps and solutions for fixing the issues. Next Steps ========== - add event dev debug information. - enhance iter_mempool for INLINE crypto entries. - add debug for libraries like hash and acl. - explore debug possibility for ring and list. - add links and reference to 'how to guide' for 'debug and troubleshoot'. Patch set Information ===================== Patch includes set of 9 patches: * 0 : to introduce the debug function enhancement for proc-info * 1 : MACRO and help usage for new functions * 2 : string compare for new functions * 3 : invocation for the new prototypes * 4 : show port * 5 : show tm * 6 : show crypto * 7 : ring element debug * 8 : mempool element debug * 9 : iterate mempoool elements Vipin Varghese (9): app/procinfo: add usage for new debug app/procinfo: add compare for new options app/procinfo: add prototype for debug instances app/procinfo: add support for show port app/procinfo: add support for show tm app/procinfo: add support for show crypto app/procinfo: add support for debug ring app/procinfo: add support for show iter mempool doc/procinfo: add information for debug options app/proc-info/main.c | 681 ++++++++++++++++++++++++++++++++- app/proc-info/meson.build | 2 +- doc/guides/tools/proc_info.rst | 35 +- 3 files changed, 712 insertions(+), 6 deletions(-) -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v6 1/9] app/procinfo: add usage for new debug 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese @ 2018-12-03 5:49 ` Vipin Varghese 2018-12-12 14:14 ` Pattan, Reshma 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 2/9] app/procinfo: add compare for new options Vipin Varghese ` (7 subsequent siblings) 8 siblings, 2 replies; 69+ messages in thread From: Vipin Varghese @ 2018-12-03 5:49 UTC (permalink / raw) To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese Update the file with MACRO for stats border, usage text information and string comparision. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V6: - add mempool iterate elements option - Vipin Varghese V3: - change the usage details - Vipin Varghese V2: - change word dbg to show - Stephen Hemminger --- app/proc-info/main.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index c20effa4f..c034aad97 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -36,6 +36,10 @@ #define MAX_STRING_LEN 256 +#define STATS_BDR_FMT "========================================" +#define STATS_BDR_STR(w, s) printf("%.*s%s%.*s\n", w, \ + STATS_BDR_FMT, s, w, STATS_BDR_FMT) + /**< mask of enabled ports */ static uint32_t enabled_port_mask; /**< Enable stats. */ @@ -83,7 +87,13 @@ proc_info_usage(const char *prgname) " --stats-reset: to reset port statistics\n" " --xstats-reset: to reset port extended statistics\n" " --collectd-format: to print statistics to STDOUT in expected by collectd format\n" - " --host-id STRING: host id used to identify the system process is running on\n", + " --host-id STRING: host id used to identify the system process is running on\n" + " --show-port to display ports information\n" + " --show-tm to display traffic manager information for ports\n" + " --show-crypto to display crypto information\n" + " --show-ring[=name] to display ring information\n" + " --show-mempool[=name] to display mempool information\n" + " --iter-mempool=name to iterate mempool elements\n", prgname); } @@ -190,6 +200,12 @@ proc_info_parse_args(int argc, char **argv) {"collectd-format", 0, NULL, 0}, {"xstats-ids", 1, NULL, 1}, {"host-id", 0, NULL, 0}, + {"show-port", 0, NULL, 0}, + {"show-tm", 0, NULL, 0}, + {"show-crypto", 0, NULL, 0}, + {"show-ring", optional_argument, NULL, 0}, + {"show-mempool", optional_argument, NULL, 0}, + {"iter-mempool", required_argument, NULL, 0}, {NULL, 0, 0, 0} }; -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v6 1/9] app/procinfo: add usage for new debug 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 1/9] app/procinfo: add usage for new debug Vipin Varghese @ 2018-12-12 14:14 ` Pattan, Reshma 2018-12-12 15:06 ` Varghese, Vipin 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese 1 sibling, 1 reply; 69+ messages in thread From: Pattan, Reshma @ 2018-12-12 14:14 UTC (permalink / raw) To: Varghese, Vipin, Ananyev, Konstantin, stephen, dev, Mcnamara, John Cc: thomas, Byrne, Stephen1, Patel, Amol > -----Original Message----- > From: Varghese, Vipin > Sent: Monday, December 3, 2018 5:50 AM > Subject: [PATCH v6 1/9] app/procinfo: add usage for new debug > > @@ -83,7 +87,13 @@ proc_info_usage(const char *prgname) > " --stats-reset: to reset port statistics\n" > " --xstats-reset: to reset port extended statistics\n" > " --collectd-format: to print statistics to STDOUT in expected by > collectd format\n" > - " --host-id STRING: host id used to identify the system process > is running on\n", > + " --host-id STRING: host id used to identify the system process > is running on\n" > + " --show-port to display ports information\n" > + " --show-tm to display traffic manager information for ports\n" > + " --show-crypto to display crypto information\n" > + " --show-ring[=name] to display ring information\n" > + " --show-mempool[=name] to display mempool information\n" > + " --iter-mempool=name to iterate mempool elements\n", > prgname); > } > Style related comment, add ' :' between command token and token message, similar to host-id and other . Is iter-mempool option, only to iterate only or to display the elements also? Then update the help message. Thanks, Reshma ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v6 1/9] app/procinfo: add usage for new debug 2018-12-12 14:14 ` Pattan, Reshma @ 2018-12-12 15:06 ` Varghese, Vipin 0 siblings, 0 replies; 69+ messages in thread From: Varghese, Vipin @ 2018-12-12 15:06 UTC (permalink / raw) To: Pattan, Reshma, Ananyev, Konstantin, stephen, dev, Mcnamara, John Cc: thomas, Byrne, Stephen1, Patel, Amol > > @@ -83,7 +87,13 @@ proc_info_usage(const char *prgname) > > " --stats-reset: to reset port statistics\n" > > " --xstats-reset: to reset port extended statistics\n" > > " --collectd-format: to print statistics to STDOUT in expected > by > > collectd format\n" > > - " --host-id STRING: host id used to identify the system process > > is running on\n", > > + " --host-id STRING: host id used to identify the system process > > is running on\n" > > + " --show-port to display ports information\n" > > + " --show-tm to display traffic manager information for > ports\n" > > + " --show-crypto to display crypto information\n" > > + " --show-ring[=name] to display ring information\n" > > + " --show-mempool[=name] to display mempool > information\n" > > + " --iter-mempool=name to iterate mempool elements\n", > > prgname); > > } > > > > Style related comment, add ' :' between command token and token message, > similar to host-id and other . > > Is iter-mempool option, only to iterate only or to display the elements also? > Then update the help message. Thanks for sharing this thought, I am clear with the idea this does not convey the complete required message as explained 'Patch 9/9'. Hence I am ready to reword as "" --iter-mempool=name: to iterate mempool elements and display content\n " > > Thanks, > Reshma ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 1/9] app/procinfo: add usage for new debug Vipin Varghese 2018-12-12 14:14 ` Pattan, Reshma @ 2018-12-13 5:08 ` Vipin Varghese 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 1/9] app/procinfo: add usage for new debug Vipin Varghese ` (10 more replies) 1 sibling, 11 replies; 69+ messages in thread From: Vipin Varghese @ 2018-12-13 5:08 UTC (permalink / raw) To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese This patch adds new debug functions to existing proc-info tool. Motivation ========== DPDK proc-info tool is been widely used as secondary process to collect stats for any primary process. But these are limited to DPDK NIC ports and basic memory usage. Motivation ========== This patch tries to address the short coming by adding debug for port, traffic manager, crypto, ring and mempool. With these additional information in tool will be able to deliver helpful data to debug issues and performance variance. Status ====== With the following patch set debug data has been collected from customers using DPDK instances. Analysing the information helped to suggest the next debug steps and solutions for fixing the issues. Next Steps ========== - add event dev debug information. - enhance iter_mempool for INLINE crypto entries. - add debug for libraries like hash and acl. - explore debug possibility for ring and list. - add links and reference to 'how to guide' for 'debug and troubleshoot'. Patch set Information ===================== Patch includes set of 9 patches: * 0 : to introduce the debug function enhancement for proc-info * 1 : MACRO and help usage for new functions * 2 : string compare for new functions * 3 : invocation for the new prototypes * 4 : show port * 5 : show tm * 6 : show crypto * 7 : ring element debug * 8 : mempool element debug * 9 : iterate mempoool elements Vipin Varghese (9): app/procinfo: add usage for new debug app/procinfo: add compare for new options app/procinfo: add prototype for debug instances app/procinfo: add support for show port app/procinfo: add support for show tm app/procinfo: add support for show crypto app/procinfo: add support for debug ring app/procinfo: add support for show iter mempool doc/procinfo: add information for debug options app/proc-info/main.c | 681 ++++++++++++++++++++++++++++++++- app/proc-info/meson.build | 2 +- doc/guides/tools/proc_info.rst | 35 +- 3 files changed, 712 insertions(+), 6 deletions(-) -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v7 1/9] app/procinfo: add usage for new debug 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese @ 2018-12-13 5:08 ` Vipin Varghese 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 2/9] app/procinfo: add compare for new options Vipin Varghese ` (9 subsequent siblings) 10 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-12-13 5:08 UTC (permalink / raw) To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese Update the file with MACRO for stats border, usage text information and string comparision. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V7: - update usage text with token ":" - Reshma Pattan - reword usage for 'iter-mempool' - Reshma Pattan V6: - add mempool iterate elements option - Vipin Varghese V3: - change the usage details - Vipin Varghese V2: - change word dbg to show - Stephen Hemminger --- app/proc-info/main.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index c20effa4f..102778986 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -36,6 +36,10 @@ #define MAX_STRING_LEN 256 +#define STATS_BDR_FMT "========================================" +#define STATS_BDR_STR(w, s) printf("%.*s%s%.*s\n", w, \ + STATS_BDR_FMT, s, w, STATS_BDR_FMT) + /**< mask of enabled ports */ static uint32_t enabled_port_mask; /**< Enable stats. */ @@ -83,7 +87,13 @@ proc_info_usage(const char *prgname) " --stats-reset: to reset port statistics\n" " --xstats-reset: to reset port extended statistics\n" " --collectd-format: to print statistics to STDOUT in expected by collectd format\n" - " --host-id STRING: host id used to identify the system process is running on\n", + " --host-id STRING: host id used to identify the system process is running on\n" + " --show-port: to display ports information\n" + " --show-tm: to display traffic manager information for ports\n" + " --show-crypto: to display crypto information\n" + " --show-ring[=name]: to display ring information\n" + " --show-mempool[=name]: to display mempool information\n" + " --iter-mempool=name: to iterate mempool elements and display content\n", prgname); } @@ -190,6 +200,12 @@ proc_info_parse_args(int argc, char **argv) {"collectd-format", 0, NULL, 0}, {"xstats-ids", 1, NULL, 1}, {"host-id", 0, NULL, 0}, + {"show-port", 0, NULL, 0}, + {"show-tm", 0, NULL, 0}, + {"show-crypto", 0, NULL, 0}, + {"show-ring", optional_argument, NULL, 0}, + {"show-mempool", optional_argument, NULL, 0}, + {"iter-mempool", required_argument, NULL, 0}, {NULL, 0, 0, 0} }; -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v7 2/9] app/procinfo: add compare for new options 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 1/9] app/procinfo: add usage for new debug Vipin Varghese @ 2018-12-13 5:08 ` Vipin Varghese 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 3/9] app/procinfo: add prototype for debug instances Vipin Varghese ` (8 subsequent siblings) 10 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-12-13 5:08 UTC (permalink / raw) To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese Add code for new debug options to compare usage strings and set enable flag. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V6: - check for iter mempool - Vipin Varghese V3: - variables from debug to show - Vipin Varghese V2: - compare string from dbg to show - Stephen Hemminger --- app/proc-info/main.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 102778986..41c5bcea5 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -63,6 +63,21 @@ static uint32_t mem_info; /**< Enable displaying xstat name. */ static uint32_t enable_xstats_name; static char *xstats_name; +/**< Enable show port. */ +static uint32_t enable_shw_port; +/**< Enable show tm. */ +static uint32_t enable_shw_tm; +/**< Enable show crypto. */ +static uint32_t enable_shw_crypto; +/**< Enable show ring. */ +static uint32_t enable_shw_ring; +static char *ring_name; +/**< Enable show mempool. */ +static uint32_t enable_shw_mempool; +static char *mempool_name; +/**< Enable iter mempool. */ +static uint32_t enable_iter_mempool; +static char *mempool_iter_name; /**< Enable xstats by ids. */ #define MAX_NB_XSTATS_IDS 1024 @@ -249,6 +264,29 @@ proc_info_parse_args(int argc, char **argv) else if (!strncmp(long_option[option_index].name, "xstats-reset", MAX_LONG_OPT_SZ)) reset_xstats = 1; + else if (!strncmp(long_option[option_index].name, + "show-port", MAX_LONG_OPT_SZ)) + enable_shw_port = 1; + else if (!strncmp(long_option[option_index].name, + "show-tm", MAX_LONG_OPT_SZ)) + enable_shw_tm = 1; + else if (!strncmp(long_option[option_index].name, + "show-crypto", MAX_LONG_OPT_SZ)) + enable_shw_crypto = 1; + else if (!strncmp(long_option[option_index].name, + "show-ring", MAX_LONG_OPT_SZ)) { + enable_shw_ring = 1; + ring_name = optarg; + } else if (!strncmp(long_option[option_index].name, + "show-mempool", MAX_LONG_OPT_SZ)) { + enable_shw_mempool = 1; + mempool_name = optarg; + } else if (!strncmp(long_option[option_index].name, + "iter-mempool", MAX_LONG_OPT_SZ)) { + enable_iter_mempool = 1; + mempool_iter_name = optarg; + } + break; case 1: /* Print xstat single value given by name*/ -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v7 3/9] app/procinfo: add prototype for debug instances 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 1/9] app/procinfo: add usage for new debug Vipin Varghese 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 2/9] app/procinfo: add compare for new options Vipin Varghese @ 2018-12-13 5:08 ` Vipin Varghese 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 4/9] app/procinfo: add support for show port Vipin Varghese ` (7 subsequent siblings) 10 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-12-13 5:08 UTC (permalink / raw) To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese Add prototype function calls for the show functions. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V6: - add call to iter mempool - Vipin Varghese V3: - update function names from debug to show - Vipin Varghese V2: - removed if else ladder - Vipin Varghese --- app/proc-info/main.c | 50 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 41c5bcea5..c4e17668e 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -638,6 +638,42 @@ metrics_display(int port_id) rte_free(names); } +static void +show_port(void) +{ + printf(" port\n"); +} + +static void +show_tm(void) +{ + printf(" tm\n"); +} + +static void +show_crypto(void) +{ + printf(" crypto\n"); +} + +static void +show_ring(char *name) +{ + printf(" ring Name (%s)\n", name); +} + +static void +show_mempool(char *name) +{ + printf(" mempool Name (%s)\n", name); +} + +static void +iter_mempool(char *name) +{ + printf(" Iter elements in mempool (%s)\n", name); +} + int main(int argc, char **argv) { @@ -718,6 +754,20 @@ main(int argc, char **argv) if (enable_metrics) metrics_display(RTE_METRICS_GLOBAL); + /* show information for PMD */ + if (enable_shw_port) + show_port(); + if (enable_shw_tm) + show_tm(); + if (enable_shw_crypto) + show_crypto(); + if (enable_shw_ring) + show_ring(ring_name); + if (enable_shw_mempool) + show_mempool(mempool_name); + if (enable_iter_mempool) + iter_mempool(mempool_iter_name); + ret = rte_eal_cleanup(); if (ret) printf("Error from rte_eal_cleanup(), %d\n", ret); -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v7 4/9] app/procinfo: add support for show port 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese ` (2 preceding siblings ...) 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 3/9] app/procinfo: add prototype for debug instances Vipin Varghese @ 2018-12-13 5:08 ` Vipin Varghese 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 5/9] app/procinfo: add support for show tm Vipin Varghese ` (6 subsequent siblings) 10 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-12-13 5:08 UTC (permalink / raw) To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese Function show_port is used for displaying the port PMD information under under primary process. The information shows basic, per queue and security. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V5: - convert 100 to MAX_STRING_LEN - Reshma Pattan - RSS made for port - Reshma Pattan - update bdr_str to static - Stephen Hemminger - remove memset for link, dev_info, queue, stats - Stephen Hemminger V3: - fix meson build - Reshma Pattan - change 100 to MAX_STRING_LEN - Reshma Pattan - memset to struct elements - Reshma Pattan - printf tab space - Reshma Pattan - remove 'drop packet information' - Vipin Varghese V2: - redefine code format - Vipin Varghese --- app/proc-info/main.c | 117 +++++++++++++++++++++++++++++++++++++- app/proc-info/meson.build | 2 +- 2 files changed, 117 insertions(+), 2 deletions(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index c4e17668e..94dfdcd7f 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -29,6 +29,9 @@ #include <rte_branch_prediction.h> #include <rte_string_fns.h> #include <rte_metrics.h> +#include <rte_cycles.h> +#include <rte_security.h> +#include <rte_cryptodev.h> /* Maximum long option length for option parsing. */ #define MAX_LONG_OPT_SZ 64 @@ -84,6 +87,9 @@ static char *mempool_iter_name; static uint32_t nb_xstats_ids; static uint64_t xstats_ids[MAX_NB_XSTATS_IDS]; +/* border variable to hold for show */ +static char bdr_str[MAX_STRING_LEN]; + /**< display usage */ static void proc_info_usage(const char *prgname) @@ -641,7 +647,116 @@ metrics_display(int port_id) static void show_port(void) { - printf(" port\n"); + uint16_t i = 0; + int ret = 0, j, k; + + snprintf(bdr_str, MAX_STRING_LEN, " show - Port PMD %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + RTE_ETH_FOREACH_DEV(i) { + uint16_t mtu = 0; + struct rte_eth_link link; + struct rte_eth_dev_info dev_info; + struct rte_eth_rxq_info queue_info; + struct rte_eth_stats stats; + struct rte_eth_rss_conf rss_conf; + + memset(&rss_conf, 0, sizeof(rss_conf)); + + snprintf(bdr_str, MAX_STRING_LEN, " Port (%u)", i); + STATS_BDR_STR(5, bdr_str); + printf(" - generic config\n"); + + printf("\t -- Socket %d\n", rte_eth_dev_socket_id(i)); + rte_eth_link_get(i, &link); + printf("\t -- link speed %d duplex %d," + " auto neg %d status %d\n", + link.link_speed, + link.link_duplex, + link.link_autoneg, + link.link_status); + printf("\t -- promiscuous (%d)\n", + rte_eth_promiscuous_get(i)); + ret = rte_eth_dev_get_mtu(i, &mtu); + if (ret == 0) + printf("\t -- mtu (%d)\n", mtu); + + printf(" - queue\n"); + + rte_eth_dev_info_get(i, &dev_info); + + for (j = 0; j < dev_info.nb_rx_queues; j++) { + ret = rte_eth_rx_queue_info_get(i, j, &queue_info); + if (ret == 0) { + printf("\t -- queue %d rx scatter %d" + " descriptors %d offloads 0x%"PRIx64 + " mempool socket %d\n", + j, + queue_info.scattered_rx, + queue_info.nb_desc, + queue_info.conf.offloads, + queue_info.mp->socket_id); + + ret = rte_eth_stats_get(i, &stats); + if (ret == 0) { + printf("\t -- packet input %"PRIu64 + " output %"PRIu64"" + " error %"PRIu64"\n", + stats.q_ipackets[j], + stats.q_opackets[j], + stats.q_errors[j]); + } + } + } + + ret = rte_eth_dev_rss_hash_conf_get(i, &rss_conf); + if (ret == 0) { + if (rss_conf.rss_key) { + printf("\t -- RSS len %u key (hex):", + rss_conf.rss_key_len); + for (k = 0; k < rss_conf.rss_key_len; k++) + printf(" %x", rss_conf.rss_key[k]); + printf("\t -- hf 0x%"PRIx64"\n", + rss_conf.rss_hf); + } + } + + ret = rte_eth_stats_get(i, &stats); + if (ret == 0) { + printf("\t -- packet input %"PRIu64 + " output %"PRIu64"\n", + stats.ipackets, + stats.opackets); + printf("\t -- packet error input %"PRIu64 + " output %"PRIu64"\n", + stats.ierrors, + stats.oerrors); + printf("\t -- RX no mbuf %"PRIu64"\n", + stats.rx_nombuf); + } + + printf(" - cyrpto context\n"); + void *ptr_ctx = rte_eth_dev_get_sec_ctx(i); + printf("\t -- security context - %p\n", ptr_ctx); + + if (ptr_ctx) { + printf("\t -- size %u\n", + rte_security_session_get_size(ptr_ctx)); + const struct rte_security_capability *ptr_sec_cap = + rte_security_capabilities_get(ptr_ctx); + if (ptr_sec_cap) { + printf("\t -- action (0x%x), protocol (0x%x)," + " offload flags (0x%x)\n", + ptr_sec_cap->action, + ptr_sec_cap->protocol, + ptr_sec_cap->ol_flags); + printf("\t -- capabilities - oper type %x\n", + ptr_sec_cap->crypto_capabilities->op); + } + } + } + STATS_BDR_STR(50, ""); } static void diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build index a52b2ee4a..866b390d6 100644 --- a/app/proc-info/meson.build +++ b/app/proc-info/meson.build @@ -3,4 +3,4 @@ sources = files('main.c') allow_experimental_apis = true -deps += ['ethdev', 'metrics'] +deps += ['ethdev', 'metrics', 'security'] -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v7 5/9] app/procinfo: add support for show tm 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese ` (3 preceding siblings ...) 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 4/9] app/procinfo: add support for show port Vipin Varghese @ 2018-12-13 5:08 ` Vipin Varghese 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 6/9] app/procinfo: add support for show crypto Vipin Varghese ` (5 subsequent siblings) 10 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-12-13 5:08 UTC (permalink / raw) To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese Function show_tm is used for displaying the tm PMD under the primary process. This covers basic and per node|level details with stats. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V6: - replace or with logical or - Reshma Pathan & Konstantin Ananyev V3: - memset for struct elements - Vipin Varghese - code cleanup for TM - Vipin Varghese - fetch for leaf nodes if node exist - Jasvinder Singh - display MARCO to function - Reshma Pathan & Stephen Hemminger V2: - MACRO for display node|level - cap - Vipin Varghese --- app/proc-info/main.c | 276 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 275 insertions(+), 1 deletion(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 94dfdcd7f..6f2b757cf 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -32,6 +32,7 @@ #include <rte_cycles.h> #include <rte_security.h> #include <rte_cryptodev.h> +#include <rte_tm.h> /* Maximum long option length for option parsing. */ #define MAX_LONG_OPT_SZ 64 @@ -759,10 +760,283 @@ show_port(void) STATS_BDR_STR(50, ""); } +static void +display_nodecap_info(int is_leaf, struct rte_tm_node_capabilities *cap) +{ + if (cap == NULL) + return; + + if (!is_leaf) { + printf("\t -- nonleaf sched max:\n" + "\t\t + children (%u)\n" + "\t\t + sp priorities (%u)\n" + "\t\t + wfq children per group (%u)\n" + "\t\t + wfq groups (%u)\n" + "\t\t + wfq weight (%u)\n", + cap->nonleaf.sched_n_children_max, + cap->nonleaf.sched_sp_n_priorities_max, + cap->nonleaf.sched_wfq_n_children_per_group_max, + cap->nonleaf.sched_wfq_n_groups_max, + cap->nonleaf.sched_wfq_weight_max); + } else { + printf("\t -- leaf cman support:\n" + "\t\t + wred pkt mode (%d)\n" + "\t\t + wred byte mode (%d)\n" + "\t\t + head drop (%d)\n" + "\t\t + wred context private (%d)\n" + "\t\t + wred context shared (%u)\n", + cap->leaf.cman_wred_packet_mode_supported, + cap->leaf.cman_wred_byte_mode_supported, + cap->leaf.cman_head_drop_supported, + cap->leaf.cman_wred_context_private_supported, + cap->leaf.cman_wred_context_shared_n_max); + } +} + +static void +display_levelcap_info(int is_leaf, struct rte_tm_level_capabilities *cap) +{ + if (cap == NULL) + return; + + if (!is_leaf) { + printf("\t -- shaper private: (%d) dual rate (%d)\n", + cap->nonleaf.shaper_private_supported, + cap->nonleaf.shaper_private_dual_rate_supported); + printf("\t -- shaper share: (%u)\n", + cap->nonleaf.shaper_shared_n_max); + printf("\t -- non leaf sched MAX:\n" + "\t\t + children (%u)\n" + "\t\t + sp (%u)\n" + "\t\t + wfq children per group (%u)\n" + "\t\t + wfq groups (%u)\n" + "\t\t + wfq weight (%u)\n", + cap->nonleaf.sched_n_children_max, + cap->nonleaf.sched_sp_n_priorities_max, + cap->nonleaf.sched_wfq_n_children_per_group_max, + cap->nonleaf.sched_wfq_n_groups_max, + cap->nonleaf.sched_wfq_weight_max); + } else { + printf("\t -- shaper private: (%d) dual rate (%d)\n", + cap->leaf.shaper_private_supported, + cap->leaf.shaper_private_dual_rate_supported); + printf("\t -- shaper share: (%u)\n", + cap->leaf.shaper_shared_n_max); + printf(" -- leaf cman support:\n" + "\t\t + wred pkt mode (%d)\n" + "\t\t + wred byte mode (%d)\n" + "\t\t + head drop (%d)\n" + "\t\t + wred context private (%d)\n" + "\t\t + wred context shared (%u)\n", + cap->leaf.cman_wred_packet_mode_supported, + cap->leaf.cman_wred_byte_mode_supported, + cap->leaf.cman_head_drop_supported, + cap->leaf.cman_wred_context_private_supported, + cap->leaf.cman_wred_context_shared_n_max); + } +} + static void show_tm(void) { - printf(" tm\n"); + int ret = 0, check_for_leaf = 0, is_leaf = 0; + unsigned int j, k; + uint16_t i = 0; + + snprintf(bdr_str, MAX_STRING_LEN, " show - TM PMD %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + RTE_ETH_FOREACH_DEV(i) { + struct rte_eth_dev_info dev_info; + struct rte_tm_capabilities cap; + struct rte_tm_error error; + struct rte_tm_node_capabilities capnode; + struct rte_tm_level_capabilities caplevel; + uint32_t n_leaf_nodes = 0; + + memset(&dev_info, 0, sizeof(dev_info)); + memset(&cap, 0, sizeof(cap)); + memset(&error, 0, sizeof(error)); + + rte_eth_dev_info_get(i, &dev_info); + printf(" - Generic for port (%u)\n" + "\t -- driver name %s\n" + "\t -- max vf (%u)\n" + "\t -- max tx queues (%u)\n" + "\t -- number of tx queues (%u)\n", + i, + dev_info.driver_name, + dev_info.max_vfs, + dev_info.max_tx_queues, + dev_info.nb_tx_queues); + + ret = rte_tm_capabilities_get(i, &cap, &error); + if (ret) + continue; + + printf(" - MAX: nodes (%u) levels (%u) children (%u)\n", + cap.n_nodes_max, + cap.n_levels_max, + cap.sched_n_children_max); + + printf(" - identical nodes: non leaf (%d) leaf (%d)\n", + cap.non_leaf_nodes_identical, + cap.leaf_nodes_identical); + + printf(" - Shaper MAX:\n" + "\t -- total (%u)\n" + "\t -- private (%u) private dual (%d)\n" + "\t -- shared (%u) shared dual (%u)\n", + cap.shaper_n_max, + cap.shaper_private_n_max, + cap.shaper_private_dual_rate_n_max, + cap.shaper_shared_n_max, + cap.shaper_shared_dual_rate_n_max); + + printf(" - mark support:\n"); + printf("\t -- vlan dei: GREEN (%d) YELLOW (%d) RED (%d)\n", + cap.mark_vlan_dei_supported[RTE_TM_GREEN], + cap.mark_vlan_dei_supported[RTE_TM_YELLOW], + cap.mark_vlan_dei_supported[RTE_TM_RED]); + printf("\t -- ip ecn tcp: GREEN (%d) YELLOW (%d) RED (%d)\n", + cap.mark_ip_ecn_tcp_supported[RTE_TM_GREEN], + cap.mark_ip_ecn_tcp_supported[RTE_TM_YELLOW], + cap.mark_ip_ecn_tcp_supported[RTE_TM_RED]); + printf("\t -- ip ecn sctp: GREEN (%d) YELLOW (%d) RED (%d)\n", + cap.mark_ip_ecn_sctp_supported[RTE_TM_GREEN], + cap.mark_ip_ecn_sctp_supported[RTE_TM_YELLOW], + cap.mark_ip_ecn_sctp_supported[RTE_TM_RED]); + printf("\t -- ip dscp: GREEN (%d) YELLOW (%d) RED (%d)\n", + cap.mark_ip_dscp_supported[RTE_TM_GREEN], + cap.mark_ip_dscp_supported[RTE_TM_YELLOW], + cap.mark_ip_dscp_supported[RTE_TM_RED]); + + printf(" - mask stats (0x%"PRIx64")" + " dynamic update (0x%"PRIx64")\n", + cap.stats_mask, + cap.dynamic_update_mask); + + printf(" - sched MAX:\n" + "\t -- total (%u)\n" + "\t -- sp levels (%u)\n" + "\t -- wfq children per group (%u)\n" + "\t -- wfq groups (%u)\n" + "\t -- wfq weight (%u)\n", + cap.sched_sp_n_priorities_max, + cap.sched_sp_n_priorities_max, + cap.sched_wfq_n_children_per_group_max, + cap.sched_wfq_n_groups_max, + cap.sched_wfq_weight_max); + + printf(" - CMAN support:\n" + "\t -- WRED mode: pkt (%d) byte (%d)\n" + "\t -- head drop (%d)\n", + cap.cman_wred_packet_mode_supported, + cap.cman_wred_byte_mode_supported, + cap.cman_head_drop_supported); + printf("\t -- MAX WRED CONTEXT:" + " total (%u) private (%u) shared (%u)\n", + cap.cman_wred_context_n_max, + cap.cman_wred_context_private_n_max, + cap.cman_wred_context_shared_n_max); + + for (j = 0; j < cap.n_nodes_max; j++) { + memset(&capnode, 0, sizeof(capnode)); + ret = rte_tm_node_capabilities_get(i, j, + &capnode, &error); + if (ret) + continue; + + check_for_leaf = 1; + + printf(" NODE %u\n", j); + printf("\t - shaper private: (%d) dual rate (%d)\n", + capnode.shaper_private_supported, + capnode.shaper_private_dual_rate_supported); + printf("\t - shaper shared max: (%u)\n", + capnode.shaper_shared_n_max); + printf("\t - stats mask %"PRIx64"\n", + capnode.stats_mask); + + ret = rte_tm_node_type_get(i, j, &is_leaf, &error); + if (ret) + continue; + + display_nodecap_info(is_leaf, &capnode); + } + + for (j = 0; j < cap.n_levels_max; j++) { + memset(&caplevel, 0, sizeof(caplevel)); + ret = rte_tm_level_capabilities_get(i, j, + &caplevel, &error); + if (ret) + continue; + + printf(" - Level %u\n", j); + printf("\t -- node MAX: %u non leaf %u leaf %u\n", + caplevel.n_nodes_max, + caplevel.n_nodes_nonleaf_max, + caplevel.n_nodes_leaf_max); + printf("\t -- indetical: non leaf %u leaf %u\n", + caplevel.non_leaf_nodes_identical, + caplevel.leaf_nodes_identical); + + for (k = 0; k < caplevel.n_nodes_max; k++) { + ret = rte_tm_node_type_get(i, k, + &is_leaf, &error); + if (ret) + continue; + + display_levelcap_info(is_leaf, &caplevel); + } + } + + if (check_for_leaf) { + ret = rte_tm_get_number_of_leaf_nodes(i, + &n_leaf_nodes, &error); + if (ret == 0) + printf(" - leaf nodes (%u)\n", n_leaf_nodes); + } + + for (j = 0; j < n_leaf_nodes; j++) { + struct rte_tm_node_stats stats; + memset(&stats, 0, sizeof(stats)); + + ret = rte_tm_node_stats_read(i, j, + &stats, &cap.stats_mask, 0, &error); + if (ret) + continue; + + printf(" - STATS for node (%u)\n", j); + printf(" -- pkts (%"PRIu64") bytes (%"PRIu64")\n", + stats.n_pkts, stats.n_bytes); + + ret = rte_tm_node_type_get(i, j, &is_leaf, &error); + if (ret || (!is_leaf)) + continue; + + printf(" -- leaf queued:" + " pkts (%"PRIu64") bytes (%"PRIu64")\n", + stats.leaf.n_pkts_queued, + stats.leaf.n_bytes_queued); + printf(" - dropped:\n" + "\t -- GREEN:" + " pkts (%"PRIu64") bytes (%"PRIu64")\n" + "\t -- YELLOW:" + " pkts (%"PRIu64") bytes (%"PRIu64")\n" + "\t -- RED:" + " pkts (%"PRIu64") bytes (%"PRIu64")\n", + stats.leaf.n_pkts_dropped[RTE_TM_GREEN], + stats.leaf.n_bytes_dropped[RTE_TM_GREEN], + stats.leaf.n_pkts_dropped[RTE_TM_YELLOW], + stats.leaf.n_bytes_dropped[RTE_TM_YELLOW], + stats.leaf.n_pkts_dropped[RTE_TM_RED], + stats.leaf.n_bytes_dropped[RTE_TM_RED]); + } + } + + STATS_BDR_STR(50, ""); } static void -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v7 6/9] app/procinfo: add support for show crypto 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese ` (4 preceding siblings ...) 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 5/9] app/procinfo: add support for show tm Vipin Varghese @ 2018-12-13 5:08 ` Vipin Varghese 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 7/9] app/procinfo: add support for debug ring Vipin Varghese ` (4 subsequent siblings) 10 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-12-13 5:08 UTC (permalink / raw) To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese Function show_crypto is used for displaying the crypto PMD under the primary process. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- v4: - add space to compare - Vipin Varghese V3: - replace MACRO to function - Reshma Pathan & Stephen Hemminger - add memset for struct elements - Reshma Pathan - change display formating of flags - Vipin Varghese - use MACRO for string - Vipin Varghese --- app/proc-info/main.c | 80 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 6f2b757cf..626d44f71 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -1039,10 +1039,88 @@ show_tm(void) STATS_BDR_STR(50, ""); } +static void +display_crypto_feature_info(uint64_t x) +{ + if (x == 0) + return; + + printf("\t -- feature flags\n"); + printf("\t\t + symmetric (%c), asymmetric (%c)\n" + "\t\t + symmetric operation chaining (%c)\n", + (x & RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING) ? 'y' : 'n'); + printf("\t\t + CPU: SSE (%c), AVX (%c), AVX2 (%c), AVX512 (%c)\n", + (x & RTE_CRYPTODEV_FF_CPU_SSE) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_CPU_AVX) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_CPU_AVX2) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_CPU_AVX512) ? 'y' : 'n'); + printf("\t\t + AESNI: CPU (%c), HW (%c)\n", + (x & RTE_CRYPTODEV_FF_CPU_AESNI) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_HW_ACCELERATED) ? 'y' : 'n'); + printf("\t\t + INLINE (%c)\n", + (x & RTE_CRYPTODEV_FF_SECURITY) ? 'y' : 'n'); + printf("\t\t + ARM: NEON (%c), CE (%c)\n", + (x & RTE_CRYPTODEV_FF_CPU_NEON) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_CPU_ARM_CE) ? 'y' : 'n'); + printf("\t -- buffer offload\n"); + printf("\t\t + IN_PLACE_SGL (%c)\n", + (x & RTE_CRYPTODEV_FF_IN_PLACE_SGL) ? 'y' : 'n'); + printf("\t\t + OOP_SGL_IN_SGL_OUT (%c)\n", + (x & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT) ? 'y' : 'n'); + printf("\t\t + OOP_SGL_IN_LB_OUT (%c)\n", + (x & RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT) ? 'y' : 'n'); + printf("\t\t + OOP_LB_IN_SGL_OUT (%c)\n", + (x & RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT) ? 'y' : 'n'); + printf("\t\t + OOP_LB_IN_LB_OUT (%c)\n", + (x & RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT) ? 'y' : 'n'); +} + static void show_crypto(void) { - printf(" crypto\n"); + uint8_t crypto_dev_count = rte_cryptodev_count(), i; + + snprintf(bdr_str, MAX_STRING_LEN, " show - CRYPTO PMD %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + for (i = 0; i < crypto_dev_count; i++) { + struct rte_cryptodev_info dev_info; + struct rte_cryptodev_stats stats; + + memset(&dev_info, 0, sizeof(dev_info)); + rte_cryptodev_info_get(i, &dev_info); + + printf(" - device (%u)\n", i); + printf("\t -- name (%s)\n" + "\t -- driver (%s)\n" + "\t -- id (%u) on socket (%d)\n" + "\t -- queue pairs (%d)\n", + rte_cryptodev_name_get(i), + dev_info.driver_name, + dev_info.driver_id, + dev_info.device->numa_node, + rte_cryptodev_queue_pair_count(i)); + + display_crypto_feature_info(dev_info.feature_flags); + + printf("\t -- stats\n"); + memset(&stats, 0, sizeof(0)); + if (rte_cryptodev_stats_get(i, &stats) == 0) { + printf("\t\t + enqueue count (%"PRIu64")" + " error (%"PRIu64")\n", + stats.enqueued_count, + stats.enqueue_err_count); + printf("\t\t + dequeue count (%"PRIu64")" + " error (%"PRIu64")\n", + stats.dequeued_count, + stats.dequeue_err_count); + } + } + + STATS_BDR_STR(50, ""); } static void -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v7 7/9] app/procinfo: add support for debug ring 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese ` (5 preceding siblings ...) 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 6/9] app/procinfo: add support for show crypto Vipin Varghese @ 2018-12-13 5:08 ` Vipin Varghese 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 8/9] app/procinfo: add support for show iter mempool Vipin Varghese ` (3 subsequent siblings) 10 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-12-13 5:08 UTC (permalink / raw) To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese Function show_ring is used for displaying the RING of the primary process. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V3: - replace space to tab in printf - Reshma Pathan - change ring display information - Vipin Varghese --- app/proc-info/main.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 626d44f71..d9677959c 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -1126,7 +1126,39 @@ show_crypto(void) static void show_ring(char *name) { - printf(" ring Name (%s)\n", name); + snprintf(bdr_str, MAX_STRING_LEN, " show - RING %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + if (name != NULL) { + struct rte_ring *ptr = rte_ring_lookup(name); + if (ptr != NULL) { + printf(" - Name (%s) on socket (%d)\n" + " - flags:\n" + "\t -- Single Producer Enqueue (%u)\n" + "\t -- Single Consmer Dequeue (%u)\n", + ptr->name, + ptr->memzone->socket_id, + ptr->flags & RING_F_SP_ENQ, + ptr->flags & RING_F_SC_DEQ); + printf(" - size (%u) mask (0x%x) capacity (%u)\n", + ptr->size, + ptr->mask, + ptr->capacity); + printf(" - count (%u) free count (%u)\n", + rte_ring_count(ptr), + rte_ring_free_count(ptr)); + printf(" - full (%d) empty (%d)\n", + rte_ring_full(ptr), + rte_ring_empty(ptr)); + + STATS_BDR_STR(50, ""); + return; + } + } + + rte_ring_list_dump(stdout); + STATS_BDR_STR(50, ""); } static void -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v7 8/9] app/procinfo: add support for show iter mempool 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese ` (6 preceding siblings ...) 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 7/9] app/procinfo: add support for debug ring Vipin Varghese @ 2018-12-13 5:08 ` Vipin Varghese 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 9/9] doc/procinfo: add information for debug options Vipin Varghese ` (2 subsequent siblings) 10 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-12-13 5:08 UTC (permalink / raw) To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese Function show_mempool is used for displaying valid MEMPOOL. Function iter_mempool is used for iterating mempool elements for a mempool for max of 256 bytes. In case of show_mempool for invalid name, whole list is dump. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V6: - split iter mempool - Vipin Varghese V5: - update ret to uint32_t - Reshma Pattan v4: - add spacing for flag compare - Vipin Varghese V3: - add avail and in use - Vipin Varghese - add flag split - Vipin Varghese --- app/proc-info/main.c | 80 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 78 insertions(+), 2 deletions(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index d9677959c..6dfd01d6e 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -33,6 +33,7 @@ #include <rte_security.h> #include <rte_cryptodev.h> #include <rte_tm.h> +#include <rte_hexdump.h> /* Maximum long option length for option parsing. */ #define MAX_LONG_OPT_SZ 64 @@ -1161,16 +1162,91 @@ show_ring(char *name) STATS_BDR_STR(50, ""); } +static void +mempool_itr_obj(struct rte_mempool *mp, + void *opaque, void *obj, + unsigned int obj_idx) +{ + printf(" - obj_idx %u opaque %p obj %p\n", + obj_idx, opaque, obj); + + if (obj) + rte_hexdump(stdout, " Obj Content", + obj, (mp->elt_size > 256)?256:mp->elt_size); +} + static void show_mempool(char *name) { - printf(" mempool Name (%s)\n", name); + uint64_t flags = 0; + + snprintf(bdr_str, MAX_STRING_LEN, " show - MEMPOOL %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + if (name != NULL) { + struct rte_mempool *ptr = rte_mempool_lookup(name); + if (ptr != NULL) { + flags = ptr->flags; + printf(" - Name: %s on socket %d\n" + " - flags:\n" + "\t -- No spread (%c)\n" + "\t -- No cache align (%c)\n" + "\t -- SP put (%c), SC get (%c)\n" + "\t -- Pool created (%c)\n" + "\t -- No IOVA config (%c)\n", + ptr->name, + ptr->socket_id, + (flags & MEMPOOL_F_NO_SPREAD) ? 'y' : 'n', + (flags & MEMPOOL_F_NO_CACHE_ALIGN) ? 'y' : 'n', + (flags & MEMPOOL_F_SP_PUT) ? 'y' : 'n', + (flags & MEMPOOL_F_SC_GET) ? 'y' : 'n', + (flags & MEMPOOL_F_POOL_CREATED) ? 'y' : 'n', + (flags & MEMPOOL_F_NO_IOVA_CONTIG) ? 'y' : 'n'); + printf(" - Size %u Cache %u element %u\n" + " - header %u trailer %u\n" + " - private data size %u\n", + ptr->size, + ptr->cache_size, + ptr->elt_size, + ptr->header_size, + ptr->trailer_size, + ptr->private_data_size); + printf(" - memezone - socket %d\n", + ptr->mz->socket_id); + printf(" - Count: avail (%u), in use (%u)\n", + rte_mempool_avail_count(ptr), + rte_mempool_in_use_count(ptr)); + + STATS_BDR_STR(50, ""); + return; + } + } + + rte_mempool_list_dump(stdout); + STATS_BDR_STR(50, ""); } static void iter_mempool(char *name) { - printf(" Iter elements in mempool (%s)\n", name); + snprintf(bdr_str, MAX_STRING_LEN, " iter - MEMPOOL %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + if (name != NULL) { + struct rte_mempool *ptr = rte_mempool_lookup(name); + if (ptr != NULL) { + /* iterate each object */ + uint32_t ret = rte_mempool_obj_iter(ptr, + mempool_itr_obj, NULL); + printf(" - iterated %u objects\n", ret); + STATS_BDR_STR(50, ""); + return; + } + } + + STATS_BDR_STR(50, ""); } int -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v7 9/9] doc/procinfo: add information for debug options 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese ` (7 preceding siblings ...) 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 8/9] app/procinfo: add support for show iter mempool Vipin Varghese @ 2018-12-13 5:08 ` Vipin Varghese 2018-12-13 14:42 ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Pattan, Reshma 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance " Vipin Varghese 10 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-12-13 5:08 UTC (permalink / raw) To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese Document update for debug options and information for PMD instances like port, traffic manager, crypto, mempool and ring instances. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> Acked-by: John McNamara <john.mcnamara@intel.com> --- V6: - add ack for v5 - John Mcnamara - update entry for mempool iter - Vipin Varghese V3: - update document from dbg to show - Vipin Varghese V2: - update word style for content - Vipin Varghese --- doc/guides/tools/proc_info.rst | 35 ++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst index d5b5ed6a6..ee0bd99bb 100644 --- a/doc/guides/tools/proc_info.rst +++ b/doc/guides/tools/proc_info.rst @@ -6,9 +6,9 @@ dpdk-procinfo Application The dpdk-procinfo application is a Data Plane Development Kit (DPDK) application that runs as a DPDK secondary process and is capable of retrieving port -statistics, resetting port statistics and printing DPDK memory information. -This application extends the original functionality that was supported by -dump_cfg. +statistics, resetting port statistics and printing DPDK memory information and +debug information for port|tm|crypto|ring|mempool. This application extends the +original functionality that was supported by dump_cfg. Running the Application ----------------------- @@ -17,7 +17,8 @@ The application has a number of command line options: .. code-block:: console ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats | - --stats-reset | --xstats-reset] + --stats-reset | --xstats-reset | --show-port | --show-tm | --show-crypto | + --show-mempool[=name] | --show-ring[=name] | --iter-mempool=name] Parameters ~~~~~~~~~~ @@ -41,6 +42,32 @@ If no port mask is specified xstats are reset for all DPDK ports. **-m**: Print DPDK memory information. +**--show-port** +The show-port parameter displays port level various configuration and +mbuf pool information associated to RX queues. + +**--show-tm** +The show-tm parameter displays per port traffic manager settings and +current configuration. It also display statistics too. + +**--show-crypto** +The show-crypto parameter displays available cryptodev configurations, +settings and stats per node. + +**--show-mempool[=name]** +The show-mempool parameter display current allocation of all mempool +with debug information. Specifying the name allows display details for +specific mempool. For invalid or no mempool name, whole list is dump. + +**--show-ring[=name]** +The show-ring pararmeter display current allocation of all ring with +debug information. Specifying the name allows to display details for specific +ring. For invalid or no ring name, whole list is dump. + +**--iter-mempool=name** +The iter-mempool parameter iterates and displays mempool elements specified +by name. For invalid or no mempool name no elements are displayed. + Limitations ----------- -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese ` (8 preceding siblings ...) 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 9/9] doc/procinfo: add information for debug options Vipin Varghese @ 2018-12-13 14:42 ` Pattan, Reshma 2018-12-13 16:21 ` Varghese, Vipin 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance " Vipin Varghese 10 siblings, 1 reply; 69+ messages in thread From: Pattan, Reshma @ 2018-12-13 14:42 UTC (permalink / raw) To: Varghese, Vipin, Ananyev, Konstantin, stephen, dev, Mcnamara, John Cc: thomas, Byrne, Stephen1, Patel, Amol Hi > -----Original Message----- > From: Varghese, Vipin > Sent: Thursday, December 13, 2018 5:09 AM > To: Ananyev, Konstantin <konstantin.ananyev@intel.com>; > stephen@networkplumber.org; Pattan, Reshma <reshma.pattan@intel.com>; > dev@dpdk.org; Mcnamara, John <john.mcnamara@intel.com> > Cc: thomas@monjalon.net; Byrne, Stephen1 <stephen1.byrne@intel.com>; > Patel, Amol <amol.patel@intel.com>; Varghese, Vipin > <vipin.varghese@intel.com> > Subject: [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool > > This patch adds new debug functions to existing proc-info tool. > > Motivation > ========== > > DPDK proc-info tool is been widely used as secondary process to collect stats for > any primary process. But these are limited to DPDK NIC ports and basic memory > usage. > > Motivation > ========== > > This patch tries to address the short coming by adding debug for port, traffic > manager, crypto, ring and mempool. With these additional information in tool > will be able to deliver helpful data to debug issues and performance variance. > > Status > ====== > > With the following patch set debug data has been collected from customers > using DPDK instances. Analysing the information helped to suggest the next > debug steps and solutions for fixing the issues. > > Next Steps > ========== > > - add event dev debug information. > - enhance iter_mempool for INLINE crypto entries. > - add debug for libraries like hash and acl. > - explore debug possibility for ring and list. > - add links and reference to 'how to guide' for 'debug and troubleshoot'. > > Patch set Information > ===================== > > Patch includes set of 9 patches: > * 0 : to introduce the debug function enhancement for proc-info > * 1 : MACRO and help usage for new functions > * 2 : string compare for new functions > * 3 : invocation for the new prototypes > * 4 : show port > * 5 : show tm > * 6 : show crypto > * 7 : ring element debug > * 8 : mempool element debug > * 9 : iterate mempoool elements > Small nits 9th patch in this set is doc. So above info need to be corrected. if you are addressing my earlier comment of separating out mempool element iteration changes in to separate new patch 9/10 .Please keep my ack in next version Reviewed-by: Reshma Pattan <reshma.pattan@intel.com> Acked-by: Reshma Pattan <reshma.pattan@intel.com> ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool 2018-12-13 14:42 ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Pattan, Reshma @ 2018-12-13 16:21 ` Varghese, Vipin 2018-12-22 21:02 ` Thomas Monjalon 0 siblings, 1 reply; 69+ messages in thread From: Varghese, Vipin @ 2018-12-13 16:21 UTC (permalink / raw) To: Pattan, Reshma, Ananyev, Konstantin, stephen, dev, Mcnamara, John Cc: thomas, Byrne, Stephen1, Patel, Amol HI Reshma > -----Original Message----- > From: Pattan, Reshma > Sent: Thursday, December 13, 2018 8:13 PM > To: Varghese, Vipin <vipin.varghese@intel.com>; Ananyev, Konstantin > <konstantin.ananyev@intel.com>; stephen@networkplumber.org; > dev@dpdk.org; Mcnamara, John <john.mcnamara@intel.com> > Cc: thomas@monjalon.net; Byrne, Stephen1 <stephen1.byrne@intel.com>; > Patel, Amol <amol.patel@intel.com> > Subject: RE: [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool > > Hi > > > -----Original Message----- > > From: Varghese, Vipin > > Sent: Thursday, December 13, 2018 5:09 AM > > To: Ananyev, Konstantin <konstantin.ananyev@intel.com>; > > stephen@networkplumber.org; Pattan, Reshma > <reshma.pattan@intel.com>; > > dev@dpdk.org; Mcnamara, John <john.mcnamara@intel.com> > > Cc: thomas@monjalon.net; Byrne, Stephen1 <stephen1.byrne@intel.com>; > > Patel, Amol <amol.patel@intel.com>; Varghese, Vipin > > <vipin.varghese@intel.com> > > Subject: [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool > > > > This patch adds new debug functions to existing proc-info tool. > > > > Motivation > > ========== > > > > DPDK proc-info tool is been widely used as secondary process to > > collect stats for any primary process. But these are limited to DPDK > > NIC ports and basic memory usage. > > > > Motivation > > ========== > > > > This patch tries to address the short coming by adding debug for port, > > traffic manager, crypto, ring and mempool. With these additional > > information in tool will be able to deliver helpful data to debug issues and > performance variance. > > > > Status > > ====== > > > > With the following patch set debug data has been collected from > > customers using DPDK instances. Analysing the information helped to > > suggest the next debug steps and solutions for fixing the issues. > > > > Next Steps > > ========== > > > > - add event dev debug information. > > - enhance iter_mempool for INLINE crypto entries. > > - add debug for libraries like hash and acl. > > - explore debug possibility for ring and list. > > - add links and reference to 'how to guide' for 'debug and troubleshoot'. > > > > Patch set Information > > ===================== > > > > Patch includes set of 9 patches: > > * 0 : to introduce the debug function enhancement for proc-info > > * 1 : MACRO and help usage for new functions > > * 2 : string compare for new functions > > * 3 : invocation for the new prototypes > > * 4 : show port > > * 5 : show tm > > * 6 : show crypto > > * 7 : ring element debug > > * 8 : mempool element debug > > * 9 : iterate mempoool elements > > > > Small nits > 9th patch in this set is doc. So above info need to be corrected. > if you are addressing my earlier comment of separating out mempool element > iteration changes in to separate new patch 9/10 .Please keep my ack in next > version Thanks for pointing this out, Like updated in email and chat I am not planning to split it. Hence no version 8. > > Reviewed-by: Reshma Pattan <reshma.pattan@intel.com> > Acked-by: Reshma Pattan <reshma.pattan@intel.com> > > > > > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool 2018-12-13 16:21 ` Varghese, Vipin @ 2018-12-22 21:02 ` Thomas Monjalon 2018-12-26 5:21 ` Varghese, Vipin 0 siblings, 1 reply; 69+ messages in thread From: Thomas Monjalon @ 2018-12-22 21:02 UTC (permalink / raw) To: Varghese, Vipin Cc: dev, Pattan, Reshma, Ananyev, Konstantin, stephen, Mcnamara, John, Byrne, Stephen1, Patel, Amol 13/12/2018 17:21, Varghese, Vipin: > HI Reshma > > From: Pattan, Reshma > > From: Varghese, Vipin > > > > > > This patch adds new debug functions to existing proc-info tool. > > > > > > Motivation > > > ========== > > > > > > DPDK proc-info tool is been widely used as secondary process to > > > collect stats for any primary process. But these are limited to DPDK > > > NIC ports and basic memory usage. > > > > > > Motivation > > > ========== > > > > > > This patch tries to address the short coming by adding debug for port, > > > traffic manager, crypto, ring and mempool. With these additional > > > information in tool will be able to deliver helpful data to debug issues and > > performance variance. > > > > > > Status > > > ====== > > > > > > With the following patch set debug data has been collected from > > > customers using DPDK instances. Analysing the information helped to > > > suggest the next debug steps and solutions for fixing the issues. > > > > > > Next Steps > > > ========== > > > > > > - add event dev debug information. > > > - enhance iter_mempool for INLINE crypto entries. > > > - add debug for libraries like hash and acl. > > > - explore debug possibility for ring and list. > > > - add links and reference to 'how to guide' for 'debug and troubleshoot'. > > > > > > Patch set Information > > > ===================== > > > > > > Patch includes set of 9 patches: > > > * 0 : to introduce the debug function enhancement for proc-info > > > * 1 : MACRO and help usage for new functions > > > * 2 : string compare for new functions > > > * 3 : invocation for the new prototypes > > > * 4 : show port > > > * 5 : show tm > > > * 6 : show crypto > > > * 7 : ring element debug > > > * 8 : mempool element debug > > > * 9 : iterate mempoool elements > > > > > > > Small nits > > 9th patch in this set is doc. So above info need to be corrected. > > if you are addressing my earlier comment of separating out mempool element > > iteration changes in to separate new patch 9/10 .Please keep my ack in next > > version > > Thanks for pointing this out, Like updated in email and chat I am not planning to split it. Hence no version 8. So, no ack and no merge? Looking at the first patches + doc patch, the split is not meaningful. You should merge doc and option parsing in the related patches. For instance, parsing and doc of "tm" option should be in the "tm" patch. ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool 2018-12-22 21:02 ` Thomas Monjalon @ 2018-12-26 5:21 ` Varghese, Vipin 2018-12-26 21:33 ` Thomas Monjalon 0 siblings, 1 reply; 69+ messages in thread From: Varghese, Vipin @ 2018-12-26 5:21 UTC (permalink / raw) To: Thomas Monjalon, Pattan, Reshma Cc: dev, Ananyev, Konstantin, stephen, Mcnamara, John, Byrne, Stephen1, Patel, Amol HI Thomas, Snipped > > > Small nits > > > 9th patch in this set is doc. So above info need to be corrected. > > > if you are addressing my earlier comment of separating out mempool > > > element iteration changes in to separate new patch 9/10 .Please keep > > > my ack in next version > > > > Thanks for pointing this out, Like updated in email and chat I am not > planning to split it. Hence no version 8. > > So, no ack and no merge? > > Looking at the first patches + doc patch, the split is not meaningful. > You should merge doc and option parsing in the related patches. > For instance, parsing and doc of "tm" option should be in the "tm" patch. > > I did not follow you request. Are you stating, for each functionality I should be updating document rather than 1 document update after adding the new functions? If former is true I am not able to find such reasoning stated in guideline or documentation or from the maintainer. Thanks Vipin Varghese ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool 2018-12-26 5:21 ` Varghese, Vipin @ 2018-12-26 21:33 ` Thomas Monjalon 2018-12-27 2:46 ` Varghese, Vipin 0 siblings, 1 reply; 69+ messages in thread From: Thomas Monjalon @ 2018-12-26 21:33 UTC (permalink / raw) To: Varghese, Vipin Cc: Pattan, Reshma, dev, Ananyev, Konstantin, stephen, Mcnamara, John, Byrne, Stephen1, Patel, Amol 26/12/2018 06:21, Varghese, Vipin: > HI Thomas, > > Snipped > > > > > Small nits > > > > 9th patch in this set is doc. So above info need to be corrected. > > > > if you are addressing my earlier comment of separating out mempool > > > > element iteration changes in to separate new patch 9/10 .Please keep > > > > my ack in next version > > > > > > Thanks for pointing this out, Like updated in email and chat I am not > > planning to split it. Hence no version 8. > > > > So, no ack and no merge? > > > > Looking at the first patches + doc patch, the split is not meaningful. > > You should merge doc and option parsing in the related patches. > > For instance, parsing and doc of "tm" option should be in the "tm" patch. > > I did not follow you request. Are you stating, for each functionality I should be updating document rather than 1 document update after adding the new functions? If former is true I am not able to find such reasoning stated in guideline or documentation or from the maintainer. Yes, you should update the doc while adding a new feature. But most importantly, there is no reason to do a patch adding some empty functions and filling them later. And please consider the option parsing is part of the feature. ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool 2018-12-26 21:33 ` Thomas Monjalon @ 2018-12-27 2:46 ` Varghese, Vipin 2018-12-27 9:32 ` Thomas Monjalon 0 siblings, 1 reply; 69+ messages in thread From: Varghese, Vipin @ 2018-12-27 2:46 UTC (permalink / raw) To: Thomas Monjalon Cc: Pattan, Reshma, dev, Ananyev, Konstantin, stephen, Mcnamara, John, Byrne, Stephen1, Patel, Amol snipped > > > > > Small nits > > > > > 9th patch in this set is doc. So above info need to be corrected. > > > > > if you are addressing my earlier comment of separating out > > > > > mempool element iteration changes in to separate new patch 9/10 > > > > > .Please keep my ack in next version > > > > > > > > Thanks for pointing this out, Like updated in email and chat I am > > > > not > > > planning to split it. Hence no version 8. > > > > > > So, no ack and no merge? > > > > > > Looking at the first patches + doc patch, the split is not meaningful. > > > You should merge doc and option parsing in the related patches. > > > For instance, parsing and doc of "tm" option should be in the "tm" patch. > > > > I did not follow you request. Are you stating, for each functionality I should > be updating document rather than 1 document update after adding the new > functions? If former is true I am not able to find such reasoning stated in > guideline or documentation or from the maintainer. > > Yes, you should update the doc while adding a new feature. Ok, I will comply to your requirement even though it is not in 'guideline, documentation or from maintainer'. Humbly requesting to update documentation and guideline suggesting the same. This will also help others to submit patches according the new guideline. Once reflected it will be justified for sending a v8. > But most importantly, there is no reason to do a patch adding some empty > functions and filling them later. Following are the reasons for using stub function from v1 onwards till v7 1. Without the dummy function there are compiler warnings for unused variables. 2. It is logical to have stub functions for the new parse option being added in one go. These are based on the suggestion from the maintainer. > And please consider the option parsing is part of the feature. As mentioned above please find the reasoning stated for patches from v1 to v7. ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool 2018-12-27 2:46 ` Varghese, Vipin @ 2018-12-27 9:32 ` Thomas Monjalon 2018-12-27 10:45 ` Varghese, Vipin 0 siblings, 1 reply; 69+ messages in thread From: Thomas Monjalon @ 2018-12-27 9:32 UTC (permalink / raw) To: Varghese, Vipin Cc: Pattan, Reshma, dev, Ananyev, Konstantin, stephen, Mcnamara, John, Byrne, Stephen1, Patel, Amol 27/12/2018 03:46, Varghese, Vipin: > snipped > > > > > > Small nits > > > > > > 9th patch in this set is doc. So above info need to be corrected. > > > > > > if you are addressing my earlier comment of separating out > > > > > > mempool element iteration changes in to separate new patch 9/10 > > > > > > .Please keep my ack in next version > > > > > > > > > > Thanks for pointing this out, Like updated in email and chat I am > > > > > not > > > > planning to split it. Hence no version 8. > > > > > > > > So, no ack and no merge? > > > > > > > > Looking at the first patches + doc patch, the split is not meaningful. > > > > You should merge doc and option parsing in the related patches. > > > > For instance, parsing and doc of "tm" option should be in the "tm" patch. > > > > > > I did not follow you request. Are you stating, for each functionality I should > > be updating document rather than 1 document update after adding the new > > functions? If former is true I am not able to find such reasoning stated in > > guideline or documentation or from the maintainer. > > > > Yes, you should update the doc while adding a new feature. > Ok, I will comply to your requirement even though it is not in 'guideline, documentation or from maintainer'. Humbly requesting to update documentation and guideline suggesting the same. This will also help others to submit patches according the new guideline. Once reflected it will be justified for sending a v8. Vipin, please read the doc carefully: http://git.dpdk.org/dpdk/commit/?id=9e0e4a00df775 > > But most importantly, there is no reason to do a patch adding some empty > > functions and filling them later. > Following are the reasons for using stub function from v1 onwards till v7 > 1. Without the dummy function there are compiler warnings for unused variables. > 2. It is logical to have stub functions for the new parse option being added in one go. > > These are based on the suggestion from the maintainer. > > > And please consider the option parsing is part of the feature. > As mentioned above please find the reasoning stated for patches from v1 to v7. You keep thinking that parsing should be introduced separately. I keep saying it is part of the feature. ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool 2018-12-27 9:32 ` Thomas Monjalon @ 2018-12-27 10:45 ` Varghese, Vipin 0 siblings, 0 replies; 69+ messages in thread From: Varghese, Vipin @ 2018-12-27 10:45 UTC (permalink / raw) To: Thomas Monjalon Cc: Pattan, Reshma, dev, Ananyev, Konstantin, stephen, Mcnamara, John, Byrne, Stephen1, Patel, Amol > -----Original Message----- > From: Thomas Monjalon <thomas@monjalon.net> > Sent: Thursday, December 27, 2018 3:03 PM > To: Varghese, Vipin <vipin.varghese@intel.com> > Cc: Pattan, Reshma <reshma.pattan@intel.com>; dev@dpdk.org; Ananyev, > Konstantin <konstantin.ananyev@intel.com>; stephen@networkplumber.org; > Mcnamara, John <john.mcnamara@intel.com>; Byrne, Stephen1 > <stephen1.byrne@intel.com>; Patel, Amol <amol.patel@intel.com> > Subject: Re: [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc- > info tool > > 27/12/2018 03:46, Varghese, Vipin: > > snipped > > > > > > > Small nits > > > > > > > 9th patch in this set is doc. So above info need to be corrected. > > > > > > > if you are addressing my earlier comment of separating out > > > > > > > mempool element iteration changes in to separate new patch > > > > > > > 9/10 .Please keep my ack in next version > > > > > > > > > > > > Thanks for pointing this out, Like updated in email and chat I > > > > > > am not > > > > > planning to split it. Hence no version 8. > > > > > > > > > > So, no ack and no merge? > > > > > > > > > > Looking at the first patches + doc patch, the split is not meaningful. > > > > > You should merge doc and option parsing in the related patches. > > > > > For instance, parsing and doc of "tm" option should be in the "tm" > patch. > > > > > > > > I did not follow you request. Are you stating, for each > > > > functionality I should > > > be updating document rather than 1 document update after adding the > > > new functions? If former is true I am not able to find such > > > reasoning stated in guideline or documentation or from the maintainer. > > > > > > Yes, you should update the doc while adding a new feature. > > Ok, I will comply to your requirement even though it is not in 'guideline, > documentation or from maintainer'. Humbly requesting to update > documentation and guideline suggesting the same. This will also help others > to submit patches according the new guideline. Once reflected it will be > justified for sending a v8. > > Vipin, please read the doc carefully: > http://git.dpdk.org/dpdk/commit/?id=9e0e4a00df775 Thank you Thomas for this update, I will make the changes for v8 and wait for your ACK. > > > > But most importantly, there is no reason to do a patch adding some > > > empty functions and filling them later. > > Following are the reasons for using stub function from v1 onwards till > > v7 1. Without the dummy function there are compiler warnings for unused > variables. > > 2. It is logical to have stub functions for the new parse option being added in > one go. > > > > These are based on the suggestion from the maintainer. > > > > > And please consider the option parsing is part of the feature. > > As mentioned above please find the reasoning stated for patches from v1 to > v7. > > You keep thinking that parsing should be introduced separately. > I keep saying it is part of the feature. > > ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance debug of proc-info tool 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese ` (9 preceding siblings ...) 2018-12-13 14:42 ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Pattan, Reshma @ 2019-01-07 15:38 ` Vipin Varghese 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions Vipin Varghese ` (6 more replies) 10 siblings, 7 replies; 69+ messages in thread From: Vipin Varghese @ 2019-01-07 15:38 UTC (permalink / raw) To: dev, thomas Cc: reshma.pattan, john.mcnamara, amol.patel, stephen, konstantin.ananyev, jasvinder.singh, Vipin Varghese This patch adds new debug functions to existing proc-info tool. Motivation ========== DPDK proc-info tool is been widely used as secondary process to collect stats for any primary process. But these are limited to DPDK NIC ports and basic memory usage. The patch series tries to address the missing debug information for PMD by adding debug for port, traffic manager, crypto, ring and mempool. With these additional information collected, it becomes easy to analyze issues and performance variance. Status ====== Reviews and changes accomadated. ACK received for documenation and code. Patch Information ================= Patch series has 7 patches as shared below: Vipin Varghese (7): app/procinfo: prepare for new debug functions app/procinfo: add support for show port app/procinfo: add support for show tm app/procinfo: add support for show crypto app/procinfo: add support for debug ring app/procinfo: add support for show mempool app/procinfo: add support for iter mempool app/proc-info/main.c | 658 ++++++++++++++++++++++++++++++++- app/proc-info/meson.build | 2 +- doc/guides/tools/proc_info.rst | 32 +- 3 files changed, 688 insertions(+), 4 deletions(-) Change Log: ========== v8: - merge documenation with code - Thomas Monjalon - split patch for iter_mempool - Reshma Pattan - add ack for code - Reshma Pattan V7: - update usage text with token ":" - Reshma Pattan - reword usage for 'iter-mempool' - Reshma Pattan V6: - add mempool iterate elements option - Vipin Varghese - check for iter mempool - Vipin Varghese - add call to iter mempool - Vipin Varghese - replace or with logical or - Reshma Pathan & Konstantin Ananyev - split iter mempool - Vipin Varghese - update entry for mempool iter - Vipin Varghese - add ack for v5 - John Mcnamara - update entry for mempool iter - Vipin Varghese V5: - convert 100 to MAX_STRING_LEN - Reshma Pattan - RSS made for port - Reshma Pattan - update bdr_str to static - Stephen Hemminger - remove memset for link, dev_info, queue, stats - Stephen Hemminger - update ret to uint32_t - Reshma Pattan v4: - add space to compare - Vipin Varghese - add spacing for flag compare - Vipin Varghese V3: - change the usage details - Vipin Varghese - variables from debug to show - Vipin Varghese - update function names from debug to show - Vipin Varghese - fix meson build - Reshma Pattan - change 100 to MAX_STRING_LEN - Reshma Pattan - memset to struct elements - Reshma Pattan - printf tab space - Reshma Pattan - remove 'drop packet information' - Vipin Varghese - memset for struct elements - Vipin Varghese - code cleanup for TM - Vipin Varghese - fetch for leaf nodes if node exist - Jasvinder Singh - display MARCO to function - Reshma Pathan & Stephen Hemminger - add memset for struct elements - Reshma Pathan - change display formating of flags - Vipin Varghese - use MACRO for string - Vipin Varghese - replace space to tab in printf - Reshma Pathan - change ring display information - Vipin Varghese - update document from dbg to show - Vipin Varghese V2: - change word dbg to show - Stephen Hemminger - compare string from dbg to show - Stephen Hemminger - removed if else ladder - Vipin Varghese - redefine code format - Vipin Varghese - MACRO for display node|level - cap - Vipin Varghese - update word style for content - Vipin Varghese -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance " Vipin Varghese @ 2019-01-07 15:38 ` Vipin Varghese 2019-01-09 23:45 ` Thomas Monjalon 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Vipin Varghese 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 2/7] app/procinfo: add support for show port Vipin Varghese ` (5 subsequent siblings) 6 siblings, 2 replies; 69+ messages in thread From: Vipin Varghese @ 2019-01-07 15:38 UTC (permalink / raw) To: dev, thomas Cc: reshma.pattan, john.mcnamara, amol.patel, stephen, konstantin.ananyev, jasvinder.singh, Vipin Varghese Update code base and meson build file to accomadate changes for the new functionality. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> Acked-by: Reshma Pattan <reshma.pattan@intel.com> --- app/proc-info/main.c | 13 +++++++++++++ app/proc-info/meson.build | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index c20effa4f..c7697389c 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -29,6 +29,9 @@ #include <rte_branch_prediction.h> #include <rte_string_fns.h> #include <rte_metrics.h> +#include <rte_cycles.h> +#include <rte_security.h> +#include <rte_cryptodev.h> /* Maximum long option length for option parsing. */ #define MAX_LONG_OPT_SZ 64 @@ -36,6 +39,10 @@ #define MAX_STRING_LEN 256 +#define STATS_BDR_FMT "========================================" +#define STATS_BDR_STR(w, s) printf("%.*s%s%.*s\n", w, \ + STATS_BDR_FMT, s, w, STATS_BDR_FMT) + /**< mask of enabled ports */ static uint32_t enabled_port_mask; /**< Enable stats. */ @@ -65,6 +72,9 @@ static char *xstats_name; static uint32_t nb_xstats_ids; static uint64_t xstats_ids[MAX_NB_XSTATS_IDS]; +/* show border */ +static char bdr_str[MAX_STRING_LEN]; + /**< display usage */ static void proc_info_usage(const char *prgname) @@ -668,5 +678,8 @@ main(int argc, char **argv) if (ret) printf("Error from rte_eal_cleanup(), %d\n", ret); + snprintf(bdr_str, MAX_STRING_LEN, " "); + STATS_BDR_STR(50, bdr_str); + return 0; } diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build index a52b2ee4a..866b390d6 100644 --- a/app/proc-info/meson.build +++ b/app/proc-info/meson.build @@ -3,4 +3,4 @@ sources = files('main.c') allow_experimental_apis = true -deps += ['ethdev', 'metrics'] +deps += ['ethdev', 'metrics', 'security'] -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions Vipin Varghese @ 2019-01-09 23:45 ` Thomas Monjalon 2019-01-10 3:08 ` Varghese, Vipin 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Vipin Varghese 1 sibling, 1 reply; 69+ messages in thread From: Thomas Monjalon @ 2019-01-09 23:45 UTC (permalink / raw) To: Vipin Varghese Cc: dev, reshma.pattan, john.mcnamara, amol.patel, stephen, konstantin.ananyev, jasvinder.singh Hi Vipin, The code split in this v8 looks really better, except this patch which makes no sense alone. I feel you can move these changes in next patches, where appropriate, isn't it? 07/01/2019 16:38, Vipin Varghese: > Update code base and meson build file to accomadate changes for the > new functionality. > > Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> > Acked-by: Reshma Pattan <reshma.pattan@intel.com> > --- > app/proc-info/main.c | 13 +++++++++++++ > app/proc-info/meson.build | 2 +- > 2 files changed, 14 insertions(+), 1 deletion(-) > > diff --git a/app/proc-info/main.c b/app/proc-info/main.c > index c20effa4f..c7697389c 100644 > --- a/app/proc-info/main.c > +++ b/app/proc-info/main.c > @@ -29,6 +29,9 @@ > #include <rte_branch_prediction.h> > #include <rte_string_fns.h> > #include <rte_metrics.h> > +#include <rte_cycles.h> > +#include <rte_security.h> > +#include <rte_cryptodev.h> > > /* Maximum long option length for option parsing. */ > #define MAX_LONG_OPT_SZ 64 > @@ -36,6 +39,10 @@ > > #define MAX_STRING_LEN 256 > > +#define STATS_BDR_FMT "========================================" > +#define STATS_BDR_STR(w, s) printf("%.*s%s%.*s\n", w, \ > + STATS_BDR_FMT, s, w, STATS_BDR_FMT) > + > /**< mask of enabled ports */ > static uint32_t enabled_port_mask; > /**< Enable stats. */ > @@ -65,6 +72,9 @@ static char *xstats_name; > static uint32_t nb_xstats_ids; > static uint64_t xstats_ids[MAX_NB_XSTATS_IDS]; > > +/* show border */ > +static char bdr_str[MAX_STRING_LEN]; > + > /**< display usage */ > static void > proc_info_usage(const char *prgname) > @@ -668,5 +678,8 @@ main(int argc, char **argv) > if (ret) > printf("Error from rte_eal_cleanup(), %d\n", ret); > > + snprintf(bdr_str, MAX_STRING_LEN, " "); > + STATS_BDR_STR(50, bdr_str); > + > return 0; > } > diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build > index a52b2ee4a..866b390d6 100644 > --- a/app/proc-info/meson.build > +++ b/app/proc-info/meson.build > @@ -3,4 +3,4 @@ > > sources = files('main.c') > allow_experimental_apis = true > -deps += ['ethdev', 'metrics'] > +deps += ['ethdev', 'metrics', 'security'] > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions 2019-01-09 23:45 ` Thomas Monjalon @ 2019-01-10 3:08 ` Varghese, Vipin 2019-01-10 8:39 ` Thomas Monjalon 0 siblings, 1 reply; 69+ messages in thread From: Varghese, Vipin @ 2019-01-10 3:08 UTC (permalink / raw) To: Thomas Monjalon Cc: dev, Pattan, Reshma, Mcnamara, John, Patel, Amol, stephen, Ananyev, Konstantin, Singh, Jasvinder snipped > > Hi Vipin, > > The code split in this v8 looks really better, except this patch which makes no > sense alone. Hi Thomas, I need this base patch as first one. These include the helper MACRO and include which pans out for next 7 patches. > I feel you can move these changes in next patches, where appropriate, isn't it? Patches v2 to v7 uses common features from v1. > > 07/01/2019 16:38, Vipin Varghese: > > Update code base and meson build file to accomadate changes for the > > new functionality. > > > > Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> > > Acked-by: Reshma Pattan <reshma.pattan@intel.com> > > --- > > app/proc-info/main.c | 13 +++++++++++++ > > app/proc-info/meson.build | 2 +- > > 2 files changed, 14 insertions(+), 1 deletion(-) > > > > diff --git a/app/proc-info/main.c b/app/proc-info/main.c index > > c20effa4f..c7697389c 100644 > > --- a/app/proc-info/main.c > > +++ b/app/proc-info/main.c > > @@ -29,6 +29,9 @@ > > #include <rte_branch_prediction.h> > > #include <rte_string_fns.h> > > #include <rte_metrics.h> > > +#include <rte_cycles.h> > > +#include <rte_security.h> > > +#include <rte_cryptodev.h> > > > > /* Maximum long option length for option parsing. */ #define > > MAX_LONG_OPT_SZ 64 @@ -36,6 +39,10 @@ > > > > #define MAX_STRING_LEN 256 > > > > +#define STATS_BDR_FMT > "========================================" > > +#define STATS_BDR_STR(w, s) printf("%.*s%s%.*s\n", w, \ > > + STATS_BDR_FMT, s, w, STATS_BDR_FMT) > > + > > /**< mask of enabled ports */ > > static uint32_t enabled_port_mask; > > /**< Enable stats. */ > > @@ -65,6 +72,9 @@ static char *xstats_name; static uint32_t > > nb_xstats_ids; static uint64_t xstats_ids[MAX_NB_XSTATS_IDS]; > > > > +/* show border */ > > +static char bdr_str[MAX_STRING_LEN]; > > + > > /**< display usage */ > > static void > > proc_info_usage(const char *prgname) > > @@ -668,5 +678,8 @@ main(int argc, char **argv) > > if (ret) > > printf("Error from rte_eal_cleanup(), %d\n", ret); > > > > + snprintf(bdr_str, MAX_STRING_LEN, " "); > > + STATS_BDR_STR(50, bdr_str); > > + > > return 0; > > } > > diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build > > index a52b2ee4a..866b390d6 100644 > > --- a/app/proc-info/meson.build > > +++ b/app/proc-info/meson.build > > @@ -3,4 +3,4 @@ > > > > sources = files('main.c') > > allow_experimental_apis = true > > -deps += ['ethdev', 'metrics'] > > +deps += ['ethdev', 'metrics', 'security'] > > > > > > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions 2019-01-10 3:08 ` Varghese, Vipin @ 2019-01-10 8:39 ` Thomas Monjalon 2019-01-10 8:53 ` Varghese, Vipin 0 siblings, 1 reply; 69+ messages in thread From: Thomas Monjalon @ 2019-01-10 8:39 UTC (permalink / raw) To: Varghese, Vipin Cc: dev, Pattan, Reshma, Mcnamara, John, Patel, Amol, stephen, Ananyev, Konstantin, Singh, Jasvinder 10/01/2019 04:08, Varghese, Vipin: > snipped > > > > Hi Vipin, > > > > The code split in this v8 looks really better, except this patch which makes no > > sense alone. > Hi Thomas, I need this base patch as first one. These include the helper MACRO and include which pans out for next 7 patches. > > > I feel you can move these changes in next patches, where appropriate, isn't it? > Patches v2 to v7 uses common features from v1. At least, you should introduce the includes when needed. If you need this patch for introducing some macros, then rename it and explain the macros in the message. > > 07/01/2019 16:38, Vipin Varghese: > > > Update code base and meson build file to accomadate changes for the > > > new functionality. > > > > > > Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> > > > Acked-by: Reshma Pattan <reshma.pattan@intel.com> > > > --- > > > app/proc-info/main.c | 13 +++++++++++++ > > > app/proc-info/meson.build | 2 +- > > > 2 files changed, 14 insertions(+), 1 deletion(-) > > > > > > diff --git a/app/proc-info/main.c b/app/proc-info/main.c index > > > c20effa4f..c7697389c 100644 > > > --- a/app/proc-info/main.c > > > +++ b/app/proc-info/main.c > > > @@ -29,6 +29,9 @@ > > > #include <rte_branch_prediction.h> > > > #include <rte_string_fns.h> > > > #include <rte_metrics.h> > > > +#include <rte_cycles.h> > > > +#include <rte_security.h> > > > +#include <rte_cryptodev.h> > > > > > > /* Maximum long option length for option parsing. */ #define > > > MAX_LONG_OPT_SZ 64 @@ -36,6 +39,10 @@ > > > > > > #define MAX_STRING_LEN 256 > > > > > > +#define STATS_BDR_FMT > > "========================================" > > > +#define STATS_BDR_STR(w, s) printf("%.*s%s%.*s\n", w, \ > > > + STATS_BDR_FMT, s, w, STATS_BDR_FMT) > > > + > > > /**< mask of enabled ports */ > > > static uint32_t enabled_port_mask; > > > /**< Enable stats. */ > > > @@ -65,6 +72,9 @@ static char *xstats_name; static uint32_t > > > nb_xstats_ids; static uint64_t xstats_ids[MAX_NB_XSTATS_IDS]; > > > > > > +/* show border */ > > > +static char bdr_str[MAX_STRING_LEN]; > > > + > > > /**< display usage */ > > > static void > > > proc_info_usage(const char *prgname) > > > @@ -668,5 +678,8 @@ main(int argc, char **argv) > > > if (ret) > > > printf("Error from rte_eal_cleanup(), %d\n", ret); > > > > > > + snprintf(bdr_str, MAX_STRING_LEN, " "); > > > + STATS_BDR_STR(50, bdr_str); > > > + > > > return 0; > > > } > > > diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build > > > index a52b2ee4a..866b390d6 100644 > > > --- a/app/proc-info/meson.build > > > +++ b/app/proc-info/meson.build > > > @@ -3,4 +3,4 @@ > > > > > > sources = files('main.c') > > > allow_experimental_apis = true > > > -deps += ['ethdev', 'metrics'] > > > +deps += ['ethdev', 'metrics', 'security'] ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions 2019-01-10 8:39 ` Thomas Monjalon @ 2019-01-10 8:53 ` Varghese, Vipin 2019-01-10 9:09 ` Thomas Monjalon 0 siblings, 1 reply; 69+ messages in thread From: Varghese, Vipin @ 2019-01-10 8:53 UTC (permalink / raw) To: Thomas Monjalon Cc: dev, Pattan, Reshma, Mcnamara, John, Patel, Amol, stephen, Ananyev, Konstantin, Singh, Jasvinder Hi Thomas, snipped > > 10/01/2019 04:08, Varghese, Vipin: > > snipped > > > > > > Hi Vipin, > > > > > > The code split in this v8 looks really better, except this patch > > > which makes no sense alone. > > Hi Thomas, I need this base patch as first one. These include the helper > MACRO and include which pans out for next 7 patches. > > > > > I feel you can move these changes in next patches, where appropriate, isn't > it? > > Patches v2 to v7 uses common features from v1. > > At least, you should introduce the includes when needed. As mentioned earlier these are used in v2 to v7. > If you need this patch for introducing some macros, then rename it and > explain the macros in the message. The MACRO introduced in this patch are 'MAX_STRING_LEN, STATS_BDR_FMT and STATS_BDR_STR'. As per code contribution guideline I may have missed out the stipulation requesting for explaining the same. > > > > > 07/01/2019 16:38, Vipin Varghese: > > > > Update code base and meson build file to accommodate changes for > > > > the new functionality. > > > > > > > > Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> > > > > Acked-by: Reshma Pattan <reshma.pattan@intel.com> > > > > --- snipped ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions 2019-01-10 8:53 ` Varghese, Vipin @ 2019-01-10 9:09 ` Thomas Monjalon 0 siblings, 0 replies; 69+ messages in thread From: Thomas Monjalon @ 2019-01-10 9:09 UTC (permalink / raw) To: Varghese, Vipin Cc: dev, Pattan, Reshma, Mcnamara, John, Patel, Amol, stephen, Ananyev, Konstantin, Singh, Jasvinder 10/01/2019 09:53, Varghese, Vipin: > Hi Thomas, > > snipped > > > > 10/01/2019 04:08, Varghese, Vipin: > > > snipped > > > > > > > > Hi Vipin, > > > > > > > > The code split in this v8 looks really better, except this patch > > > > which makes no sense alone. > > > Hi Thomas, I need this base patch as first one. These include the helper > > MACRO and include which pans out for next 7 patches. > > > > > > > I feel you can move these changes in next patches, where appropriate, isn't > > it? > > > Patches v2 to v7 uses common features from v1. > > > > At least, you should introduce the includes when needed. > As mentioned earlier these are used in v2 to v7. So? They must be introduced first time they are used. Vipin, please be cooperative. > > If you need this patch for introducing some macros, then rename it and > > explain the macros in the message. > The MACRO introduced in this patch are 'MAX_STRING_LEN, STATS_BDR_FMT and STATS_BDR_STR'. As per code contribution guideline I may have missed out the stipulation requesting for explaining the same. > > > > > > > > > 07/01/2019 16:38, Vipin Varghese: > > > > > Update code base and meson build file to accommodate changes for > > > > > the new functionality. > > > > > > > > > > Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> > > > > > Acked-by: Reshma Pattan <reshma.pattan@intel.com> > > > > > --- > snipped > ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions Vipin Varghese 2019-01-09 23:45 ` Thomas Monjalon @ 2019-01-10 21:36 ` Vipin Varghese 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 1/6] app/procinfo: add support for show port Vipin Varghese ` (6 more replies) 1 sibling, 7 replies; 69+ messages in thread From: Vipin Varghese @ 2019-01-10 21:36 UTC (permalink / raw) To: dev, thomas, john.mcnamara Cc: konstantin.ananyev, stephen, reshma.pattan, jasvinder.singh, stephen1.byrne, amol.patel, Vipin Varghese This patch adds new debug functions to existing proc-info tool. Motivation ========== DPDK proc-info tool is been widely used as secondary process to collect stats for any primary process. But these are limited to DPDK NIC ports and basic memory usage. The patch series tries to address the missing debug information for PMD by adding debug for port, traffic manager, crypto, ring and mempool. With these additional information collected, it becomes easy to analyze issues and performance variance. Status ====== Reviews and changes accomadated. ACK received for documenation and code. app/procinfo: add support for show port app/procinfo: add support for show tm app/procinfo: add support for show crypto app/procinfo: add support for debug ring app/procinfo: add support for show mempool app/procinfo: add support for iter mempool app/proc-info/main.c | 658 ++++++++++++++++++++++++++++++++- app/proc-info/meson.build | 2 +- doc/guides/tools/proc_info.rst | 32 +- 3 files changed, 688 insertions(+), 4 deletions(-) Change Log: ========== v9: - merge v8/1 and v8/2 and define about macros - Thomas Monjalon v8: - merge documenation with code - Thomas Monjalon - split patch for iter_mempool - Reshma Pattan - add ack for code - Reshma Pattan V7: - update usage text with token ":" - Reshma Pattan - reword usage for 'iter-mempool' - Reshma Pattan V6: - add mempool iterate elements option - Vipin Varghese - check for iter mempool - Vipin Varghese - add call to iter mempool - Vipin Varghese - replace or with logical or - Reshma Pathan & Konstantin Ananyev - split iter mempool - Vipin Varghese - update entry for mempool iter - Vipin Varghese - add ack for v5 - John Mcnamara - update entry for mempool iter - Vipin Varghese V5: - convert 100 to MAX_STRING_LEN - Reshma Pattan - RSS made for port - Reshma Pattan - update bdr_str to static - Stephen Hemminger - remove memset for link, dev_info, queue, stats - Stephen Hemminger - update ret to uint32_t - Reshma Pattan v4: - add space to compare - Vipin Varghese - add spacing for flag compare - Vipin Varghese V3: - change the usage details - Vipin Varghese - variables from debug to show - Vipin Varghese - update function names from debug to show - Vipin Varghese - fix meson build - Reshma Pattan - change 100 to MAX_STRING_LEN - Reshma Pattan - memset to struct elements - Reshma Pattan - printf tab space - Reshma Pattan - remove 'drop packet information' - Vipin Varghese - memset for struct elements - Vipin Varghese - code cleanup for TM - Vipin Varghese - fetch for leaf nodes if node exist - Jasvinder Singh - display MARCO to function - Reshma Pathan & Stephen Hemminger - add memset for struct elements - Reshma Pathan - change display formating of flags - Vipin Varghese - use MACRO for string - Vipin Varghese - replace space to tab in printf - Reshma Pathan - change ring display information - Vipin Varghese - update document from dbg to show - Vipin Varghese V2: - change word dbg to show - Stephen Hemminger - compare string from dbg to show - Stephen Hemminger - removed if else ladder - Vipin Varghese - redefine code format - Vipin Varghese - MACRO for display node|level - cap - Vipin Varghese - update word style for content - Vipin Varghese -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v9 1/6] app/procinfo: add support for show port 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Vipin Varghese @ 2019-01-10 21:36 ` Vipin Varghese 2019-01-10 17:40 ` Thomas Monjalon 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 2/6] app/procinfo: add support for show tm Vipin Varghese ` (5 subsequent siblings) 6 siblings, 1 reply; 69+ messages in thread From: Vipin Varghese @ 2019-01-10 21:36 UTC (permalink / raw) To: dev, thomas, john.mcnamara Cc: konstantin.ananyev, stephen, reshma.pattan, jasvinder.singh, stephen1.byrne, amol.patel, Vipin Varghese Function show_port is used for displaying the port PMD information under primary process. The information shows basic, per queue and security. Also helper MACRO 'MAX_STRING_LEN, STATS_BDR_FMT and STATS_BDR_STR' and meson build file is updated for new functionality. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> Acked-by: Reshma Pattan <reshma.pattan@intel.com> Acked-by: John McNamara <john.mcnamara@intel.com> --- app/proc-info/main.c | 119 ++++++++++++++++++++++++++++++++- app/proc-info/meson.build | 2 +- doc/guides/tools/proc_info.rst | 9 ++- 3 files changed, 126 insertions(+), 4 deletions(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index c20effa4f..2108c24b0 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -29,6 +29,9 @@ #include <rte_branch_prediction.h> #include <rte_string_fns.h> #include <rte_metrics.h> +#include <rte_cycles.h> +#include <rte_security.h> +#include <rte_cryptodev.h> /* Maximum long option length for option parsing. */ #define MAX_LONG_OPT_SZ 64 @@ -36,6 +39,10 @@ #define MAX_STRING_LEN 256 +#define STATS_BDR_FMT "========================================" +#define STATS_BDR_STR(w, s) printf("%.*s%s%.*s\n", w, \ + STATS_BDR_FMT, s, w, STATS_BDR_FMT) + /**< mask of enabled ports */ static uint32_t enabled_port_mask; /**< Enable stats. */ @@ -65,6 +72,12 @@ static char *xstats_name; static uint32_t nb_xstats_ids; static uint64_t xstats_ids[MAX_NB_XSTATS_IDS]; +/* show border */ +static char bdr_str[MAX_STRING_LEN]; + +/**< Enable show port. */ +static uint32_t enable_shw_port; + /**< display usage */ static void proc_info_usage(const char *prgname) @@ -83,7 +96,8 @@ proc_info_usage(const char *prgname) " --stats-reset: to reset port statistics\n" " --xstats-reset: to reset port extended statistics\n" " --collectd-format: to print statistics to STDOUT in expected by collectd format\n" - " --host-id STRING: host id used to identify the system process is running on\n", + " --host-id STRING: host id used to identify the system process is running on\n" + " --show-port: to display ports information\n", prgname); } @@ -190,6 +204,7 @@ proc_info_parse_args(int argc, char **argv) {"collectd-format", 0, NULL, 0}, {"xstats-ids", 1, NULL, 1}, {"host-id", 0, NULL, 0}, + {"show-port", 0, NULL, 0}, {NULL, 0, 0, 0} }; @@ -233,6 +248,9 @@ proc_info_parse_args(int argc, char **argv) else if (!strncmp(long_option[option_index].name, "xstats-reset", MAX_LONG_OPT_SZ)) reset_xstats = 1; + else if (!strncmp(long_option[option_index].name, + "show-port", MAX_LONG_OPT_SZ)) + enable_shw_port = 1; break; case 1: /* Print xstat single value given by name*/ @@ -584,6 +602,98 @@ metrics_display(int port_id) rte_free(names); } +static void +show_port(void) +{ + uint16_t i = 0; + int ret = 0, j, k; + + snprintf(bdr_str, MAX_STRING_LEN, " show - Port PMD %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + RTE_ETH_FOREACH_DEV(i) { + uint16_t mtu = 0; + struct rte_eth_link link; + struct rte_eth_dev_info dev_info; + struct rte_eth_rxq_info queue_info; + struct rte_eth_rss_conf rss_conf; + + memset(&rss_conf, 0, sizeof(rss_conf)); + + snprintf(bdr_str, MAX_STRING_LEN, " Port (%u)", i); + STATS_BDR_STR(5, bdr_str); + printf(" - generic config\n"); + + printf("\t -- Socket %d\n", rte_eth_dev_socket_id(i)); + rte_eth_link_get(i, &link); + printf("\t -- link speed %d duplex %d," + " auto neg %d status %d\n", + link.link_speed, + link.link_duplex, + link.link_autoneg, + link.link_status); + printf("\t -- promiscuous (%d)\n", + rte_eth_promiscuous_get(i)); + ret = rte_eth_dev_get_mtu(i, &mtu); + if (ret == 0) + printf("\t -- mtu (%d)\n", mtu); + + rte_eth_dev_info_get(i, &dev_info); + + printf(" - queue\n"); + for (j = 0; j < dev_info.nb_rx_queues; j++) { + ret = rte_eth_rx_queue_info_get(i, j, &queue_info); + if (ret == 0) { + printf("\t -- queue %d rx scatter %d" + " descriptors %d" + " offloads 0x%"PRIx64 + " mempool socket %d\n", + j, + queue_info.scattered_rx, + queue_info.nb_desc, + queue_info.conf.offloads, + queue_info.mp->socket_id); + } + } + + ret = rte_eth_dev_rss_hash_conf_get(i, &rss_conf); + if (ret == 0) { + if (rss_conf.rss_key) { + printf(" - RSS\n"); + printf("\t -- RSS len %u key (hex):", + rss_conf.rss_key_len); + for (k = 0; k < rss_conf.rss_key_len; k++) + printf(" %x", rss_conf.rss_key[k]); + printf("\t -- hf 0x%"PRIx64"\n", + rss_conf.rss_hf); + } + } + + printf(" - cyrpto context\n"); + void *p_ctx = rte_eth_dev_get_sec_ctx(i); + printf("\t -- security context - %p\n", p_ctx); + + if (p_ctx) { + printf("\t -- size %u\n", + rte_security_session_get_size(p_ctx)); + const struct rte_security_capability *s_cap = + rte_security_capabilities_get(p_ctx); + if (s_cap) { + printf("\t -- action (0x%x), protocol (0x%x)," + " offload flags (0x%x)\n", + s_cap->action, + s_cap->protocol, + s_cap->ol_flags); + printf("\t -- capabilities - oper type %x\n", + s_cap->crypto_capabilities->op); + } + } + } + + STATS_BDR_STR(50, ""); +} + int main(int argc, char **argv) { @@ -664,9 +774,16 @@ main(int argc, char **argv) if (enable_metrics) metrics_display(RTE_METRICS_GLOBAL); + /* show information for PMD */ + if (enable_shw_port) + show_port(); + ret = rte_eal_cleanup(); if (ret) printf("Error from rte_eal_cleanup(), %d\n", ret); + snprintf(bdr_str, MAX_STRING_LEN, " "); + STATS_BDR_STR(50, bdr_str); + return 0; } diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build index a52b2ee4a..866b390d6 100644 --- a/app/proc-info/meson.build +++ b/app/proc-info/meson.build @@ -3,4 +3,4 @@ sources = files('main.c') allow_experimental_apis = true -deps += ['ethdev', 'metrics'] +deps += ['ethdev', 'metrics', 'security'] diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst index d5b5ed6a6..6baa1db9a 100644 --- a/doc/guides/tools/proc_info.rst +++ b/doc/guides/tools/proc_info.rst @@ -6,7 +6,8 @@ dpdk-procinfo Application The dpdk-procinfo application is a Data Plane Development Kit (DPDK) application that runs as a DPDK secondary process and is capable of retrieving port -statistics, resetting port statistics and printing DPDK memory information. +statistics, resetting port statistics, printing DPDK memory information and +displaying debug information for port. This application extends the original functionality that was supported by dump_cfg. @@ -17,7 +18,7 @@ The application has a number of command line options: .. code-block:: console ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats | - --stats-reset | --xstats-reset] + --stats-reset | --xstats-reset] [ --show-port ] Parameters ~~~~~~~~~~ @@ -41,6 +42,10 @@ If no port mask is specified xstats are reset for all DPDK ports. **-m**: Print DPDK memory information. +**--show-port** +The show-port parameter displays port level various configuration informationi +associated to RX port queue pair. + Limitations ----------- -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v9 1/6] app/procinfo: add support for show port 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 1/6] app/procinfo: add support for show port Vipin Varghese @ 2019-01-10 17:40 ` Thomas Monjalon 2019-01-11 3:57 ` Varghese, Vipin 0 siblings, 1 reply; 69+ messages in thread From: Thomas Monjalon @ 2019-01-10 17:40 UTC (permalink / raw) To: Vipin Varghese Cc: dev, john.mcnamara, konstantin.ananyev, stephen, reshma.pattan, jasvinder.singh, stephen1.byrne, amol.patel 10/01/2019 22:36, Vipin Varghese: > Function show_port is used for displaying the port PMD information under > primary process. The information shows basic, per queue and security. > Also helper MACRO 'MAX_STRING_LEN, STATS_BDR_FMT and STATS_BDR_STR' and > meson build file is updated for new functionality. > > Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> > Acked-by: Reshma Pattan <reshma.pattan@intel.com> > Acked-by: John McNamara <john.mcnamara@intel.com> > --- > app/proc-info/main.c | 119 ++++++++++++++++++++++++++++++++- > app/proc-info/meson.build | 2 +- > doc/guides/tools/proc_info.rst | 9 ++- > 3 files changed, 126 insertions(+), 4 deletions(-) > > diff --git a/app/proc-info/main.c b/app/proc-info/main.c > index c20effa4f..2108c24b0 100644 > --- a/app/proc-info/main.c > +++ b/app/proc-info/main.c > @@ -29,6 +29,9 @@ > #include <rte_branch_prediction.h> > #include <rte_string_fns.h> > #include <rte_metrics.h> > +#include <rte_cycles.h> > +#include <rte_security.h> > +#include <rte_cryptodev.h> Is the crypto include really required in this patch? ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v9 1/6] app/procinfo: add support for show port 2019-01-10 17:40 ` Thomas Monjalon @ 2019-01-11 3:57 ` Varghese, Vipin 2019-01-11 10:22 ` Thomas Monjalon 0 siblings, 1 reply; 69+ messages in thread From: Varghese, Vipin @ 2019-01-11 3:57 UTC (permalink / raw) To: Thomas Monjalon Cc: dev, Mcnamara, John, Ananyev, Konstantin, stephen, Pattan, Reshma, Singh, Jasvinder, Byrne, Stephen1, Patel, Amol Hi Thomas snipped > > +#include <rte_cryptodev.h> > > Is the crypto include really required in this patch? Function 'show_port' requires the include file. Removing the same results In function 'show_port': /home/saesrv02/Downloads/dpdksrc/procifno/dpdk/app/proc-info/main.c:733:33: error: dereferencing pointer to incomplete type 'const struct rte_cryptodev_capabilities' s_cap->crypto_capabilities->op); > > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v9 1/6] app/procinfo: add support for show port 2019-01-11 3:57 ` Varghese, Vipin @ 2019-01-11 10:22 ` Thomas Monjalon 0 siblings, 0 replies; 69+ messages in thread From: Thomas Monjalon @ 2019-01-11 10:22 UTC (permalink / raw) To: Varghese, Vipin Cc: dev, Mcnamara, John, Ananyev, Konstantin, stephen, Pattan, Reshma, Singh, Jasvinder, Byrne, Stephen1, Patel, Amol 11/01/2019 04:57, Varghese, Vipin: > Hi Thomas > > snipped > > > +#include <rte_cryptodev.h> > > > > Is the crypto include really required in this patch? > Function 'show_port' requires the include file. Removing the same results > > In function 'show_port': > /home/saesrv02/Downloads/dpdksrc/procifno/dpdk/app/proc-info/main.c:733:33: error: dereferencing pointer to incomplete type 'const struct rte_cryptodev_capabilities' > s_cap->crypto_capabilities->op); OK I see, thanks ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v9 2/6] app/procinfo: add support for show tm 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Vipin Varghese 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 1/6] app/procinfo: add support for show port Vipin Varghese @ 2019-01-10 21:36 ` Vipin Varghese 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 3/6] app/procinfo: add support for show crypto Vipin Varghese ` (4 subsequent siblings) 6 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2019-01-10 21:36 UTC (permalink / raw) To: dev, thomas, john.mcnamara Cc: konstantin.ananyev, stephen, reshma.pattan, jasvinder.singh, stephen1.byrne, amol.patel, Vipin Varghese Function show_tm is used for displaying the tm PMD under the primary process. This covers basic and per node|level details with statistics. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> Acked-by: Reshma Pattan <reshma.pattan@intel.com> Acked-by: John McNamara <john.mcnamara@intel.com> --- app/proc-info/main.c | 290 ++++++++++++++++++++++++++++++++- doc/guides/tools/proc_info.rst | 6 +- 2 files changed, 294 insertions(+), 2 deletions(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 2108c24b0..ea15ae1a6 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -32,6 +32,7 @@ #include <rte_cycles.h> #include <rte_security.h> #include <rte_cryptodev.h> +#include <rte_tm.h> /* Maximum long option length for option parsing. */ #define MAX_LONG_OPT_SZ 64 @@ -77,6 +78,8 @@ static char bdr_str[MAX_STRING_LEN]; /**< Enable show port. */ static uint32_t enable_shw_port; +/**< Enable show tm. */ +static uint32_t enable_shw_tm; /**< display usage */ static void @@ -97,7 +100,8 @@ proc_info_usage(const char *prgname) " --xstats-reset: to reset port extended statistics\n" " --collectd-format: to print statistics to STDOUT in expected by collectd format\n" " --host-id STRING: host id used to identify the system process is running on\n" - " --show-port: to display ports information\n", + " --show-port: to display ports information\n" + " --show-tm: to display traffic manager information for ports\n", prgname); } @@ -205,6 +209,7 @@ proc_info_parse_args(int argc, char **argv) {"xstats-ids", 1, NULL, 1}, {"host-id", 0, NULL, 0}, {"show-port", 0, NULL, 0}, + {"show-tm", 0, NULL, 0}, {NULL, 0, 0, 0} }; @@ -251,6 +256,9 @@ proc_info_parse_args(int argc, char **argv) else if (!strncmp(long_option[option_index].name, "show-port", MAX_LONG_OPT_SZ)) enable_shw_port = 1; + else if (!strncmp(long_option[option_index].name, + "show-tm", MAX_LONG_OPT_SZ)) + enable_shw_tm = 1; break; case 1: /* Print xstat single value given by name*/ @@ -694,6 +702,284 @@ show_port(void) STATS_BDR_STR(50, ""); } +static void +display_nodecap_info(int is_leaf, struct rte_tm_node_capabilities *cap) +{ + if (cap == NULL) + return; + + if (!is_leaf) { + printf("\t -- nonleaf sched max:\n" + "\t\t + children (%u)\n" + "\t\t + sp priorities (%u)\n" + "\t\t + wfq children per group (%u)\n" + "\t\t + wfq groups (%u)\n" + "\t\t + wfq weight (%u)\n", + cap->nonleaf.sched_n_children_max, + cap->nonleaf.sched_sp_n_priorities_max, + cap->nonleaf.sched_wfq_n_children_per_group_max, + cap->nonleaf.sched_wfq_n_groups_max, + cap->nonleaf.sched_wfq_weight_max); + } else { + printf("\t -- leaf cman support:\n" + "\t\t + wred pkt mode (%d)\n" + "\t\t + wred byte mode (%d)\n" + "\t\t + head drop (%d)\n" + "\t\t + wred context private (%d)\n" + "\t\t + wred context shared (%u)\n", + cap->leaf.cman_wred_packet_mode_supported, + cap->leaf.cman_wred_byte_mode_supported, + cap->leaf.cman_head_drop_supported, + cap->leaf.cman_wred_context_private_supported, + cap->leaf.cman_wred_context_shared_n_max); + } +} + +static void +display_levelcap_info(int is_leaf, struct rte_tm_level_capabilities *cap) +{ + if (cap == NULL) + return; + + if (!is_leaf) { + printf("\t -- shaper private: (%d) dual rate (%d)\n", + cap->nonleaf.shaper_private_supported, + cap->nonleaf.shaper_private_dual_rate_supported); + printf("\t -- shaper share: (%u)\n", + cap->nonleaf.shaper_shared_n_max); + printf("\t -- non leaf sched MAX:\n" + "\t\t + children (%u)\n" + "\t\t + sp (%u)\n" + "\t\t + wfq children per group (%u)\n" + "\t\t + wfq groups (%u)\n" + "\t\t + wfq weight (%u)\n", + cap->nonleaf.sched_n_children_max, + cap->nonleaf.sched_sp_n_priorities_max, + cap->nonleaf.sched_wfq_n_children_per_group_max, + cap->nonleaf.sched_wfq_n_groups_max, + cap->nonleaf.sched_wfq_weight_max); + } else { + printf("\t -- shaper private: (%d) dual rate (%d)\n", + cap->leaf.shaper_private_supported, + cap->leaf.shaper_private_dual_rate_supported); + printf("\t -- shaper share: (%u)\n", + cap->leaf.shaper_shared_n_max); + printf(" -- leaf cman support:\n" + "\t\t + wred pkt mode (%d)\n" + "\t\t + wred byte mode (%d)\n" + "\t\t + head drop (%d)\n" + "\t\t + wred context private (%d)\n" + "\t\t + wred context shared (%u)\n", + cap->leaf.cman_wred_packet_mode_supported, + cap->leaf.cman_wred_byte_mode_supported, + cap->leaf.cman_head_drop_supported, + cap->leaf.cman_wred_context_private_supported, + cap->leaf.cman_wred_context_shared_n_max); + } +} + +static void +show_tm(void) +{ + int ret = 0, check_for_leaf = 0, is_leaf = 0; + unsigned int j, k; + uint16_t i = 0; + + snprintf(bdr_str, MAX_STRING_LEN, " show - TM PMD %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + RTE_ETH_FOREACH_DEV(i) { + struct rte_eth_dev_info dev_info; + struct rte_tm_capabilities cap; + struct rte_tm_error error; + struct rte_tm_node_capabilities capnode; + struct rte_tm_level_capabilities caplevel; + uint32_t n_leaf_nodes = 0; + + memset(&cap, 0, sizeof(cap)); + memset(&error, 0, sizeof(error)); + + rte_eth_dev_info_get(i, &dev_info); + printf(" - Generic for port (%u)\n" + "\t -- driver name %s\n" + "\t -- max vf (%u)\n" + "\t -- max tx queues (%u)\n" + "\t -- number of tx queues (%u)\n", + i, + dev_info.driver_name, + dev_info.max_vfs, + dev_info.max_tx_queues, + dev_info.nb_tx_queues); + + ret = rte_tm_capabilities_get(i, &cap, &error); + if (ret) + continue; + + printf(" - MAX: nodes (%u) levels (%u) children (%u)\n", + cap.n_nodes_max, + cap.n_levels_max, + cap.sched_n_children_max); + + printf(" - identical nodes: non leaf (%d) leaf (%d)\n", + cap.non_leaf_nodes_identical, + cap.leaf_nodes_identical); + + printf(" - Shaper MAX:\n" + "\t -- total (%u)\n" + "\t -- private (%u) private dual (%d)\n" + "\t -- shared (%u) shared dual (%u)\n", + cap.shaper_n_max, + cap.shaper_private_n_max, + cap.shaper_private_dual_rate_n_max, + cap.shaper_shared_n_max, + cap.shaper_shared_dual_rate_n_max); + + printf(" - mark support:\n"); + printf("\t -- vlan dei: GREEN (%d) YELLOW (%d) RED (%d)\n", + cap.mark_vlan_dei_supported[RTE_TM_GREEN], + cap.mark_vlan_dei_supported[RTE_TM_YELLOW], + cap.mark_vlan_dei_supported[RTE_TM_RED]); + printf("\t -- ip ecn tcp: GREEN (%d) YELLOW (%d) RED (%d)\n", + cap.mark_ip_ecn_tcp_supported[RTE_TM_GREEN], + cap.mark_ip_ecn_tcp_supported[RTE_TM_YELLOW], + cap.mark_ip_ecn_tcp_supported[RTE_TM_RED]); + printf("\t -- ip ecn sctp: GREEN (%d) YELLOW (%d) RED (%d)\n", + cap.mark_ip_ecn_sctp_supported[RTE_TM_GREEN], + cap.mark_ip_ecn_sctp_supported[RTE_TM_YELLOW], + cap.mark_ip_ecn_sctp_supported[RTE_TM_RED]); + printf("\t -- ip dscp: GREEN (%d) YELLOW (%d) RED (%d)\n", + cap.mark_ip_dscp_supported[RTE_TM_GREEN], + cap.mark_ip_dscp_supported[RTE_TM_YELLOW], + cap.mark_ip_dscp_supported[RTE_TM_RED]); + + printf(" - mask stats (0x%"PRIx64")" + " dynamic update (0x%"PRIx64")\n", + cap.stats_mask, + cap.dynamic_update_mask); + + printf(" - sched MAX:\n" + "\t -- total (%u)\n" + "\t -- sp levels (%u)\n" + "\t -- wfq children per group (%u)\n" + "\t -- wfq groups (%u)\n" + "\t -- wfq weight (%u)\n", + cap.sched_sp_n_priorities_max, + cap.sched_sp_n_priorities_max, + cap.sched_wfq_n_children_per_group_max, + cap.sched_wfq_n_groups_max, + cap.sched_wfq_weight_max); + + printf(" - CMAN support:\n" + "\t -- WRED mode: pkt (%d) byte (%d)\n" + "\t -- head drop (%d)\n", + cap.cman_wred_packet_mode_supported, + cap.cman_wred_byte_mode_supported, + cap.cman_head_drop_supported); + printf("\t -- MAX WRED CONTEXT:" + " total (%u) private (%u) shared (%u)\n", + cap.cman_wred_context_n_max, + cap.cman_wred_context_private_n_max, + cap.cman_wred_context_shared_n_max); + + for (j = 0; j < cap.n_nodes_max; j++) { + memset(&capnode, 0, sizeof(capnode)); + ret = rte_tm_node_capabilities_get(i, j, + &capnode, &error); + if (ret) + continue; + + check_for_leaf = 1; + + printf(" NODE %u\n", j); + printf("\t - shaper private: (%d) dual rate (%d)\n", + capnode.shaper_private_supported, + capnode.shaper_private_dual_rate_supported); + printf("\t - shaper shared max: (%u)\n", + capnode.shaper_shared_n_max); + printf("\t - stats mask %"PRIx64"\n", + capnode.stats_mask); + + ret = rte_tm_node_type_get(i, j, &is_leaf, &error); + if (ret) + continue; + + display_nodecap_info(is_leaf, &capnode); + } + + for (j = 0; j < cap.n_levels_max; j++) { + memset(&caplevel, 0, sizeof(caplevel)); + ret = rte_tm_level_capabilities_get(i, j, + &caplevel, &error); + if (ret) + continue; + + printf(" - Level %u\n", j); + printf("\t -- node MAX: %u non leaf %u leaf %u\n", + caplevel.n_nodes_max, + caplevel.n_nodes_nonleaf_max, + caplevel.n_nodes_leaf_max); + printf("\t -- indetical: non leaf %u leaf %u\n", + caplevel.non_leaf_nodes_identical, + caplevel.leaf_nodes_identical); + + for (k = 0; k < caplevel.n_nodes_max; k++) { + ret = rte_tm_node_type_get(i, k, + &is_leaf, &error); + if (ret) + continue; + + display_levelcap_info(is_leaf, &caplevel); + } + } + + if (check_for_leaf) { + ret = rte_tm_get_number_of_leaf_nodes(i, + &n_leaf_nodes, &error); + if (ret == 0) + printf(" - leaf nodes (%u)\n", n_leaf_nodes); + } + + for (j = 0; j < n_leaf_nodes; j++) { + struct rte_tm_node_stats stats; + memset(&stats, 0, sizeof(stats)); + + ret = rte_tm_node_stats_read(i, j, + &stats, &cap.stats_mask, 0, &error); + if (ret) + continue; + + printf(" - STATS for node (%u)\n", j); + printf(" -- pkts (%"PRIu64") bytes (%"PRIu64")\n", + stats.n_pkts, stats.n_bytes); + + ret = rte_tm_node_type_get(i, j, &is_leaf, &error); + if (ret || (!is_leaf)) + continue; + + printf(" -- leaf queued:" + " pkts (%"PRIu64") bytes (%"PRIu64")\n", + stats.leaf.n_pkts_queued, + stats.leaf.n_bytes_queued); + printf(" - dropped:\n" + "\t -- GREEN:" + " pkts (%"PRIu64") bytes (%"PRIu64")\n" + "\t -- YELLOW:" + " pkts (%"PRIu64") bytes (%"PRIu64")\n" + "\t -- RED:" + " pkts (%"PRIu64") bytes (%"PRIu64")\n", + stats.leaf.n_pkts_dropped[RTE_TM_GREEN], + stats.leaf.n_bytes_dropped[RTE_TM_GREEN], + stats.leaf.n_pkts_dropped[RTE_TM_YELLOW], + stats.leaf.n_bytes_dropped[RTE_TM_YELLOW], + stats.leaf.n_pkts_dropped[RTE_TM_RED], + stats.leaf.n_bytes_dropped[RTE_TM_RED]); + } + } + + STATS_BDR_STR(50, ""); +} + int main(int argc, char **argv) { @@ -777,6 +1063,8 @@ main(int argc, char **argv) /* show information for PMD */ if (enable_shw_port) show_port(); + if (enable_shw_tm) + show_tm(); ret = rte_eal_cleanup(); if (ret) diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst index 6baa1db9a..5f9afdb79 100644 --- a/doc/guides/tools/proc_info.rst +++ b/doc/guides/tools/proc_info.rst @@ -18,7 +18,7 @@ The application has a number of command line options: .. code-block:: console ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats | - --stats-reset | --xstats-reset] [ --show-port ] + --stats-reset | --xstats-reset] [ --show-port | --show-tm ] Parameters ~~~~~~~~~~ @@ -46,6 +46,10 @@ If no port mask is specified xstats are reset for all DPDK ports. The show-port parameter displays port level various configuration informationi associated to RX port queue pair. +**--show-tm** +The show-tm parameter displays per port traffic manager settings, current +configurations and statistics. + Limitations ----------- -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v9 3/6] app/procinfo: add support for show crypto 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Vipin Varghese 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 1/6] app/procinfo: add support for show port Vipin Varghese 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 2/6] app/procinfo: add support for show tm Vipin Varghese @ 2019-01-10 21:36 ` Vipin Varghese 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 4/6] app/procinfo: add support for debug ring Vipin Varghese ` (3 subsequent siblings) 6 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2019-01-10 21:36 UTC (permalink / raw) To: dev, thomas, john.mcnamara Cc: konstantin.ananyev, stephen, reshma.pattan, jasvinder.singh, stephen1.byrne, amol.patel, Vipin Varghese Function show_crypto is used for displaying the crypto PMD under primary process. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> Acked-by: Reshma Pattan <reshma.pattan@intel.com> Acked-by: John McNamara <john.mcnamara@intel.com> --- app/proc-info/main.c | 94 +++++++++++++++++++++++++++++++++- doc/guides/tools/proc_info.rst | 6 ++- 2 files changed, 98 insertions(+), 2 deletions(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index ea15ae1a6..4f625a371 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -80,6 +80,8 @@ static char bdr_str[MAX_STRING_LEN]; static uint32_t enable_shw_port; /**< Enable show tm. */ static uint32_t enable_shw_tm; +/**< Enable show crypto. */ +static uint32_t enable_shw_crypto; /**< display usage */ static void @@ -101,7 +103,8 @@ proc_info_usage(const char *prgname) " --collectd-format: to print statistics to STDOUT in expected by collectd format\n" " --host-id STRING: host id used to identify the system process is running on\n" " --show-port: to display ports information\n" - " --show-tm: to display traffic manager information for ports\n", + " --show-tm: to display traffic manager information for ports\n" + " --show-crypto: to display crypto information\n", prgname); } @@ -210,6 +213,7 @@ proc_info_parse_args(int argc, char **argv) {"host-id", 0, NULL, 0}, {"show-port", 0, NULL, 0}, {"show-tm", 0, NULL, 0}, + {"show-crypto", 0, NULL, 0}, {NULL, 0, 0, 0} }; @@ -259,6 +263,9 @@ proc_info_parse_args(int argc, char **argv) else if (!strncmp(long_option[option_index].name, "show-tm", MAX_LONG_OPT_SZ)) enable_shw_tm = 1; + else if (!strncmp(long_option[option_index].name, + "show-crypto", MAX_LONG_OPT_SZ)) + enable_shw_crypto = 1; break; case 1: /* Print xstat single value given by name*/ @@ -980,6 +987,89 @@ show_tm(void) STATS_BDR_STR(50, ""); } +static void +display_crypto_feature_info(uint64_t x) +{ + if (x == 0) + return; + + printf("\t -- feature flags\n"); + printf("\t\t + symmetric (%c), asymmetric (%c)\n" + "\t\t + symmetric operation chaining (%c)\n", + (x & RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING) ? 'y' : 'n'); + printf("\t\t + CPU: SSE (%c), AVX (%c), AVX2 (%c), AVX512 (%c)\n", + (x & RTE_CRYPTODEV_FF_CPU_SSE) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_CPU_AVX) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_CPU_AVX2) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_CPU_AVX512) ? 'y' : 'n'); + printf("\t\t + AESNI: CPU (%c), HW (%c)\n", + (x & RTE_CRYPTODEV_FF_CPU_AESNI) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_HW_ACCELERATED) ? 'y' : 'n'); + printf("\t\t + INLINE (%c)\n", + (x & RTE_CRYPTODEV_FF_SECURITY) ? 'y' : 'n'); + printf("\t\t + ARM: NEON (%c), CE (%c)\n", + (x & RTE_CRYPTODEV_FF_CPU_NEON) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_CPU_ARM_CE) ? 'y' : 'n'); + printf("\t -- buffer offload\n"); + printf("\t\t + IN_PLACE_SGL (%c)\n", + (x & RTE_CRYPTODEV_FF_IN_PLACE_SGL) ? 'y' : 'n'); + printf("\t\t + OOP_SGL_IN_SGL_OUT (%c)\n", + (x & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT) ? 'y' : 'n'); + printf("\t\t + OOP_SGL_IN_LB_OUT (%c)\n", + (x & RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT) ? 'y' : 'n'); + printf("\t\t + OOP_LB_IN_SGL_OUT (%c)\n", + (x & RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT) ? 'y' : 'n'); + printf("\t\t + OOP_LB_IN_LB_OUT (%c)\n", + (x & RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT) ? 'y' : 'n'); +} + +static void +show_crypto(void) +{ + uint8_t crypto_dev_count = rte_cryptodev_count(), i; + + snprintf(bdr_str, MAX_STRING_LEN, " show - CRYPTO PMD %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + for (i = 0; i < crypto_dev_count; i++) { + struct rte_cryptodev_info dev_info; + struct rte_cryptodev_stats stats; + + rte_cryptodev_info_get(i, &dev_info); + + printf(" - device (%u)\n", i); + printf("\t -- name (%s)\n" + "\t -- driver (%s)\n" + "\t -- id (%u) on socket (%d)\n" + "\t -- queue pairs (%d)\n", + rte_cryptodev_name_get(i), + dev_info.driver_name, + dev_info.driver_id, + dev_info.device->numa_node, + rte_cryptodev_queue_pair_count(i)); + + display_crypto_feature_info(dev_info.feature_flags); + + memset(&stats, 0, sizeof(0)); + if (rte_cryptodev_stats_get(i, &stats) == 0) { + printf("\t -- stats\n"); + printf("\t\t + enqueue count (%"PRIu64")" + " error (%"PRIu64")\n", + stats.enqueued_count, + stats.enqueue_err_count); + printf("\t\t + dequeue count (%"PRIu64")" + " error (%"PRIu64")\n", + stats.dequeued_count, + stats.dequeue_err_count); + } + } + + STATS_BDR_STR(50, ""); +} + int main(int argc, char **argv) { @@ -1065,6 +1155,8 @@ main(int argc, char **argv) show_port(); if (enable_shw_tm) show_tm(); + if (enable_shw_crypto) + show_crypto(); ret = rte_eal_cleanup(); if (ret) diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst index 5f9afdb79..883864d18 100644 --- a/doc/guides/tools/proc_info.rst +++ b/doc/guides/tools/proc_info.rst @@ -18,7 +18,7 @@ The application has a number of command line options: .. code-block:: console ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats | - --stats-reset | --xstats-reset] [ --show-port | --show-tm ] + --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto ] Parameters ~~~~~~~~~~ @@ -50,6 +50,10 @@ associated to RX port queue pair. The show-tm parameter displays per port traffic manager settings, current configurations and statistics. +**--show-crypto** +The show-crypto parameter displays available cryptodev configurations, +settings and stats per node. + Limitations ----------- -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v9 4/6] app/procinfo: add support for debug ring 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Vipin Varghese ` (2 preceding siblings ...) 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 3/6] app/procinfo: add support for show crypto Vipin Varghese @ 2019-01-10 21:36 ` Vipin Varghese 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 5/6] app/procinfo: add support for show mempool Vipin Varghese ` (2 subsequent siblings) 6 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2019-01-10 21:36 UTC (permalink / raw) To: dev, thomas, john.mcnamara Cc: konstantin.ananyev, stephen, reshma.pattan, jasvinder.singh, stephen1.byrne, amol.patel, Vipin Varghese Function show_ring is used for displaying information of RING instance of the primary process. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> Acked-by: Reshma Pattan <reshma.pattan@intel.com> Acked-by: John McNamara <john.mcnamara@intel.com> --- app/proc-info/main.c | 52 +++++++++++++++++++++++++++++++++- doc/guides/tools/proc_info.rst | 8 +++++- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 4f625a371..ed136d828 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -82,6 +82,9 @@ static uint32_t enable_shw_port; static uint32_t enable_shw_tm; /**< Enable show crypto. */ static uint32_t enable_shw_crypto; +/**< Enable show ring. */ +static uint32_t enable_shw_ring; +static char *ring_name; /**< display usage */ static void @@ -104,7 +107,8 @@ proc_info_usage(const char *prgname) " --host-id STRING: host id used to identify the system process is running on\n" " --show-port: to display ports information\n" " --show-tm: to display traffic manager information for ports\n" - " --show-crypto: to display crypto information\n", + " --show-crypto: to display crypto information\n" + " --show-ring[=name]: to display ring information\n", prgname); } @@ -214,6 +218,7 @@ proc_info_parse_args(int argc, char **argv) {"show-port", 0, NULL, 0}, {"show-tm", 0, NULL, 0}, {"show-crypto", 0, NULL, 0}, + {"show-ring", optional_argument, NULL, 0}, {NULL, 0, 0, 0} }; @@ -266,6 +271,11 @@ proc_info_parse_args(int argc, char **argv) else if (!strncmp(long_option[option_index].name, "show-crypto", MAX_LONG_OPT_SZ)) enable_shw_crypto = 1; + else if (!strncmp(long_option[option_index].name, + "show-ring", MAX_LONG_OPT_SZ)) { + enable_shw_ring = 1; + ring_name = optarg; + } break; case 1: /* Print xstat single value given by name*/ @@ -1070,6 +1080,44 @@ show_crypto(void) STATS_BDR_STR(50, ""); } +static void +show_ring(char *name) +{ + snprintf(bdr_str, MAX_STRING_LEN, " show - RING %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + if (name != NULL) { + struct rte_ring *ptr = rte_ring_lookup(name); + if (ptr != NULL) { + printf(" - Name (%s) on socket (%d)\n" + " - flags:\n" + "\t -- Single Producer Enqueue (%u)\n" + "\t -- Single Consmer Dequeue (%u)\n", + ptr->name, + ptr->memzone->socket_id, + ptr->flags & RING_F_SP_ENQ, + ptr->flags & RING_F_SC_DEQ); + printf(" - size (%u) mask (0x%x) capacity (%u)\n", + ptr->size, + ptr->mask, + ptr->capacity); + printf(" - count (%u) free count (%u)\n", + rte_ring_count(ptr), + rte_ring_free_count(ptr)); + printf(" - full (%d) empty (%d)\n", + rte_ring_full(ptr), + rte_ring_empty(ptr)); + + STATS_BDR_STR(50, ""); + return; + } + } + + rte_ring_list_dump(stdout); + STATS_BDR_STR(50, ""); +} + int main(int argc, char **argv) { @@ -1157,6 +1205,8 @@ main(int argc, char **argv) show_tm(); if (enable_shw_crypto) show_crypto(); + if (enable_shw_ring) + show_ring(ring_name); ret = rte_eal_cleanup(); if (ret) diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst index 883864d18..ba5c3dbd1 100644 --- a/doc/guides/tools/proc_info.rst +++ b/doc/guides/tools/proc_info.rst @@ -18,7 +18,8 @@ The application has a number of command line options: .. code-block:: console ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats | - --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto ] + --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto | + --show-ring[=name] ] Parameters ~~~~~~~~~~ @@ -54,6 +55,11 @@ configurations and statistics. The show-crypto parameter displays available cryptodev configurations, settings and stats per node. +**--show-ring[=name]** +The show-ring pararmeter display current allocation of all ring with +debug information. Specifying the name allows to display details for specific +ring. For invalid or no ring name, whole list is dump. + Limitations ----------- -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v9 5/6] app/procinfo: add support for show mempool 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Vipin Varghese ` (3 preceding siblings ...) 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 4/6] app/procinfo: add support for debug ring Vipin Varghese @ 2019-01-10 21:36 ` Vipin Varghese 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 6/6] app/procinfo: add support for iter mempool Vipin Varghese 2019-01-11 14:46 ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Thomas Monjalon 6 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2019-01-10 21:36 UTC (permalink / raw) To: dev, thomas, john.mcnamara Cc: konstantin.ananyev, stephen, reshma.pattan, jasvinder.singh, stephen1.byrne, amol.patel, Vipin Varghese Function show_mempool is used for displaying valid MEMPOOL. In case of invalid or no name, whole list is dump. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> Acked-by: Reshma Pattan <reshma.pattan@intel.com> Acked-by: John McNamara <john.mcnamara@intel.com> --- app/proc-info/main.c | 65 +++++++++++++++++++++++++++++++++- doc/guides/tools/proc_info.rst | 7 +++- 2 files changed, 70 insertions(+), 2 deletions(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index ed136d828..4aeab926d 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -85,6 +85,9 @@ static uint32_t enable_shw_crypto; /**< Enable show ring. */ static uint32_t enable_shw_ring; static char *ring_name; +/**< Enable show mempool. */ +static uint32_t enable_shw_mempool; +static char *mempool_name; /**< display usage */ static void @@ -108,7 +111,8 @@ proc_info_usage(const char *prgname) " --show-port: to display ports information\n" " --show-tm: to display traffic manager information for ports\n" " --show-crypto: to display crypto information\n" - " --show-ring[=name]: to display ring information\n", + " --show-ring[=name]: to display ring information\n" + " --show-mempool[=name]: to display mempool information\n", prgname); } @@ -219,6 +223,7 @@ proc_info_parse_args(int argc, char **argv) {"show-tm", 0, NULL, 0}, {"show-crypto", 0, NULL, 0}, {"show-ring", optional_argument, NULL, 0}, + {"show-mempool", optional_argument, NULL, 0}, {NULL, 0, 0, 0} }; @@ -275,6 +280,10 @@ proc_info_parse_args(int argc, char **argv) "show-ring", MAX_LONG_OPT_SZ)) { enable_shw_ring = 1; ring_name = optarg; + } else if (!strncmp(long_option[option_index].name, + "show-mempool", MAX_LONG_OPT_SZ)) { + enable_shw_mempool = 1; + mempool_name = optarg; } break; case 1: @@ -1118,6 +1127,58 @@ show_ring(char *name) STATS_BDR_STR(50, ""); } +static void +show_mempool(char *name) +{ + uint64_t flags = 0; + + snprintf(bdr_str, MAX_STRING_LEN, " show - MEMPOOL %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + if (name != NULL) { + struct rte_mempool *ptr = rte_mempool_lookup(name); + if (ptr != NULL) { + flags = ptr->flags; + printf(" - Name: %s on socket %d\n" + " - flags:\n" + "\t -- No spread (%c)\n" + "\t -- No cache align (%c)\n" + "\t -- SP put (%c), SC get (%c)\n" + "\t -- Pool created (%c)\n" + "\t -- No IOVA config (%c)\n", + ptr->name, + ptr->socket_id, + (flags & MEMPOOL_F_NO_SPREAD) ? 'y' : 'n', + (flags & MEMPOOL_F_NO_CACHE_ALIGN) ? 'y' : 'n', + (flags & MEMPOOL_F_SP_PUT) ? 'y' : 'n', + (flags & MEMPOOL_F_SC_GET) ? 'y' : 'n', + (flags & MEMPOOL_F_POOL_CREATED) ? 'y' : 'n', + (flags & MEMPOOL_F_NO_IOVA_CONTIG) ? 'y' : 'n'); + printf(" - Size %u Cache %u element %u\n" + " - header %u trailer %u\n" + " - private data size %u\n", + ptr->size, + ptr->cache_size, + ptr->elt_size, + ptr->header_size, + ptr->trailer_size, + ptr->private_data_size); + printf(" - memezone - socket %d\n", + ptr->mz->socket_id); + printf(" - Count: avail (%u), in use (%u)\n", + rte_mempool_avail_count(ptr), + rte_mempool_in_use_count(ptr)); + + STATS_BDR_STR(50, ""); + return; + } + } + + rte_mempool_list_dump(stdout); + STATS_BDR_STR(50, ""); +} + int main(int argc, char **argv) { @@ -1207,6 +1268,8 @@ main(int argc, char **argv) show_crypto(); if (enable_shw_ring) show_ring(ring_name); + if (enable_shw_mempool) + show_mempool(mempool_name); ret = rte_eal_cleanup(); if (ret) diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst index ba5c3dbd1..42c5d45e0 100644 --- a/doc/guides/tools/proc_info.rst +++ b/doc/guides/tools/proc_info.rst @@ -19,7 +19,7 @@ The application has a number of command line options: ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats | --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto | - --show-ring[=name] ] + --show-ring[=name] | --show-mempool[=name] ] Parameters ~~~~~~~~~~ @@ -60,6 +60,11 @@ The show-ring pararmeter display current allocation of all ring with debug information. Specifying the name allows to display details for specific ring. For invalid or no ring name, whole list is dump. +**--show-mempool[=name]** +The show-mempool parameter display current allocation of all mempool +debug information. Specifying the name allows to display details for specific +specific mempool. For invalid or no mempool name, whole list is dump. + Limitations ----------- -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v9 6/6] app/procinfo: add support for iter mempool 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Vipin Varghese ` (4 preceding siblings ...) 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 5/6] app/procinfo: add support for show mempool Vipin Varghese @ 2019-01-10 21:36 ` Vipin Varghese 2019-01-11 14:46 ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Thomas Monjalon 6 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2019-01-10 21:36 UTC (permalink / raw) To: dev, thomas, john.mcnamara Cc: konstantin.ananyev, stephen, reshma.pattan, jasvinder.singh, stephen1.byrne, amol.patel, Vipin Varghese Function iter_mempool is used for iterating slected mempool elements and display the contents of elements for a max of 256 bytes. In case of invalid or no name for mempool, no information is displayed. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> Acked-by: Reshma Pattan <reshma.pattan@intel.com> Acked-by: John McNamara <john.mcnamara@intel.com> --- app/proc-info/main.c | 48 +++++++++++++++++++++++++++++++++- doc/guides/tools/proc_info.rst | 6 ++++- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 4aeab926d..b9acfa9ec 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -33,6 +33,7 @@ #include <rte_security.h> #include <rte_cryptodev.h> #include <rte_tm.h> +#include <rte_hexdump.h> /* Maximum long option length for option parsing. */ #define MAX_LONG_OPT_SZ 64 @@ -88,6 +89,9 @@ static char *ring_name; /**< Enable show mempool. */ static uint32_t enable_shw_mempool; static char *mempool_name; +/**< Enable iter mempool. */ +static uint32_t enable_iter_mempool; +static char *mempool_iter_name; /**< display usage */ static void @@ -112,7 +116,8 @@ proc_info_usage(const char *prgname) " --show-tm: to display traffic manager information for ports\n" " --show-crypto: to display crypto information\n" " --show-ring[=name]: to display ring information\n" - " --show-mempool[=name]: to display mempool information\n", + " --show-mempool[=name]: to display mempool information\n" + " --iter-mempool=name: iterate mempool elements to display content\n", prgname); } @@ -224,6 +229,7 @@ proc_info_parse_args(int argc, char **argv) {"show-crypto", 0, NULL, 0}, {"show-ring", optional_argument, NULL, 0}, {"show-mempool", optional_argument, NULL, 0}, + {"iter-mempool", required_argument, NULL, 0}, {NULL, 0, 0, 0} }; @@ -284,6 +290,10 @@ proc_info_parse_args(int argc, char **argv) "show-mempool", MAX_LONG_OPT_SZ)) { enable_shw_mempool = 1; mempool_name = optarg; + } else if (!strncmp(long_option[option_index].name, + "iter-mempool", MAX_LONG_OPT_SZ)) { + enable_iter_mempool = 1; + mempool_iter_name = optarg; } break; case 1: @@ -1179,6 +1189,40 @@ show_mempool(char *name) STATS_BDR_STR(50, ""); } +static void +mempool_itr_obj(struct rte_mempool *mp, void *opaque, + void *obj, unsigned int obj_idx) +{ + printf(" - obj_idx %u opaque %p obj %p\n", + obj_idx, opaque, obj); + + if (obj) + rte_hexdump(stdout, " Obj Content", + obj, (mp->elt_size > 256)?256:mp->elt_size); +} + +static void +iter_mempool(char *name) +{ + snprintf(bdr_str, MAX_STRING_LEN, " iter - MEMPOOL %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + if (name != NULL) { + struct rte_mempool *ptr = rte_mempool_lookup(name); + if (ptr != NULL) { + /* iterate each object */ + uint32_t ret = rte_mempool_obj_iter(ptr, + mempool_itr_obj, NULL); + printf("\n - iterated %u objects\n", ret); + STATS_BDR_STR(50, ""); + return; + } + } + + STATS_BDR_STR(50, ""); +} + int main(int argc, char **argv) { @@ -1270,6 +1314,8 @@ main(int argc, char **argv) show_ring(ring_name); if (enable_shw_mempool) show_mempool(mempool_name); + if (enable_iter_mempool) + iter_mempool(mempool_iter_name); ret = rte_eal_cleanup(); if (ret) diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst index 42c5d45e0..6bdf5a861 100644 --- a/doc/guides/tools/proc_info.rst +++ b/doc/guides/tools/proc_info.rst @@ -19,7 +19,7 @@ The application has a number of command line options: ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats | --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto | - --show-ring[=name] | --show-mempool[=name] ] + --show-ring[=name] | --show-mempool[=name] | --iter-mempool=name ] Parameters ~~~~~~~~~~ @@ -65,6 +65,10 @@ The show-mempool parameter display current allocation of all mempool debug information. Specifying the name allows to display details for specific specific mempool. For invalid or no mempool name, whole list is dump. +**--iter-mempool=name** +The iter-mempool parameter iterates and displays mempool elements specified +by name. For invalid or no mempool name no elements are displayed. + Limitations ----------- -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Vipin Varghese ` (5 preceding siblings ...) 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 6/6] app/procinfo: add support for iter mempool Vipin Varghese @ 2019-01-11 14:46 ` Thomas Monjalon 2019-01-14 0:07 ` Varghese, Vipin 6 siblings, 1 reply; 69+ messages in thread From: Thomas Monjalon @ 2019-01-11 14:46 UTC (permalink / raw) To: Vipin Varghese Cc: dev, john.mcnamara, konstantin.ananyev, stephen, reshma.pattan, jasvinder.singh, stephen1.byrne, amol.patel 10/01/2019 22:36, Vipin Varghese: > This patch adds new debug functions to existing proc-info tool. > > Motivation > ========== > > DPDK proc-info tool is been widely used as secondary process to collect > stats for any primary process. But these are limited to DPDK NIC ports and > basic memory usage. > > The patch series tries to address the missing debug information for PMD by > adding debug for port, traffic manager, crypto, ring and mempool. With > these additional information collected, it becomes easy to analyze issues > and performance variance. Applied, thanks ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool 2019-01-11 14:46 ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Thomas Monjalon @ 2019-01-14 0:07 ` Varghese, Vipin 0 siblings, 0 replies; 69+ messages in thread From: Varghese, Vipin @ 2019-01-14 0:07 UTC (permalink / raw) To: Thomas Monjalon Cc: dev, Mcnamara, John, Ananyev, Konstantin, stephen, Pattan, Reshma, Singh, Jasvinder, Byrne, Stephen1, Patel, Amol thanks > -----Original Message----- > From: Thomas Monjalon <thomas@monjalon.net> > Sent: Friday, January 11, 2019 8:17 PM > To: Varghese, Vipin <vipin.varghese@intel.com> > Cc: dev@dpdk.org; Mcnamara, John <john.mcnamara@intel.com>; Ananyev, > Konstantin <konstantin.ananyev@intel.com>; stephen@networkplumber.org; > Pattan, Reshma <reshma.pattan@intel.com>; Singh, Jasvinder > <jasvinder.singh@intel.com>; Byrne, Stephen1 <stephen1.byrne@intel.com>; > Patel, Amol <amol.patel@intel.com> > Subject: Re: [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc- > info tool > > 10/01/2019 22:36, Vipin Varghese: > > This patch adds new debug functions to existing proc-info tool. > > > > Motivation > > ========== > > > > DPDK proc-info tool is been widely used as secondary process to > > collect stats for any primary process. But these are limited to DPDK > > NIC ports and basic memory usage. > > > > The patch series tries to address the missing debug information for > > PMD by adding debug for port, traffic manager, crypto, ring and > > mempool. With these additional information collected, it becomes easy > > to analyze issues and performance variance. > > Applied, thanks > > ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v8 2/7] app/procinfo: add support for show port 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance " Vipin Varghese 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions Vipin Varghese @ 2019-01-07 15:38 ` Vipin Varghese 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 3/7] app/procinfo: add support for show tm Vipin Varghese ` (4 subsequent siblings) 6 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2019-01-07 15:38 UTC (permalink / raw) To: dev, thomas Cc: reshma.pattan, john.mcnamara, amol.patel, stephen, konstantin.ananyev, jasvinder.singh, Vipin Varghese Function show_port is used for displaying the port PMD information under primary process. The information shows basic, per queue and security. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> Acked-by: Reshma Pattan <reshma.pattan@intel.com> Acked-by: John McNamara <john.mcnamara@intel.com> --- app/proc-info/main.c | 106 ++++++++++++++++++++++++++++++++- doc/guides/tools/proc_info.rst | 9 ++- 2 files changed, 112 insertions(+), 3 deletions(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index c7697389c..2108c24b0 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -75,6 +75,9 @@ static uint64_t xstats_ids[MAX_NB_XSTATS_IDS]; /* show border */ static char bdr_str[MAX_STRING_LEN]; +/**< Enable show port. */ +static uint32_t enable_shw_port; + /**< display usage */ static void proc_info_usage(const char *prgname) @@ -93,7 +96,8 @@ proc_info_usage(const char *prgname) " --stats-reset: to reset port statistics\n" " --xstats-reset: to reset port extended statistics\n" " --collectd-format: to print statistics to STDOUT in expected by collectd format\n" - " --host-id STRING: host id used to identify the system process is running on\n", + " --host-id STRING: host id used to identify the system process is running on\n" + " --show-port: to display ports information\n", prgname); } @@ -200,6 +204,7 @@ proc_info_parse_args(int argc, char **argv) {"collectd-format", 0, NULL, 0}, {"xstats-ids", 1, NULL, 1}, {"host-id", 0, NULL, 0}, + {"show-port", 0, NULL, 0}, {NULL, 0, 0, 0} }; @@ -243,6 +248,9 @@ proc_info_parse_args(int argc, char **argv) else if (!strncmp(long_option[option_index].name, "xstats-reset", MAX_LONG_OPT_SZ)) reset_xstats = 1; + else if (!strncmp(long_option[option_index].name, + "show-port", MAX_LONG_OPT_SZ)) + enable_shw_port = 1; break; case 1: /* Print xstat single value given by name*/ @@ -594,6 +602,98 @@ metrics_display(int port_id) rte_free(names); } +static void +show_port(void) +{ + uint16_t i = 0; + int ret = 0, j, k; + + snprintf(bdr_str, MAX_STRING_LEN, " show - Port PMD %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + RTE_ETH_FOREACH_DEV(i) { + uint16_t mtu = 0; + struct rte_eth_link link; + struct rte_eth_dev_info dev_info; + struct rte_eth_rxq_info queue_info; + struct rte_eth_rss_conf rss_conf; + + memset(&rss_conf, 0, sizeof(rss_conf)); + + snprintf(bdr_str, MAX_STRING_LEN, " Port (%u)", i); + STATS_BDR_STR(5, bdr_str); + printf(" - generic config\n"); + + printf("\t -- Socket %d\n", rte_eth_dev_socket_id(i)); + rte_eth_link_get(i, &link); + printf("\t -- link speed %d duplex %d," + " auto neg %d status %d\n", + link.link_speed, + link.link_duplex, + link.link_autoneg, + link.link_status); + printf("\t -- promiscuous (%d)\n", + rte_eth_promiscuous_get(i)); + ret = rte_eth_dev_get_mtu(i, &mtu); + if (ret == 0) + printf("\t -- mtu (%d)\n", mtu); + + rte_eth_dev_info_get(i, &dev_info); + + printf(" - queue\n"); + for (j = 0; j < dev_info.nb_rx_queues; j++) { + ret = rte_eth_rx_queue_info_get(i, j, &queue_info); + if (ret == 0) { + printf("\t -- queue %d rx scatter %d" + " descriptors %d" + " offloads 0x%"PRIx64 + " mempool socket %d\n", + j, + queue_info.scattered_rx, + queue_info.nb_desc, + queue_info.conf.offloads, + queue_info.mp->socket_id); + } + } + + ret = rte_eth_dev_rss_hash_conf_get(i, &rss_conf); + if (ret == 0) { + if (rss_conf.rss_key) { + printf(" - RSS\n"); + printf("\t -- RSS len %u key (hex):", + rss_conf.rss_key_len); + for (k = 0; k < rss_conf.rss_key_len; k++) + printf(" %x", rss_conf.rss_key[k]); + printf("\t -- hf 0x%"PRIx64"\n", + rss_conf.rss_hf); + } + } + + printf(" - cyrpto context\n"); + void *p_ctx = rte_eth_dev_get_sec_ctx(i); + printf("\t -- security context - %p\n", p_ctx); + + if (p_ctx) { + printf("\t -- size %u\n", + rte_security_session_get_size(p_ctx)); + const struct rte_security_capability *s_cap = + rte_security_capabilities_get(p_ctx); + if (s_cap) { + printf("\t -- action (0x%x), protocol (0x%x)," + " offload flags (0x%x)\n", + s_cap->action, + s_cap->protocol, + s_cap->ol_flags); + printf("\t -- capabilities - oper type %x\n", + s_cap->crypto_capabilities->op); + } + } + } + + STATS_BDR_STR(50, ""); +} + int main(int argc, char **argv) { @@ -674,6 +774,10 @@ main(int argc, char **argv) if (enable_metrics) metrics_display(RTE_METRICS_GLOBAL); + /* show information for PMD */ + if (enable_shw_port) + show_port(); + ret = rte_eal_cleanup(); if (ret) printf("Error from rte_eal_cleanup(), %d\n", ret); diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst index d5b5ed6a6..6baa1db9a 100644 --- a/doc/guides/tools/proc_info.rst +++ b/doc/guides/tools/proc_info.rst @@ -6,7 +6,8 @@ dpdk-procinfo Application The dpdk-procinfo application is a Data Plane Development Kit (DPDK) application that runs as a DPDK secondary process and is capable of retrieving port -statistics, resetting port statistics and printing DPDK memory information. +statistics, resetting port statistics, printing DPDK memory information and +displaying debug information for port. This application extends the original functionality that was supported by dump_cfg. @@ -17,7 +18,7 @@ The application has a number of command line options: .. code-block:: console ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats | - --stats-reset | --xstats-reset] + --stats-reset | --xstats-reset] [ --show-port ] Parameters ~~~~~~~~~~ @@ -41,6 +42,10 @@ If no port mask is specified xstats are reset for all DPDK ports. **-m**: Print DPDK memory information. +**--show-port** +The show-port parameter displays port level various configuration informationi +associated to RX port queue pair. + Limitations ----------- -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v8 3/7] app/procinfo: add support for show tm 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance " Vipin Varghese 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions Vipin Varghese 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 2/7] app/procinfo: add support for show port Vipin Varghese @ 2019-01-07 15:38 ` Vipin Varghese 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 4/7] app/procinfo: add support for show crypto Vipin Varghese ` (3 subsequent siblings) 6 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2019-01-07 15:38 UTC (permalink / raw) To: dev, thomas Cc: reshma.pattan, john.mcnamara, amol.patel, stephen, konstantin.ananyev, jasvinder.singh, Vipin Varghese Function show_tm is used for displaying the tm PMD under the primary process. This covers basic and per node|level details with statistics. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> Acked-by: Reshma Pattan <reshma.pattan@intel.com> Acked-by: John McNamara <john.mcnamara@intel.com> --- app/proc-info/main.c | 290 ++++++++++++++++++++++++++++++++- doc/guides/tools/proc_info.rst | 6 +- 2 files changed, 294 insertions(+), 2 deletions(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 2108c24b0..ea15ae1a6 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -32,6 +32,7 @@ #include <rte_cycles.h> #include <rte_security.h> #include <rte_cryptodev.h> +#include <rte_tm.h> /* Maximum long option length for option parsing. */ #define MAX_LONG_OPT_SZ 64 @@ -77,6 +78,8 @@ static char bdr_str[MAX_STRING_LEN]; /**< Enable show port. */ static uint32_t enable_shw_port; +/**< Enable show tm. */ +static uint32_t enable_shw_tm; /**< display usage */ static void @@ -97,7 +100,8 @@ proc_info_usage(const char *prgname) " --xstats-reset: to reset port extended statistics\n" " --collectd-format: to print statistics to STDOUT in expected by collectd format\n" " --host-id STRING: host id used to identify the system process is running on\n" - " --show-port: to display ports information\n", + " --show-port: to display ports information\n" + " --show-tm: to display traffic manager information for ports\n", prgname); } @@ -205,6 +209,7 @@ proc_info_parse_args(int argc, char **argv) {"xstats-ids", 1, NULL, 1}, {"host-id", 0, NULL, 0}, {"show-port", 0, NULL, 0}, + {"show-tm", 0, NULL, 0}, {NULL, 0, 0, 0} }; @@ -251,6 +256,9 @@ proc_info_parse_args(int argc, char **argv) else if (!strncmp(long_option[option_index].name, "show-port", MAX_LONG_OPT_SZ)) enable_shw_port = 1; + else if (!strncmp(long_option[option_index].name, + "show-tm", MAX_LONG_OPT_SZ)) + enable_shw_tm = 1; break; case 1: /* Print xstat single value given by name*/ @@ -694,6 +702,284 @@ show_port(void) STATS_BDR_STR(50, ""); } +static void +display_nodecap_info(int is_leaf, struct rte_tm_node_capabilities *cap) +{ + if (cap == NULL) + return; + + if (!is_leaf) { + printf("\t -- nonleaf sched max:\n" + "\t\t + children (%u)\n" + "\t\t + sp priorities (%u)\n" + "\t\t + wfq children per group (%u)\n" + "\t\t + wfq groups (%u)\n" + "\t\t + wfq weight (%u)\n", + cap->nonleaf.sched_n_children_max, + cap->nonleaf.sched_sp_n_priorities_max, + cap->nonleaf.sched_wfq_n_children_per_group_max, + cap->nonleaf.sched_wfq_n_groups_max, + cap->nonleaf.sched_wfq_weight_max); + } else { + printf("\t -- leaf cman support:\n" + "\t\t + wred pkt mode (%d)\n" + "\t\t + wred byte mode (%d)\n" + "\t\t + head drop (%d)\n" + "\t\t + wred context private (%d)\n" + "\t\t + wred context shared (%u)\n", + cap->leaf.cman_wred_packet_mode_supported, + cap->leaf.cman_wred_byte_mode_supported, + cap->leaf.cman_head_drop_supported, + cap->leaf.cman_wred_context_private_supported, + cap->leaf.cman_wred_context_shared_n_max); + } +} + +static void +display_levelcap_info(int is_leaf, struct rte_tm_level_capabilities *cap) +{ + if (cap == NULL) + return; + + if (!is_leaf) { + printf("\t -- shaper private: (%d) dual rate (%d)\n", + cap->nonleaf.shaper_private_supported, + cap->nonleaf.shaper_private_dual_rate_supported); + printf("\t -- shaper share: (%u)\n", + cap->nonleaf.shaper_shared_n_max); + printf("\t -- non leaf sched MAX:\n" + "\t\t + children (%u)\n" + "\t\t + sp (%u)\n" + "\t\t + wfq children per group (%u)\n" + "\t\t + wfq groups (%u)\n" + "\t\t + wfq weight (%u)\n", + cap->nonleaf.sched_n_children_max, + cap->nonleaf.sched_sp_n_priorities_max, + cap->nonleaf.sched_wfq_n_children_per_group_max, + cap->nonleaf.sched_wfq_n_groups_max, + cap->nonleaf.sched_wfq_weight_max); + } else { + printf("\t -- shaper private: (%d) dual rate (%d)\n", + cap->leaf.shaper_private_supported, + cap->leaf.shaper_private_dual_rate_supported); + printf("\t -- shaper share: (%u)\n", + cap->leaf.shaper_shared_n_max); + printf(" -- leaf cman support:\n" + "\t\t + wred pkt mode (%d)\n" + "\t\t + wred byte mode (%d)\n" + "\t\t + head drop (%d)\n" + "\t\t + wred context private (%d)\n" + "\t\t + wred context shared (%u)\n", + cap->leaf.cman_wred_packet_mode_supported, + cap->leaf.cman_wred_byte_mode_supported, + cap->leaf.cman_head_drop_supported, + cap->leaf.cman_wred_context_private_supported, + cap->leaf.cman_wred_context_shared_n_max); + } +} + +static void +show_tm(void) +{ + int ret = 0, check_for_leaf = 0, is_leaf = 0; + unsigned int j, k; + uint16_t i = 0; + + snprintf(bdr_str, MAX_STRING_LEN, " show - TM PMD %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + RTE_ETH_FOREACH_DEV(i) { + struct rte_eth_dev_info dev_info; + struct rte_tm_capabilities cap; + struct rte_tm_error error; + struct rte_tm_node_capabilities capnode; + struct rte_tm_level_capabilities caplevel; + uint32_t n_leaf_nodes = 0; + + memset(&cap, 0, sizeof(cap)); + memset(&error, 0, sizeof(error)); + + rte_eth_dev_info_get(i, &dev_info); + printf(" - Generic for port (%u)\n" + "\t -- driver name %s\n" + "\t -- max vf (%u)\n" + "\t -- max tx queues (%u)\n" + "\t -- number of tx queues (%u)\n", + i, + dev_info.driver_name, + dev_info.max_vfs, + dev_info.max_tx_queues, + dev_info.nb_tx_queues); + + ret = rte_tm_capabilities_get(i, &cap, &error); + if (ret) + continue; + + printf(" - MAX: nodes (%u) levels (%u) children (%u)\n", + cap.n_nodes_max, + cap.n_levels_max, + cap.sched_n_children_max); + + printf(" - identical nodes: non leaf (%d) leaf (%d)\n", + cap.non_leaf_nodes_identical, + cap.leaf_nodes_identical); + + printf(" - Shaper MAX:\n" + "\t -- total (%u)\n" + "\t -- private (%u) private dual (%d)\n" + "\t -- shared (%u) shared dual (%u)\n", + cap.shaper_n_max, + cap.shaper_private_n_max, + cap.shaper_private_dual_rate_n_max, + cap.shaper_shared_n_max, + cap.shaper_shared_dual_rate_n_max); + + printf(" - mark support:\n"); + printf("\t -- vlan dei: GREEN (%d) YELLOW (%d) RED (%d)\n", + cap.mark_vlan_dei_supported[RTE_TM_GREEN], + cap.mark_vlan_dei_supported[RTE_TM_YELLOW], + cap.mark_vlan_dei_supported[RTE_TM_RED]); + printf("\t -- ip ecn tcp: GREEN (%d) YELLOW (%d) RED (%d)\n", + cap.mark_ip_ecn_tcp_supported[RTE_TM_GREEN], + cap.mark_ip_ecn_tcp_supported[RTE_TM_YELLOW], + cap.mark_ip_ecn_tcp_supported[RTE_TM_RED]); + printf("\t -- ip ecn sctp: GREEN (%d) YELLOW (%d) RED (%d)\n", + cap.mark_ip_ecn_sctp_supported[RTE_TM_GREEN], + cap.mark_ip_ecn_sctp_supported[RTE_TM_YELLOW], + cap.mark_ip_ecn_sctp_supported[RTE_TM_RED]); + printf("\t -- ip dscp: GREEN (%d) YELLOW (%d) RED (%d)\n", + cap.mark_ip_dscp_supported[RTE_TM_GREEN], + cap.mark_ip_dscp_supported[RTE_TM_YELLOW], + cap.mark_ip_dscp_supported[RTE_TM_RED]); + + printf(" - mask stats (0x%"PRIx64")" + " dynamic update (0x%"PRIx64")\n", + cap.stats_mask, + cap.dynamic_update_mask); + + printf(" - sched MAX:\n" + "\t -- total (%u)\n" + "\t -- sp levels (%u)\n" + "\t -- wfq children per group (%u)\n" + "\t -- wfq groups (%u)\n" + "\t -- wfq weight (%u)\n", + cap.sched_sp_n_priorities_max, + cap.sched_sp_n_priorities_max, + cap.sched_wfq_n_children_per_group_max, + cap.sched_wfq_n_groups_max, + cap.sched_wfq_weight_max); + + printf(" - CMAN support:\n" + "\t -- WRED mode: pkt (%d) byte (%d)\n" + "\t -- head drop (%d)\n", + cap.cman_wred_packet_mode_supported, + cap.cman_wred_byte_mode_supported, + cap.cman_head_drop_supported); + printf("\t -- MAX WRED CONTEXT:" + " total (%u) private (%u) shared (%u)\n", + cap.cman_wred_context_n_max, + cap.cman_wred_context_private_n_max, + cap.cman_wred_context_shared_n_max); + + for (j = 0; j < cap.n_nodes_max; j++) { + memset(&capnode, 0, sizeof(capnode)); + ret = rte_tm_node_capabilities_get(i, j, + &capnode, &error); + if (ret) + continue; + + check_for_leaf = 1; + + printf(" NODE %u\n", j); + printf("\t - shaper private: (%d) dual rate (%d)\n", + capnode.shaper_private_supported, + capnode.shaper_private_dual_rate_supported); + printf("\t - shaper shared max: (%u)\n", + capnode.shaper_shared_n_max); + printf("\t - stats mask %"PRIx64"\n", + capnode.stats_mask); + + ret = rte_tm_node_type_get(i, j, &is_leaf, &error); + if (ret) + continue; + + display_nodecap_info(is_leaf, &capnode); + } + + for (j = 0; j < cap.n_levels_max; j++) { + memset(&caplevel, 0, sizeof(caplevel)); + ret = rte_tm_level_capabilities_get(i, j, + &caplevel, &error); + if (ret) + continue; + + printf(" - Level %u\n", j); + printf("\t -- node MAX: %u non leaf %u leaf %u\n", + caplevel.n_nodes_max, + caplevel.n_nodes_nonleaf_max, + caplevel.n_nodes_leaf_max); + printf("\t -- indetical: non leaf %u leaf %u\n", + caplevel.non_leaf_nodes_identical, + caplevel.leaf_nodes_identical); + + for (k = 0; k < caplevel.n_nodes_max; k++) { + ret = rte_tm_node_type_get(i, k, + &is_leaf, &error); + if (ret) + continue; + + display_levelcap_info(is_leaf, &caplevel); + } + } + + if (check_for_leaf) { + ret = rte_tm_get_number_of_leaf_nodes(i, + &n_leaf_nodes, &error); + if (ret == 0) + printf(" - leaf nodes (%u)\n", n_leaf_nodes); + } + + for (j = 0; j < n_leaf_nodes; j++) { + struct rte_tm_node_stats stats; + memset(&stats, 0, sizeof(stats)); + + ret = rte_tm_node_stats_read(i, j, + &stats, &cap.stats_mask, 0, &error); + if (ret) + continue; + + printf(" - STATS for node (%u)\n", j); + printf(" -- pkts (%"PRIu64") bytes (%"PRIu64")\n", + stats.n_pkts, stats.n_bytes); + + ret = rte_tm_node_type_get(i, j, &is_leaf, &error); + if (ret || (!is_leaf)) + continue; + + printf(" -- leaf queued:" + " pkts (%"PRIu64") bytes (%"PRIu64")\n", + stats.leaf.n_pkts_queued, + stats.leaf.n_bytes_queued); + printf(" - dropped:\n" + "\t -- GREEN:" + " pkts (%"PRIu64") bytes (%"PRIu64")\n" + "\t -- YELLOW:" + " pkts (%"PRIu64") bytes (%"PRIu64")\n" + "\t -- RED:" + " pkts (%"PRIu64") bytes (%"PRIu64")\n", + stats.leaf.n_pkts_dropped[RTE_TM_GREEN], + stats.leaf.n_bytes_dropped[RTE_TM_GREEN], + stats.leaf.n_pkts_dropped[RTE_TM_YELLOW], + stats.leaf.n_bytes_dropped[RTE_TM_YELLOW], + stats.leaf.n_pkts_dropped[RTE_TM_RED], + stats.leaf.n_bytes_dropped[RTE_TM_RED]); + } + } + + STATS_BDR_STR(50, ""); +} + int main(int argc, char **argv) { @@ -777,6 +1063,8 @@ main(int argc, char **argv) /* show information for PMD */ if (enable_shw_port) show_port(); + if (enable_shw_tm) + show_tm(); ret = rte_eal_cleanup(); if (ret) diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst index 6baa1db9a..5f9afdb79 100644 --- a/doc/guides/tools/proc_info.rst +++ b/doc/guides/tools/proc_info.rst @@ -18,7 +18,7 @@ The application has a number of command line options: .. code-block:: console ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats | - --stats-reset | --xstats-reset] [ --show-port ] + --stats-reset | --xstats-reset] [ --show-port | --show-tm ] Parameters ~~~~~~~~~~ @@ -46,6 +46,10 @@ If no port mask is specified xstats are reset for all DPDK ports. The show-port parameter displays port level various configuration informationi associated to RX port queue pair. +**--show-tm** +The show-tm parameter displays per port traffic manager settings, current +configurations and statistics. + Limitations ----------- -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v8 4/7] app/procinfo: add support for show crypto 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance " Vipin Varghese ` (2 preceding siblings ...) 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 3/7] app/procinfo: add support for show tm Vipin Varghese @ 2019-01-07 15:38 ` Vipin Varghese 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 5/7] app/procinfo: add support for debug ring Vipin Varghese ` (2 subsequent siblings) 6 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2019-01-07 15:38 UTC (permalink / raw) To: dev, thomas Cc: reshma.pattan, john.mcnamara, amol.patel, stephen, konstantin.ananyev, jasvinder.singh, Vipin Varghese Function show_crypto is used for displaying the crypto PMD under primary process. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> Acked-by: Reshma Pattan <reshma.pattan@intel.com> Acked-by: John McNamara <john.mcnamara@intel.com> --- app/proc-info/main.c | 94 +++++++++++++++++++++++++++++++++- doc/guides/tools/proc_info.rst | 6 ++- 2 files changed, 98 insertions(+), 2 deletions(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index ea15ae1a6..4f625a371 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -80,6 +80,8 @@ static char bdr_str[MAX_STRING_LEN]; static uint32_t enable_shw_port; /**< Enable show tm. */ static uint32_t enable_shw_tm; +/**< Enable show crypto. */ +static uint32_t enable_shw_crypto; /**< display usage */ static void @@ -101,7 +103,8 @@ proc_info_usage(const char *prgname) " --collectd-format: to print statistics to STDOUT in expected by collectd format\n" " --host-id STRING: host id used to identify the system process is running on\n" " --show-port: to display ports information\n" - " --show-tm: to display traffic manager information for ports\n", + " --show-tm: to display traffic manager information for ports\n" + " --show-crypto: to display crypto information\n", prgname); } @@ -210,6 +213,7 @@ proc_info_parse_args(int argc, char **argv) {"host-id", 0, NULL, 0}, {"show-port", 0, NULL, 0}, {"show-tm", 0, NULL, 0}, + {"show-crypto", 0, NULL, 0}, {NULL, 0, 0, 0} }; @@ -259,6 +263,9 @@ proc_info_parse_args(int argc, char **argv) else if (!strncmp(long_option[option_index].name, "show-tm", MAX_LONG_OPT_SZ)) enable_shw_tm = 1; + else if (!strncmp(long_option[option_index].name, + "show-crypto", MAX_LONG_OPT_SZ)) + enable_shw_crypto = 1; break; case 1: /* Print xstat single value given by name*/ @@ -980,6 +987,89 @@ show_tm(void) STATS_BDR_STR(50, ""); } +static void +display_crypto_feature_info(uint64_t x) +{ + if (x == 0) + return; + + printf("\t -- feature flags\n"); + printf("\t\t + symmetric (%c), asymmetric (%c)\n" + "\t\t + symmetric operation chaining (%c)\n", + (x & RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING) ? 'y' : 'n'); + printf("\t\t + CPU: SSE (%c), AVX (%c), AVX2 (%c), AVX512 (%c)\n", + (x & RTE_CRYPTODEV_FF_CPU_SSE) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_CPU_AVX) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_CPU_AVX2) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_CPU_AVX512) ? 'y' : 'n'); + printf("\t\t + AESNI: CPU (%c), HW (%c)\n", + (x & RTE_CRYPTODEV_FF_CPU_AESNI) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_HW_ACCELERATED) ? 'y' : 'n'); + printf("\t\t + INLINE (%c)\n", + (x & RTE_CRYPTODEV_FF_SECURITY) ? 'y' : 'n'); + printf("\t\t + ARM: NEON (%c), CE (%c)\n", + (x & RTE_CRYPTODEV_FF_CPU_NEON) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_CPU_ARM_CE) ? 'y' : 'n'); + printf("\t -- buffer offload\n"); + printf("\t\t + IN_PLACE_SGL (%c)\n", + (x & RTE_CRYPTODEV_FF_IN_PLACE_SGL) ? 'y' : 'n'); + printf("\t\t + OOP_SGL_IN_SGL_OUT (%c)\n", + (x & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT) ? 'y' : 'n'); + printf("\t\t + OOP_SGL_IN_LB_OUT (%c)\n", + (x & RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT) ? 'y' : 'n'); + printf("\t\t + OOP_LB_IN_SGL_OUT (%c)\n", + (x & RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT) ? 'y' : 'n'); + printf("\t\t + OOP_LB_IN_LB_OUT (%c)\n", + (x & RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT) ? 'y' : 'n'); +} + +static void +show_crypto(void) +{ + uint8_t crypto_dev_count = rte_cryptodev_count(), i; + + snprintf(bdr_str, MAX_STRING_LEN, " show - CRYPTO PMD %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + for (i = 0; i < crypto_dev_count; i++) { + struct rte_cryptodev_info dev_info; + struct rte_cryptodev_stats stats; + + rte_cryptodev_info_get(i, &dev_info); + + printf(" - device (%u)\n", i); + printf("\t -- name (%s)\n" + "\t -- driver (%s)\n" + "\t -- id (%u) on socket (%d)\n" + "\t -- queue pairs (%d)\n", + rte_cryptodev_name_get(i), + dev_info.driver_name, + dev_info.driver_id, + dev_info.device->numa_node, + rte_cryptodev_queue_pair_count(i)); + + display_crypto_feature_info(dev_info.feature_flags); + + memset(&stats, 0, sizeof(0)); + if (rte_cryptodev_stats_get(i, &stats) == 0) { + printf("\t -- stats\n"); + printf("\t\t + enqueue count (%"PRIu64")" + " error (%"PRIu64")\n", + stats.enqueued_count, + stats.enqueue_err_count); + printf("\t\t + dequeue count (%"PRIu64")" + " error (%"PRIu64")\n", + stats.dequeued_count, + stats.dequeue_err_count); + } + } + + STATS_BDR_STR(50, ""); +} + int main(int argc, char **argv) { @@ -1065,6 +1155,8 @@ main(int argc, char **argv) show_port(); if (enable_shw_tm) show_tm(); + if (enable_shw_crypto) + show_crypto(); ret = rte_eal_cleanup(); if (ret) diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst index 5f9afdb79..883864d18 100644 --- a/doc/guides/tools/proc_info.rst +++ b/doc/guides/tools/proc_info.rst @@ -18,7 +18,7 @@ The application has a number of command line options: .. code-block:: console ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats | - --stats-reset | --xstats-reset] [ --show-port | --show-tm ] + --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto ] Parameters ~~~~~~~~~~ @@ -50,6 +50,10 @@ associated to RX port queue pair. The show-tm parameter displays per port traffic manager settings, current configurations and statistics. +**--show-crypto** +The show-crypto parameter displays available cryptodev configurations, +settings and stats per node. + Limitations ----------- -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v8 5/7] app/procinfo: add support for debug ring 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance " Vipin Varghese ` (3 preceding siblings ...) 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 4/7] app/procinfo: add support for show crypto Vipin Varghese @ 2019-01-07 15:38 ` Vipin Varghese 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 6/7] app/procinfo: add support for show mempool Vipin Varghese 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 7/7] app/procinfo: add support for iter mempool Vipin Varghese 6 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2019-01-07 15:38 UTC (permalink / raw) To: dev, thomas Cc: reshma.pattan, john.mcnamara, amol.patel, stephen, konstantin.ananyev, jasvinder.singh, Vipin Varghese Function show_ring is used for displaying information of RING instance of the primary process. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> Acked-by: Reshma Pattan <reshma.pattan@intel.com> Acked-by: John McNamara <john.mcnamara@intel.com> --- app/proc-info/main.c | 52 +++++++++++++++++++++++++++++++++- doc/guides/tools/proc_info.rst | 8 +++++- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 4f625a371..ed136d828 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -82,6 +82,9 @@ static uint32_t enable_shw_port; static uint32_t enable_shw_tm; /**< Enable show crypto. */ static uint32_t enable_shw_crypto; +/**< Enable show ring. */ +static uint32_t enable_shw_ring; +static char *ring_name; /**< display usage */ static void @@ -104,7 +107,8 @@ proc_info_usage(const char *prgname) " --host-id STRING: host id used to identify the system process is running on\n" " --show-port: to display ports information\n" " --show-tm: to display traffic manager information for ports\n" - " --show-crypto: to display crypto information\n", + " --show-crypto: to display crypto information\n" + " --show-ring[=name]: to display ring information\n", prgname); } @@ -214,6 +218,7 @@ proc_info_parse_args(int argc, char **argv) {"show-port", 0, NULL, 0}, {"show-tm", 0, NULL, 0}, {"show-crypto", 0, NULL, 0}, + {"show-ring", optional_argument, NULL, 0}, {NULL, 0, 0, 0} }; @@ -266,6 +271,11 @@ proc_info_parse_args(int argc, char **argv) else if (!strncmp(long_option[option_index].name, "show-crypto", MAX_LONG_OPT_SZ)) enable_shw_crypto = 1; + else if (!strncmp(long_option[option_index].name, + "show-ring", MAX_LONG_OPT_SZ)) { + enable_shw_ring = 1; + ring_name = optarg; + } break; case 1: /* Print xstat single value given by name*/ @@ -1070,6 +1080,44 @@ show_crypto(void) STATS_BDR_STR(50, ""); } +static void +show_ring(char *name) +{ + snprintf(bdr_str, MAX_STRING_LEN, " show - RING %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + if (name != NULL) { + struct rte_ring *ptr = rte_ring_lookup(name); + if (ptr != NULL) { + printf(" - Name (%s) on socket (%d)\n" + " - flags:\n" + "\t -- Single Producer Enqueue (%u)\n" + "\t -- Single Consmer Dequeue (%u)\n", + ptr->name, + ptr->memzone->socket_id, + ptr->flags & RING_F_SP_ENQ, + ptr->flags & RING_F_SC_DEQ); + printf(" - size (%u) mask (0x%x) capacity (%u)\n", + ptr->size, + ptr->mask, + ptr->capacity); + printf(" - count (%u) free count (%u)\n", + rte_ring_count(ptr), + rte_ring_free_count(ptr)); + printf(" - full (%d) empty (%d)\n", + rte_ring_full(ptr), + rte_ring_empty(ptr)); + + STATS_BDR_STR(50, ""); + return; + } + } + + rte_ring_list_dump(stdout); + STATS_BDR_STR(50, ""); +} + int main(int argc, char **argv) { @@ -1157,6 +1205,8 @@ main(int argc, char **argv) show_tm(); if (enable_shw_crypto) show_crypto(); + if (enable_shw_ring) + show_ring(ring_name); ret = rte_eal_cleanup(); if (ret) diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst index 883864d18..ba5c3dbd1 100644 --- a/doc/guides/tools/proc_info.rst +++ b/doc/guides/tools/proc_info.rst @@ -18,7 +18,8 @@ The application has a number of command line options: .. code-block:: console ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats | - --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto ] + --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto | + --show-ring[=name] ] Parameters ~~~~~~~~~~ @@ -54,6 +55,11 @@ configurations and statistics. The show-crypto parameter displays available cryptodev configurations, settings and stats per node. +**--show-ring[=name]** +The show-ring pararmeter display current allocation of all ring with +debug information. Specifying the name allows to display details for specific +ring. For invalid or no ring name, whole list is dump. + Limitations ----------- -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v8 6/7] app/procinfo: add support for show mempool 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance " Vipin Varghese ` (4 preceding siblings ...) 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 5/7] app/procinfo: add support for debug ring Vipin Varghese @ 2019-01-07 15:38 ` Vipin Varghese 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 7/7] app/procinfo: add support for iter mempool Vipin Varghese 6 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2019-01-07 15:38 UTC (permalink / raw) To: dev, thomas Cc: reshma.pattan, john.mcnamara, amol.patel, stephen, konstantin.ananyev, jasvinder.singh, Vipin Varghese Function show_mempool is used for displaying valid MEMPOOL. In case of invalid or no name, whole list is dump. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> Acked-by: Reshma Pattan <reshma.pattan@intel.com> Acked-by: John McNamara <john.mcnamara@intel.com> --- app/proc-info/main.c | 65 +++++++++++++++++++++++++++++++++- doc/guides/tools/proc_info.rst | 7 +++- 2 files changed, 70 insertions(+), 2 deletions(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index ed136d828..4aeab926d 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -85,6 +85,9 @@ static uint32_t enable_shw_crypto; /**< Enable show ring. */ static uint32_t enable_shw_ring; static char *ring_name; +/**< Enable show mempool. */ +static uint32_t enable_shw_mempool; +static char *mempool_name; /**< display usage */ static void @@ -108,7 +111,8 @@ proc_info_usage(const char *prgname) " --show-port: to display ports information\n" " --show-tm: to display traffic manager information for ports\n" " --show-crypto: to display crypto information\n" - " --show-ring[=name]: to display ring information\n", + " --show-ring[=name]: to display ring information\n" + " --show-mempool[=name]: to display mempool information\n", prgname); } @@ -219,6 +223,7 @@ proc_info_parse_args(int argc, char **argv) {"show-tm", 0, NULL, 0}, {"show-crypto", 0, NULL, 0}, {"show-ring", optional_argument, NULL, 0}, + {"show-mempool", optional_argument, NULL, 0}, {NULL, 0, 0, 0} }; @@ -275,6 +280,10 @@ proc_info_parse_args(int argc, char **argv) "show-ring", MAX_LONG_OPT_SZ)) { enable_shw_ring = 1; ring_name = optarg; + } else if (!strncmp(long_option[option_index].name, + "show-mempool", MAX_LONG_OPT_SZ)) { + enable_shw_mempool = 1; + mempool_name = optarg; } break; case 1: @@ -1118,6 +1127,58 @@ show_ring(char *name) STATS_BDR_STR(50, ""); } +static void +show_mempool(char *name) +{ + uint64_t flags = 0; + + snprintf(bdr_str, MAX_STRING_LEN, " show - MEMPOOL %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + if (name != NULL) { + struct rte_mempool *ptr = rte_mempool_lookup(name); + if (ptr != NULL) { + flags = ptr->flags; + printf(" - Name: %s on socket %d\n" + " - flags:\n" + "\t -- No spread (%c)\n" + "\t -- No cache align (%c)\n" + "\t -- SP put (%c), SC get (%c)\n" + "\t -- Pool created (%c)\n" + "\t -- No IOVA config (%c)\n", + ptr->name, + ptr->socket_id, + (flags & MEMPOOL_F_NO_SPREAD) ? 'y' : 'n', + (flags & MEMPOOL_F_NO_CACHE_ALIGN) ? 'y' : 'n', + (flags & MEMPOOL_F_SP_PUT) ? 'y' : 'n', + (flags & MEMPOOL_F_SC_GET) ? 'y' : 'n', + (flags & MEMPOOL_F_POOL_CREATED) ? 'y' : 'n', + (flags & MEMPOOL_F_NO_IOVA_CONTIG) ? 'y' : 'n'); + printf(" - Size %u Cache %u element %u\n" + " - header %u trailer %u\n" + " - private data size %u\n", + ptr->size, + ptr->cache_size, + ptr->elt_size, + ptr->header_size, + ptr->trailer_size, + ptr->private_data_size); + printf(" - memezone - socket %d\n", + ptr->mz->socket_id); + printf(" - Count: avail (%u), in use (%u)\n", + rte_mempool_avail_count(ptr), + rte_mempool_in_use_count(ptr)); + + STATS_BDR_STR(50, ""); + return; + } + } + + rte_mempool_list_dump(stdout); + STATS_BDR_STR(50, ""); +} + int main(int argc, char **argv) { @@ -1207,6 +1268,8 @@ main(int argc, char **argv) show_crypto(); if (enable_shw_ring) show_ring(ring_name); + if (enable_shw_mempool) + show_mempool(mempool_name); ret = rte_eal_cleanup(); if (ret) diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst index ba5c3dbd1..42c5d45e0 100644 --- a/doc/guides/tools/proc_info.rst +++ b/doc/guides/tools/proc_info.rst @@ -19,7 +19,7 @@ The application has a number of command line options: ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats | --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto | - --show-ring[=name] ] + --show-ring[=name] | --show-mempool[=name] ] Parameters ~~~~~~~~~~ @@ -60,6 +60,11 @@ The show-ring pararmeter display current allocation of all ring with debug information. Specifying the name allows to display details for specific ring. For invalid or no ring name, whole list is dump. +**--show-mempool[=name]** +The show-mempool parameter display current allocation of all mempool +debug information. Specifying the name allows to display details for specific +specific mempool. For invalid or no mempool name, whole list is dump. + Limitations ----------- -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v8 7/7] app/procinfo: add support for iter mempool 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance " Vipin Varghese ` (5 preceding siblings ...) 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 6/7] app/procinfo: add support for show mempool Vipin Varghese @ 2019-01-07 15:38 ` Vipin Varghese 6 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2019-01-07 15:38 UTC (permalink / raw) To: dev, thomas Cc: reshma.pattan, john.mcnamara, amol.patel, stephen, konstantin.ananyev, jasvinder.singh, Vipin Varghese Function iter_mempool is used for iterating slected mempool elements and display the contents of elements for a max of 256 bytes. In case of invalid or no name for mempool, no information is displayed. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> Acked-by: Reshma Pattan <reshma.pattan@intel.com> Acked-by: John McNamara <john.mcnamara@intel.com> --- app/proc-info/main.c | 48 +++++++++++++++++++++++++++++++++- doc/guides/tools/proc_info.rst | 6 ++++- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 4aeab926d..b9acfa9ec 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -33,6 +33,7 @@ #include <rte_security.h> #include <rte_cryptodev.h> #include <rte_tm.h> +#include <rte_hexdump.h> /* Maximum long option length for option parsing. */ #define MAX_LONG_OPT_SZ 64 @@ -88,6 +89,9 @@ static char *ring_name; /**< Enable show mempool. */ static uint32_t enable_shw_mempool; static char *mempool_name; +/**< Enable iter mempool. */ +static uint32_t enable_iter_mempool; +static char *mempool_iter_name; /**< display usage */ static void @@ -112,7 +116,8 @@ proc_info_usage(const char *prgname) " --show-tm: to display traffic manager information for ports\n" " --show-crypto: to display crypto information\n" " --show-ring[=name]: to display ring information\n" - " --show-mempool[=name]: to display mempool information\n", + " --show-mempool[=name]: to display mempool information\n" + " --iter-mempool=name: iterate mempool elements to display content\n", prgname); } @@ -224,6 +229,7 @@ proc_info_parse_args(int argc, char **argv) {"show-crypto", 0, NULL, 0}, {"show-ring", optional_argument, NULL, 0}, {"show-mempool", optional_argument, NULL, 0}, + {"iter-mempool", required_argument, NULL, 0}, {NULL, 0, 0, 0} }; @@ -284,6 +290,10 @@ proc_info_parse_args(int argc, char **argv) "show-mempool", MAX_LONG_OPT_SZ)) { enable_shw_mempool = 1; mempool_name = optarg; + } else if (!strncmp(long_option[option_index].name, + "iter-mempool", MAX_LONG_OPT_SZ)) { + enable_iter_mempool = 1; + mempool_iter_name = optarg; } break; case 1: @@ -1179,6 +1189,40 @@ show_mempool(char *name) STATS_BDR_STR(50, ""); } +static void +mempool_itr_obj(struct rte_mempool *mp, void *opaque, + void *obj, unsigned int obj_idx) +{ + printf(" - obj_idx %u opaque %p obj %p\n", + obj_idx, opaque, obj); + + if (obj) + rte_hexdump(stdout, " Obj Content", + obj, (mp->elt_size > 256)?256:mp->elt_size); +} + +static void +iter_mempool(char *name) +{ + snprintf(bdr_str, MAX_STRING_LEN, " iter - MEMPOOL %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + if (name != NULL) { + struct rte_mempool *ptr = rte_mempool_lookup(name); + if (ptr != NULL) { + /* iterate each object */ + uint32_t ret = rte_mempool_obj_iter(ptr, + mempool_itr_obj, NULL); + printf("\n - iterated %u objects\n", ret); + STATS_BDR_STR(50, ""); + return; + } + } + + STATS_BDR_STR(50, ""); +} + int main(int argc, char **argv) { @@ -1270,6 +1314,8 @@ main(int argc, char **argv) show_ring(ring_name); if (enable_shw_mempool) show_mempool(mempool_name); + if (enable_iter_mempool) + iter_mempool(mempool_iter_name); ret = rte_eal_cleanup(); if (ret) diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst index 42c5d45e0..6bdf5a861 100644 --- a/doc/guides/tools/proc_info.rst +++ b/doc/guides/tools/proc_info.rst @@ -19,7 +19,7 @@ The application has a number of command line options: ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats | --stats-reset | --xstats-reset] [ --show-port | --show-tm | --show-crypto | - --show-ring[=name] | --show-mempool[=name] ] + --show-ring[=name] | --show-mempool[=name] | --iter-mempool=name ] Parameters ~~~~~~~~~~ @@ -65,6 +65,10 @@ The show-mempool parameter display current allocation of all mempool debug information. Specifying the name allows to display details for specific specific mempool. For invalid or no mempool name, whole list is dump. +**--iter-mempool=name** +The iter-mempool parameter iterates and displays mempool elements specified +by name. For invalid or no mempool name no elements are displayed. + Limitations ----------- -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v6 2/9] app/procinfo: add compare for new options 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 1/9] app/procinfo: add usage for new debug Vipin Varghese @ 2018-12-03 5:49 ` Vipin Varghese 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 3/9] app/procinfo: add prototype for debug instances Vipin Varghese ` (6 subsequent siblings) 8 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-12-03 5:49 UTC (permalink / raw) To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese Add code for new debug options to compare usage strings and set enable flag. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V6: - check for iter mempool - Vipin Varghese V3: - variables from debug to show - Vipin Varghese V2: - compare string from dbg to show - Stephen Hemminger --- app/proc-info/main.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index c034aad97..bda7e9af8 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -63,6 +63,21 @@ static uint32_t mem_info; /**< Enable displaying xstat name. */ static uint32_t enable_xstats_name; static char *xstats_name; +/**< Enable show port. */ +static uint32_t enable_shw_port; +/**< Enable show tm. */ +static uint32_t enable_shw_tm; +/**< Enable show crypto. */ +static uint32_t enable_shw_crypto; +/**< Enable show ring. */ +static uint32_t enable_shw_ring; +static char *ring_name; +/**< Enable show mempool. */ +static uint32_t enable_shw_mempool; +static char *mempool_name; +/**< Enable iter mempool. */ +static uint32_t enable_iter_mempool; +static char *mempool_iter_name; /**< Enable xstats by ids. */ #define MAX_NB_XSTATS_IDS 1024 @@ -249,6 +264,29 @@ proc_info_parse_args(int argc, char **argv) else if (!strncmp(long_option[option_index].name, "xstats-reset", MAX_LONG_OPT_SZ)) reset_xstats = 1; + else if (!strncmp(long_option[option_index].name, + "show-port", MAX_LONG_OPT_SZ)) + enable_shw_port = 1; + else if (!strncmp(long_option[option_index].name, + "show-tm", MAX_LONG_OPT_SZ)) + enable_shw_tm = 1; + else if (!strncmp(long_option[option_index].name, + "show-crypto", MAX_LONG_OPT_SZ)) + enable_shw_crypto = 1; + else if (!strncmp(long_option[option_index].name, + "show-ring", MAX_LONG_OPT_SZ)) { + enable_shw_ring = 1; + ring_name = optarg; + } else if (!strncmp(long_option[option_index].name, + "show-mempool", MAX_LONG_OPT_SZ)) { + enable_shw_mempool = 1; + mempool_name = optarg; + } else if (!strncmp(long_option[option_index].name, + "iter-mempool", MAX_LONG_OPT_SZ)) { + enable_iter_mempool = 1; + mempool_iter_name = optarg; + } + break; case 1: /* Print xstat single value given by name*/ -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v6 3/9] app/procinfo: add prototype for debug instances 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 1/9] app/procinfo: add usage for new debug Vipin Varghese 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 2/9] app/procinfo: add compare for new options Vipin Varghese @ 2018-12-03 5:49 ` Vipin Varghese 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 4/9] app/procinfo: add support for show port Vipin Varghese ` (5 subsequent siblings) 8 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-12-03 5:49 UTC (permalink / raw) To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese Add prototype function calls for the show functions. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V6: - add call to iter mempool - Vipin Varghese V3: - update function names from debug to show - Vipin Varghese V2: - removed if else ladder - Vipin Varghese --- app/proc-info/main.c | 50 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index bda7e9af8..698b120f2 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -638,6 +638,42 @@ metrics_display(int port_id) rte_free(names); } +static void +show_port(void) +{ + printf(" port\n"); +} + +static void +show_tm(void) +{ + printf(" tm\n"); +} + +static void +show_crypto(void) +{ + printf(" crypto\n"); +} + +static void +show_ring(char *name) +{ + printf(" ring Name (%s)\n", name); +} + +static void +show_mempool(char *name) +{ + printf(" mempool Name (%s)\n", name); +} + +static void +iter_mempool(char *name) +{ + printf(" Iter elements in mempool (%s)\n", name); +} + int main(int argc, char **argv) { @@ -718,6 +754,20 @@ main(int argc, char **argv) if (enable_metrics) metrics_display(RTE_METRICS_GLOBAL); + /* show information for PMD */ + if (enable_shw_port) + show_port(); + if (enable_shw_tm) + show_tm(); + if (enable_shw_crypto) + show_crypto(); + if (enable_shw_ring) + show_ring(ring_name); + if (enable_shw_mempool) + show_mempool(mempool_name); + if (enable_iter_mempool) + iter_mempool(mempool_iter_name); + ret = rte_eal_cleanup(); if (ret) printf("Error from rte_eal_cleanup(), %d\n", ret); -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v6 4/9] app/procinfo: add support for show port 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese ` (2 preceding siblings ...) 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 3/9] app/procinfo: add prototype for debug instances Vipin Varghese @ 2018-12-03 5:49 ` Vipin Varghese 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 5/9] app/procinfo: add support for show tm Vipin Varghese ` (4 subsequent siblings) 8 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-12-03 5:49 UTC (permalink / raw) To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese Function show_port is used for displaying the port PMD information under under primary process. The information shows basic, per queue and security. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V5: - convert 100 to MAX_STRING_LEN - Reshma Pattan - RSS made for port - Reshma Pattan - update bdr_str to static - Stephen Hemminger - remove memset for link, dev_info, queue, stats - Stephen Hemminger V3: - fix meson build - Reshma Pattan - change 100 to MAX_STRING_LEN - Reshma Pattan - memset to struct elements - Reshma Pattan - printf tab space - Reshma Pattan - remove 'drop packet information' - Vipin Varghese V2: - redefine code format - Vipin Varghese --- app/proc-info/main.c | 117 +++++++++++++++++++++++++++++++++++++- app/proc-info/meson.build | 2 +- 2 files changed, 117 insertions(+), 2 deletions(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 698b120f2..dda6499b6 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -29,6 +29,9 @@ #include <rte_branch_prediction.h> #include <rte_string_fns.h> #include <rte_metrics.h> +#include <rte_cycles.h> +#include <rte_security.h> +#include <rte_cryptodev.h> /* Maximum long option length for option parsing. */ #define MAX_LONG_OPT_SZ 64 @@ -84,6 +87,9 @@ static char *mempool_iter_name; static uint32_t nb_xstats_ids; static uint64_t xstats_ids[MAX_NB_XSTATS_IDS]; +/* border variable to hold for show */ +static char bdr_str[MAX_STRING_LEN]; + /**< display usage */ static void proc_info_usage(const char *prgname) @@ -641,7 +647,116 @@ metrics_display(int port_id) static void show_port(void) { - printf(" port\n"); + uint16_t i = 0; + int ret = 0, j, k; + + snprintf(bdr_str, MAX_STRING_LEN, " show - Port PMD %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + RTE_ETH_FOREACH_DEV(i) { + uint16_t mtu = 0; + struct rte_eth_link link; + struct rte_eth_dev_info dev_info; + struct rte_eth_rxq_info queue_info; + struct rte_eth_stats stats; + struct rte_eth_rss_conf rss_conf; + + memset(&rss_conf, 0, sizeof(rss_conf)); + + snprintf(bdr_str, MAX_STRING_LEN, " Port (%u)", i); + STATS_BDR_STR(5, bdr_str); + printf(" - generic config\n"); + + printf("\t -- Socket %d\n", rte_eth_dev_socket_id(i)); + rte_eth_link_get(i, &link); + printf("\t -- link speed %d duplex %d," + " auto neg %d status %d\n", + link.link_speed, + link.link_duplex, + link.link_autoneg, + link.link_status); + printf("\t -- promiscuous (%d)\n", + rte_eth_promiscuous_get(i)); + ret = rte_eth_dev_get_mtu(i, &mtu); + if (ret == 0) + printf("\t -- mtu (%d)\n", mtu); + + printf(" - queue\n"); + + rte_eth_dev_info_get(i, &dev_info); + + for (j = 0; j < dev_info.nb_rx_queues; j++) { + ret = rte_eth_rx_queue_info_get(i, j, &queue_info); + if (ret == 0) { + printf("\t -- queue %d rx scatter %d" + " descriptors %d offloads 0x%"PRIx64 + " mempool socket %d\n", + j, + queue_info.scattered_rx, + queue_info.nb_desc, + queue_info.conf.offloads, + queue_info.mp->socket_id); + + ret = rte_eth_stats_get(i, &stats); + if (ret == 0) { + printf("\t -- packet input %"PRIu64 + " output %"PRIu64"" + " error %"PRIu64"\n", + stats.q_ipackets[j], + stats.q_opackets[j], + stats.q_errors[j]); + } + } + } + + ret = rte_eth_dev_rss_hash_conf_get(i, &rss_conf); + if (ret == 0) { + if (rss_conf.rss_key) { + printf("\t -- RSS len %u key (hex):", + rss_conf.rss_key_len); + for (k = 0; k < rss_conf.rss_key_len; k++) + printf(" %x", rss_conf.rss_key[k]); + printf("\t -- hf 0x%"PRIx64"\n", + rss_conf.rss_hf); + } + } + + ret = rte_eth_stats_get(i, &stats); + if (ret == 0) { + printf("\t -- packet input %"PRIu64 + " output %"PRIu64"\n", + stats.ipackets, + stats.opackets); + printf("\t -- packet error input %"PRIu64 + " output %"PRIu64"\n", + stats.ierrors, + stats.oerrors); + printf("\t -- RX no mbuf %"PRIu64"\n", + stats.rx_nombuf); + } + + printf(" - cyrpto context\n"); + void *ptr_ctx = rte_eth_dev_get_sec_ctx(i); + printf("\t -- security context - %p\n", ptr_ctx); + + if (ptr_ctx) { + printf("\t -- size %u\n", + rte_security_session_get_size(ptr_ctx)); + const struct rte_security_capability *ptr_sec_cap = + rte_security_capabilities_get(ptr_ctx); + if (ptr_sec_cap) { + printf("\t -- action (0x%x), protocol (0x%x)," + " offload flags (0x%x)\n", + ptr_sec_cap->action, + ptr_sec_cap->protocol, + ptr_sec_cap->ol_flags); + printf("\t -- capabilities - oper type %x\n", + ptr_sec_cap->crypto_capabilities->op); + } + } + } + STATS_BDR_STR(50, ""); } static void diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build index a52b2ee4a..866b390d6 100644 --- a/app/proc-info/meson.build +++ b/app/proc-info/meson.build @@ -3,4 +3,4 @@ sources = files('main.c') allow_experimental_apis = true -deps += ['ethdev', 'metrics'] +deps += ['ethdev', 'metrics', 'security'] -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v6 5/9] app/procinfo: add support for show tm 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese ` (3 preceding siblings ...) 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 4/9] app/procinfo: add support for show port Vipin Varghese @ 2018-12-03 5:49 ` Vipin Varghese 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 6/9] app/procinfo: add support for show crypto Vipin Varghese ` (3 subsequent siblings) 8 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-12-03 5:49 UTC (permalink / raw) To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese Function show_tm is used for displaying the tm PMD under the primary process. This covers basic and per node|level details with stats. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V6: - replace or with logical or - Reshma Pathan & Konstantin Ananyev V3: - memset for struct elements - Vipin Varghese - code cleanup for TM - Vipin Varghese - fetch for leaf nodes if node exist - Jasvinder Singh - display MARCO to function - Reshma Pathan & Stephen Hemminger V2: - MACRO for display node|level - cap - Vipin Varghese --- app/proc-info/main.c | 276 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 275 insertions(+), 1 deletion(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index dda6499b6..67e962878 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -32,6 +32,7 @@ #include <rte_cycles.h> #include <rte_security.h> #include <rte_cryptodev.h> +#include <rte_tm.h> /* Maximum long option length for option parsing. */ #define MAX_LONG_OPT_SZ 64 @@ -759,10 +760,283 @@ show_port(void) STATS_BDR_STR(50, ""); } +static void +display_nodecap_info(int is_leaf, struct rte_tm_node_capabilities *cap) +{ + if (cap == NULL) + return; + + if (!is_leaf) { + printf("\t -- nonleaf sched max:\n" + "\t\t + children (%u)\n" + "\t\t + sp priorities (%u)\n" + "\t\t + wfq children per group (%u)\n" + "\t\t + wfq groups (%u)\n" + "\t\t + wfq weight (%u)\n", + cap->nonleaf.sched_n_children_max, + cap->nonleaf.sched_sp_n_priorities_max, + cap->nonleaf.sched_wfq_n_children_per_group_max, + cap->nonleaf.sched_wfq_n_groups_max, + cap->nonleaf.sched_wfq_weight_max); + } else { + printf("\t -- leaf cman support:\n" + "\t\t + wred pkt mode (%d)\n" + "\t\t + wred byte mode (%d)\n" + "\t\t + head drop (%d)\n" + "\t\t + wred context private (%d)\n" + "\t\t + wred context shared (%u)\n", + cap->leaf.cman_wred_packet_mode_supported, + cap->leaf.cman_wred_byte_mode_supported, + cap->leaf.cman_head_drop_supported, + cap->leaf.cman_wred_context_private_supported, + cap->leaf.cman_wred_context_shared_n_max); + } +} + +static void +display_levelcap_info(int is_leaf, struct rte_tm_level_capabilities *cap) +{ + if (cap == NULL) + return; + + if (!is_leaf) { + printf("\t -- shaper private: (%d) dual rate (%d)\n", + cap->nonleaf.shaper_private_supported, + cap->nonleaf.shaper_private_dual_rate_supported); + printf("\t -- shaper share: (%u)\n", + cap->nonleaf.shaper_shared_n_max); + printf("\t -- non leaf sched MAX:\n" + "\t\t + children (%u)\n" + "\t\t + sp (%u)\n" + "\t\t + wfq children per group (%u)\n" + "\t\t + wfq groups (%u)\n" + "\t\t + wfq weight (%u)\n", + cap->nonleaf.sched_n_children_max, + cap->nonleaf.sched_sp_n_priorities_max, + cap->nonleaf.sched_wfq_n_children_per_group_max, + cap->nonleaf.sched_wfq_n_groups_max, + cap->nonleaf.sched_wfq_weight_max); + } else { + printf("\t -- shaper private: (%d) dual rate (%d)\n", + cap->leaf.shaper_private_supported, + cap->leaf.shaper_private_dual_rate_supported); + printf("\t -- shaper share: (%u)\n", + cap->leaf.shaper_shared_n_max); + printf(" -- leaf cman support:\n" + "\t\t + wred pkt mode (%d)\n" + "\t\t + wred byte mode (%d)\n" + "\t\t + head drop (%d)\n" + "\t\t + wred context private (%d)\n" + "\t\t + wred context shared (%u)\n", + cap->leaf.cman_wred_packet_mode_supported, + cap->leaf.cman_wred_byte_mode_supported, + cap->leaf.cman_head_drop_supported, + cap->leaf.cman_wred_context_private_supported, + cap->leaf.cman_wred_context_shared_n_max); + } +} + static void show_tm(void) { - printf(" tm\n"); + int ret = 0, check_for_leaf = 0, is_leaf = 0; + unsigned int j, k; + uint16_t i = 0; + + snprintf(bdr_str, MAX_STRING_LEN, " show - TM PMD %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + RTE_ETH_FOREACH_DEV(i) { + struct rte_eth_dev_info dev_info; + struct rte_tm_capabilities cap; + struct rte_tm_error error; + struct rte_tm_node_capabilities capnode; + struct rte_tm_level_capabilities caplevel; + uint32_t n_leaf_nodes = 0; + + memset(&dev_info, 0, sizeof(dev_info)); + memset(&cap, 0, sizeof(cap)); + memset(&error, 0, sizeof(error)); + + rte_eth_dev_info_get(i, &dev_info); + printf(" - Generic for port (%u)\n" + "\t -- driver name %s\n" + "\t -- max vf (%u)\n" + "\t -- max tx queues (%u)\n" + "\t -- number of tx queues (%u)\n", + i, + dev_info.driver_name, + dev_info.max_vfs, + dev_info.max_tx_queues, + dev_info.nb_tx_queues); + + ret = rte_tm_capabilities_get(i, &cap, &error); + if (ret) + continue; + + printf(" - MAX: nodes (%u) levels (%u) children (%u)\n", + cap.n_nodes_max, + cap.n_levels_max, + cap.sched_n_children_max); + + printf(" - identical nodes: non leaf (%d) leaf (%d)\n", + cap.non_leaf_nodes_identical, + cap.leaf_nodes_identical); + + printf(" - Shaper MAX:\n" + "\t -- total (%u)\n" + "\t -- private (%u) private dual (%d)\n" + "\t -- shared (%u) shared dual (%u)\n", + cap.shaper_n_max, + cap.shaper_private_n_max, + cap.shaper_private_dual_rate_n_max, + cap.shaper_shared_n_max, + cap.shaper_shared_dual_rate_n_max); + + printf(" - mark support:\n"); + printf("\t -- vlan dei: GREEN (%d) YELLOW (%d) RED (%d)\n", + cap.mark_vlan_dei_supported[RTE_TM_GREEN], + cap.mark_vlan_dei_supported[RTE_TM_YELLOW], + cap.mark_vlan_dei_supported[RTE_TM_RED]); + printf("\t -- ip ecn tcp: GREEN (%d) YELLOW (%d) RED (%d)\n", + cap.mark_ip_ecn_tcp_supported[RTE_TM_GREEN], + cap.mark_ip_ecn_tcp_supported[RTE_TM_YELLOW], + cap.mark_ip_ecn_tcp_supported[RTE_TM_RED]); + printf("\t -- ip ecn sctp: GREEN (%d) YELLOW (%d) RED (%d)\n", + cap.mark_ip_ecn_sctp_supported[RTE_TM_GREEN], + cap.mark_ip_ecn_sctp_supported[RTE_TM_YELLOW], + cap.mark_ip_ecn_sctp_supported[RTE_TM_RED]); + printf("\t -- ip dscp: GREEN (%d) YELLOW (%d) RED (%d)\n", + cap.mark_ip_dscp_supported[RTE_TM_GREEN], + cap.mark_ip_dscp_supported[RTE_TM_YELLOW], + cap.mark_ip_dscp_supported[RTE_TM_RED]); + + printf(" - mask stats (0x%"PRIx64")" + " dynamic update (0x%"PRIx64")\n", + cap.stats_mask, + cap.dynamic_update_mask); + + printf(" - sched MAX:\n" + "\t -- total (%u)\n" + "\t -- sp levels (%u)\n" + "\t -- wfq children per group (%u)\n" + "\t -- wfq groups (%u)\n" + "\t -- wfq weight (%u)\n", + cap.sched_sp_n_priorities_max, + cap.sched_sp_n_priorities_max, + cap.sched_wfq_n_children_per_group_max, + cap.sched_wfq_n_groups_max, + cap.sched_wfq_weight_max); + + printf(" - CMAN support:\n" + "\t -- WRED mode: pkt (%d) byte (%d)\n" + "\t -- head drop (%d)\n", + cap.cman_wred_packet_mode_supported, + cap.cman_wred_byte_mode_supported, + cap.cman_head_drop_supported); + printf("\t -- MAX WRED CONTEXT:" + " total (%u) private (%u) shared (%u)\n", + cap.cman_wred_context_n_max, + cap.cman_wred_context_private_n_max, + cap.cman_wred_context_shared_n_max); + + for (j = 0; j < cap.n_nodes_max; j++) { + memset(&capnode, 0, sizeof(capnode)); + ret = rte_tm_node_capabilities_get(i, j, + &capnode, &error); + if (ret) + continue; + + check_for_leaf = 1; + + printf(" NODE %u\n", j); + printf("\t - shaper private: (%d) dual rate (%d)\n", + capnode.shaper_private_supported, + capnode.shaper_private_dual_rate_supported); + printf("\t - shaper shared max: (%u)\n", + capnode.shaper_shared_n_max); + printf("\t - stats mask %"PRIx64"\n", + capnode.stats_mask); + + ret = rte_tm_node_type_get(i, j, &is_leaf, &error); + if (ret) + continue; + + display_nodecap_info(is_leaf, &capnode); + } + + for (j = 0; j < cap.n_levels_max; j++) { + memset(&caplevel, 0, sizeof(caplevel)); + ret = rte_tm_level_capabilities_get(i, j, + &caplevel, &error); + if (ret) + continue; + + printf(" - Level %u\n", j); + printf("\t -- node MAX: %u non leaf %u leaf %u\n", + caplevel.n_nodes_max, + caplevel.n_nodes_nonleaf_max, + caplevel.n_nodes_leaf_max); + printf("\t -- indetical: non leaf %u leaf %u\n", + caplevel.non_leaf_nodes_identical, + caplevel.leaf_nodes_identical); + + for (k = 0; k < caplevel.n_nodes_max; k++) { + ret = rte_tm_node_type_get(i, k, + &is_leaf, &error); + if (ret) + continue; + + display_levelcap_info(is_leaf, &caplevel); + } + } + + if (check_for_leaf) { + ret = rte_tm_get_number_of_leaf_nodes(i, + &n_leaf_nodes, &error); + if (ret == 0) + printf(" - leaf nodes (%u)\n", n_leaf_nodes); + } + + for (j = 0; j < n_leaf_nodes; j++) { + struct rte_tm_node_stats stats; + memset(&stats, 0, sizeof(stats)); + + ret = rte_tm_node_stats_read(i, j, + &stats, &cap.stats_mask, 0, &error); + if (ret) + continue; + + printf(" - STATS for node (%u)\n", j); + printf(" -- pkts (%"PRIu64") bytes (%"PRIu64")\n", + stats.n_pkts, stats.n_bytes); + + ret = rte_tm_node_type_get(i, j, &is_leaf, &error); + if (ret || (!is_leaf)) + continue; + + printf(" -- leaf queued:" + " pkts (%"PRIu64") bytes (%"PRIu64")\n", + stats.leaf.n_pkts_queued, + stats.leaf.n_bytes_queued); + printf(" - dropped:\n" + "\t -- GREEN:" + " pkts (%"PRIu64") bytes (%"PRIu64")\n" + "\t -- YELLOW:" + " pkts (%"PRIu64") bytes (%"PRIu64")\n" + "\t -- RED:" + " pkts (%"PRIu64") bytes (%"PRIu64")\n", + stats.leaf.n_pkts_dropped[RTE_TM_GREEN], + stats.leaf.n_bytes_dropped[RTE_TM_GREEN], + stats.leaf.n_pkts_dropped[RTE_TM_YELLOW], + stats.leaf.n_bytes_dropped[RTE_TM_YELLOW], + stats.leaf.n_pkts_dropped[RTE_TM_RED], + stats.leaf.n_bytes_dropped[RTE_TM_RED]); + } + } + + STATS_BDR_STR(50, ""); } static void -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v6 6/9] app/procinfo: add support for show crypto 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese ` (4 preceding siblings ...) 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 5/9] app/procinfo: add support for show tm Vipin Varghese @ 2018-12-03 5:49 ` Vipin Varghese 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 7/9] app/procinfo: add support for debug ring Vipin Varghese ` (2 subsequent siblings) 8 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-12-03 5:49 UTC (permalink / raw) To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese Function show_crypto is used for displaying the crypto PMD under the primary process. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- v4: - add space to compare - Vipin Varghese V3: - replace MACRO to function - Reshma Pathan & Stephen Hemminger - add memset for struct elements - Reshma Pathan - change display formating of flags - Vipin Varghese - use MACRO for string - Vipin Varghese --- app/proc-info/main.c | 80 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 67e962878..2aa448605 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -1039,10 +1039,88 @@ show_tm(void) STATS_BDR_STR(50, ""); } +static void +display_crypto_feature_info(uint64_t x) +{ + if (x == 0) + return; + + printf("\t -- feature flags\n"); + printf("\t\t + symmetric (%c), asymmetric (%c)\n" + "\t\t + symmetric operation chaining (%c)\n", + (x & RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING) ? 'y' : 'n'); + printf("\t\t + CPU: SSE (%c), AVX (%c), AVX2 (%c), AVX512 (%c)\n", + (x & RTE_CRYPTODEV_FF_CPU_SSE) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_CPU_AVX) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_CPU_AVX2) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_CPU_AVX512) ? 'y' : 'n'); + printf("\t\t + AESNI: CPU (%c), HW (%c)\n", + (x & RTE_CRYPTODEV_FF_CPU_AESNI) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_HW_ACCELERATED) ? 'y' : 'n'); + printf("\t\t + INLINE (%c)\n", + (x & RTE_CRYPTODEV_FF_SECURITY) ? 'y' : 'n'); + printf("\t\t + ARM: NEON (%c), CE (%c)\n", + (x & RTE_CRYPTODEV_FF_CPU_NEON) ? 'y' : 'n', + (x & RTE_CRYPTODEV_FF_CPU_ARM_CE) ? 'y' : 'n'); + printf("\t -- buffer offload\n"); + printf("\t\t + IN_PLACE_SGL (%c)\n", + (x & RTE_CRYPTODEV_FF_IN_PLACE_SGL) ? 'y' : 'n'); + printf("\t\t + OOP_SGL_IN_SGL_OUT (%c)\n", + (x & RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT) ? 'y' : 'n'); + printf("\t\t + OOP_SGL_IN_LB_OUT (%c)\n", + (x & RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT) ? 'y' : 'n'); + printf("\t\t + OOP_LB_IN_SGL_OUT (%c)\n", + (x & RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT) ? 'y' : 'n'); + printf("\t\t + OOP_LB_IN_LB_OUT (%c)\n", + (x & RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT) ? 'y' : 'n'); +} + static void show_crypto(void) { - printf(" crypto\n"); + uint8_t crypto_dev_count = rte_cryptodev_count(), i; + + snprintf(bdr_str, MAX_STRING_LEN, " show - CRYPTO PMD %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + for (i = 0; i < crypto_dev_count; i++) { + struct rte_cryptodev_info dev_info; + struct rte_cryptodev_stats stats; + + memset(&dev_info, 0, sizeof(dev_info)); + rte_cryptodev_info_get(i, &dev_info); + + printf(" - device (%u)\n", i); + printf("\t -- name (%s)\n" + "\t -- driver (%s)\n" + "\t -- id (%u) on socket (%d)\n" + "\t -- queue pairs (%d)\n", + rte_cryptodev_name_get(i), + dev_info.driver_name, + dev_info.driver_id, + dev_info.device->numa_node, + rte_cryptodev_queue_pair_count(i)); + + display_crypto_feature_info(dev_info.feature_flags); + + printf("\t -- stats\n"); + memset(&stats, 0, sizeof(0)); + if (rte_cryptodev_stats_get(i, &stats) == 0) { + printf("\t\t + enqueue count (%"PRIu64")" + " error (%"PRIu64")\n", + stats.enqueued_count, + stats.enqueue_err_count); + printf("\t\t + dequeue count (%"PRIu64")" + " error (%"PRIu64")\n", + stats.dequeued_count, + stats.dequeue_err_count); + } + } + + STATS_BDR_STR(50, ""); } static void -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v6 7/9] app/procinfo: add support for debug ring 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese ` (5 preceding siblings ...) 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 6/9] app/procinfo: add support for show crypto Vipin Varghese @ 2018-12-03 5:49 ` Vipin Varghese 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 8/9] app/procinfo: add support for show iter mempool Vipin Varghese 2018-12-03 5:50 ` [dpdk-dev] [PATCH v6 9/9] doc/procinfo: add information for debug options Vipin Varghese 8 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-12-03 5:49 UTC (permalink / raw) To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese Function show_ring is used for displaying the RING of the primary process. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V3: - replace space to tab in printf - Reshma Pathan - change ring display information - Vipin Varghese --- app/proc-info/main.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 2aa448605..00b2d85f7 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -1126,7 +1126,39 @@ show_crypto(void) static void show_ring(char *name) { - printf(" ring Name (%s)\n", name); + snprintf(bdr_str, MAX_STRING_LEN, " show - RING %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + if (name != NULL) { + struct rte_ring *ptr = rte_ring_lookup(name); + if (ptr != NULL) { + printf(" - Name (%s) on socket (%d)\n" + " - flags:\n" + "\t -- Single Producer Enqueue (%u)\n" + "\t -- Single Consmer Dequeue (%u)\n", + ptr->name, + ptr->memzone->socket_id, + ptr->flags & RING_F_SP_ENQ, + ptr->flags & RING_F_SC_DEQ); + printf(" - size (%u) mask (0x%x) capacity (%u)\n", + ptr->size, + ptr->mask, + ptr->capacity); + printf(" - count (%u) free count (%u)\n", + rte_ring_count(ptr), + rte_ring_free_count(ptr)); + printf(" - full (%d) empty (%d)\n", + rte_ring_full(ptr), + rte_ring_empty(ptr)); + + STATS_BDR_STR(50, ""); + return; + } + } + + rte_ring_list_dump(stdout); + STATS_BDR_STR(50, ""); } static void -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v6 8/9] app/procinfo: add support for show iter mempool 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese ` (6 preceding siblings ...) 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 7/9] app/procinfo: add support for debug ring Vipin Varghese @ 2018-12-03 5:49 ` Vipin Varghese 2018-12-12 16:10 ` Pattan, Reshma 2018-12-03 5:50 ` [dpdk-dev] [PATCH v6 9/9] doc/procinfo: add information for debug options Vipin Varghese 8 siblings, 1 reply; 69+ messages in thread From: Vipin Varghese @ 2018-12-03 5:49 UTC (permalink / raw) To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese Function show_mempool is used for displaying valid MEMPOOL. Function iter_mempool is used for iterating mempool elements for a mempool for max of 256 bytes. In case of show_mempool for invalid name, whole list is dump. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> --- V6: - split iter mempool - Vipin Varghese V5: - update ret to uint32_t - Reshma Pattan v4: - add spacing for flag compare - Vipin Varghese V3: - add avail and in use - Vipin Varghese - add flag split - Vipin Varghese --- app/proc-info/main.c | 80 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 78 insertions(+), 2 deletions(-) diff --git a/app/proc-info/main.c b/app/proc-info/main.c index 00b2d85f7..7a7e7372e 100644 --- a/app/proc-info/main.c +++ b/app/proc-info/main.c @@ -33,6 +33,7 @@ #include <rte_security.h> #include <rte_cryptodev.h> #include <rte_tm.h> +#include <rte_hexdump.h> /* Maximum long option length for option parsing. */ #define MAX_LONG_OPT_SZ 64 @@ -1161,16 +1162,91 @@ show_ring(char *name) STATS_BDR_STR(50, ""); } +static void +mempool_itr_obj(struct rte_mempool *mp, + void *opaque, void *obj, + unsigned int obj_idx) +{ + printf(" - obj_idx %u opaque %p obj %p\n", + obj_idx, opaque, obj); + + if (obj) + rte_hexdump(stdout, " Obj Content", + obj, (mp->elt_size > 256)?256:mp->elt_size); +} + static void show_mempool(char *name) { - printf(" mempool Name (%s)\n", name); + uint64_t flags = 0; + + snprintf(bdr_str, MAX_STRING_LEN, " show - MEMPOOL %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + if (name != NULL) { + struct rte_mempool *ptr = rte_mempool_lookup(name); + if (ptr != NULL) { + flags = ptr->flags; + printf(" - Name: %s on socket %d\n" + " - flags:\n" + "\t -- No spread (%c)\n" + "\t -- No cache align (%c)\n" + "\t -- SP put (%c), SC get (%c)\n" + "\t -- Pool created (%c)\n" + "\t -- No IOVA config (%c)\n", + ptr->name, + ptr->socket_id, + (flags & MEMPOOL_F_NO_SPREAD) ? 'y' : 'n', + (flags & MEMPOOL_F_NO_CACHE_ALIGN) ? 'y' : 'n', + (flags & MEMPOOL_F_SP_PUT) ? 'y' : 'n', + (flags & MEMPOOL_F_SC_GET) ? 'y' : 'n', + (flags & MEMPOOL_F_POOL_CREATED) ? 'y' : 'n', + (flags & MEMPOOL_F_NO_IOVA_CONTIG) ? 'y' : 'n'); + printf(" - Size %u Cache %u element %u\n" + " - header %u trailer %u\n" + " - private data size %u\n", + ptr->size, + ptr->cache_size, + ptr->elt_size, + ptr->header_size, + ptr->trailer_size, + ptr->private_data_size); + printf(" - memezone - socket %d\n", + ptr->mz->socket_id); + printf(" - Count: avail (%u), in use (%u)\n", + rte_mempool_avail_count(ptr), + rte_mempool_in_use_count(ptr)); + + STATS_BDR_STR(50, ""); + return; + } + } + + rte_mempool_list_dump(stdout); + STATS_BDR_STR(50, ""); } static void iter_mempool(char *name) { - printf(" Iter elements in mempool (%s)\n", name); + snprintf(bdr_str, MAX_STRING_LEN, " iter - MEMPOOL %"PRIu64, + rte_get_tsc_hz()); + STATS_BDR_STR(10, bdr_str); + + if (name != NULL) { + struct rte_mempool *ptr = rte_mempool_lookup(name); + if (ptr != NULL) { + /* iterate each object */ + uint32_t ret = rte_mempool_obj_iter(ptr, + mempool_itr_obj, NULL); + printf(" - iterated %u objects\n", ret); + STATS_BDR_STR(50, ""); + return; + } + } + + STATS_BDR_STR(50, ""); } int -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v6 8/9] app/procinfo: add support for show iter mempool 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 8/9] app/procinfo: add support for show iter mempool Vipin Varghese @ 2018-12-12 16:10 ` Pattan, Reshma 2018-12-13 2:26 ` Varghese, Vipin 0 siblings, 1 reply; 69+ messages in thread From: Pattan, Reshma @ 2018-12-12 16:10 UTC (permalink / raw) To: Varghese, Vipin, Ananyev, Konstantin, stephen, dev, Mcnamara, John Cc: thomas, Byrne, Stephen1, Patel, Amol > -----Original Message----- > From: Varghese, Vipin > Sent: Monday, December 3, 2018 5:50 AM Since this patch displaying mepool and its elements both , edit heading to suit both? ( or) What about having iter mempool support as separate patch after this patch? That looks more logical as iter-mempool is separate command option now. Thanks, Reshma ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [dpdk-dev] [PATCH v6 8/9] app/procinfo: add support for show iter mempool 2018-12-12 16:10 ` Pattan, Reshma @ 2018-12-13 2:26 ` Varghese, Vipin 0 siblings, 0 replies; 69+ messages in thread From: Varghese, Vipin @ 2018-12-13 2:26 UTC (permalink / raw) To: Pattan, Reshma, Ananyev, Konstantin, stephen, dev, Mcnamara, John Cc: thomas, Byrne, Stephen1, Patel, Amol Hi Reshma, snipped > > Since this patch displaying mepool and its elements both , edit heading to suit > both? > > ( or) > > What about having iter mempool support as separate patch after this patch? > That looks more logical as iter-mempool is separate command option now. This is good suggestion, but depending upon the function and debug option in my humble opinion it has to go with the current patch series. > > Thanks, > Reshma ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v6 9/9] doc/procinfo: add information for debug options 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese ` (7 preceding siblings ...) 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 8/9] app/procinfo: add support for show iter mempool Vipin Varghese @ 2018-12-03 5:50 ` Vipin Varghese 8 siblings, 0 replies; 69+ messages in thread From: Vipin Varghese @ 2018-12-03 5:50 UTC (permalink / raw) To: konstantin.ananyev, stephen, reshma.pattan, dev, john.mcnamara Cc: thomas, stephen1.byrne, amol.patel, Vipin Varghese Document update for debug options and information for PMD instances like port, traffic manager, crypto, mempool and ring instances. Signed-off-by: Vipin Varghese <vipin.varghese@intel.com> Acked-by: John McNamara <john.mcnamara@intel.com> --- V6: - add ack for v5 - John Mcnamara - update entry for mempool iter - Vipin Varghese V3: - update document from dbg to show - Vipin Varghese V2: - update word style for content - Vipin Varghese --- doc/guides/tools/proc_info.rst | 35 ++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/doc/guides/tools/proc_info.rst b/doc/guides/tools/proc_info.rst index d5b5ed6a6..ee0bd99bb 100644 --- a/doc/guides/tools/proc_info.rst +++ b/doc/guides/tools/proc_info.rst @@ -6,9 +6,9 @@ dpdk-procinfo Application The dpdk-procinfo application is a Data Plane Development Kit (DPDK) application that runs as a DPDK secondary process and is capable of retrieving port -statistics, resetting port statistics and printing DPDK memory information. -This application extends the original functionality that was supported by -dump_cfg. +statistics, resetting port statistics and printing DPDK memory information and +debug information for port|tm|crypto|ring|mempool. This application extends the +original functionality that was supported by dump_cfg. Running the Application ----------------------- @@ -17,7 +17,8 @@ The application has a number of command line options: .. code-block:: console ./$(RTE_TARGET)/app/dpdk-procinfo -- -m | [-p PORTMASK] [--stats | --xstats | - --stats-reset | --xstats-reset] + --stats-reset | --xstats-reset | --show-port | --show-tm | --show-crypto | + --show-mempool[=name] | --show-ring[=name] | --iter-mempool=name] Parameters ~~~~~~~~~~ @@ -41,6 +42,32 @@ If no port mask is specified xstats are reset for all DPDK ports. **-m**: Print DPDK memory information. +**--show-port** +The show-port parameter displays port level various configuration and +mbuf pool information associated to RX queues. + +**--show-tm** +The show-tm parameter displays per port traffic manager settings and +current configuration. It also display statistics too. + +**--show-crypto** +The show-crypto parameter displays available cryptodev configurations, +settings and stats per node. + +**--show-mempool[=name]** +The show-mempool parameter display current allocation of all mempool +with debug information. Specifying the name allows display details for +specific mempool. For invalid or no mempool name, whole list is dump. + +**--show-ring[=name]** +The show-ring pararmeter display current allocation of all ring with +debug information. Specifying the name allows to display details for specific +ring. For invalid or no ring name, whole list is dump. + +**--iter-mempool=name** +The iter-mempool parameter iterates and displays mempool elements specified +by name. For invalid or no mempool name no elements are displayed. + Limitations ----------- -- 2.17.1 ^ permalink raw reply [flat|nested] 69+ messages in thread
* [dpdk-dev] [PATCH v3 8/9] app/procinfo: add support for show mempool @ 2018-11-05 17:51 Vipin Varghese 2018-11-06 2:31 ` [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese 0 siblings, 1 reply; 69+ 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] 69+ 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 @ 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 0 siblings, 1 reply; 69+ 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] 69+ 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 @ 2018-11-06 2:31 ` Vipin Varghese 0 siblings, 0 replies; 69+ 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] 69+ messages in thread
end of thread, other threads:[~2019-01-14 0:07 UTC | newest] Thread overview: 69+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-11-22 14:15 [dpdk-dev] [PATCH v5 1/9] app/procinfo: add usage for new debug Vipin Varghese 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 2/9] app/procinfo: add compare for new options Vipin Varghese 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 3/9] app/procinfo: add prototype for debug instances Vipin Varghese 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 4/9] app/procinfo: add support for show port Vipin Varghese 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 5/9] app/procinfo: add support for show tm Vipin Varghese 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 6/9] app/procinfo: add support for show crypto Vipin Varghese 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 7/9] app/procinfo: add support for debug ring Vipin Varghese 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 8/9] app/procinfo: add support for show mempool Vipin Varghese 2018-11-22 14:15 ` [dpdk-dev] [PATCH v5 9/9] doc/procinfo: add information for debug options Vipin Varghese 2018-11-22 18:08 ` Mcnamara, John 2018-11-23 4:58 ` Varghese, Vipin 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 1/9] app/procinfo: add usage for new debug Vipin Varghese 2018-12-12 14:14 ` Pattan, Reshma 2018-12-12 15:06 ` Varghese, Vipin 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Vipin Varghese 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 1/9] app/procinfo: add usage for new debug Vipin Varghese 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 2/9] app/procinfo: add compare for new options Vipin Varghese 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 3/9] app/procinfo: add prototype for debug instances Vipin Varghese 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 4/9] app/procinfo: add support for show port Vipin Varghese 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 5/9] app/procinfo: add support for show tm Vipin Varghese 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 6/9] app/procinfo: add support for show crypto Vipin Varghese 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 7/9] app/procinfo: add support for debug ring Vipin Varghese 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 8/9] app/procinfo: add support for show iter mempool Vipin Varghese 2018-12-13 5:08 ` [dpdk-dev] [PATCH v7 9/9] doc/procinfo: add information for debug options Vipin Varghese 2018-12-13 14:42 ` [dpdk-dev] [PATCH v7 0/9] app/proc-info: improve debug of proc-info tool Pattan, Reshma 2018-12-13 16:21 ` Varghese, Vipin 2018-12-22 21:02 ` Thomas Monjalon 2018-12-26 5:21 ` Varghese, Vipin 2018-12-26 21:33 ` Thomas Monjalon 2018-12-27 2:46 ` Varghese, Vipin 2018-12-27 9:32 ` Thomas Monjalon 2018-12-27 10:45 ` Varghese, Vipin 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 0/7] app/proc-info: enhance " Vipin Varghese 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 1/7] app/procinfo: prepare for new debug functions Vipin Varghese 2019-01-09 23:45 ` Thomas Monjalon 2019-01-10 3:08 ` Varghese, Vipin 2019-01-10 8:39 ` Thomas Monjalon 2019-01-10 8:53 ` Varghese, Vipin 2019-01-10 9:09 ` Thomas Monjalon 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Vipin Varghese 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 1/6] app/procinfo: add support for show port Vipin Varghese 2019-01-10 17:40 ` Thomas Monjalon 2019-01-11 3:57 ` Varghese, Vipin 2019-01-11 10:22 ` Thomas Monjalon 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 2/6] app/procinfo: add support for show tm Vipin Varghese 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 3/6] app/procinfo: add support for show crypto Vipin Varghese 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 4/6] app/procinfo: add support for debug ring Vipin Varghese 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 5/6] app/procinfo: add support for show mempool Vipin Varghese 2019-01-10 21:36 ` [dpdk-dev] [PATCH v9 6/6] app/procinfo: add support for iter mempool Vipin Varghese 2019-01-11 14:46 ` [dpdk-dev] [PATCH v9 0/6] app/proc-info: enhance debug of proc-info tool Thomas Monjalon 2019-01-14 0:07 ` Varghese, Vipin 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 2/7] app/procinfo: add support for show port Vipin Varghese 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 3/7] app/procinfo: add support for show tm Vipin Varghese 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 4/7] app/procinfo: add support for show crypto Vipin Varghese 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 5/7] app/procinfo: add support for debug ring Vipin Varghese 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 6/7] app/procinfo: add support for show mempool Vipin Varghese 2019-01-07 15:38 ` [dpdk-dev] [PATCH v8 7/7] app/procinfo: add support for iter mempool Vipin Varghese 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 2/9] app/procinfo: add compare for new options Vipin Varghese 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 3/9] app/procinfo: add prototype for debug instances Vipin Varghese 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 4/9] app/procinfo: add support for show port Vipin Varghese 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 5/9] app/procinfo: add support for show tm Vipin Varghese 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 6/9] app/procinfo: add support for show crypto Vipin Varghese 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 7/9] app/procinfo: add support for debug ring Vipin Varghese 2018-12-03 5:49 ` [dpdk-dev] [PATCH v6 8/9] app/procinfo: add support for show iter mempool Vipin Varghese 2018-12-12 16:10 ` Pattan, Reshma 2018-12-13 2:26 ` Varghese, Vipin 2018-12-03 5:50 ` [dpdk-dev] [PATCH v6 9/9] doc/procinfo: add information for debug options Vipin Varghese -- strict thread matches above, loose matches on Subject: below -- 2018-11-05 17:51 [dpdk-dev] [PATCH v3 8/9] app/procinfo: add support for show mempool 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 7/9] app/procinfo: add support for debug ring 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).