Skip to contentSkip to conversation

perf: make annotate more readable

PATCH In review Stephane Eranian 4 participants 6 messages May 17, 2011 – Aug 18, 2011 perf events

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 perf: make annotate more readable

This patch adds two new options to perf annotate:
- -R, --no-asm-raw : do not display raw instruction encodings
- -S, --no-source : do not interleave source code with assembly code

We believe those options make the output of annotate more readable. Systematically displaying source can make it hard to follow code and especially optimized code.

Raw encodings are not useful in most cases.

---

tools/perf/Documentation/perf-annotate.txt +9 -0
index 6f5a498..cf59fdd 100644
@@ -66,6 +66,15 @@ OPTIONS
 	used. This interfaces starts by centering on the line with more
 	samples, TAB/UNTAB cycles through the lines with more samples.
 
+-R::
+--no-asm-raw::
+	Do not show raw instruction encoding of assembly instructions. They
+	are displayed by default
+
+-S
+--no-source::
+	Do not interleave source code with assembly code.
+
 SEE ALSO
 --------
 linkperf:perf-record[1], linkperf:perf-report[1]
tools/perf/builtin-annotate.c +4 -0
index e18eb7e..976f5d8 100644
@@ -254,6 +254,10 @@ static const struct option options[] = {
 		    "print matching source lines (may be slow)"),
 	OPT_BOOLEAN('P', "full-paths", &full_paths,
 		    "Don't shorten the displayed pathnames"),
+		OPT_BOOLEAN('S', "no-source", &symbol_conf.annotate_no_src,
+		    "do not interleave source code with assembly code"),
+		OPT_BOOLEAN('R', "no-asm-raw", &symbol_conf.asm_no_raw,
+		    "do not display raw encoding of assembly instructions"),
 	OPT_END()
 };
 
tools/perf/util/annotate.c +4 -1
index 532e4a6..5ccb32b 100644
@@ -324,9 +324,12 @@ fallback:
 
 	snprintf(command, sizeof(command),
 		 "objdump --start-address=0x%016" PRIx64
-		 " --stop-address=0x%016" PRIx64 " -dS -C %s|grep -v %s|expand",
+		 " --stop-address=0x%016" PRIx64
+		 " -d %s %s -C %s|grep -v %s|expand",
 		 map__rip_2objdump(map, sym->start),
 		 map__rip_2objdump(map, sym->end),
+		 symbol_conf.asm_no_raw ? "--no-show-raw" : "",
+		 symbol_conf.annotate_no_src ? "" : "-S",
 		 symfs_filename, filename);
 
 	pr_debug("Executing: %s\n", command);
