All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Olsa <olsajiri@gmail.com>
To: Namhyung Kim <namhyung@kernel.org>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>,
	Ian Rogers <irogers@google.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	linux-perf-users@vger.kernel.org,
	Kan Liang <kan.liang@linux.intel.com>,
	Andi Kleen <ak@linux.intel.com>
Subject: Re: [PATCH 2/2] perf stat: Show average value on multiple runs
Date: Sat, 17 Jun 2023 20:45:02 +0200	[thread overview]
Message-ID: <ZI3/LphHu0tP6pib@krava> (raw)
In-Reply-To: <20230616073211.1057936-2-namhyung@kernel.org>

On Fri, Jun 16, 2023 at 12:32:11AM -0700, Namhyung Kim wrote:
> When -r option is used, perf stat runs the command multiple times and
> update stats in the evsel->stats.res_stats for global aggregation.  But
> the value is never used and the value it prints at the end is just the
> value from the last run.  I think we should print the average number of
> multiple runs.
> 
> Add evlist__copy_res_stats() to update the aggr counter (for display)
> using the values in the evsel->stats.res_stats.
> 
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>

this is the 'real' fix right? I thought this was the way it worked before

anyway works nicely now, would be nice to add some tests for this,
but not sure how bad it'd be ;-)

Acked/Tested-by: Jiri Olsa <jolsa@kernel.org>

thanks,
jirka

> ---
>  tools/perf/builtin-stat.c |  5 ++++-
>  tools/perf/util/stat.c    | 22 ++++++++++++++++++++++
>  tools/perf/util/stat.h    |  1 +
>  3 files changed, 27 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
> index e549862f90f0..42f84975a4d5 100644
> --- a/tools/perf/builtin-stat.c
> +++ b/tools/perf/builtin-stat.c
> @@ -2829,8 +2829,11 @@ int cmd_stat(int argc, const char **argv)
>  		}
>  	}
>  
> -	if (!forever && status != -1 && (!interval || stat_config.summary))
> +	if (!forever && status != -1 && (!interval || stat_config.summary)) {
> +		if (stat_config.run_count > 1)
> +			evlist__copy_res_stats(&stat_config, evsel_list);
>  		print_counters(NULL, argc, argv);
> +	}
>  
>  	evlist__finalize_ctlfd(evsel_list);
>  
> diff --git a/tools/perf/util/stat.c b/tools/perf/util/stat.c
> index 0f7b8a8cdea6..967e583392c7 100644
> --- a/tools/perf/util/stat.c
> +++ b/tools/perf/util/stat.c
> @@ -264,6 +264,28 @@ void evlist__copy_prev_raw_counts(struct evlist *evlist)
>  		evsel__copy_prev_raw_counts(evsel);
>  }
>  
> +static void evsel__copy_res_stats(struct evsel *evsel)
> +{
> +	struct perf_stat_evsel *ps = evsel->stats;
> +
> +	/*
> +	 * For GLOBAL aggregation mode, it updates the counts for each run
> +	 * in the evsel->stats.res_stats.  See perf_stat_process_counter().
> +	 */
> +	*ps->aggr[0].counts.values = avg_stats(&ps->res_stats);
> +}
> +
> +void evlist__copy_res_stats(struct perf_stat_config *config, struct evlist *evlist)
> +{
> +	struct evsel *evsel;
> +
> +	if (config->aggr_mode != AGGR_GLOBAL)
> +		return;
> +
> +	evlist__for_each_entry(evlist, evsel)
> +		evsel__copy_res_stats(evsel);
> +}
> +
>  static size_t pkg_id_hash(long __key, void *ctx __maybe_unused)
>  {
>  	uint64_t *key = (uint64_t *) __key;
> diff --git a/tools/perf/util/stat.h b/tools/perf/util/stat.h
> index 7abff7cbb5a1..1cbc26b587ba 100644
> --- a/tools/perf/util/stat.h
> +++ b/tools/perf/util/stat.h
> @@ -182,6 +182,7 @@ void evlist__save_aggr_prev_raw_counts(struct evlist *evlist);
>  
>  int evlist__alloc_aggr_stats(struct evlist *evlist, int nr_aggr);
>  void evlist__reset_aggr_stats(struct evlist *evlist);
> +void evlist__copy_res_stats(struct perf_stat_config *config, struct evlist *evlist);
>  
>  int perf_stat_process_counter(struct perf_stat_config *config,
>  			      struct evsel *counter);
> -- 
> 2.41.0.162.gfafddb0af9-goog
> 

  reply	other threads:[~2023-06-17 18:45 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-16  7:32 [PATCH 1/2] perf stat: Reset aggr stats for each run Namhyung Kim
2023-06-16  7:32 ` [PATCH 2/2] perf stat: Show average value on multiple runs Namhyung Kim
2023-06-17 18:45   ` Jiri Olsa [this message]
2023-06-19 20:00     ` Namhyung Kim
2023-06-17 18:45 ` [PATCH 1/2] perf stat: Reset aggr stats for each run Jiri Olsa
2023-06-19 19:53   ` Namhyung Kim

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZI3/LphHu0tP6pib@krava \
    --to=olsajiri@gmail.com \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=ak@linux.intel.com \
    --cc=irogers@google.com \
    --cc=kan.liang@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.