From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id D68242C5 for ; Fri, 31 Mar 2017 00:22:59 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intel.com; i=@intel.com; q=dns/txt; s=intel; t=1490912580; x=1522448580; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=JcXGsmXnrJHT3KQafa3umvnIVaeeYLT95OXtLkq0ghw=; b=UZmeCv2d58J/5Wx+zrJkMzLN1a/HnQvnYl/I3Wq5jKUqU5h6fs58iHNU qkybt2bapDyrZAlGX6Lp9wYIz17yqA==; Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 Mar 2017 15:22:58 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,249,1486454400"; d="scan'208";a="1149018807" Received: from gklab-246-023.igk.intel.com (HELO Sent) ([10.217.246.23]) by fmsmga002.fm.intel.com with SMTP; 30 Mar 2017 15:22:55 -0700 Received: by Sent (sSMTP sendmail emulation); Fri, 31 Mar 2017 00:22:26 +0200 From: Michal Jastrzebski To: dev@dpdk.org Cc: Jacek Piasecki , Kuba Kozak Date: Fri, 31 Mar 2017 00:22:19 +0200 Message-Id: <1490912539-244547-1-git-send-email-michalx.k.jastrzebski@intel.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1490910640-244285-1-git-send-email-michalx.k.jastrzebski@intel.com> References: <1490910640-244285-1-git-send-email-michalx.k.jastrzebski@intel.com> Subject: [dpdk-dev] [PATCH v2 4/5] add support for new xstats API retrieving by id 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: , X-List-Received-Date: Thu, 30 Mar 2017 22:23:00 -0000 Add support for new xstats API retrieving by id to proc_info application Signed-off-by: Jacek Piasecki Signed-off-by: Kuba Kozak --- 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