tools/perf/util/symbol.h +3 -1
index c1736e5..bd75365 100644
@@ -75,7 +75,9 @@ struct symbol_conf {
 			use_callchain,
 			exclude_other,
 			show_cpu_utilization,
-			initialized;
+			initialized,
+			asm_no_raw,
+			annotate_no_src;
 	const char	*vmlinux_name,
 			*kallsyms_name,
 			*source_prefix,
maintainer Acked-by on v1 1/1
#1 lore raw
Quoted 7 lines · Stephane Eranian

This patch adds two new options to perf annotate:
- -R, --no-asm-raw : do not display raw instruction encodings
- -S, --no-source : do not interleave source code with assembly code

We believe those options make the output of annotate more readable. Systematically displaying source can make it hard to follow code and especially optimized code.

Agreed, asm->C maps from optimized code are a mess.

Quoted 1 line

Raw encodings are not useful in most cases.

Also true.

#2 lore raw
In reply to Stephane Eranian

Em Tue, May 17, 2011 at 05:32:07PM +0200, Stephane Eranian escreveu:

Quoted 10 lines

This patch adds two new options to perf annotate:
- -R, --no-asm-raw : do not display raw instruction encodings
- -S, --no-source : do not interleave source code with assembly code

We believe those options make the output of annotate more readable. Systematically displaying source can make it hard to follow code and especially optimized code.

Raw encodings are not useful in most cases.

Ok, applying it and then adding a followup patch to have these new options in both 'perf top' and 'perf report', since you can do annotation (live and static, respectively) from those tools.

- Arnaldo

#3 lore raw

Em Fri, Jun 03, 2011 at 03:56:33PM -0300, Arnaldo Carvalho de Melo escreveu:

Quoted 10 lines

Em Tue, May 17, 2011 at 05:32:07PM +0200, Stephane Eranian escreveu:

Quoted 9 lines

This patch adds two new options to perf annotate:
- -R, --no-asm-raw : do not display raw instruction encodings
- -S, --no-source : do not interleave source code with assembly code

We believe those options make the output of annotate more readable. Systematically displaying source can make it hard to follow code and especially optimized code.

Quoted 5 lines
Quoted 1 line

Raw encodings are not useful in most cases.

Ok, applying it and then adding a followup patch to have these new options in both 'perf top' and 'perf report', since you can do annotation (live and static, respectively) from those tools.

Will change it to --source and --asm-raw, since we have logic to negate any option by adding "no-" after '--' and before boolean options.

- Arnaldo

#4 lore raw
In reply to Stephane Eranian
Quoted 9 lines · Stephane Eranian

This patch adds two new options to perf annotate:
- -R, --no-asm-raw : do not display raw instruction encodings
- -S, --no-source : do not interleave source code with assembly code

We believe those options make the output of annotate more readable. Systematically displaying source can make it hard to follow code and especially optimized code.

Raw encodings are not useful in most cases.

Would it be possible to have it display only the source like opannotate can do?

Signature · 2 lines
Måns Rullgård
[email protected]
#5 lore raw

[tip:perf/core] perf annotate: Make output more readable

In reply to Stephane Eranian
Commit-ID:  3e6a2a7f3b9d0e521bb3284573b696d0cbe1952c
Gitweb:     http://git.kernel.org/tip/3e6a2a7f3b9d0e521bb3284573b696d0cbe1952c
Author:     Stephane Eranian <[email protected]>
AuthorDate: Tue, 17 May 2011 17:32:07 +0200
Committer:  Arnaldo Carvalho de Melo <[email protected]>
CommitDate: Thu, 18 Aug 2011 07:38:21 -0300

perf annotate: Make output more readable

This patch adds two new options to perf annotate:
- --no-asm-raw : Do not display raw instruction encodings
- --no-source : Do not interleave source code with assembly code

We believe those options make the output of annotate more readable.

Systematically displaying source can make it hard to follow code and especially optimized code.

Raw encodings are not useful in most cases.

Cc Ingo Molnar <[email protected]>
Cc Peter Zijlstra <[email protected]>
[committer note: Use the 'no-' option inverting logic]
---
 tools/perf/Documentation/perf-annotate.txt |    8 ++++++++
 tools/perf/builtin-annotate.c              |    4 ++++
 tools/perf/util/annotate.c                 |    5 ++++-
 tools/perf/util/symbol.c                   |    2 ++
 tools/perf/util/symbol.h                   |    4 +++-
 5 files changed, 21 insertions(+), 2 deletions(-)
tools/perf/Documentation/perf-annotate.txt +8 -0
index 85c5f02..5bc0600 100644
@@ -72,6 +72,14 @@ OPTIONS
 	CPUs are specified with -: 0-2. Default is to report samples on all
 	CPUs.
 
+--asm-raw::
+	Show raw instruction encoding of assembly instructions. They
+	are displayed by default, disable with --no-asm-raw.
+
+--source::
+	Interleave source code with assembly code. Enabled by default,
+	disable with --no-source.
+
 SEE ALSO
 --------
 linkperf:perf-record[1], linkperf:perf-report[1]
tools/perf/builtin-annotate.c +4 -0
index 555aefd..5015e04 100644
@@ -267,6 +267,10 @@ static const struct option options[] = {
 	OPT_BOOLEAN('P', "full-paths", &full_paths,
 		    "Don't shorten the displayed pathnames"),
 	OPT_STRING('c', "cpu", &cpu_list, "cpu", "list of cpus to profile"),
+	OPT_BOOLEAN('0', "source", &symbol_conf.annotate_src,
+		    "Interleave source code with assembly code (default)"),
+	OPT_BOOLEAN('0', "asm-raw", &symbol_conf.annotate_asm_raw,
+		    "Display raw encoding of assembly instructions (default)"),
 	OPT_END()
 };
 
tools/perf/util/annotate.c +4 -1
index e01af2b..01d36ba 100644
@@ -324,9 +324,12 @@ fallback:
 
 	snprintf(command, sizeof(command),
 		 "objdump --start-address=0x%016" PRIx64
-		 " --stop-address=0x%016" PRIx64 " -dS -C %s|grep -v %s|expand",
+		 " --stop-address=0x%016" PRIx64
+		 " -d %s %s -C %s|grep -v %s|expand",
 		 map__rip_2objdump(map, sym->start),
 		 map__rip_2objdump(map, sym->end),
+		 symbol_conf.annotate_asm_raw ? "" : "--no-show-raw",
+		 symbol_conf.annotate_src ? "-S" : "",
 		 symfs_filename, filename);
 
 	pr_debug("Executing: %s\n", command);
tools/perf/util/symbol.c +2 -0
index 469c026..245e60d 100644
@@ -46,6 +46,8 @@ struct symbol_conf symbol_conf = {
 	.exclude_other	  = true,
 	.use_modules	  = true,
 	.try_vmlinux_path = true,
+	.annotate_asm_raw = true,
+	.annotate_src	  = true,
 	.symfs            = "",
 };
 
tools/perf/util/symbol.h +3 -1
index 4f377d9..7733f0b 100644
@@ -76,7 +76,9 @@ struct symbol_conf {
 			exclude_other,
 			show_cpu_utilization,
 			initialized,
-			kptr_restrict;
+			kptr_restrict,
+			annotate_asm_raw,
+			annotate_src;
 	const char	*vmlinux_name,
 			*kallsyms_name,
 			*source_prefix,