linux/tools/perf
Jin Yao 72f02a947e perf stat: Fix wrong per-thread runtime stat for interval mode
root@kbl-ppc:~# perf stat --per-thread -e cycles,instructions -I1000 --interval-count 2
       1.004171683             perf-3696              8,747,311      cycles
          ...
       1.004171683             perf-3696                691,730      instructions              #    0.08  insn per cycle
          ...
       2.006490373             perf-3696              1,749,936      cycles
          ...
       2.006490373             perf-3696              1,484,582      instructions              #    0.28  insn per cycle
          ...

Let's see interval 2.006490373

  perf-3696              1,749,936      cycles
  perf-3696              1,484,582      instructions              #    0.28  insn per cycle

insn per cycle = 1,484,582 / 1,749,936 = 0.85.

But now it's 0.28, that's not correct.

stat_config.stats[] records the per-thread runtime stat. But for
interval mode, it should be reset for each interval.

So now, with this patch,

  root@kbl-ppc:~# perf stat --per-thread -e cycles,instructions -I1000 --interval-count 2
       1.005818121             perf-8633              9,898,045      cycles
          ...
       1.005818121             perf-8633                693,298      instructions              #    0.07  insn per cycle
          ...
       2.007863743             perf-8633              1,551,619      cycles
          ...
       2.007863743             perf-8633              1,317,514      instructions              #    0.85  insn per cycle
          ...

Let's check interval 2.007863743.

insn per cycle = 1,317,514 / 1,551,619 = 0.85. It's correct.

This patch creates runtime_stat_reset, places it next to
untime_stat_new/runtime_stat_delete and moves all runtime_stat
functions before process_interval.

Committer testing:

After the patch:

  # perf stat --per-thread -e cycles,instructions -I1000 --interval-count 2  |& grep sssd_nss-1130
     2.011309774  sssd_nss-1130   56,585  cycles
     2.011309774  sssd_nss-1130   13,121  instructions  # 0.23 insn per cycle
  # python
  >>> 13121.0 / 56585
  0.23188124061146947
  >>>

