perf stat: Use thread map index for shadow stat
When AGGR_THREAD is active, it aggregates the values for each thread. Previously it used cpu map index which is invalid for AGGR_THREAD so it had to use separate runtime stats with index 0. But it can just use the rt_stat with thread_map_index. Rename the first_shadow_map_idx() and make it return the thread index. Reviewed-by: James Clark <james.clark@arm.com> Signed-off-by: Namhyung Kim <namhyung@kernel.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Ian Rogers <irogers@google.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Leo Yan <leo.yan@linaro.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Xing Zhengjun <zhengjun.xing@linux.intel.com> Link: https://lore.kernel.org/r/20220930202110.845199-5-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
dfca2d692d
commit
87ae87fd6c
|
@ -442,7 +442,7 @@ static void print_metric_header(struct perf_stat_config *config,
|
|||
fprintf(os->fh, "%*s ", config->metric_only_len, unit);
|
||||
}
|
||||
|
||||
static int first_shadow_cpu_map_idx(struct perf_stat_config *config,
|
||||
static int first_shadow_map_idx(struct perf_stat_config *config,
|
||||
struct evsel *evsel, const struct aggr_cpu_id *id)
|
||||
{
|
||||
struct perf_cpu_map *cpus = evsel__cpus(evsel);
|
||||
|
@ -452,6 +452,9 @@ static int first_shadow_cpu_map_idx(struct perf_stat_config *config,
|
|||
if (config->aggr_mode == AGGR_NONE)
|
||||
return perf_cpu_map__idx(cpus, id->cpu);
|
||||
|
||||
if (config->aggr_mode == AGGR_THREAD)
|
||||
return id->thread;
|
||||
|
||||
if (!config->aggr_get_id)
|
||||
return 0;
|
||||
|
||||
|
@ -646,7 +649,7 @@ static void printout(struct perf_stat_config *config, struct aggr_cpu_id id, int
|
|||
}
|
||||
|
||||
perf_stat__print_shadow_stats(config, counter, uval,
|
||||
first_shadow_cpu_map_idx(config, counter, &id),
|
||||
first_shadow_map_idx(config, counter, &id),
|
||||
&out, &config->metric_events, st);
|
||||
if (!config->csv_output && !config->metric_only && !config->json_output) {
|
||||
print_noise(config, counter, noise);
|
||||
|
@ -676,7 +679,7 @@ static void aggr_update_shadow(struct perf_stat_config *config,
|
|||
val += perf_counts(counter->counts, idx, 0)->val;
|
||||
}
|
||||
perf_stat__update_shadow_stats(counter, val,
|
||||
first_shadow_cpu_map_idx(config, counter, &id),
|
||||
first_shadow_map_idx(config, counter, &id),
|
||||
&rt_stat);
|
||||
}
|
||||
}
|
||||
|
@ -979,14 +982,9 @@ static void print_aggr_thread(struct perf_stat_config *config,
|
|||
fprintf(output, "%s", prefix);
|
||||
|
||||
id = buf[thread].id;
|
||||
if (config->stats)
|
||||
printout(config, id, 0, buf[thread].counter, buf[thread].uval,
|
||||
prefix, buf[thread].run, buf[thread].ena, 1.0,
|
||||
&config->stats[id.thread]);
|
||||
else
|
||||
printout(config, id, 0, buf[thread].counter, buf[thread].uval,
|
||||
prefix, buf[thread].run, buf[thread].ena, 1.0,
|
||||
&rt_stat);
|
||||
printout(config, id, 0, buf[thread].counter, buf[thread].uval,
|
||||
prefix, buf[thread].run, buf[thread].ena, 1.0,
|
||||
&rt_stat);
|
||||
fputc('\n', output);
|
||||
}
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ struct saved_value {
|
|||
struct evsel *evsel;
|
||||
enum stat_type type;
|
||||
int ctx;
|
||||
int map_idx; /* cpu map index */
|
||||
int map_idx; /* cpu or thread map index */
|
||||
struct cgroup *cgrp;
|
||||
struct runtime_stat *stat;
|
||||
struct stats stats;
|
||||
|
|
|
@ -389,12 +389,8 @@ process_counter_values(struct perf_stat_config *config, struct evsel *evsel,
|
|||
}
|
||||
|
||||
if (config->aggr_mode == AGGR_THREAD) {
|
||||
if (config->stats)
|
||||
perf_stat__update_shadow_stats(evsel,
|
||||
count->val, 0, &config->stats[thread]);
|
||||
else
|
||||
perf_stat__update_shadow_stats(evsel,
|
||||
count->val, 0, &rt_stat);
|
||||
perf_stat__update_shadow_stats(evsel, count->val,
|
||||
thread, &rt_stat);
|
||||
}
|
||||
break;
|
||||
case AGGR_GLOBAL:
|
||||
|
|
Loading…
Reference in New Issue