From patchwork Thu Jan 10 21:36:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Varghese, Vipin" X-Patchwork-Id: 49613 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4AFFB1B908; Thu, 10 Jan 2019 16:40:01 +0100 (CET) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id 071A41B8F7 for ; Thu, 10 Jan 2019 16:39:59 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 10 Jan 2019 07:39:59 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,461,1539673200"; d="scan'208";a="309300666" Received: from unknown (HELO saesrv02-S2600CWR.intel.com) ([10.224.122.203]) by fmsmga006.fm.intel.com with ESMTP; 10 Jan 2019 07:39:56 -0800 From: Vipin Varghese To: dev@dpdk.org, thomas@monjalon.net, john.mcnamara@intel.com Cc: konstantin.ananyev@intel.com, stephen@networkplumber.org, reshma.pattan@intel.com, jasvinder.singh@intel.com, stephen1.byrne@intel.com, amol.patel@intel.com, Vipin Varghese Date: Fri, 11 Jan 2019 03:06:40 +0530 Message-Id: <20190110213645.29901-2-vipin.varghese@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190110213645.29901-1-vipin.varghese@intel.com> References: <20190107153829.34047-2-vipin.varghese@intel.com> <20190110213645.29901-1-vipin.varghese@intel.com> Subject: [dpdk-dev] [PATCH v9 1/6] app/procinfo: add support for show port X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 Acked-by: Reshma Pattan Acked-by: John McNamara --- 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 #include #include +#include +#include +#include /* 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 ----------- From patchwork Thu Jan 10 21:36:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Varghese, Vipin" X-Patchwork-Id: 49614 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id BE8441B912; Thu, 10 Jan 2019 16:40:04 +0100 (CET) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id 9236A1B897 for ; Thu, 10 Jan 2019 16:40:03 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 10 Jan 2019 07:40:03 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,461,1539673200"; d="scan'208";a="309300693" Received: from unknown (HELO saesrv02-S2600CWR.intel.com) ([10.224.122.203]) by fmsmga006.fm.intel.com with ESMTP; 10 Jan 2019 07:40:00 -0800 From: Vipin Varghese To: dev@dpdk.org, thomas@monjalon.net, john.mcnamara@intel.com Cc: konstantin.ananyev@intel.com, stephen@networkplumber.org, reshma.pattan@intel.com, jasvinder.singh@intel.com, stephen1.byrne@intel.com, amol.patel@intel.com, Vipin Varghese Date: Fri, 11 Jan 2019 03:06:41 +0530 Message-Id: <20190110213645.29901-3-vipin.varghese@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190110213645.29901-1-vipin.varghese@intel.com> References: <20190107153829.34047-2-vipin.varghese@intel.com> <20190110213645.29901-1-vipin.varghese@intel.com> Subject: [dpdk-dev] [PATCH v9 2/6] app/procinfo: add support for show tm X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 Acked-by: Reshma Pattan Acked-by: John McNamara --- 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 #include #include +#include /* 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 ----------- From patchwork Thu Jan 10 21:36:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Varghese, Vipin" X-Patchwork-Id: 49615 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 14FCE1B91E; Thu, 10 Jan 2019 16:40:10 +0100 (CET) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id CE05E1B91B for ; Thu, 10 Jan 2019 16:40:07 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 10 Jan 2019 07:40:07 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,461,1539673200"; d="scan'208";a="309300736" Received: from unknown (HELO saesrv02-S2600CWR.intel.com) ([10.224.122.203]) by fmsmga006.fm.intel.com with ESMTP; 10 Jan 2019 07:40:04 -0800 From: Vipin Varghese To: dev@dpdk.org, thomas@monjalon.net, john.mcnamara@intel.com Cc: konstantin.ananyev@intel.com, stephen@networkplumber.org, reshma.pattan@intel.com, jasvinder.singh@intel.com, stephen1.byrne@intel.com, amol.patel@intel.com, Vipin Varghese Date: Fri, 11 Jan 2019 03:06:42 +0530 Message-Id: <20190110213645.29901-4-vipin.varghese@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190110213645.29901-1-vipin.varghese@intel.com> References: <20190107153829.34047-2-vipin.varghese@intel.com> <20190110213645.29901-1-vipin.varghese@intel.com> Subject: [dpdk-dev] [PATCH v9 3/6] app/procinfo: add support for show crypto X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Function show_crypto is used for displaying the crypto PMD under primary process. Signed-off-by: Vipin Varghese Acked-by: Reshma Pattan Acked-by: John McNamara --- 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 ----------- From patchwork Thu Jan 10 21:36:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Varghese, Vipin" X-Patchwork-Id: 49616 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 026B31B90C; Thu, 10 Jan 2019 16:40:13 +0100 (CET) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id 804791B923 for ; Thu, 10 Jan 2019 16:40:11 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 10 Jan 2019 07:40:11 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,461,1539673200"; d="scan'208";a="309300757" Received: from unknown (HELO saesrv02-S2600CWR.intel.com) ([10.224.122.203]) by fmsmga006.fm.intel.com with ESMTP; 10 Jan 2019 07:40:08 -0800 From: Vipin Varghese To: dev@dpdk.org, thomas@monjalon.net, john.mcnamara@intel.com Cc: konstantin.ananyev@intel.com, stephen@networkplumber.org, reshma.pattan@intel.com, jasvinder.singh@intel.com, stephen1.byrne@intel.com, amol.patel@intel.com, Vipin Varghese Date: Fri, 11 Jan 2019 03:06:43 +0530 Message-Id: <20190110213645.29901-5-vipin.varghese@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190110213645.29901-1-vipin.varghese@intel.com> References: <20190107153829.34047-2-vipin.varghese@intel.com> <20190110213645.29901-1-vipin.varghese@intel.com> Subject: [dpdk-dev] [PATCH v9 4/6] app/procinfo: add support for debug ring X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Function show_ring is used for displaying information of RING instance of the primary process. Signed-off-by: Vipin Varghese Acked-by: Reshma Pattan Acked-by: John McNamara --- 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 ----------- From patchwork Thu Jan 10 21:36:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Varghese, Vipin" X-Patchwork-Id: 49617 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7F1552AA0; Thu, 10 Jan 2019 16:40:20 +0100 (CET) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by dpdk.org (Postfix) with ESMTP id AC34E1B907 for ; Thu, 10 Jan 2019 16:40:19 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 10 Jan 2019 07:40:18 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,461,1539673200"; d="scan'208";a="309300768" Received: from unknown (HELO saesrv02-S2600CWR.intel.com) ([10.224.122.203]) by fmsmga006.fm.intel.com with ESMTP; 10 Jan 2019 07:40:15 -0800 From: Vipin Varghese To: dev@dpdk.org, thomas@monjalon.net, john.mcnamara@intel.com Cc: konstantin.ananyev@intel.com, stephen@networkplumber.org, reshma.pattan@intel.com, jasvinder.singh@intel.com, stephen1.byrne@intel.com, amol.patel@intel.com, Vipin Varghese Date: Fri, 11 Jan 2019 03:06:44 +0530 Message-Id: <20190110213645.29901-6-vipin.varghese@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190110213645.29901-1-vipin.varghese@intel.com> References: <20190107153829.34047-2-vipin.varghese@intel.com> <20190110213645.29901-1-vipin.varghese@intel.com> Subject: [dpdk-dev] [PATCH v9 5/6] app/procinfo: add support for show mempool X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 Acked-by: Reshma Pattan Acked-by: John McNamara --- 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 ----------- From patchwork Thu Jan 10 21:36:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Varghese, Vipin" X-Patchwork-Id: 49618 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9AF671B6CA; Thu, 10 Jan 2019 16:40:24 +0100 (CET) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by dpdk.org (Postfix) with ESMTP id 074341B1E6 for ; Thu, 10 Jan 2019 16:40:22 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 10 Jan 2019 07:40:22 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,461,1539673200"; d="scan'208";a="309300785" Received: from unknown (HELO saesrv02-S2600CWR.intel.com) ([10.224.122.203]) by fmsmga006.fm.intel.com with ESMTP; 10 Jan 2019 07:40:19 -0800 From: Vipin Varghese To: dev@dpdk.org, thomas@monjalon.net, john.mcnamara@intel.com Cc: konstantin.ananyev@intel.com, stephen@networkplumber.org, reshma.pattan@intel.com, jasvinder.singh@intel.com, stephen1.byrne@intel.com, amol.patel@intel.com, Vipin Varghese Date: Fri, 11 Jan 2019 03:06:45 +0530 Message-Id: <20190110213645.29901-7-vipin.varghese@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190110213645.29901-1-vipin.varghese@intel.com> References: <20190107153829.34047-2-vipin.varghese@intel.com> <20190110213645.29901-1-vipin.varghese@intel.com> Subject: [dpdk-dev] [PATCH v9 6/6] app/procinfo: add support for iter mempool X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 Acked-by: Reshma Pattan Acked-by: John McNamara --- 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 #include #include +#include /* 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 -----------