2021-02-19 07:03:36

by Jin Yao

[permalink] [raw]
Subject: [PATCH] perf report: Create option to disable raw event ordering

Warning "dso not found" is reported when using "perf report -D".

66702781413407 0x32c0 [0x30]: PERF_RECORD_SAMPLE(IP, 0x2): 28177/28177: 0x55e493e00563 period: 106578 addr: 0
... thread: perf:28177
...... dso: <not found>

66702727832429 0x9dd8 [0x38]: PERF_RECORD_COMM exec: triad_loop:28177/28177

The PERF_RECORD_SAMPLE event (timestamp: 66702781413407) should be after the
PERF_RECORD_COMM event (timestamp: 66702727832429), but it's early processed.

So for most of cases, it makes sense to keep the event ordered even for dump
mode. But it would be also useful to disable ordered_events for reporting raw
dump to see events as they are stored in the perf.data file.

So now, set ordered_events by default to true and add a new option
'disable-order' to disable it. For example,

perf report -D --disable-order

Fixes: 977f739b7126b ("perf report: Disable ordered_events for raw dump")
Signed-off-by: Jin Yao <[email protected]>
---
tools/perf/Documentation/perf-report.txt | 3 +++
tools/perf/builtin-report.c | 5 ++++-
2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/tools/perf/Documentation/perf-report.txt b/tools/perf/Documentation/perf-report.txt
index f546b5e9db05..87112e8d904e 100644
--- a/tools/perf/Documentation/perf-report.txt
+++ b/tools/perf/Documentation/perf-report.txt
@@ -224,6 +224,9 @@ OPTIONS
--dump-raw-trace::
Dump raw trace in ASCII.

+--disable-order::
+ Disable raw trace ordering.
+
-g::
--call-graph=<print_type,threshold[,print_limit],order,sort_key[,branch],value>::
Display call chains using type, min percent threshold, print limit,
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index 2a845d6cac09..0d65c98794a8 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -84,6 +84,7 @@ struct report {
bool nonany_branch_mode;
bool group_set;
bool stitch_lbr;
+ bool disable_order;
int max_stack;
struct perf_read_values show_threads_values;
struct annotation_options annotation_opts;
@@ -1296,6 +1297,8 @@ int cmd_report(int argc, const char **argv)
OPTS_EVSWITCH(&report.evswitch),
OPT_BOOLEAN(0, "total-cycles", &report.total_cycles_mode,
"Sort all blocks by 'Sampled Cycles%'"),
+ OPT_BOOLEAN(0, "disable-order", &report.disable_order,
+ "Disable raw trace ordering"),
OPT_END()
};
struct perf_data data = {
@@ -1329,7 +1332,7 @@ int cmd_report(int argc, const char **argv)
if (report.mmaps_mode)
report.tasks_mode = true;

- if (dump_trace)
+ if (dump_trace && report.disable_order)
report.tool.ordered_events = false;

if (quiet)
--
2.17.1


2021-02-22 21:40:54

by Jiri Olsa

[permalink] [raw]
Subject: Re: [PATCH] perf report: Create option to disable raw event ordering

On Fri, Feb 19, 2021 at 03:00:05PM +0800, Jin Yao wrote:
> Warning "dso not found" is reported when using "perf report -D".
>
> 66702781413407 0x32c0 [0x30]: PERF_RECORD_SAMPLE(IP, 0x2): 28177/28177: 0x55e493e00563 period: 106578 addr: 0
> ... thread: perf:28177
> ...... dso: <not found>
>
> 66702727832429 0x9dd8 [0x38]: PERF_RECORD_COMM exec: triad_loop:28177/28177
>
> The PERF_RECORD_SAMPLE event (timestamp: 66702781413407) should be after the
> PERF_RECORD_COMM event (timestamp: 66702727832429), but it's early processed.
>
> So for most of cases, it makes sense to keep the event ordered even for dump
> mode. But it would be also useful to disable ordered_events for reporting raw
> dump to see events as they are stored in the perf.data file.
>
> So now, set ordered_events by default to true and add a new option
> 'disable-order' to disable it. For example,
>
> perf report -D --disable-order
>
> Fixes: 977f739b7126b ("perf report: Disable ordered_events for raw dump")
> Signed-off-by: Jin Yao <[email protected]>

Acked-by: Jiri Olsa <[email protected]>

thanks,
jirka


> ---
> tools/perf/Documentation/perf-report.txt | 3 +++
> tools/perf/builtin-report.c | 5 ++++-
> 2 files changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/Documentation/perf-report.txt b/tools/perf/Documentation/perf-report.txt
> index f546b5e9db05..87112e8d904e 100644
> --- a/tools/perf/Documentation/perf-report.txt
> +++ b/tools/perf/Documentation/perf-report.txt
> @@ -224,6 +224,9 @@ OPTIONS
> --dump-raw-trace::
> Dump raw trace in ASCII.
>
> +--disable-order::
> + Disable raw trace ordering.
> +
> -g::
> --call-graph=<print_type,threshold[,print_limit],order,sort_key[,branch],value>::
> Display call chains using type, min percent threshold, print limit,
> diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
> index 2a845d6cac09..0d65c98794a8 100644
> --- a/tools/perf/builtin-report.c
> +++ b/tools/perf/builtin-report.c
> @@ -84,6 +84,7 @@ struct report {
> bool nonany_branch_mode;
> bool group_set;
> bool stitch_lbr;
> + bool disable_order;
> int max_stack;
> struct perf_read_values show_threads_values;
> struct annotation_options annotation_opts;
> @@ -1296,6 +1297,8 @@ int cmd_report(int argc, const char **argv)
> OPTS_EVSWITCH(&report.evswitch),
> OPT_BOOLEAN(0, "total-cycles", &report.total_cycles_mode,
> "Sort all blocks by 'Sampled Cycles%'"),
> + OPT_BOOLEAN(0, "disable-order", &report.disable_order,
> + "Disable raw trace ordering"),
> OPT_END()
> };
> struct perf_data data = {
> @@ -1329,7 +1332,7 @@ int cmd_report(int argc, const char **argv)
> if (report.mmaps_mode)
> report.tasks_mode = true;
>
> - if (dump_trace)
> + if (dump_trace && report.disable_order)
> report.tool.ordered_events = false;
>
> if (quiet)
> --
> 2.17.1
>

2021-03-04 12:11:39

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [PATCH] perf report: Create option to disable raw event ordering

Em Mon, Feb 22, 2021 at 10:32:40PM +0100, Jiri Olsa escreveu:
> On Fri, Feb 19, 2021 at 03:00:05PM +0800, Jin Yao wrote:
> > Warning "dso not found" is reported when using "perf report -D".
> >
> > 66702781413407 0x32c0 [0x30]: PERF_RECORD_SAMPLE(IP, 0x2): 28177/28177: 0x55e493e00563 period: 106578 addr: 0
> > ... thread: perf:28177
> > ...... dso: <not found>
> >
> > 66702727832429 0x9dd8 [0x38]: PERF_RECORD_COMM exec: triad_loop:28177/28177
> >
> > The PERF_RECORD_SAMPLE event (timestamp: 66702781413407) should be after the
> > PERF_RECORD_COMM event (timestamp: 66702727832429), but it's early processed.
> >
> > So for most of cases, it makes sense to keep the event ordered even for dump
> > mode. But it would be also useful to disable ordered_events for reporting raw
> > dump to see events as they are stored in the perf.data file.
> >
> > So now, set ordered_events by default to true and add a new option
> > 'disable-order' to disable it. For example,
> >
> > perf report -D --disable-order
> >
> > Fixes: 977f739b7126b ("perf report: Disable ordered_events for raw dump")
> > Signed-off-by: Jin Yao <[email protected]>
>
> Acked-by: Jiri Olsa <[email protected]>

Thanks, applied to perf/core.

- Arnaldo


> thanks,
> jirka
>
>
> > ---
> > tools/perf/Documentation/perf-report.txt | 3 +++
> > tools/perf/builtin-report.c | 5 ++++-
> > 2 files changed, 7 insertions(+), 1 deletion(-)
> >
> > diff --git a/tools/perf/Documentation/perf-report.txt b/tools/perf/Documentation/perf-report.txt
> > index f546b5e9db05..87112e8d904e 100644
> > --- a/tools/perf/Documentation/perf-report.txt
> > +++ b/tools/perf/Documentation/perf-report.txt
> > @@ -224,6 +224,9 @@ OPTIONS
> > --dump-raw-trace::
> > Dump raw trace in ASCII.
> >
> > +--disable-order::
> > + Disable raw trace ordering.
> > +
> > -g::
> > --call-graph=<print_type,threshold[,print_limit],order,sort_key[,branch],value>::
> > Display call chains using type, min percent threshold, print limit,
> > diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
> > index 2a845d6cac09..0d65c98794a8 100644
> > --- a/tools/perf/builtin-report.c
> > +++ b/tools/perf/builtin-report.c
> > @@ -84,6 +84,7 @@ struct report {
> > bool nonany_branch_mode;
> > bool group_set;
> > bool stitch_lbr;
> > + bool disable_order;
> > int max_stack;
> > struct perf_read_values show_threads_values;
> > struct annotation_options annotation_opts;
> > @@ -1296,6 +1297,8 @@ int cmd_report(int argc, const char **argv)
> > OPTS_EVSWITCH(&report.evswitch),
> > OPT_BOOLEAN(0, "total-cycles", &report.total_cycles_mode,
> > "Sort all blocks by 'Sampled Cycles%'"),
> > + OPT_BOOLEAN(0, "disable-order", &report.disable_order,
> > + "Disable raw trace ordering"),
> > OPT_END()
> > };
> > struct perf_data data = {
> > @@ -1329,7 +1332,7 @@ int cmd_report(int argc, const char **argv)
> > if (report.mmaps_mode)
> > report.tasks_mode = true;
> >
> > - if (dump_trace)
> > + if (dump_trace && report.disable_order)
> > report.tool.ordered_events = false;
> >
> > if (quiet)
> > --
> > 2.17.1
> >
>

--

- Arnaldo