1
0
Fork 0

perf trace: Make --(min,max}-stack imply "--call-graph dwarf"

If one uses:

  # perf trace --min-stack 16

Then it implicitly means that callgraphs should be enabled, and the best
option in terms of widespread availability is "dwarf".

Further work needed to choose a better alternative, LBR, in capable
systems.

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-xtjmnpkyk42npekxz3kynzmx@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
hifive-unleashed-5.1
Arnaldo Carvalho de Melo 2016-04-15 16:41:19 -03:00
parent 0883e820a0
commit 0561499326
2 changed files with 18 additions and 1 deletions

View File

@ -136,12 +136,18 @@ the thread executes on the designated CPUs. Default is to monitor all CPUs.
not limiting, the overhead of callchains needs to be set via the not limiting, the overhead of callchains needs to be set via the
knobs in --call-graph dwarf. knobs in --call-graph dwarf.
Implies '--call-graph dwarf' when --call-graph not present on the
command line, on systems where DWARF unwinding was built in.
Default: 127 Default: 127
--min-stack:: --min-stack::
Set the stack depth limit when parsing the callchain, anything Set the stack depth limit when parsing the callchain, anything
below the specified depth will be ignored. Disabled by default. below the specified depth will be ignored. Disabled by default.
Implies '--call-graph dwarf' when --call-graph not present on the
command line, on systems where DWARF unwinding was built in.
--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.

View File

@ -3047,7 +3047,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, .max_stack = UINT_MAX,
}; };
const char *output_name = NULL; const char *output_name = NULL;
const char *ev_qualifier_str = NULL; const char *ev_qualifier_str = NULL;
@ -3109,6 +3109,7 @@ int cmd_trace(int argc, const char **argv, const char *prefix __maybe_unused)
"per thread proc mmap processing timeout in ms"), "per thread proc mmap processing timeout in ms"),
OPT_END() OPT_END()
}; };
bool max_stack_user_set = true;
const char * const trace_subcommands[] = { "record", NULL }; const char * const trace_subcommands[] = { "record", NULL };
int err; int err;
char bf[BUFSIZ]; char bf[BUFSIZ];
@ -3142,6 +3143,16 @@ int cmd_trace(int argc, const char **argv, const char *prefix __maybe_unused)
trace.opts.sample_time = true; trace.opts.sample_time = true;
} }
if (trace.max_stack == UINT_MAX) {
trace.max_stack = PERF_MAX_STACK_DEPTH;
max_stack_user_set = false;
}
#ifdef HAVE_DWARF_UNWIND_SUPPORT
if ((trace.min_stack || max_stack_user_set) && !trace.opts.callgraph_set)
record_opts__parse_callchain(&trace.opts, &callchain_param, "dwarf", false);
#endif
if (trace.opts.callgraph_set) if (trace.opts.callgraph_set)
symbol_conf.use_callchain = true; symbol_conf.use_callchain = true;