Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf top: Add branch annotation code to top

Now that we can process branch data in annotate it makes sense to
support enabling branch recording from top too. Most of the code needed
for this is already in shared code with report. But we need to add:

- The option parsing code (using shared code from the previous patch)
- Document the options
- Set up the IPC/cycles accounting state in the top session
- Call the accounting code in the hist iter callback

Signed-off-by: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: http://lkml.kernel.org/r/1437233094-12844-8-git-send-email-andi@firstfloor.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Andi Kleen and committed by
Arnaldo Carvalho de Melo
a18b027e f8f4aaea

+30
+21
tools/perf/Documentation/perf-top.txt
··· 208 208 This option sets the time out limit. The default value is 500 ms. 209 209 210 210 211 + -b:: 212 + --branch-any:: 213 + Enable taken branch stack sampling. Any type of taken branch may be sampled. 214 + This is a shortcut for --branch-filter any. See --branch-filter for more infos. 215 + 216 + -j:: 217 + --branch-filter:: 218 + Enable taken branch stack sampling. Each sample captures a series of consecutive 219 + taken branches. The number of branches captured with each sample depends on the 220 + underlying hardware, the type of branches of interest, and the executed code. 221 + It is possible to select the types of branches captured by enabling filters. 222 + For a full list of modifiers please see the perf record manpage. 223 + 224 + The option requires at least one branch type among any, any_call, any_ret, ind_call, cond. 225 + The privilege levels may be omitted, in which case, the privilege levels of the associated 226 + event are applied to the branch filter. Both kernel (k) and hypervisor (hv) privilege 227 + levels are subject to permissions. When sampling on multiple events, branch stack sampling 228 + is enabled for all the sampling events. The sampled branch type is the same for all events. 229 + The various filters must be specified as a comma separated list: --branch-filter any_ret,u,k 230 + Note that this feature may not be available on all processors. 231 + 211 232 INTERACTIVE PROMPTING KEYS 212 233 -------------------------- 213 234
+9
tools/perf/builtin-top.c
··· 40 40 #include "util/xyarray.h" 41 41 #include "util/sort.h" 42 42 #include "util/intlist.h" 43 + #include "util/parse-branch-options.h" 43 44 #include "arch/common.h" 44 45 45 46 #include "util/debug.h" ··· 696 695 perf_top__record_precise_ip(top, he, evsel->idx, ip); 697 696 } 698 697 698 + hist__account_cycles(iter->sample->branch_stack, al, iter->sample, 699 + !(top->record_opts.branch_stack & PERF_SAMPLE_BRANCH_ANY)); 699 700 return 0; 700 701 } 701 702 ··· 1174 1171 "don't try to adjust column width, use these fixed values"), 1175 1172 OPT_UINTEGER(0, "proc-map-timeout", &opts->proc_map_timeout, 1176 1173 "per thread proc mmap processing timeout in ms"), 1174 + OPT_CALLBACK_NOOPT('b', "branch-any", &opts->branch_stack, 1175 + "branch any", "sample any taken branches", 1176 + parse_branch_stack), 1177 + OPT_CALLBACK('j', "branch-filter", &opts->branch_stack, 1178 + "branch filter mask", "branch stack filter modes", 1179 + parse_branch_stack), 1177 1180 OPT_END() 1178 1181 }; 1179 1182 const char * const top_usage[] = {