From bfd5051b43b5b298cdac9775d4b9ee8aae67f6b9 Mon Sep 17 00:00:00 2001 From: Olivier Matz Date: Wed, 23 Jul 2014 14:28:54 +0200 Subject: [PATCH] app/testpmd: new command to get extended statistics Add a new token in "show port" command to dump the extended statistics of a device. It validates the new xstats framework added in previous commit. Signed-off-by: Olivier Matz Acked-by: Bruce Richardson --- app/test-pmd/cmdline.c | 22 ++++++++++++++++------ app/test-pmd/config.c | 34 ++++++++++++++++++++++++++++++++++ app/test-pmd/testpmd.h | 2 ++ 3 files changed, 52 insertions(+), 6 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 67321f7157..225f669fe3 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -183,14 +183,14 @@ static void cmd_help_long_parsed(void *parsed_result, "Display:\n" "--------\n\n" - "show port (info|stats|fdir|stat_qmap) (port_id|all)\n" + "show port (info|stats|xstats|fdir|stat_qmap) (port_id|all)\n" " Display information for port_id, or all.\n\n" "show port rss-hash [key]\n" " Display the RSS hash functions and RSS hash key" " of port X\n\n" - "clear port (info|stats|fdir|stat_qmap) (port_id|all)\n" + "clear port (info|stats|xstats|fdir|stat_qmap) (port_id|all)\n" " Clear information for port_id, or all.\n\n" "show config (rxtx|cores|fwd)\n" @@ -5114,12 +5114,18 @@ static void cmd_showportall_parsed(void *parsed_result, if (!strcmp(res->what, "stats")) for (i = 0; i < nb_ports; i++) nic_stats_clear(i); + else if (!strcmp(res->what, "xstats")) + for (i = 0; i < nb_ports; i++) + nic_xstats_clear(i); } else if (!strcmp(res->what, "info")) for (i = 0; i < nb_ports; i++) port_infos_display(i); else if (!strcmp(res->what, "stats")) for (i = 0; i < nb_ports; i++) nic_stats_display(i); + else if (!strcmp(res->what, "xstats")) + for (i = 0; i < nb_ports; i++) + nic_xstats_display(i); else if (!strcmp(res->what, "fdir")) for (i = 0; i < nb_ports; i++) fdir_get_infos(i); @@ -5135,13 +5141,13 @@ cmdline_parse_token_string_t cmd_showportall_port = TOKEN_STRING_INITIALIZER(struct cmd_showportall_result, port, "port"); cmdline_parse_token_string_t cmd_showportall_what = TOKEN_STRING_INITIALIZER(struct cmd_showportall_result, what, - "info#stats#fdir#stat_qmap"); + "info#stats#xstats#fdir#stat_qmap"); cmdline_parse_token_string_t cmd_showportall_all = TOKEN_STRING_INITIALIZER(struct cmd_showportall_result, all, "all"); cmdline_parse_inst_t cmd_showportall = { .f = cmd_showportall_parsed, .data = NULL, - .help_str = "show|clear port info|stats|fdir|stat_qmap all", + .help_str = "show|clear port info|stats|xstats|fdir|stat_qmap all", .tokens = { (void *)&cmd_showportall_show, (void *)&cmd_showportall_port, @@ -5167,10 +5173,14 @@ static void cmd_showport_parsed(void *parsed_result, if (!strcmp(res->show, "clear")) { if (!strcmp(res->what, "stats")) nic_stats_clear(res->portnum); + else if (!strcmp(res->what, "xstats")) + nic_xstats_clear(res->portnum); } else if (!strcmp(res->what, "info")) port_infos_display(res->portnum); else if (!strcmp(res->what, "stats")) nic_stats_display(res->portnum); + else if (!strcmp(res->what, "xstats")) + nic_xstats_display(res->portnum); else if (!strcmp(res->what, "fdir")) fdir_get_infos(res->portnum); else if (!strcmp(res->what, "stat_qmap")) @@ -5184,14 +5194,14 @@ cmdline_parse_token_string_t cmd_showport_port = TOKEN_STRING_INITIALIZER(struct cmd_showport_result, port, "port"); cmdline_parse_token_string_t cmd_showport_what = TOKEN_STRING_INITIALIZER(struct cmd_showport_result, what, - "info#stats#fdir#stat_qmap"); + "info#stats#xstats#fdir#stat_qmap"); cmdline_parse_token_num_t cmd_showport_portnum = TOKEN_NUM_INITIALIZER(struct cmd_showport_result, portnum, INT32); cmdline_parse_inst_t cmd_showport = { .f = cmd_showport_parsed, .data = NULL, - .help_str = "show|clear port info|stats|fdir|stat_qmap X (X = port number)", + .help_str = "show|clear port info|stats|xstats|fdir|stat_qmap X (X = port number)", .tokens = { (void *)&cmd_showport_show, (void *)&cmd_showport_port, diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index adfa9a8d33..2a1b93f6c3 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -199,6 +199,40 @@ nic_stats_clear(portid_t port_id) printf("\n NIC statistics for port %d cleared\n", port_id); } +void +nic_xstats_display(portid_t port_id) +{ + struct rte_eth_xstats *xstats; + int len, ret, i; + + printf("###### NIC extended statistics for port %-2d\n", port_id); + + len = rte_eth_xstats_get(port_id, NULL, 0); + if (len < 0) { + printf("Cannot get xstats count\n"); + return; + } + xstats = malloc(sizeof(xstats[0]) * len); + if (xstats == NULL) { + printf("Cannot allocate memory for xstats\n"); + return; + } + ret = rte_eth_xstats_get(port_id, xstats, len); + if (ret < 0 || ret > len) { + printf("Cannot get xstats\n"); + free(xstats); + return; + } + for (i = 0; i < len; i++) + printf("%s: %"PRIu64"\n", xstats[i].name, xstats[i].value); + free(xstats); +} + +void +nic_xstats_clear(portid_t port_id) +{ + rte_eth_xstats_reset(port_id); +} void nic_stats_mapping_display(portid_t port_id) diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index 142091d3e1..9cbfeace6b 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -448,6 +448,8 @@ void launch_args_parse(int argc, char** argv); void prompt(void); void nic_stats_display(portid_t port_id); void nic_stats_clear(portid_t port_id); +void nic_xstats_display(portid_t port_id); +void nic_xstats_clear(portid_t port_id); void nic_stats_mapping_display(portid_t port_id); void port_infos_display(portid_t port_id); void fwd_lcores_config_display(void); -- 2.20.1