lkml.org 
[lkml]   [2015]   [Sep]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 10/13] perf report: Do not blindly use env->cpu[al.cpu].socket_id


On 2015/9/10 3:50, Arnaldo Carvalho de Melo wrote:
> From: Arnaldo Carvalho de Melo <acme@redhat.com>
>
> As al.cpu may be -1, i.e. no PERF_SAMPLE_CPU, and env->cpu may be NULL.
>
> Rely instead on the work now done in perf_event__preprocess_sample(),
> that does all those checks.
>
> Reported-by: Wang Nan <wangnan0@huawei.com>
> Based-on-a-patch-by: Jiri Olsa <jolsa@kernel.org>
> Cc: Adrian Hunter <adrian.hunter@intel.com>
> Cc: Borislav Petkov <bp@suse.de>
> Cc: David Ahern <dsahern@gmail.com>
> Cc: Frederic Weisbecker <fweisbec@gmail.com>
> Cc: Kan Liang <kan.liang@intel.com>
> Cc: Namhyung Kim <namhyung@kernel.org>
> Cc: Stephane Eranian <eranian@google.com>
> Cc: Wang Nan <wangnan0@huawei.com>
> Link: http://lkml.kernel.org/n/tip-2lw80g5ehsrec7tozhmnjgxw@git.kernel.org
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> ---
> tools/perf/builtin-report.c | 4 ----
> 1 file changed, 4 deletions(-)
>
> diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
> index 4b432453922f..9b5083630a56 100644
> --- a/tools/perf/builtin-report.c
> +++ b/tools/perf/builtin-report.c
> @@ -150,7 +150,6 @@ static int process_sample_event(struct perf_tool *tool,
> .add_entry_cb = hist_iter__report_callback,
> };
> int ret = 0;
> - struct perf_env *env = evsel->evlist->env;
>
> if (perf_event__preprocess_sample(event, machine, &al, sample) < 0) {
> pr_debug("problem processing %d event, skipping it.\n",
> @@ -158,9 +157,6 @@ static int process_sample_event(struct perf_tool *tool,
> return -1;
> }
>
> - /* read socket id from perf.data for perf report */
> - al.socket = env->cpu[al.cpu].socket_id;
> -
> if (rep->hide_unresolved && al.sym == NULL)
> goto out_put;
>

I tested this patch on an 8 cores SOC. No segfault found now.

Normal case:

# ./perf record -a ls
# ...
# ./perf_arm64 report -v --stdio -s socket,cpu
build id event received for [kernel.kallsyms]: ...
# To display the perf.data header info, please use
--header/--header-only options.
#
symsrc__init: cannot get elf header.
Looking at the vmlinux_path (7 entries long)
Failed to open /proc/kcore. Note /proc/kcore requires CAP_SYS_RAWIO
capability to access.
Using /proc/kallsyms for symbols
Failed to open /sbin/adbd, continuing without symbols
#
# Total Lost Samples: 0
#
# Samples: 291 of event 'cycles'
# Event count (approx.): 40968659
#
# Overhead Socket CPU
# ........ ...... ...
#
58.01% 000 004
35.61% 000 007
3.65% 000 005
1.23% 001 000
1.18% 001 001
0.19% 000 006
0.08% 001 002
0.07% 001 003

If one of CPUs is offlined before 'perf record':

# ./perf record -a ls
# ...
# ./perf_arm64 report -v --stdio -s socket,cpu
build id event received for [kernel.kallsyms]:
d287ff3393fb1a01d3a785c3a1dac6e63d973bce
# To display the perf.data header info, please use
--header/--header-only options.
#
symsrc__init: cannot get elf header.
Looking at the vmlinux_path (7 entries long)
Failed to open /proc/kcore. Note /proc/kcore requires CAP_SYS_RAWIO
capability to access.
Using /proc/kallsyms for symbols
Failed to open /sbin/adbd, continuing without symbols
#
# Total Lost Samples: 0
#
# Samples: 304 of event 'cycles'
# Event count (approx.): 42027298
#
# Overhead Socket CPU
# ........ ...... ...
#
60.25% -001 004
32.69% -001 007
5.00% -001 005
1.34% -001 003
0.37% -001 000
0.20% -001 006
0.08% -001 002
0.07% -001 001

And if CPU is offlined during perf record (between build_cpu_topology()
and perf_env__read_cpu_topology_map()):

# ./perf report -v --stdio -s socket,cpu
build id event received for [kernel.kallsyms]: ...
core_id number is too big.You may need to upgrade the perf tool. <---
*please see this line*
# To display the perf.data header info, please use
--header/--header-only options.
#
symsrc__init: cannot get elf header.
Looking at the vmlinux_path (7 entries long)
Failed to open /proc/kcore. Note /proc/kcore requires CAP_SYS_RAWIO
capability to access.
Using /proc/kallsyms for symbols
#
# Total Lost Samples: 0
#
# Samples: 278 of event 'cycles'
# Event count (approx.): 37729429
#
# Overhead Socket CPU
# ........ ...... ...
#
59.06% -001 004
36.93% -001 007
1.33% -001 000
1.18% -001 005
0.82% -001 006
0.50% -001 001
0.08% -001 002
0.08% -001 003




\
 
 \ /
  Last update: 2015-09-11 14:21    [W:0.188 / U:24.412 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site