Add support for new xstats API retrieving by id to proc_info application Signed-off-by: Jacek Piasecki <jacekx.piase...@intel.com> Signed-off-by: Kuba Kozak <kubax.ko...@intel.com> --- app/proc_info/main.c | 56 +++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 11 deletions(-)
diff --git a/app/proc_info/main.c b/app/proc_info/main.c index ef2098d..22fcca0 100644 --- a/app/proc_info/main.c +++ b/app/proc_info/main.c @@ -83,6 +83,9 @@ static uint32_t reset_xstats; /**< Enable memory info. */ static uint32_t mem_info; +/**< Enable displaying xstat name. */ +static uint32_t enable_xstats_name; +static char *xstats_name; /**< display usage */ static void @@ -94,6 +97,7 @@ " --stats: to display port statistics, enabled by default\n" " --xstats: to display extended port statistics, disabled by " "default\n" + " --xstats-name NAME: to display single xstat value by NAME\n" " --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" @@ -172,6 +176,7 @@ {"stats-reset", 0, NULL, 0}, {"xstats", 0, NULL, 0}, {"xstats-reset", 0, NULL, 0}, + {"xstats-name", required_argument, NULL, 1}, {"collectd-format", 0, NULL, 0}, {"host-id", 0, NULL, 0}, {NULL, 0, 0, 0} @@ -214,7 +219,18 @@ MAX_LONG_OPT_SZ)) reset_xstats = 1; break; - + case 1: + /* Print xstat single value given by name*/ + if (!strncmp(long_option[option_index].name, + "xstats-name", + MAX_LONG_OPT_SZ)) { + enable_xstats_name = 1; + xstats_name = optarg; + printf("name:%s:%s\n", + long_option[option_index].name, + optarg); + } + break; default: proc_info_usage(prgname); return -1; @@ -341,20 +357,36 @@ static void collectd_resolve_cnt_type(char *cnt_type, size_t cnt_type_len, } static void +nic_xstats_by_name_display(__rte_unused uint8_t port_id, + __rte_unused char *name) +{ + uint64_t id; + + printf("###### NIC statistics for port %-2d, statistic name '%s':\n", + port_id, name); + + if (rte_eth_xstats_get_id_by_name(port_id, name, &id) == 0) + printf("%s: %"PRIu64"\n", name, id); + else + printf("Statistic not found...\n"); + +} + +static void nic_xstats_display(uint8_t port_id) { struct rte_eth_xstat_name *xstats_names; - struct rte_eth_xstat *xstats; + uint64_t *values; int len, ret, i; static const char *nic_stats_border = "########################"; - len = rte_eth_xstats_get_names(port_id, NULL, 0); + len = rte_eth_xstats_get_names(port_id, NULL, NULL, 0); if (len < 0) { printf("Cannot get xstats count\n"); return; } - xstats = malloc(sizeof(xstats[0]) * len); - if (xstats == NULL) { + values = malloc(sizeof(values) * len); + if (values == NULL) { printf("Cannot allocate memory for xstats\n"); return; } @@ -362,11 +394,11 @@ static void collectd_resolve_cnt_type(char *cnt_type, size_t cnt_type_len, xstats_names = malloc(sizeof(struct rte_eth_xstat_name) * len); if (xstats_names == NULL) { printf("Cannot allocate memory for xstat names\n"); - free(xstats); + free(values); return; } if (len != rte_eth_xstats_get_names( - port_id, xstats_names, len)) { + port_id, xstats_names, NULL, len)) { printf("Cannot get xstat names\n"); goto err; } @@ -375,7 +407,7 @@ static void collectd_resolve_cnt_type(char *cnt_type, size_t cnt_type_len, port_id); printf("%s############################\n", nic_stats_border); - ret = rte_eth_xstats_get(port_id, xstats, len); + ret = rte_eth_xstats_get(port_id, NULL, values, len); if (ret < 0 || ret > len) { printf("Cannot get xstats\n"); goto err; @@ -391,18 +423,18 @@ static void collectd_resolve_cnt_type(char *cnt_type, size_t cnt_type_len, xstats_names[i].name); sprintf(buf, "PUTVAL %s/dpdkstat-port.%u/%s-%s N:%" PRIu64"\n", host_id, port_id, counter_type, - xstats_names[i].name, xstats[i].value); + xstats_names[i].name, values[i]); write(stdout_fd, buf, strlen(buf)); } else { printf("%s: %"PRIu64"\n", xstats_names[i].name, - xstats[i].value); + values[i]); } } printf("%s############################\n", nic_stats_border); err: - free(xstats); + free(values); free(xstats_names); } @@ -480,6 +512,8 @@ static void collectd_resolve_cnt_type(char *cnt_type, size_t cnt_type_len, nic_stats_clear(i); else if (reset_xstats) nic_xstats_clear(i); + else if (enable_xstats_name) + nic_xstats_by_name_display(i, xstats_name); } } -- 1.9.1