Fixes: commit 14e72a21c7 ("perf stat: Update or print per-thread stats")
Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
Reviewed-by: Jiri Olsa <jolsa@redhat.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jin Yao <yao.jin@intel.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lore.kernel.org/lkml/20200520042737.24160-2-yao.jin@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2020-05-28 10:03:27 -03:00
..
arch perf parse-events: Make add PMU verbose output clearer 2020-05-28 10:03:26 -03:00
bench perf tools: Replace zero-length array with flexible-array 2020-05-28 10:03:27 -03:00
Documentation perf docs: Introduce security.txt file to document related issues 2020-05-28 10:03:26 -03:00
examples/bpf Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next 2020-01-28 16:02:33 -08:00
include/bpf perf bpf: Remove bpf/ subdir from bpf.h headers used to build bpf events 2020-02-18 10:13:28 -03:00
jvmti perf jvmti: Link against tools/lib/ctype.h to have weak strlcpy() 2019-10-15 11:47:38 -03:00
pmu-events perf stat: POWER9 metrics: expand "ICT" acronym 2020-05-28 10:03:27 -03:00
python
scripts perf flamegraph: Use /bin/bash for report and record scripts 2020-05-05 16:35:32 -03:00
tests perf expr: Allow numbers to be followed by a dot 2020-05-28 10:03:27 -03:00
trace perf beauty: Allow the CC used in the arch errno names script to acccept CFLAGS 2020-05-28 10:03:26 -03:00
ui perf evsel: Rename perf_evsel__group_idx() to evsel__group_idx() 2020-05-05 16:35:31 -03:00
util perf expr: Allow numbers to be followed by a dot 2020-05-28 10:03:27 -03:00
.gitignore .gitignore: add SPDX License Identifier 2020-03-25 11:50:48 +01:00
Build
builtin-annotate.c perf evsel: Rename perf_evsel__resort*() to evsel__resort*() 2020-05-28 10:03:24 -03:00
builtin-bench.c tools feature: Rename HAVE_EVENTFD to HAVE_EVENTFD_SUPPORT 2020-05-28 10:03:26 -03:00
builtin-buildid-cache.c
builtin-buildid-list.c
builtin-c2c.c perf c2c: Fix 'perf c2c record -e list' to show the default events used 2020-05-28 10:03:25 -03:00
builtin-config.c
builtin-data.c
builtin-diff.c perf evsel: Rename perf_evsel__is_*() to evsel__is*() 2020-05-05 16:35:31 -03:00
builtin-evlist.c perf evsel: Rename perf_evsel__fprintf() to evsel__fprintf() 2020-05-28 10:03:24 -03:00
builtin-ftrace.c perf tools: Support CAP_PERFMON capability 2020-04-16 12:19:08 -03:00
builtin-help.c
builtin-inject.c perf tools: Replace zero-length array with flexible-array 2020-05-28 10:03:27 -03:00
builtin-kallsyms.c
builtin-kmem.c perf kmem: Rename perf_evsel__*() operating on 'struct evsel *' to evsel__*() 2020-05-05 16:35:31 -03:00
builtin-kvm.c perf evsel: Rename perf_evsel__{str,int}val() and other tracepoint field metehods to to evsel__*() 2020-05-05 16:35:30 -03:00
builtin-list.c perf list: Hide deprecated events by default 2019-10-19 15:35:01 -03:00
builtin-lock.c perf lock: Rename perf_evsel__*() operating on 'struct evsel *' to evsel__*() 2020-05-05 16:35:31 -03:00
builtin-mem.c perf c2c: Fix 'perf c2c record -e list' to show the default events used 2020-05-28 10:03:25 -03:00
builtin-probe.c perf probe: Do not show the skipped events 2020-05-28 10:03:24 -03:00
builtin-record.c perf record: Use an eventfd to wakeup when done 2020-05-28 10:03:26 -03:00
builtin-report.c perf callchain: Setup callchain properly in pipe mode 2020-05-28 10:03:25 -03:00
builtin-sched.c perf sched: Rename perf_evsel__*() operating on 'struct evsel *' to evsel__*() 2020-05-05 16:35:31 -03:00
builtin-script.c perf tools: Replace zero-length array with flexible-array 2020-05-28 10:03:27 -03:00
builtin-stat.c perf stat: Fix wrong per-thread runtime stat for interval mode 2020-05-28 10:03:27 -03:00
builtin-timechart.c perf tools: Replace zero-length array with flexible-array 2020-05-28 10:03:27 -03:00
builtin-top.c perf evsel: Rename *perf_evsel__get_config_term() & friends to evsel__env() 2020-05-28 10:03:24 -03:00
builtin-trace.c perf trace: Fix compilation error for make NO_LIBBPF=1 DEBUG=1 2020-05-28 10:03:26 -03:00
builtin-version.c
builtin.h
check-headers.sh perf tools: Grab a copy of libbpf's hashmap 2020-05-28 10:03:26 -03:00
command-list.txt
CREDITS
design.txt perf tools: Support CAP_PERFMON capability 2020-04-16 12:19:08 -03:00
Makefile tools: Let O= makes handle a relative path with -C option 2020-03-06 17:08:28 -03:00
Makefile.config tools feature: Rename HAVE_EVENTFD to HAVE_EVENTFD_SUPPORT 2020-05-28 10:03:26 -03:00
Makefile.perf perf tools: Do not display extra info when there is nothing to build 2020-05-28 10:03:25 -03:00
MANIFEST libperf: Move to tools/lib/perf 2020-01-06 11:46:09 -03:00
perf-archive.sh
perf-completion.sh
perf-read-vdso.c
perf-sys.h perf tools: Make usage of test_attr__* optional for perf-sys.h 2019-10-31 21:38:41 +01:00
perf-with-kcore.sh
perf.c
perf.h