linux/tools/perf
Andi Kleen 4804e01116 perf stat: Use affinity for opening events
Restructure the event opening in perf stat to cycle through the events
by CPU after setting affinity to that CPU.

This eliminates IPI overhead in the perf API.

We have to loop through the CPU in the outter builtin-stat code instead
of leaving that to low level functions.

It has to change the weak group fallback strategy slightly.  Since we
cannot easily undo the opens for other CPUs move the weak group retry to
a separate loop.

Before with a large test case with 94 CPUs:

  % time     seconds  usecs/call     calls    errors syscall
  ------ ----------- ----------- --------- --------- ----------------
   42.75    4.050910          67     60046       110 perf_event_open

After:

   26.86    0.944396          16     58069       110 perf_event_open

(the number changes slightly because the weak group retries
work differently and the test case relies on weak groups)

Committer notes:

Added one of the hunks in a patch provided by Andi after I noticed that
the "event times" 'perf test' entry was segfaulting.

Signed-off-by: Andi Kleen <ak@linux.intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Link: http://lore.kernel.org/lkml/20191121001522.180827-10-andi@firstfloor.org
Link: http://lore.kernel.org/lkml/20191127232657.GL84886@tassilo.jf.intel.com # Fix
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2019-11-29 12:20:45 -03:00
..
arch perf maps: Rename map_groups.h to maps.h 2019-11-26 11:07:46 -03:00
bench perf env: Remove needless cpumap.h header 2019-09-20 09:19:21 -03:00
Documentation perf intel-pt: Add support for recording AUX area samples 2019-11-22 10:48:13 -03:00
examples/bpf perf augmented_raw_syscalls: Reduce perf_event_output() boilerplate 2019-08-26 11:58:29 -03:00
include/bpf perf include bpf: Add bpf_tail_call() prototype 2019-07-29 18:34:40 -03:00
jvmti perf jvmti: Link against tools/lib/ctype.h to have weak strlcpy() 2019-10-15 11:47:38 -03:00
lib perf evsel: Add functions to close evsel on a CPU 2019-11-29 12:20:45 -03:00
pmu-events perf vendor events power9: Fix commas so PMU event files are valid JSON 2019-11-12 15:26:55 -03:00
python treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 407 2019-06-05 17:37:14 +02:00
scripts perf scripts python: exported-sql-viewer.py: Fix use of TRUE with SQLite 2019-11-13 09:13:16 -03:00
tests perf stat: Use affinity for opening events 2019-11-29 12:20:45 -03:00
trace perf trace: Wire up strarray__strtoul_flags() 2019-10-19 15:35:02 -03:00
ui perf maps: Rename map_groups.h to maps.h 2019-11-26 11:07:46 -03:00
util perf stat: Use affinity for opening events 2019-11-29 12:20:45 -03:00
.gitignore perf: Update .gitignore file 2019-08-31 22:27:52 -03:00
Build perf tools: Rename build libperf to perf 2019-02-14 15:18:08 -03:00
builtin-annotate.c pref tools: Make 'struct addr_map_symbol' contain 'struct map_symbol' 2019-11-12 08:20:53 -03:00
builtin-bench.c perf tools: Remove perf.h from source files not needing it 2019-08-29 17:38:32 -03:00
builtin-buildid-cache.c perf session: Return error code for perf_session__new() function on failure 2019-09-20 15:58:11 -03:00
builtin-buildid-list.c perf session: Return error code for perf_session__new() function on failure 2019-09-20 15:58:11 -03:00
builtin-c2c.c perf c2c: Fix memory leak in build_cl_output() 2019-10-15 12:08:13 -03:00
builtin-config.c perf tools: Remove util.h from where it is not needed 2019-09-20 09:19:20 -03:00
builtin-data.c perf debug: Remove needless include directives from debug.h 2019-08-31 19:10:19 -03:00
builtin-diff.c perf diff: Use llabs() with 64-bit values 2019-11-28 08:08:38 -03:00
builtin-evlist.c perf evsel: Introduce evsel_fprintf.h 2019-09-25 16:26:34 -03:00
builtin-ftrace.c perf auxtrace: Uninline functions that touch perf_session 2019-08-31 22:24:10 -03:00
builtin-help.c perf debug: Remove needless include directives from debug.h 2019-08-31 19:10:19 -03:00
builtin-inject.c perf inject: Cut AUX area samples 2019-11-22 10:48:13 -03:00
builtin-kallsyms.c perf dsos: Move the dsos struct and its methods to separate source files 2019-08-31 22:24:10 -03:00
builtin-kmem.c perf callchain: Use 'struct map_symbol' in 'struct callchain_cursor_node' 2019-11-12 08:20:53 -03:00
builtin-kvm.c perf kvm: Use evlist layer api when possible 2019-11-06 15:43:05 -03:00
builtin-list.c perf list: Hide deprecated events by default 2019-10-19 15:35:01 -03:00
builtin-lock.c perf session: Return error code for perf_session__new() function on failure 2019-09-20 15:58:11 -03:00
builtin-mem.c perf session: Return error code for perf_session__new() function on failure 2019-09-20 15:58:11 -03:00
builtin-probe.c perf probe: No need for symbol.h, symbol_conf is enough 2019-08-31 22:24:10 -03:00
builtin-record.c perf stat: Use affinity for opening events 2019-11-29 12:20:45 -03:00
builtin-report.c perf thread: Rename thread->mg to thread->maps 2019-11-26 11:07:46 -03:00
builtin-sched.c perf callchain: Use 'struct map_symbol' in 'struct callchain_cursor_node' 2019-11-12 08:20:53 -03:00
builtin-script.c perf script: Fix invalid LBR/binary mismatch error 2019-11-28 08:08:38 -03:00
builtin-stat.c perf stat: Use affinity for opening events 2019-11-29 12:20:45 -03:00
builtin-timechart.c perf session: Return error code for perf_session__new() function on failure 2019-09-20 15:58:11 -03:00
builtin-top.c perf annotate: Pass a 'map_symbol' in places receiving a pair of 'map' and 'symbol' pointers 2019-11-12 08:20:53 -03:00
builtin-trace.c perf parse: Report initial event parsing error 2019-11-18 19:14:29 -03:00
builtin-version.c perf symbols: Move mem_info and branch_info out of symbol.h 2019-08-31 22:27:48 -03:00
builtin.h perf tools: Remove needless util.h include from builtin.h 2019-08-28 17:19:34 -03:00
check-headers.sh Merge branch 'x86/core' into perf/core, to resolve conflicts and to pick up completed topic tree 2019-11-25 09:09:27 +01:00
command-list.txt perf help: Add missing subcommand version 2018-09-19 14:53:36 -03:00
CREDITS
design.txt perf/doc: Update design.txt for exclude_{host|guest} flags 2019-01-21 11:01:18 +01:00
Makefile
Makefile.config perf tools: Allow to link with libbpf dynamicaly 2019-11-26 11:17:45 -03:00
Makefile.perf perf tools: Allow to link with libbpf dynamicaly 2019-11-26 11:17:45 -03:00
MANIFEST tools lib: Adopt zalloc()/zfree() from tools/perf 2019-07-09 10:13:26 -03:00
perf-archive.sh
perf-completion.sh
perf-read-vdso.c perf tools: Make find_vdso_map() more modular 2019-01-08 13:28:13 -03:00
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 Merge branch 'x86/cpu' into perf/core, to pick up dependent changes 2019-06-17 12:29:16 +02:00
perf.c libperf: Merge libperf_set_print() into libperf_init() 2019-09-25 09:51:49 -03:00
perf.h perf time-utils: Adopt rdclock() from perf.h 2019-08-29 17:38:32 -03:00