perf top: Add option to enable the LBR stitching approach
With the LBR stitching approach, the reconstructed LBR call stack can break the HW limitation. However, it may reconstruct invalid call stacks in some cases, e.g. exception handing such as setjmp/longjmp. Also, it may impact the processing time especially when the number of samples with stitched LBRs are huge. Add an option to enable the approach. The option must be used with --call-graph lbr. Signed-off-by: Kan Liang <kan.liang@linux.intel.com> Reviewed-by: Andi Kleen <ak@linux.intel.com> Acked-by: Jiri Olsa <jolsa@redhat.com> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexey Budankov <alexey.budankov@linux.intel.com> Cc: Mathieu Poirier <mathieu.poirier@linaro.org> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Pavel Gerasimov <pavel.gerasimov@intel.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ravi Bangoria <ravi.bangoria@linux.ibm.com> Cc: Stephane Eranian <eranian@google.com> Cc: Vitaly Slobodskoy <vitaly.slobodskoy@intel.com> Link: http://lore.kernel.org/lkml/20200319202517.23423-16-kan.liang@linux.intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
680d125cd5
commit
13e0c844fa
@@ -33,6 +33,7 @@
|
||||
#include "util/map.h"
|
||||
#include "util/mmap.h"
|
||||
#include "util/session.h"
|
||||
#include "util/thread.h"
|
||||
#include "util/symbol.h"
|
||||
#include "util/synthetic-events.h"
|
||||
#include "util/top.h"
|
||||
@@ -775,6 +776,9 @@ static void perf_event__process_sample(struct perf_tool *tool,
|
||||
if (machine__resolve(machine, &al, sample) < 0)
|
||||
return;
|
||||
|
||||
if (top->stitch_lbr)
|
||||
al.thread->lbr_stitch_enable = true;
|
||||
|
||||
if (!machine->kptr_restrict_warned &&
|
||||
symbol_conf.kptr_restrict &&
|
||||
al.cpumode == PERF_RECORD_MISC_KERNEL) {
|
||||
@@ -1571,6 +1575,8 @@ int cmd_top(int argc, const char **argv)
|
||||
"Sort the output by the event at the index n in group. "
|
||||
"If n is invalid, sort by the first event. "
|
||||
"WARNING: should be used on grouped events."),
|
||||
OPT_BOOLEAN(0, "stitch-lbr", &top.stitch_lbr,
|
||||
"Enable LBR callgraph stitching approach"),
|
||||
OPTS_EVSWITCH(&top.evswitch),
|
||||
OPT_END()
|
||||
};
|
||||
@@ -1640,6 +1646,11 @@ int cmd_top(int argc, const char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
if (top.stitch_lbr && !(callchain_param.record_mode == CALLCHAIN_LBR)) {
|
||||
pr_err("Error: --stitch-lbr must be used with --call-graph lbr\n");
|
||||
goto out_delete_evlist;
|
||||
}
|
||||
|
||||
if (opts->branch_stack && callchain_param.enabled)
|
||||
symbol_conf.show_branchflag_count = true;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user