* [PATCH/RFC] perf report: Add option to change offset format when address is specified as a sort_key
@ 2017-12-15 15:35 Aaron Tomlin
2017-12-22 23:59 ` Jiri Olsa
2017-12-26 14:51 ` Arnaldo Carvalho de Melo
0 siblings, 2 replies; 5+ messages in thread
From: Aaron Tomlin @ 2017-12-15 15:35 UTC (permalink / raw)
To: acme; +Cc: josla, mingo, alexander.shishkin, namhyung, linux-kernel
With --call-graph option, a user can choose to display call chains with a
specific sort_key. The sort_key can be either: function, address or srcline.
By default, when the address is specified as the sort_key, the offset (i.e.
symbol + offset) is provided in decimal (base 10) form.
This is because in __get_srcline() we use PRIu64 to display the offset.
This may or may not be desirable.
This patch adds a new option --hex, to change the offset format to
hexidecimal. Note, this can only be used with the -g, --call-graph option
when address is specified as a sort_key. When this option is not
specified, the default behavior is used, which is to display the offset
in decimal form.
Before:
$ ./perf report -n --fields=overhead,sample,period,pid,symbol --stdio \
> -g graph,callee,address --percent-limit 10 --no-children
[ ... ]
10.87% 1 506940477 15:migration/3 [k] _spin_trylock
|
---_spin_trylock +13
double_lock_balance +48
schedule +2007
migration_thread +613
kthread +158
child_rip +10
After:
$ ./perf report -n --fields=overhead,sample,period,pid,symbol --stdio \
> -g graph,callee,address --percent-limit 10 --hex --no-children
[ ... ]
10.87% 1 506940477 15:migration/3 [k] _spin_trylock
|
---_spin_trylock +0xd
double_lock_balance +0x30
schedule +0x7d7
migration_thread +0x265
kthread +0x9e
child_rip +0xa
Signed-off-by: Aaron Tomlin <atomlin@redhat.com>
---
tools/perf/Documentation/perf-report.txt | 4 ++++
tools/perf/builtin-report.c | 2 ++
tools/perf/util/srcline.c | 6 ++++--
tools/perf/util/srcline.h | 1 +
4 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/tools/perf/Documentation/perf-report.txt b/tools/perf/Documentation/perf-report.txt
index ddde2b5..589435a 100644
--- a/tools/perf/Documentation/perf-report.txt
+++ b/tools/perf/Documentation/perf-report.txt
@@ -386,6 +386,10 @@ OPTIONS
sum of shown entries will be always 100%. "absolute" means it retains
the original value before and after the filter is applied.
+--hex::
+ When address is specified as a sort_key, show the offset in
+ hexidecimal form. (Default: decimal)
+
--header::
Show header information in the perf.data file. This includes
various information like hostname, OS and perf version, cpu/mem
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index af5dd03..7820e55 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -866,6 +866,8 @@ int cmd_report(int argc, const char **argv)
itrace_parse_synth_opts),
OPT_BOOLEAN(0, "full-source-path", &srcline_full_filename,
"Show full source file name path for source lines"),
+ OPT_BOOLEAN(0, "hex", &show_hex_offset,
+ "When address is specified as a sort_key, show the offset in hexidecimal form"),
OPT_BOOLEAN(0, "show-ref-call-graph", &symbol_conf.show_ref_callgraph,
"Show callgraph from reference event"),
OPT_INTEGER(0, "socket-filter", &report.socket_filter,
diff --git a/tools/perf/util/srcline.c b/tools/perf/util/srcline.c
index d19f05c..98fc911 100644
--- a/tools/perf/util/srcline.c
+++ b/tools/perf/util/srcline.c
@@ -15,6 +15,7 @@
#include "symbol.h"
bool srcline_full_filename;
+bool show_hex_offset;
static const char *dso__name(struct dso *dso)
{
@@ -535,8 +536,9 @@ char *__get_srcline(struct dso *dso, u64 addr, struct symbol *sym,
strndup(sym->name, sym->namelen) : NULL;
if (sym) {
- if (asprintf(&srcline, "%s+%" PRIu64, show_sym ? sym->name : "",
- addr - sym->start) < 0)
+ if (asprintf(&srcline,
+ show_hex_offset ? "%s+%#" PRIx64 : "%s+%" PRIu64,
+ show_sym ? sym->name : "", addr - sym->start) < 0)
return SRCLINE_UNKNOWN;
} else if (asprintf(&srcline, "%s[%" PRIx64 "]", dso->short_name, addr) < 0)
return SRCLINE_UNKNOWN;
diff --git a/tools/perf/util/srcline.h b/tools/perf/util/srcline.h
index 847b708..1bca068 100644
--- a/tools/perf/util/srcline.h
+++ b/tools/perf/util/srcline.h
@@ -10,6 +10,7 @@ struct dso;
struct symbol;
extern bool srcline_full_filename;
+extern bool show_hex_offset;
char *get_srcline(struct dso *dso, u64 addr, struct symbol *sym,
bool show_sym, bool show_addr);
char *__get_srcline(struct dso *dso, u64 addr, struct symbol *sym,
--
2.9.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH/RFC] perf report: Add option to change offset format when address is specified as a sort_key
2017-12-15 15:35 [PATCH/RFC] perf report: Add option to change offset format when address is specified as a sort_key Aaron Tomlin
@ 2017-12-22 23:59 ` Jiri Olsa
2017-12-24 18:23 ` Aaron Tomlin
2017-12-26 14:51 ` Arnaldo Carvalho de Melo
1 sibling, 1 reply; 5+ messages in thread
From: Jiri Olsa @ 2017-12-22 23:59 UTC (permalink / raw)
To: Aaron Tomlin
Cc: acme, jolsa, mingo, alexander.shishkin, namhyung, linux-kernel
On Fri, Dec 15, 2017 at 03:35:10PM +0000, Aaron Tomlin wrote:
> With --call-graph option, a user can choose to display call chains with a
> specific sort_key. The sort_key can be either: function, address or srcline.
> By default, when the address is specified as the sort_key, the offset (i.e.
> symbol + offset) is provided in decimal (base 10) form.
> This is because in __get_srcline() we use PRIu64 to display the offset.
> This may or may not be desirable.
>
> This patch adds a new option --hex, to change the offset format to
> hexidecimal. Note, this can only be used with the -g, --call-graph option
> when address is specified as a sort_key. When this option is not
> specified, the default behavior is used, which is to display the offset
> in decimal form.
>
> Before:
>
> $ ./perf report -n --fields=overhead,sample,period,pid,symbol --stdio \
> > -g graph,callee,address --percent-limit 10 --no-children
> [ ... ]
> 10.87% 1 506940477 15:migration/3 [k] _spin_trylock
> |
> ---_spin_trylock +13
> double_lock_balance +48
> schedule +2007
> migration_thread +613
> kthread +158
> child_rip +10
>
> After:
>
> $ ./perf report -n --fields=overhead,sample,period,pid,symbol --stdio \
> > -g graph,callee,address --percent-limit 10 --hex --no-children
> [ ... ]
> 10.87% 1 506940477 15:migration/3 [k] _spin_trylock
> |
> ---_spin_trylock +0xd
> double_lock_balance +0x30
> schedule +0x7d7
> migration_thread +0x265
> kthread +0x9e
> child_rip +0xa
not sure we've already discussed that, but this could be default?
if not, I think the hex option should be part of -g option arg, maybe like:
-g graph,callee,xaddress
but default hex seems better to me, thoughts?
jirka
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH/RFC] perf report: Add option to change offset format when address is specified as a sort_key
2017-12-22 23:59 ` Jiri Olsa
@ 2017-12-24 18:23 ` Aaron Tomlin
2017-12-25 21:46 ` Jiri Olsa
0 siblings, 1 reply; 5+ messages in thread
From: Aaron Tomlin @ 2017-12-24 18:23 UTC (permalink / raw)
To: Jiri Olsa; +Cc: acme, mingo, alexander.shishkin, namhyung, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 634 bytes --]
On Sat 2017-12-23 00:59 +0100, Jiri Olsa wrote:
[ ... ]
> not sure we've already discussed that, but this could be default?
Probably it is best to keep the default behaviour.
I'd prefer a hexadecimal address offset, as the default, however perhaps
someone is happy with the current default (decimal).
> if not, I think the hex option should be part of -g option arg, maybe like:
Does it have to be?
> -g graph,callee,xaddress
Not sure - adding another sort_key seems odd to me.
But if you insist, perhaps address[=hex] would be cleaner?
Otherwise I would prefer --hex.
Regards,
--
Aaron Tomlin
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH/RFC] perf report: Add option to change offset format when address is specified as a sort_key
2017-12-24 18:23 ` Aaron Tomlin
@ 2017-12-25 21:46 ` Jiri Olsa
0 siblings, 0 replies; 5+ messages in thread
From: Jiri Olsa @ 2017-12-25 21:46 UTC (permalink / raw)
To: Aaron Tomlin; +Cc: acme, mingo, alexander.shishkin, namhyung, linux-kernel
On Sun, Dec 24, 2017 at 06:23:15PM +0000, Aaron Tomlin wrote:
> On Sat 2017-12-23 00:59 +0100, Jiri Olsa wrote:
> [ ... ]
> > not sure we've already discussed that, but this could be default?
>
> Probably it is best to keep the default behaviour.
>
> I'd prefer a hexadecimal address offset, as the default, however perhaps
> someone is happy with the current default (decimal).
Arnaldo?
>
> > if not, I think the hex option should be part of -g option arg, maybe like:
>
> Does it have to be?
>
> > -g graph,callee,xaddress
>
> Not sure - adding another sort_key seems odd to me.
it's not sort key, it's -g option key.. but if we go for default
there's no need.. let's see ;-)
>
> But if you insist, perhaps address[=hex] would be cleaner?
but yes, that looks better to me
jirka
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH/RFC] perf report: Add option to change offset format when address is specified as a sort_key
2017-12-15 15:35 [PATCH/RFC] perf report: Add option to change offset format when address is specified as a sort_key Aaron Tomlin
2017-12-22 23:59 ` Jiri Olsa
@ 2017-12-26 14:51 ` Arnaldo Carvalho de Melo
1 sibling, 0 replies; 5+ messages in thread
From: Arnaldo Carvalho de Melo @ 2017-12-26 14:51 UTC (permalink / raw)
To: Aaron Tomlin
Cc: josla, mingo, alexander.shishkin, namhyung, linux-kernel, Milian Wolff
Em Fri, Dec 15, 2017 at 03:35:10PM +0000, Aaron Tomlin escreveu:
> With --call-graph option, a user can choose to display call chains with a
> specific sort_key. The sort_key can be either: function, address or srcline.
> By default, when the address is specified as the sort_key, the offset (i.e.
> symbol + offset) is provided in decimal (base 10) form.
> This is because in __get_srcline() we use PRIu64 to display the offset.
> This may or may not be desirable.
>
> This patch adds a new option --hex, to change the offset format to
> hexidecimal. Note, this can only be used with the -g, --call-graph option
> when address is specified as a sort_key. When this option is not
> specified, the default behavior is used, which is to display the offset
> in decimal form.
>
> Before:
>
> $ ./perf report -n --fields=overhead,sample,period,pid,symbol --stdio \
> > -g graph,callee,address --percent-limit 10 --no-children
> [ ... ]
> 10.87% 1 506940477 15:migration/3 [k] _spin_trylock
> |
> ---_spin_trylock +13
> double_lock_balance +48
> schedule +2007
> migration_thread +613
> kthread +158
> child_rip +10
Humm, trying to reproduce this with the command line you provided above,
in your 'Before:' case:
# perf record -F 10000 -g --pid 10,15,21,27
# perf report -n --fields=overhead,sample,period,pid,symbol --stdio -g graph,callee,address --no-children
7.31% 1 205216 10:migration/0 [k] _raw_spin_lock
|
---_raw_spin_lock atomic.h:187
scheduler_tick sched.h:935
update_process_times timer.c:1637
tick_sched_handle tick-sched.c:163
tick_sched_timer tick-sched.c:1171
__hrtimer_run_queues hrtimer.c:1211
hrtimer_interrupt hrtimer.c:469
smp_apic_timer_interrupt apic.c:1025
apic_timer_interrupt entry_64.S:795
finish_task_switch current.h:15
__sched_text_start core.c:2802
schedule current.h:15
smpboot_thread_fn smpboot.c:160
kthread kthread.c:238
ret_from_fork entry_64.S:447
[root@jouet ~]# perf --version
perf version 4.15.rc4.g6c7919a
This is with is in my perf/core branch, but I bet you'll get the same
result with 4.15-rc4.
Humm, so this is because you're not using a vmlinux file, then the
srcline gets resolved and get_srcline() returns before getting to the
fallback where offsets are shown, if I do:
[root@jouet ~]# mv /lib/modules/4.15.0-rc3+/build/vmlinux /lib/modules/4.15.0-rc3+/build/vmlinux.OFF
and remove the cached entry in my ~/.debug/ build-id cache, I get to:
# symbol: _raw_spin_lock
#
# Total Lost Samples: 0
#
# Samples: 54 of event 'cycles:ppp'
# Event count (approx.): 2805651
#
# Overhead Samples Period Pid:Command Source:Line
# ........ ............ ............ ................... ...................................
#
7.31% 1 205216 10:migration/0 _raw_spin_lock+18446603336221184012
|
---_raw_spin_lock +18446603336221184012
scheduler_tick +18446603336221184060
update_process_times +18446603336221184064
tick_sched_handle +18446603336221184034
tick_sched_timer +18446603336221184052
__hrtimer_run_queues +18446603336221184214
hrtimer_interrupt +18446603336221184166
smp_apic_timer_interrupt +18446603336221184086
__irqentry_text_start +18446603336221184150
finish_task_switch +18446603336221184123
__sched_text_start +18446603336221184577
schedule +18446603336221184040
smpboot_thread_fn +18446603336221184323
kthread +18446603336221184273
ret_from_fork +18446603336221184031
#
[root@jouet ~]#
Which looks buggy... bisecting...
- Arnaldo
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-12-26 14:51 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-12-15 15:35 [PATCH/RFC] perf report: Add option to change offset format when address is specified as a sort_key Aaron Tomlin
2017-12-22 23:59 ` Jiri Olsa
2017-12-24 18:23 ` Aaron Tomlin
2017-12-25 21:46 ` Jiri Olsa
2017-12-26 14:51 ` Arnaldo Carvalho de Melo
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.