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

Namhyung Kim
2016-01-06T23:09:47Z

Hi Arnaldo and Jiri,

On Wed, Jan 06, 2016 at 01:29:48PM -0300, Arnaldo Carvalho de Melo wrote:
> 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!

Ouch, thank you for the fix! :)

Thanks,
Namhyung

>
> 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