perf, tools, report: Add srcline_from/to branch sort keys
PATCH 1/1 perf, tools, report: Add srcline_from/to branch sort keys
From: Andi Kleen <[email protected]>
Add srcline_from and srcline_to branch sort keys that allow to show the source lines of a branch. That makes it much easier to track down where particular branches happen in the program, for example to examine branch mispredictions, or to associate it with cycle counts:
% perf record -b -e cycles:p ./tcall
% perf report --sort srcline_from,srcline_to,mispredict
...
15.10% tcall.c:18 tcall.c:10 N
14.83% tcall.c:11 tcall.c:5 N
14.12% tcall.c:7 tcall.c:12 N
14.04% tcall.c:12 tcall.c:5 N
12.42% tcall.c:17 tcall.c:18 N
12.39% tcall.c:7 tcall.c:13 N
12.27% tcall.c:13 tcall.c:17 N...
% perf report --sort srcline_from,srcline_to,cycles
...
17.12% tcall.c:18 tcall.c:11 1
17.01% tcall.c:12 tcall.c:6 1
16.98% tcall.c:11 tcall.c:6 1
15.91% tcall.c:17 tcall.c:18 1
6.38% tcall.c:7 tcall.c:17 7
4.80% tcall.c:7 tcall.c:12 8
4.21% tcall.c:7 tcall.c:17 8
2.67% tcall.c:7 tcall.c:12 7
2.62% tcall.c:7 tcall.c:12 10
2.10% tcall.c:7 tcall.c:17 9
1.58% tcall.c:7 tcall.c:12 6
1.44% tcall.c:7 tcall.c:12 5
1.38% tcall.c:7 tcall.c:12 9
1.06% tcall.c:7 tcall.c:17 13
1.05% tcall.c:7 tcall.c:12 4
1.01% tcall.c:7 tcall.c:17 6Open issues:
- Some kernel symbols get misresolved.
--- tools/perf/Documentation/perf-report.txt | 3 +- tools/perf/util/hist.c | 9 ++++ tools/perf/util/hist.h | 2 + tools/perf/util/sort.c | 84 ++++++++++++++++++++++++++++++++ tools/perf/util/sort.h | 2 + tools/perf/util/symbol.h | 2 + 6 files changed, 101 insertions(+), 1 deletion(-)
tools/perf/Documentation/perf-report.txt +2 -1
@@ -103,12 +103,13 @@ OPTIONS If --branch-stack option is used, following sort keys are also available: - dso_from, dso_to, symbol_from, symbol_to, mispredict. - dso_from: name of library or module branched from - dso_to: name of library or module branched to - symbol_from: name of function branched from - symbol_to: name of function branched to + - srcline_from: source file and line branched from + - srcline_to: source file and line branched to - mispredict: "N" for predicted branch, "Y" for mispredicted branch - in_tx: branch in TSX transaction - abort: TSX transaction abort.
tools/perf/util/hist.c +9 -0
@@ -117,6 +117,13 @@ void hists__calc_col_len(struct hists *hists, struct hist_entry *h)hists__new_col_len (hists,HISTC_SYMBOL_TO , symlen);hists__set_unres_dso_col_len (hists,HISTC_DSO_TO ); } + +if (h->branch_info->srcline_from) +hists__new_col_len (hists,HISTC_SRCLINE_FROM , +strlen (h->branch_info->srcline_from)); +if (h->branch_info->srcline_to) +hists__new_col_len (hists,HISTC_SRCLINE_TO , +strlen (h->branch_info->srcline_to)); }if (h->mem_info) {
@@ -1042,6 +1049,8 @@ void hist_entry__delete(struct hist_entry *he)if (he->branch_info) {map__zput (he->branch_info->from.map);map__zput (he->branch_info->to.map); +free_srcline (he->branch_info->srcline_from); +free_srcline (he->branch_info->srcline_to);zfree (&he->branch_info); }
tools/perf/util/hist.h +2 -0
@@ -52,6 +52,8 @@ enum hist_column {HISTC_MEM_IADDR_SYMBOL ,HISTC_TRANSACTION ,HISTC_CYCLES , +HISTC_SRCLINE_FROM , +HISTC_SRCLINE_TO ,HISTC_TRACE , HISTC_NR_COLS, /* Last entry */ };
tools/perf/util/sort.c +84 -0
96 lines not on this page · raw message
tools/perf/util/sort.h +2 -0
@@ -215,6 +215,8 @@ enum sort_type {SORT_ABORT ,SORT_IN_TX ,SORT_CYCLES , +SORT_SRCLINE_FROM , +SORT_SRCLINE_TO ,/* memory mode specific sort keys */ __SORT_MEMORY_MODE,
tools/perf/util/symbol.h +2 -0
@@ -183,6 +183,8 @@ struct branch_info {struct addr_map_symbol from;struct addr_map_symbol to;struct branch_flags flags; +char *srcline_from; +char *srcline_to; };struct mem_info {
Signature · 1 line
2.5.5
Quoted 39 lines · Andi Kleen
From: Andi Kleen <[email protected]>
Add
srcline_fromandsrcline_tobranch sort keys that allow to show the source lines of a branch. That makes it much easier to track down where particular branches happen in the program, for example to examine branch mispredictions, or to associate it with cycle counts:% perf record -b -e cycles:p ./tcall
% perf report --sort srcline_from,srcline_to,mispredict
...15.10% tcall.c:18 tcall.c:10 N 14.83% tcall.c:11 tcall.c:5 N 14.12% tcall.c:7 tcall.c:12 N 14.04% tcall.c:12 tcall.c:5 N 12.42% tcall.c:17 tcall.c:18 N 12.39% tcall.c:7 tcall.c:13 N 12.27% tcall.c:13 tcall.c:17 N...
% perf report --sort srcline_from,srcline_to,cycles
...17.12% tcall.c:18 tcall.c:11 1 17.01% tcall.c:12 tcall.c:6 1 16.98% tcall.c:11 tcall.c:6 1 15.91% tcall.c:17 tcall.c:18 1 6.38% tcall.c:7 tcall.c:17 7 4.80% tcall.c:7 tcall.c:12 8 4.21% tcall.c:7 tcall.c:17 8 2.67% tcall.c:7 tcall.c:12 7 2.62% tcall.c:7 tcall.c:12 10 2.10% tcall.c:7 tcall.c:17 9 1.58% tcall.c:7 tcall.c:12 6 1.44% tcall.c:7 tcall.c:12 5 1.38% tcall.c:7 tcall.c:12 9 1.06% tcall.c:7 tcall.c:17 13 1.05% tcall.c:7 tcall.c:12 4 1.01% tcall.c:7 tcall.c:17 6
Quoted 2 lines
Open issues:
- Some kernel symbols get misresolved.
thanks,
jirka
Em Sat, May 21, 2016 at 02:01:51PM +0200, Jiri Olsa escreveu:
Quoted 4 lines · Andi Kleen
Quoted 1 line
From: Andi Kleen <[email protected]>
Acked-by Jiri Olsa <[email protected]>
Thanks, applied
tip-bot for Andi Kleen
merge bot[tip:perf/urgent] perf report: Add srcline_from/to branch sort keys
In reply to Andi Kleenperf report: Add srcline_from/to branch sort keys
Commit-ID: 508be0dfe6287d4e6452f5a1dc08856df74cb217 Gitweb: http://git.kernel.org/tip/508be0dfe6287d4e6452f5a1dc08856df74cb217 Author: Andi Kleen <[email protected]> AuthorDate: Fri, 20 May 2016 13:15:08 -0700 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 23 May 2016 11:25:16 -0300
perf report: Add srcline_from/to branch sort keys
Add "srcline_from" and "srcline_to" branch sort keys that allow to show the source lines of a branch.
That makes it much easier to track down where particular branches happen in the program, for example to examine branch mispredictions, or to associate it with cycle counts:
% perf record -b -e cycles:p ./tcall
% perf report --sort srcline_from,srcline_to,mispredict
...
15.10% tcall.c:18 tcall.c:10 N
14.83% tcall.c:11 tcall.c:5 N
14.12% tcall.c:7 tcall.c:12 N
14.04% tcall.c:12 tcall.c:5 N
12.42% tcall.c:17 tcall.c:18 N
12.39% tcall.c:7 tcall.c:13 N
12.27% tcall.c:13 tcall.c:17 N
...
% perf report --sort srcline_from,srcline_to,cycles
...
17.12% tcall.c:18 tcall.c:11 1
17.01% tcall.c:12 tcall.c:6 1
16.98% tcall.c:11 tcall.c:6 1
15.91% tcall.c:17 tcall.c:18 1
6.38% tcall.c:7 tcall.c:17 7
4.80% tcall.c:7 tcall.c:12 8
4.21% tcall.c:7 tcall.c:17 8
2.67% tcall.c:7 tcall.c:12 7
2.62% tcall.c:7 tcall.c:12 10
2.10% tcall.c:7 tcall.c:17 9
1.58% tcall.c:7 tcall.c:12 6
1.44% tcall.c:7 tcall.c:12 5
1.38% tcall.c:7 tcall.c:12 9
1.06% tcall.c:7 tcall.c:17 13
1.05% tcall.c:7 tcall.c:12 4
1.01% tcall.c:7 tcall.c:17 6Open issues:
- Some kernel symbols get misresolved.
--- tools/perf/Documentation/perf-report.txt | 3 +- tools/perf/util/hist.c | 9 ++++ tools/perf/util/hist.h | 2 + tools/perf/util/sort.c | 84 ++++++++++++++++++++++++++++++++ tools/perf/util/sort.h | 2 + tools/perf/util/symbol.h | 2 + 6 files changed, 101 insertions(+), 1 deletion(-)
tools/perf/Documentation/perf-report.txt +2 -1
@@ -103,12 +103,13 @@ OPTIONS If --branch-stack option is used, following sort keys are also available: - dso_from, dso_to, symbol_from, symbol_to, mispredict. - dso_from: name of library or module branched from - dso_to: name of library or module branched to - symbol_from: name of function branched from - symbol_to: name of function branched to + - srcline_from: source file and line branched from + - srcline_to: source file and line branched to - mispredict: "N" for predicted branch, "Y" for mispredicted branch - in_tx: branch in TSX transaction - abort: TSX transaction abort.
tools/perf/util/hist.c +9 -0
@@ -117,6 +117,13 @@ void hists__calc_col_len(struct hists *hists, struct hist_entry *h)hists__new_col_len (hists,HISTC_SYMBOL_TO , symlen);hists__set_unres_dso_col_len (hists,HISTC_DSO_TO ); } + +if (h->branch_info->srcline_from) +hists__new_col_len (hists,HISTC_SRCLINE_FROM , +strlen (h->branch_info->srcline_from)); +if (h->branch_info->srcline_to) +hists__new_col_len (hists,HISTC_SRCLINE_TO , +strlen (h->branch_info->srcline_to)); }if (h->mem_info) {
@@ -1042,6 +1049,8 @@ void hist_entry__delete(struct hist_entry *he)if (he->branch_info) {map__zput (he->branch_info->from.map);map__zput (he->branch_info->to.map); +free_srcline (he->branch_info->srcline_from); +free_srcline (he->branch_info->srcline_to);zfree (&he->branch_info); }
tools/perf/util/hist.h +2 -0
@@ -52,6 +52,8 @@ enum hist_column {HISTC_MEM_IADDR_SYMBOL ,HISTC_TRANSACTION ,HISTC_CYCLES , +HISTC_SRCLINE_FROM , +HISTC_SRCLINE_TO ,HISTC_TRACE , HISTC_NR_COLS, /* Last entry */ };
tools/perf/util/sort.c +84 -0
96 lines not on this page · raw message
tools/perf/util/sort.h +2 -0
@@ -215,6 +215,8 @@ enum sort_type {SORT_ABORT ,SORT_IN_TX ,SORT_CYCLES , +SORT_SRCLINE_FROM , +SORT_SRCLINE_TO ,/* memory mode specific sort keys */ __SORT_MEMORY_MODE,
tools/perf/util/symbol.h +2 -0
@@ -186,6 +186,8 @@ struct branch_info {struct addr_map_symbol from;struct addr_map_symbol to;struct branch_flags flags; +char *srcline_from; +char *srcline_to; };struct mem_info {