2020-04-09 07:11:28

by Jin Yao

[permalink] [raw]
Subject: [PATCH] perf stat: Zero ena and run for interval mode

As the code comments in perf_stat_process_counter() say,
we calculate counter's data every interval, and the display
code shows ps->res_stats avg value. We need to zero the stats
for interval mode.

But the current code only zeros the res_stats[0], it doesn't
zero the res_stats[1] and res_stats[2], which are for ena
and run of counter.

This patch zeros the whole res_stats[] for interval mode.

Signed-off-by: Jin Yao <[email protected]>
---
tools/perf/util/stat.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/stat.c b/tools/perf/util/stat.c
index 5f26137b8d60..242476eb808c 100644
--- a/tools/perf/util/stat.c
+++ b/tools/perf/util/stat.c
@@ -368,8 +368,10 @@ int perf_stat_process_counter(struct perf_stat_config *config,
* interval mode, otherwise overall avg running
* averages will be shown for each interval.
*/
- if (config->interval)
- init_stats(ps->res_stats);
+ if (config->interval) {
+ for (i = 0; i < 3; i++)
+ init_stats(&ps->res_stats[i]);
+ }

if (counter->per_pkg)
zero_per_pkg(counter);
--
2.17.1


2020-04-09 17:26:46

by Jiri Olsa

[permalink] [raw]
Subject: Re: [PATCH] perf stat: Zero ena and run for interval mode

On Thu, Apr 09, 2020 at 03:07:55PM +0800, Jin Yao wrote:
> As the code comments in perf_stat_process_counter() say,
> we calculate counter's data every interval, and the display
> code shows ps->res_stats avg value. We need to zero the stats
> for interval mode.
>
> But the current code only zeros the res_stats[0], it doesn't
> zero the res_stats[1] and res_stats[2], which are for ena
> and run of counter.
>
> This patch zeros the whole res_stats[] for interval mode.
>
> Signed-off-by: Jin Yao <[email protected]>

nice catch ;-)

Acked-by: Jiri Olsa <[email protected]>

thanks,
jirka

> ---
> tools/perf/util/stat.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/tools/perf/util/stat.c b/tools/perf/util/stat.c
> index 5f26137b8d60..242476eb808c 100644
> --- a/tools/perf/util/stat.c
> +++ b/tools/perf/util/stat.c
> @@ -368,8 +368,10 @@ int perf_stat_process_counter(struct perf_stat_config *config,
> * interval mode, otherwise overall avg running
> * averages will be shown for each interval.
> */
> - if (config->interval)
> - init_stats(ps->res_stats);
> + if (config->interval) {
> + for (i = 0; i < 3; i++)
> + init_stats(&ps->res_stats[i]);
> + }
>
> if (counter->per_pkg)
> zero_per_pkg(counter);
> --
> 2.17.1
>

2020-04-22 14:09:39

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [PATCH] perf stat: Zero ena and run for interval mode

Em Thu, Apr 09, 2020 at 05:43:32PM +0200, Jiri Olsa escreveu:
> On Thu, Apr 09, 2020 at 03:07:55PM +0800, Jin Yao wrote:
> > As the code comments in perf_stat_process_counter() say,
> > we calculate counter's data every interval, and the display
> > code shows ps->res_stats avg value. We need to zero the stats
> > for interval mode.
> >
> > But the current code only zeros the res_stats[0], it doesn't
> > zero the res_stats[1] and res_stats[2], which are for ena
> > and run of counter.
> >
> > This patch zeros the whole res_stats[] for interval mode.
> >
> > Signed-off-by: Jin Yao <[email protected]>
>
> nice catch ;-)
>
> Acked-by: Jiri Olsa <[email protected]>

Thanks, applied, together with the:

51fd2df1e882 ("perf stat: Fix interval output values")

you provided under private cover.

- Arnaldo

> thanks,
> jirka
>
> > ---
> > tools/perf/util/stat.c | 6 ++++--
> > 1 file changed, 4 insertions(+), 2 deletions(-)
> >
> > diff --git a/tools/perf/util/stat.c b/tools/perf/util/stat.c
> > index 5f26137b8d60..242476eb808c 100644
> > --- a/tools/perf/util/stat.c
> > +++ b/tools/perf/util/stat.c
> > @@ -368,8 +368,10 @@ int perf_stat_process_counter(struct perf_stat_config *config,
> > * interval mode, otherwise overall avg running
> > * averages will be shown for each interval.
> > */
> > - if (config->interval)
> > - init_stats(ps->res_stats);
> > + if (config->interval) {
> > + for (i = 0; i < 3; i++)
> > + init_stats(&ps->res_stats[i]);
> > + }
> >
> > if (counter->per_pkg)
> > zero_per_pkg(counter);
> > --
> > 2.17.1
> >
>

--

- Arnaldo

Subject: [tip: perf/core] perf stat: Zero all the 'ena' and 'run' array slot stats for interval mode

The following commit has been merged into the perf/core branch of tip:

Commit-ID: 0e0bf1ea1147fcf74eab19c2d3c853cc3740a72f
Gitweb: https://git.kernel.org/tip/0e0bf1ea1147fcf74eab19c2d3c853cc3740a72f
Author: Jin Yao <[email protected]>
AuthorDate: Thu, 09 Apr 2020 15:07:55 +08:00
Committer: Arnaldo Carvalho de Melo <[email protected]>
CommitterDate: Wed, 22 Apr 2020 15:51:01 -03:00

perf stat: Zero all the 'ena' and 'run' array slot stats for interval mode

As the code comments in perf_stat_process_counter() say, we calculate
counter's data every interval, and the display code shows ps->res_stats
avg value. We need to zero the stats for interval mode.

But the current code only zeros the res_stats[0], it doesn't zero the
res_stats[1] and res_stats[2], which are for ena and run of counter.

This patch zeros the whole res_stats[] for interval mode.

Fixes: 51fd2df1e882 ("perf stat: Fix interval output values")
Signed-off-by: Jin Yao <[email protected]>
Cc: Alexander Shishkin <[email protected]>
Cc: Andi Kleen <[email protected]>
Cc: Jin Yao <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Kan Liang <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Link: http://lore.kernel.org/lkml/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
---
tools/perf/util/stat.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/stat.c b/tools/perf/util/stat.c
index 5f26137..242476e 100644
--- a/tools/perf/util/stat.c
+++ b/tools/perf/util/stat.c
@@ -368,8 +368,10 @@ int perf_stat_process_counter(struct perf_stat_config *config,
* interval mode, otherwise overall avg running
* averages will be shown for each interval.
*/
- if (config->interval)
- init_stats(ps->res_stats);
+ if (config->interval) {
+ for (i = 0; i < 3; i++)
+ init_stats(&ps->res_stats[i]);
+ }

if (counter->per_pkg)
zero_per_pkg(counter);