forked from Minki/linux
b10c78c509
$ perf record -b ./div $ perf record -b ./div Following is the default perf diff output $ perf diff # Event 'cycles' # # Baseline Delta Abs Shared Object Symbol # ........ ......... ................ .................................. # 48.75% +0.33% div [.] main 8.21% -0.20% div [.] compute_flag 19.02% -0.12% libc-2.23.so [.] __random_r 16.17% -0.09% libc-2.23.so [.] __random 2.27% -0.03% div [.] rand@plt +0.02% [i915] [k] gen8_irq_handler 5.52% +0.02% libc-2.23.so [.] rand This patch creates a new computation selection 'cycles'. $ perf diff -c cycles # Event 'cycles' # # Baseline [Program Block Range] Cycles Diff Shared Object Symbol # ........ ....................................... ......................................... # 48.75% [div.c:42 -> div.c:45] 147 div [.] main 48.75% [div.c:31 -> div.c:40] 4 div [.] main 48.75% [div.c:40 -> div.c:40] 0 div [.] main 48.75% [div.c:42 -> div.c:42] 0 div [.] main 48.75% [div.c:42 -> div.c:44] 0 div [.] main 19.02% [random_r.c:357 -> random_r.c:360] 0 libc-2.23.so [.] __random_r 19.02% [random_r.c:357 -> random_r.c:373] 0 libc-2.23.so [.] __random_r 19.02% [random_r.c:357 -> random_r.c:376] 0 libc-2.23.so [.] __random_r 19.02% [random_r.c:357 -> random_r.c:380] 0 libc-2.23.so [.] __random_r 19.02% [random_r.c:357 -> random_r.c:392] 0 libc-2.23.so [.] __random_r 16.17% [random.c:288 -> random.c:291] 0 libc-2.23.so [.] __random 16.17% [random.c:288 -> random.c:291] 0 libc-2.23.so [.] __random 16.17% [random.c:288 -> random.c:295] 0 libc-2.23.so [.] __random 16.17% [random.c:288 -> random.c:297] 0 libc-2.23.so [.] __random 16.17% [random.c:291 -> random.c:291] 0 libc-2.23.so [.] __random 16.17% [random.c:293 -> random.c:293] 0 libc-2.23.so [.] __random 8.21% [div.c:22 -> div.c:22] 148 div [.] compute_flag 8.21% [div.c:22 -> div.c:25] 0 div [.] compute_flag 8.21% [div.c:27 -> div.c:28] 0 div [.] compute_flag 5.52% [rand.c:26 -> rand.c:27] 0 libc-2.23.so [.] rand 5.52% [rand.c:26 -> rand.c:28] 0 libc-2.23.so [.] rand 2.27% [rand@plt+0 -> rand@plt+0] 0 div [.] rand@plt 0.01% [entry_64.S:694 -> entry_64.S:694] 16 [vmlinux] [k] native_irq_return_iret 0.00% [fair.c:7676 -> fair.c:7665] 162 [vmlinux] [k] update_blocked_averages "[Program Block Range]" indicates the range of program basic block (start -> end). If we can find the source line it prints the source line otherwise it prints the symbol+offset instead. v4: --- Use source lines or symbol+offset to indicate the basic block. It should be easier to understand. v3: --- Cast 'struct hist_entry' to 'struct block_hist' in hist_entry__block_fprintf. Use symbol_conf.report_block to check if executing hist_entry__block_fprintf. v2: --- Keep standard perf diff format and display the 'Baseline' and 'Shared Object'. The output is sorted by "Baseline" and the basic blocks in the same function are sorted by cycles diff. Signed-off-by: Jin Yao <yao.jin@linux.intel.com> Reviewed-by: Jiri Olsa <jolsa@kernel.org> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Jin Yao <yao.jin@intel.com> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/1561713784-30533-7-git-send-email-yao.jin@linux.intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
80 lines
1.5 KiB
C
80 lines
1.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef __PERF_SYMBOL_CONF
|
|
#define __PERF_SYMBOL_CONF 1
|
|
|
|
#include <stdbool.h>
|
|
|
|
struct strlist;
|
|
struct intlist;
|
|
|
|
struct symbol_conf {
|
|
bool nanosecs;
|
|
unsigned short priv_size;
|
|
bool try_vmlinux_path,
|
|
init_annotation,
|
|
force,
|
|
ignore_vmlinux,
|
|
ignore_vmlinux_buildid,
|
|
show_kernel_path,
|
|
use_modules,
|
|
allow_aliases,
|
|
sort_by_name,
|
|
show_nr_samples,
|
|
show_total_period,
|
|
use_callchain,
|
|
cumulate_callchain,
|
|
show_branchflag_count,
|
|
exclude_other,
|
|
show_cpu_utilization,
|
|
initialized,
|
|
kptr_restrict,
|
|
event_group,
|
|
demangle,
|
|
demangle_kernel,
|
|
filter_relative,
|
|
show_hist_headers,
|
|
branch_callstack,
|
|
has_filter,
|
|
show_ref_callgraph,
|
|
hide_unresolved,
|
|
raw_trace,
|
|
report_hierarchy,
|
|
report_block,
|
|
inline_name,
|
|
disable_add2line_warn;
|
|
const char *vmlinux_name,
|
|
*kallsyms_name,
|
|
*source_prefix,
|
|
*field_sep,
|
|
*graph_function;
|
|
const char *default_guest_vmlinux_name,
|
|
*default_guest_kallsyms,
|
|
*default_guest_modules;
|
|
const char *guestmount;
|
|
const char *dso_list_str,
|
|
*comm_list_str,
|
|
*pid_list_str,
|
|
*tid_list_str,
|
|
*sym_list_str,
|
|
*col_width_list_str,
|
|
*bt_stop_list_str;
|
|
unsigned long time_quantum;
|
|
struct strlist *dso_list,
|
|
*comm_list,
|
|
*sym_list,
|
|
*dso_from_list,
|
|
*dso_to_list,
|
|
*sym_from_list,
|
|
*sym_to_list,
|
|
*bt_stop_list;
|
|
struct intlist *pid_list,
|
|
*tid_list;
|
|
const char *symfs;
|
|
int res_sample;
|
|
int pad_output_len_dso;
|
|
};
|
|
|
|
extern struct symbol_conf symbol_conf;
|
|
|
|
#endif // __PERF_SYMBOL_CONF
|