perf stat: fix per-socket output bug for uncore events
PATCH 1/1 perf stat: fix per-socket output bug for uncore events
This patch fixes a problem reported by Andi Kleen on perf stat when measuring uncore events:
# perf stat --per-socket -e uncore_pcu/event=0x0/ -I1000 -a sleep 2
It would not report counts for the second socket. That was due to a cpu mapping bug in print_aggr().
This patch also fixes the socket numbering bug for <not counted> events.
---
tools/perf/builtin-stat.c +4 -3
@@ -924,7 +924,7 @@ static void abs_printout(int cpu, int nr, struct perf_evsel *evsel, double avg)static void print_aggr (char *prefix) {struct perf_evsel *counter; -int cpu, s, s2, id, nr; +int cpu, cpu2, s, s2, id, nr;u64 ena, run, val;if (!(aggr_map || aggr_get_id))
@@ -936,7 +936,8 @@ static void print_aggr(char *prefix) val = ena = run =0 ; nr =0 ;for (cpu =0 ; cpu <perf_evsel__nr_cpus (counter); cpu++) { - s2 =aggr_get_id (evsel_list->cpus, cpu); + cpu2 =perf_evsel__cpus (counter)->map[cpu]; + s2 =aggr_get_id (evsel_list->cpus, cpu2);if (s2 != id)continue ; val += counter->counts->cpu[cpu].val;
@@ -948,7 +949,7 @@ static void print_aggr(char *prefix)fprintf (output,"%s" , prefix);if (run ==0 || ena ==0 ) { -aggr_printout (counter, cpu, nr); +aggr_printout (counter, id, nr); fprintf(output, "%*s%s%*s", csv_output ? 0 : 18,
Quoted 2 lines
Reported-by Andi Kleen <[email protected]>Signed-off-by Stephane Eranian <[email protected]>
Works for me. Thanks.
-Andi
Arnaldo Carvalho de Melo
AppliedEm Fri, Jul 05, 2013 at 07:06:45PM +0200, Stephane Eranian escreveu:
Quoted 6 lines
This patch fixes a problem reported by Andi Kleen on perf stat when measuring uncore events:
# perf stat --per-socket -e uncore_pcu/event=0x0/ -I1000 -a sleep 2
Quoted 8 lines
It would not report counts for the second socket. That was due to a cpu mapping bug in
print_aggr().This patch also fixes the socket numbering bug for <not counted> events.
Reported-by Andi Kleen <[email protected]>Signed-off-by Stephane Eranian <[email protected]>
Thanks, applied.
- Arnaldo
tip-bot for Stephane Eranian
merge bot[tip:perf/urgent] perf stat: Fix per-socket output bug for uncore events
In reply to Stephane Eranianperf stat: Fix per-socket output bug for uncore events
Commit-ID: 582ec0829b3dd74d8c0f58403a3f9df8cbaa9c7d Gitweb: http://git.kernel.org/tip/582ec0829b3dd74d8c0f58403a3f9df8cbaa9c7d Author: Stephane Eranian <[email protected]> AuthorDate: Fri, 5 Jul 2013 19:06:45 +0200 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 8 Jul 2013 18:01:46 -0300
perf stat: Fix per-socket output bug for uncore events
This patch fixes a problem reported by Andi Kleen on perf stat when measuring uncore events:
# perf stat --per-socket -e uncore_pcu/event=0x0/ -I1000 -a sleep 2
It would not report counts for the second socket. That was due to a cpu mapping bug in print_aggr().
This patch also fixes the socket numbering bug for <not counted> events.
--- tools/perf/builtin-stat.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
tools/perf/builtin-stat.c +4 -3
@@ -924,7 +924,7 @@ static void abs_printout(int cpu, int nr, struct perf_evsel *evsel, double avg)static void print_aggr (char *prefix) {struct perf_evsel *counter; -int cpu, s, s2, id, nr; +int cpu, cpu2, s, s2, id, nr;u64 ena, run, val;if (!(aggr_map || aggr_get_id))
@@ -936,7 +936,8 @@ static void print_aggr(char *prefix) val = ena = run =0 ; nr =0 ;for (cpu =0 ; cpu <perf_evsel__nr_cpus (counter); cpu++) { - s2 =aggr_get_id (evsel_list->cpus, cpu); + cpu2 =perf_evsel__cpus (counter)->map[cpu]; + s2 =aggr_get_id (evsel_list->cpus, cpu2);if (s2 != id)continue ; val += counter->counts->cpu[cpu].val;
@@ -948,7 +949,7 @@ static void print_aggr(char *prefix)fprintf (output,"%s" , prefix);if (run ==0 || ena ==0 ) { -aggr_printout (counter, cpu, nr); +aggr_printout (counter, id, nr); fprintf(output, "%*s%s%*s", csv_output ? 0 : 18,