Re: [PATCH 1/2] perf evsel: Fix probing of precise_ip level for default cycles event

From: Ingo Molnar
Date: Wed Jun 14 2017 - 01:46:46 EST



* Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> wrote:

> tools/perf/tests/task-exit.c | 2 +-
> tools/perf/util/evsel.c | 5 +++++
> 2 files changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/tests/task-exit.c b/tools/perf/tests/task-exit.c
> index 32873ec91a4e..cf00ebad2ef5 100644
> --- a/tools/perf/tests/task-exit.c
> +++ b/tools/perf/tests/task-exit.c
> @@ -83,7 +83,7 @@ int test__task_exit(int subtest __maybe_unused)
>
> evsel = perf_evlist__first(evlist);
> evsel->attr.task = 1;
> - evsel->attr.sample_freq = 0;
> + evsel->attr.sample_freq = 1;
> evsel->attr.inherit = 0;
> evsel->attr.watermark = 0;
> evsel->attr.wakeup_events = 1;
> diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
> index e4f7902d5afa..a7ce529ca36c 100644
> --- a/tools/perf/util/evsel.c
> +++ b/tools/perf/util/evsel.c
> @@ -273,6 +273,11 @@ struct perf_evsel *perf_evsel__new_cycles(void)
> struct perf_evsel *evsel;
>
> event_attr_init(&attr);
> + /*
> + * Unnamed union member, not supported as struct member named
> + * initializer in older compilers such as gcc 4.4.7
> + */
> + attr.sample_period = 1;
>
> perf_event_attr__set_max_precise_ip(&attr);

Hm, so this really broke perf for me on my main system - 'perf top' and 'perf
report' only shows:

triton:~/tip> perf report --stdio
unwind: target platform=x86 is not supported
unwind: target platform=x86 is not supported
unwind: target platform=x86 is not supported
unwind: target platform=x86 is not supported
unwind: target platform=x86 is not supported
unwind: target platform=x86 is not supported
unwind: target platform=x86 is not supported
unwind: target platform=x86 is not supported
# To display the perf.data header info, please use --header/--header-only options.
#
#
# Total Lost Samples: 0
#
# Samples: 921K of event 'cycles:ppp'
# Event count (approx.): 921045
#
# Overhead Command Shared Object Symbol
# ........ ......... ................ ....................
#
99.93% hackbench [kernel.vmlinux] [k] native_write_msr
0.07% perf [kernel.vmlinux] [k] native_write_msr

the bisection result is unambiguous:

7fd1d092b4337831d7ccbf3a74c07cb0b2089023 is the first bad commit

proper output would be:

...
#
# Total Lost Samples: 0
#
# Samples: 9K of event 'cycles'
# Event count (approx.): 4378583062
#
# Overhead Command Shared Object Symbol
# ........ ......... ................ .......................................
#
4.32% hackbench [kernel.vmlinux] [k] copy_user_enhanced_fast_string
4.02% hackbench [kernel.vmlinux] [k] unix_stream_read_generic
3.75% hackbench [kernel.vmlinux] [k] filemap_map_pages
3.06% hackbench [kernel.vmlinux] [k] __check_object_size
2.44% hackbench [kernel.vmlinux] [k] _raw_spin_lock_irqsave
2.32% hackbench [kernel.vmlinux] [k] native_queued_spin_lock_slowpath
2.22% hackbench [kernel.vmlinux] [k] entry_SYSENTER_compat
1.90% hackbench [vdso] [.] __vdso_gettimeofday
1.80% hackbench [kernel.vmlinux] [k] _raw_spin_lock
1.80% hackbench [kernel.vmlinux] [k] skb_set_owner_w
1.67% hackbench [kernel.vmlinux] [k] kmem_cache_free
1.52% hackbench [kernel.vmlinux] [k] skb_release_data
1.48% hackbench [kernel.vmlinux] [k] common_file_perm
1.45% hackbench [kernel.vmlinux] [k] page_fault
1.45% hackbench [kernel.vmlinux] [k] cmpxchg_double_slab.isra.62
1.42% hackbench [kernel.vmlinux] [k] new_sync_read
1.36% hackbench [kernel.vmlinux] [k] __check_heap_object

Here's the hardware details:

# ========
# captured on: Wed Jun 14 07:34:42 2017
# hostname : triton
# os release : 4.10.0-23-generic
# perf version : 4.12.rc5.g9688eb
# arch : x86_64
# nrcpus online : 12
# nrcpus avail : 12
# cpudesc : Intel(R) Core(TM) i7-4960X CPU @ 3.60GHz
# cpuid : GenuineIntel,6,62,4
# total memory : 65917012 kB
# cmdline : /home/mingo/bin/perf record /home/mingo/hackbench 10
# event : name = cycles:ppp, , size = 112, { sample_period, sample_freq } = 1, sample_type = IP|TID|TIME, disabled = 1, inherit = 1, mmap = 1, comm = 1, enable_on_exec = 1, task = 1,
# HEADER_CPU_TOPOLOGY info available, use -I to display
# HEADER_NUMA_TOPOLOGY info available, use -I to display
# pmu mappings: intel_bts = 6, uncore_cbox_5 = 21, uncore_ha_0 = 8, uncore_imc_2 = 9, uncore_cbox_3 = 19, cstate_pkg = 25, breakpoint = 5, uncore_imc_0 = 11, uncore_ubox = 15, uncore
# HEADER_CACHE info available, use -I to display
# missing features: HEADER_TRACING_DATA HEADER_BRANCH_STACK HEADER_GROUP_DESC HEADER_AUXTRACE HEADER_STAT
# ========

let me know if you need more info.

Btw., note that there's also this warning:

unwind: target platform=x86 is not supported

(but that's unrelated to this commit.)

Thanks,

Ingo