perf stat: Get correct cpu id for print_aggr
print_aggr() fails to print per-core/per-socket statistics after commit582ec0829b
("perf stat: Fix per-socket output bug for uncore events") if events have differnt cpus. Because in print_aggr(), aggr_get_id needs index (not cpu id) to find core/pkg id. Also, evsel cpu maps should be used to get aggregated id. Here is an example: Counting events cycles,uncore_imc_0/cas_count_read/. (Uncore event has cpumask 0,18) $ perf stat -e cycles,uncore_imc_0/cas_count_read/ -C0,18 --per-core sleep 2 Without this patch, it failes to get CPU 18 result. Performance counter stats for 'CPU(s) 0,18': S0-C0 1 7526851 cycles S0-C0 1 1.05 MiB uncore_imc_0/cas_count_read/ S1-C0 0 <not counted> cycles S1-C0 0 <not counted> MiB uncore_imc_0/cas_count_read/ With this patch, it can get both CPU0 and CPU18 result. Performance counter stats for 'CPU(s) 0,18': S0-C0 16327768
cycles S0-C0 1 0.47 MiB uncore_imc_0/cas_count_read/ S1-C0 1 330228 cycles S1-C0 1 0.29 MiB uncore_imc_0/cas_count_read/ Signed-off-by: Kan Liang <kan.liang@intel.com> Acked-by: Jiri Olsa <jolsa@kernel.org> Acked-by: Stephane Eranian <eranian@google.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Fixes:582ec0829b
("perf stat: Fix per-socket output bug for uncore events") Link: http://lkml.kernel.org/r/1435820925-51091-1-git-send-email-kan.liang@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
196676497f
commit
601083cffb
|
@ -694,7 +694,7 @@ static void abs_printout(int id, int nr, struct perf_evsel *evsel, double avg)
|
|||
static void print_aggr(char *prefix)
|
||||
{
|
||||
struct perf_evsel *counter;
|
||||
int cpu, cpu2, s, s2, id, nr;
|
||||
int cpu, s, s2, id, nr;
|
||||
double uval;
|
||||
u64 ena, run, val;
|
||||
|
||||
|
@ -707,8 +707,7 @@ static void print_aggr(char *prefix)
|
|||
val = ena = run = 0;
|
||||
nr = 0;
|
||||
for (cpu = 0; cpu < perf_evsel__nr_cpus(counter); cpu++) {
|
||||
cpu2 = perf_evsel__cpus(counter)->map[cpu];
|
||||
s2 = aggr_get_id(evsel_list->cpus, cpu2);
|
||||
s2 = aggr_get_id(perf_evsel__cpus(counter), cpu);
|
||||
if (s2 != id)
|
||||
continue;
|
||||
val += perf_counts(counter->counts, cpu, 0)->val;
|
||||
|
|
Loading…
Reference in New Issue