From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id AD069DE3 for ; Tue, 17 Jan 2017 12:08:54 +0100 (CET) Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga103.fm.intel.com with ESMTP; 17 Jan 2017 03:08:53 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,244,1477983600"; d="scan'208";a="49648344" Received: from irsmsx107.ger.corp.intel.com ([163.33.3.99]) by orsmga004.jf.intel.com with ESMTP; 17 Jan 2017 03:08:53 -0800 Received: from irsmsx102.ger.corp.intel.com ([169.254.2.230]) by IRSMSX107.ger.corp.intel.com ([169.254.10.3]) with mapi id 14.03.0248.002; Tue, 17 Jan 2017 11:08:09 +0000 From: "Van Haaren, Harry" To: "Horton, Remy" , "dev@dpdk.org" CC: "Pattan, Reshma" , Thomas Monjalon Thread-Topic: [dpdk-dev] [PATCH v7 2/6] app/proc_info: add metrics displaying Thread-Index: AQHScBR0aw4H12XM2EaNCKGAwzZvYqE8gfkw Date: Tue, 17 Jan 2017 11:08:08 +0000 Message-ID: References: <1484583573-30163-1-git-send-email-remy.horton@intel.com> <1484583573-30163-3-git-send-email-remy.horton@intel.com> In-Reply-To: <1484583573-30163-3-git-send-email-remy.horton@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZjg0MjQ1NzMtZTQxMy00MjVhLWFhNjgtM2FiZTA3M2FiMTZkIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6IjRSU2NQRkhIZXgxRGVMUlYxWHYyUE1vZE03YWtxWGJPVjlodmFhalBvR2M9In0= x-ctpclassification: CTP_IC x-originating-ip: [163.33.239.182] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v7 2/6] app/proc_info: add metrics displaying 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: Tue, 17 Jan 2017 11:08:55 -0000 > -----Original Message----- > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Remy Horton > Sent: Monday, January 16, 2017 4:19 PM > To: dev@dpdk.org > Cc: Pattan, Reshma ; Thomas Monjalon > Subject: [dpdk-dev] [PATCH v7 2/6] app/proc_info: add metrics displaying >=20 > From: Reshma Pattan >=20 > Modify the dpdk-procinfo process to display the newly added metrics. > Added new command line option "--metrics" to display metrics. >=20 > Signed-off-by: Reshma Pattan > Signed-off-by: Remy Horton Note that current git HEAD has a bug in secondary process - this has alread= y been raised and fixed in patches on the ML. In testing, I manually fixed th= e secondary proc issue, after which testing here worked successfully. Comments inline. > --- > app/proc_info/main.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++= ++++++ > 1 file changed, 73 insertions(+) >=20 > diff --git a/app/proc_info/main.c b/app/proc_info/main.c > index 2c56d10..e5d626e 100644 > --- a/app/proc_info/main.c > +++ b/app/proc_info/main.c > @@ -57,6 +57,7 @@ > #include > #include > #include > +#include >=20 > /* Maximum long option length for option parsing. */ > #define MAX_LONG_OPT_SZ 64 > @@ -68,6 +69,8 @@ static uint32_t enabled_port_mask; > static uint32_t enable_stats; > /**< Enable xstats. */ > static uint32_t enable_xstats; > +/**< Enable metrics. */ > +static uint32_t enable_metrics; > /**< Enable stats reset. */ > static uint32_t reset_stats; > /**< Enable xstats reset. */ > @@ -85,6 +88,8 @@ proc_info_usage(const char *prgname) > " --stats: to display port statistics, enabled by default\n" > " --xstats: to display extended port statistics, disabled by " > "default\n" > + " --metrics: to display derived metrics of the ports, disabled by " > + "default\n" > " --stats-reset: to reset port statistics\n" > " --xstats-reset: to reset port extended statistics\n", I presume there is no need for a --metrics-reset as the values are reset wh= en printed, correct? > prgname); > @@ -127,6 +132,7 @@ proc_info_parse_args(int argc, char **argv) > {"stats", 0, NULL, 0}, > {"stats-reset", 0, NULL, 0}, > {"xstats", 0, NULL, 0}, > + {"metrics", 0, NULL, 0}, > {"xstats-reset", 0, NULL, 0}, > {NULL, 0, 0, 0} > }; > @@ -159,6 +165,10 @@ proc_info_parse_args(int argc, char **argv) > else if (!strncmp(long_option[option_index].name, "xstats", > MAX_LONG_OPT_SZ)) > enable_xstats =3D 1; > + else if (!strncmp(long_option[option_index].name, > + "metrics", > + MAX_LONG_OPT_SZ)) > + enable_metrics =3D 1; > /* Reset stats */ > if (!strncmp(long_option[option_index].name, "stats-reset", > MAX_LONG_OPT_SZ)) > @@ -301,6 +311,63 @@ nic_xstats_clear(uint8_t port_id) > printf("\n NIC extended statistics for port %d cleared\n", port_id); > } >=20 > +static void > +metrics_display(int port_id) > +{ > + struct rte_metric_value *metrics; > + struct rte_metric_name *names; > + int len, ret; > + static const char *nic_stats_border =3D "########################"; > + > + memset(&metrics, 0, sizeof(struct rte_metric_value)); > + len =3D rte_metrics_get_names(NULL, 0); > + if (len < 0) { > + printf("Cannot get metrics count\n"); > + return; > + } > + > + metrics =3D malloc(sizeof(struct rte_metric_value) * len); > + if (metrics =3D=3D NULL) { > + printf("Cannot allocate memory for metrics\n"); > + return; > + } Is malloc() favoured over rte_malloc() for a reason? > + > + names =3D malloc(sizeof(struct rte_metric_name) * len); > + if (names =3D=3D NULL) { > + printf("Cannot allocate memory for metrcis names\n"); > + free(metrics); > + return; > + } > + > + if (len !=3D rte_metrics_get_names(names, len)) { > + printf("Cannot get metrics names\n"); > + free(metrics); > + free(names); > + return; > + } > + > + if (port_id =3D=3D RTE_METRICS_GLOBAL) > + printf("###### Non port specific metrics #########\n"); > + else > + printf("###### metrics for port %-2d #########\n", port_id); > + printf("%s############################\n", nic_stats_border); > + ret =3D rte_metrics_get_values(port_id, metrics, len); > + if (ret < 0 || ret > len) { > + printf("Cannot get metrics values\n"); > + free(metrics); > + free(names); > + return; > + } > + > + int i; > + for (i =3D 0; i < len; i++) > + printf("%s: %"PRIu64"\n", names[i].name, metrics[i].value); > + > + printf("%s############################\n", nic_stats_border); > + free(metrics); > + free(names); > +} > + > int > main(int argc, char **argv) > { > @@ -360,8 +427,14 @@ main(int argc, char **argv) > nic_stats_clear(i); > else if (reset_xstats) > nic_xstats_clear(i); > + else if (enable_metrics) > + metrics_display(i); > } > } >=20 > + /* print port independent stats */ > + if (enable_metrics) > + metrics_display(RTE_METRICS_GLOBAL); > + > return 0; > } > -- > 2.5.5