perf stat: Fix shadow stats for clock events
Commit0aa802a794
("perf stat: Get rid of extra clock display function") introduced scale and unit for clock events. Thus, perf_stat__update_shadow_stats() now saves scaled values of clock events in msecs, instead of original nsecs. But while calculating values of shadow stats we still consider clock event values in nsecs. This results in a wrong shadow stat values. Ex, # ./perf stat -e task-clock,cycles ls <SNIP> 2.60 msec task-clock:u # 0.877 CPUs utilized 2,430,564 cycles:u # 1215282.000 GHz Fix this by saving original nsec values for clock events in perf_stat__update_shadow_stats(). After patch: # ./perf stat -e task-clock,cycles ls <SNIP> 3.14 msec task-clock:u # 0.839 CPUs utilized 3,094,528 cycles:u # 0.985 GHz Suggested-by: Jiri Olsa <jolsa@redhat.com> Reported-by: Anton Blanchard <anton@samba.org> Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.ibm.com> Reviewed-by: Jiri Olsa <jolsa@kernel.org> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Jin Yao <yao.jin@linux.intel.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Thomas Richter <tmricht@linux.vnet.ibm.com> Cc: yuzhoujian@didichuxing.com Fixes:0aa802a794
("perf stat: Get rid of extra clock display function") Link: http://lkml.kernel.org/r/20181116042843.24067-1-ravi.bangoria@linux.ibm.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
54fceb0baf
commit
57ddf09173
|
@ -209,11 +209,12 @@ void perf_stat__update_shadow_stats(struct perf_evsel *counter, u64 count,
|
||||||
int cpu, struct runtime_stat *st)
|
int cpu, struct runtime_stat *st)
|
||||||
{
|
{
|
||||||
int ctx = evsel_context(counter);
|
int ctx = evsel_context(counter);
|
||||||
|
u64 count_ns = count;
|
||||||
|
|
||||||
count *= counter->scale;
|
count *= counter->scale;
|
||||||
|
|
||||||
if (perf_evsel__is_clock(counter))
|
if (perf_evsel__is_clock(counter))
|
||||||
update_runtime_stat(st, STAT_NSECS, 0, cpu, count);
|
update_runtime_stat(st, STAT_NSECS, 0, cpu, count_ns);
|
||||||
else if (perf_evsel__match(counter, HARDWARE, HW_CPU_CYCLES))
|
else if (perf_evsel__match(counter, HARDWARE, HW_CPU_CYCLES))
|
||||||
update_runtime_stat(st, STAT_CYCLES, ctx, cpu, count);
|
update_runtime_stat(st, STAT_CYCLES, ctx, cpu, count);
|
||||||
else if (perf_stat_evsel__is(counter, CYCLES_IN_TX))
|
else if (perf_stat_evsel__is(counter, CYCLES_IN_TX))
|
||||||
|
|
Loading…
Reference in New Issue