13e0c844fa
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>
63 lines
1.6 KiB
C
63 lines
1.6 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
||
#ifndef __PERF_TOP_H
|
||
#define __PERF_TOP_H 1
|
||
|
||
#include "tool.h"
|
||
#include "evswitch.h"
|
||
#include "annotate.h"
|
||
#include "ordered-events.h"
|
||
#include "record.h"
|
||
#include <linux/types.h>
|
||
#include <stddef.h>
|
||
#include <stdbool.h>
|
||
#include <sys/ioctl.h>
|
||
|
||
struct evlist;
|
||
struct evsel;
|
||
struct perf_session;
|
||
|
||
struct perf_top {
|
||
struct perf_tool tool;
|
||
struct evlist *evlist;
|
||
struct record_opts record_opts;
|
||
struct annotation_options annotation_opts;
|
||
struct evswitch evswitch;
|
||
/*
|
||
* Symbols will be added here in perf_event__process_sample and will
|
||
* get out after decayed.
|
||
*/
|
||
u64 samples, lost, lost_total, drop, drop_total;
|
||
u64 kernel_samples, us_samples;
|
||
u64 exact_samples;
|
||
u64 guest_us_samples, guest_kernel_samples;
|
||
int print_entries, count_filter, delay_secs;
|
||
int max_stack;
|
||
bool hide_kernel_symbols, hide_user_symbols, zero;
|
||
bool use_tui, use_stdio;
|
||
bool vmlinux_warned;
|
||
bool dump_symtab;
|
||
bool stitch_lbr;
|
||
struct hist_entry *sym_filter_entry;
|
||
struct evsel *sym_evsel;
|
||
struct perf_session *session;
|
||
struct winsize winsize;
|
||
int realtime_prio;
|
||
const char *sym_filter;
|
||
float min_percent;
|
||
unsigned int nr_threads_synthesize;
|
||
|
||
struct {
|
||
struct ordered_events *in;
|
||
struct ordered_events data[2];
|
||
bool rotate;
|
||
pthread_mutex_t mutex;
|
||
pthread_cond_t cond;
|
||
} qe;
|
||
};
|
||
|
||
#define CONSOLE_CLEAR "[H[2J"
|
||
|
||
size_t perf_top__header_snprintf(struct perf_top *top, char *bf, size_t size);
|
||
void perf_top__reset_sample_counters(struct perf_top *top);
|
||
#endif /* __PERF_TOP_H */
|