perf trace: Add --max-stack knob

Similar to the one in the other tools (report, script, top).

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Milian Wolff <milian.wolff@kdab.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/n/tip-lh7kk5a5t3erwxw31ah0cgar@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 6125cc8d
...@@ -129,6 +129,15 @@ the thread executes on the designated CPUs. Default is to monitor all CPUs. ...@@ -129,6 +129,15 @@ the thread executes on the designated CPUs. Default is to monitor all CPUs.
--event:: --event::
Trace other events, see 'perf list' for a complete list. Trace other events, see 'perf list' for a complete list.
--max-stack::
Set the stack depth limit when parsing the callchain, anything
beyond the specified depth will be ignored. Note that at this point
this is just about the presentation part, i.e. the kernel is still
not limiting, the overhead of callchains needs to be set via the
knobs in --call-graph dwarf.
Default: 127
--proc-map-timeout:: --proc-map-timeout::
When processing pre-existing threads /proc/XXX/mmap, it may take a long time, When processing pre-existing threads /proc/XXX/mmap, it may take a long time,
because the file may be huge. A time out is needed in such cases. because the file may be huge. A time out is needed in such cases.
......
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
#include <linux/audit.h> #include <linux/audit.h>
#include <sys/ptrace.h> #include <sys/ptrace.h>
#include <linux/random.h> #include <linux/random.h>
#include <linux/stringify.h>
#ifndef O_CLOEXEC #ifndef O_CLOEXEC
# define O_CLOEXEC 02000000 # define O_CLOEXEC 02000000
...@@ -106,6 +107,7 @@ struct trace { ...@@ -106,6 +107,7 @@ struct trace {
u64 vfs_getname, u64 vfs_getname,
proc_getname; proc_getname;
} stats; } stats;
unsigned int max_stack;
bool not_ev_qualifier; bool not_ev_qualifier;
bool live; bool live;
bool full_time; bool full_time;
...@@ -1892,7 +1894,7 @@ static int trace__fprintf_callchain(struct trace *trace, struct perf_evsel *evse ...@@ -1892,7 +1894,7 @@ static int trace__fprintf_callchain(struct trace *trace, struct perf_evsel *evse
if (machine__resolve(trace->host, &al, sample) < 0 || if (machine__resolve(trace->host, &al, sample) < 0 ||
thread__resolve_callchain(al.thread, &callchain_cursor, evsel, thread__resolve_callchain(al.thread, &callchain_cursor, evsel,
sample, NULL, NULL, scripting_max_stack)) { sample, NULL, NULL, trace->max_stack)) {
pr_err("Problem processing %s callchain, skipping...\n", pr_err("Problem processing %s callchain, skipping...\n",
perf_evsel__name(evsel)); perf_evsel__name(evsel));
return 0; return 0;
...@@ -3029,6 +3031,7 @@ int cmd_trace(int argc, const char **argv, const char *prefix __maybe_unused) ...@@ -3029,6 +3031,7 @@ int cmd_trace(int argc, const char **argv, const char *prefix __maybe_unused)
.show_comm = true, .show_comm = true,
.trace_syscalls = true, .trace_syscalls = true,
.kernel_syscallchains = false, .kernel_syscallchains = false,
.max_stack = PERF_MAX_STACK_DEPTH,
}; };
const char *output_name = NULL; const char *output_name = NULL;
const char *ev_qualifier_str = NULL; const char *ev_qualifier_str = NULL;
...@@ -3079,6 +3082,10 @@ int cmd_trace(int argc, const char **argv, const char *prefix __maybe_unused) ...@@ -3079,6 +3082,10 @@ int cmd_trace(int argc, const char **argv, const char *prefix __maybe_unused)
&record_parse_callchain_opt), &record_parse_callchain_opt),
OPT_BOOLEAN(0, "kernel-syscall-graph", &trace.kernel_syscallchains, OPT_BOOLEAN(0, "kernel-syscall-graph", &trace.kernel_syscallchains,
"Show the kernel callchains on the syscall exit path"), "Show the kernel callchains on the syscall exit path"),
OPT_UINTEGER(0, "max-stack", &trace.max_stack,
"Set the maximum stack depth when parsing the callchain, "
"anything beyond the specified depth will be ignored. "
"Default: " __stringify(PERF_MAX_STACK_DEPTH)),
OPT_UINTEGER(0, "proc-map-timeout", &trace.opts.proc_map_timeout, OPT_UINTEGER(0, "proc-map-timeout", &trace.opts.proc_map_timeout,
"per thread proc mmap processing timeout in ms"), "per thread proc mmap processing timeout in ms"),
OPT_END() OPT_END()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment