Re: [PATCH v3 1/5] perf tools: Add all matching dynamic sort keys for field name

Arnaldo Carvalho de Melo
2016-01-06T16:29:57Z

Em Wed, Jan 06, 2016 at 12:19:39PM +0100, Jiri Olsa escreveu:
> On Wed, Jan 06, 2016 at 09:54:57AM +0900, Namhyung Kim wrote:
> > When a perf.data file has multiple events, it's likely to be similar
> > (tracepoint) events. In that case, they might have same field name so
> > add all of them to sort keys instead of bailing out.
> >
> > In addition, it contains a trivial whitespace fix at callsite of
> > add_all_dynamic_fields().
> >
> > Acked-by: Jiri Olsa <jolsa@kernel.org>
> > Signed-off-by: Namhyung Kim <namhyung@kernel.org>
>
> hum, I haven't tried with this last version but I get all
> hist tests failing on acme's perf/core and it seems to be
> related to sorting changes:

Bisected it down to

0337e6473845 ("perf tools: Make 'trace' or 'trace_fields' sort key default for tracepoint events")

Fixed with the following patch, which I'm folding into the above commit,
thanks for the report!

- Arnaldo

diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c
index acd222907bd6..4b4b1c5cccef 100644
--- a/tools/perf/util/sort.c
+++ b/tools/perf/util/sort.c
@@ -2187,6 +2187,9 @@ static const char *get_default_sort_order(struct perf_evlist *evlist)

BUG_ON(sort__mode >= ARRAY_SIZE(default_sort_orders));

+ if (evlist == NULL)
+ goto out_no_evlist;
+
evlist__for_each(evlist, evsel) {
if (evsel->attr.type != PERF_TYPE_TRACEPOINT) {
use_trace = false;
@@ -2199,7 +2202,7 @@ static const char *get_default_sort_order(struct perf_evlist *evlist)
if (symbol_conf.raw_trace)
return "trace_fields";
}
-
+out_no_evlist:
return default_sort_orders[sort__mode];
}

> [jolsa@krava perf]$ ./perf test hist
> 15: Test matching and linking multiple hists : FAILED!
> 25: Test filtering hist entries : FAILED!
> 28: Test output sorting of hist entries : FAILED!
> 29: Test cumulation of child hist entries : FAILED!
>
>
> [jolsa@krava perf]$ ./perf test 15 -v
> 15: Test matching and linking multiple hists :
> --- start ---
> test child forked, pid 10676
> perf: Segmentation fault
> Obtained 16 stack frames.
> ./perf(dump_stack+0x2d) [0x50f1d7]
> ./perf(sighandler_dump_stack+0x2d) [0x50f2b7]
> /lib64/libc.so.6(+0x34a4f) [0x7fb0b1178a4f]
> ./perf() [0x508c40]
> ./perf() [0x508e23]
> ./perf(setup_sorting+0x26) [0x5097b0]
> ./perf(test__hists_link+0xb6) [0x487f43]
> ./perf() [0x4725c0]
> ./perf() [0x4726ff]
> ./perf() [0x472986]
> ./perf(cmd_test+0x1fe) [0x472ddc]
> ./perf() [0x49b2ab]
> ./perf() [0x49b513]
> ./perf() [0x49b661]
> ./perf(main+0x258) [0x49b9e2]
> /lib64/libc.so.6(__libc_start_main+0xef) [0x7fb0b11646ff]
> test child interrupted
> ---- end ----
> Test matching and linking multiple hists: FAILED!
>
>
> thanks,
> jirka