perf trace: Make "--call-graph" affect just "raw_syscalls:sys_exit"
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: fde54b7860ffff1c93e6b9abb3fbc3b8b95f2695 Gitweb: http://git.kernel.org/tip/fde54b7860ffff1c93e6b9abb3fbc3b8b95f2695 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Mon, 11 Apr 2016 18:42:37 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 11 Apr 2016 22:18:23 -0300
perf trace: Make "--call-graph" affect just "raw_syscalls:sys_exit"
We don't need the callchains at the syscall enter tracepoint, just when finishing it at syscall exit, so reduce the overhead by asking for callchains just at syscall exit.
Suggested-by Milian Wolff <[email protected]>
Cc Adrian Hunter <[email protected]>
Cc David Ahern <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Wang Nan <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/builtin-trace.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-)
tools/perf/builtin-trace.c +21 -1
@@ -2749,7 +2749,27 @@ static int trace__run(struct trace *trace, int argc, const char **argv) goto out_delete_evlist; } -perf_evlist__config (evlist, &trace->opts, &callchain_param); +perf_evlist__config (evlist, &trace->opts,NULL ); + +if (trace->opts.callgraph_set && trace->syscalls.events.sys_exit) { +perf_evsel__config_callchain (trace->syscalls.events.sys_exit, + &trace->opts, &callchain_param); +/* +* Now we have evsels with different sample_ids, use +* PERF_SAMPLE_IDENTIFIER to map from sample to evsel +* from a fixed position in each ring buffer record. +* +* As of this the changeset introducing this comment, this +* isn't strictly needed, as the fields that can come before +* PERF_SAMPLE_ID are all used, but we'll probably disable +* some of those for things like copying the payload of +* pointer syscall arguments, and for vfs_getname we don't +* need PERF_SAMPLE_ADDR and PERF_SAMPLE_IP, so do this +* here as a warning we need to use PERF_SAMPLE_IDENTIFIER. +*/ +perf_evlist__set_sample_bit (evlist,IDENTIFIER ); +perf_evlist__reset_sample_bit (evlist,ID ); + }signal (SIGCHLD , sig_handler);signal (SIGINT , sig_handler);