Re: [PATCHSET 00/17] perf report: Add -F option for specifying output fields (v4)

From: Don Zickus
Date: Tue Apr 22 2014 - 17:17:40 EST


On Wed, Apr 16, 2014 at 12:05:37PM +0900, Namhyung Kim wrote:
> Hello,
>
> This is a patchset implementing -F/--fields option to setup output
> field/column as Ingo requested. It depends on my --percentage
> patchset [1].
>
> The -F option can receive any sort keys that -s option recognize, plus
> following fields (name can be changed):
>
> overhead, overhead_sys, overhead_us, sample, period
>
> The overhead_guest_sys and overhead_guest_us might be avaiable when
> you profile guest machines.
>
> Output will be sorted by in order of fields and sort keys passed by -s
> option will be added to the output field list automatically. If you
> want to change the order of sorting you can give -s option in addition
> to -F option. To support old behavior, it'll also prepend 'overhead'
> field to the sort keys unless you give -F option explicitly.

So I am struggling a little bit to get this working correctly. I had it
in my head that I could sort internally with -s and re-sort the output
based on -F, but it doesn't seem to be working that way.

For example with

./perf mem record -a grep -r foo /* > /dev/null
./perf mem report -F overhead,symbol_daddr,pid -s symbol_daddr,pid --stdio

I was thinking I could sort everything based on the symbol_daddr and pid.
Then re-sort the output to display the highest 'symbol_daddr,pid' pair.
But it didn't seem to work that way. Instead it seems like I get the
original sort just displayed in the -F format.

Did I misunderstand what the -F can do or I am using it wrong?

Cheers,
Don



>
>
> $ perf report -s dso,sym
> ...
> # Overhead Shared Object Symbol
> # ........ ............. ..........................
> #
> 13.75% ld-2.17.so [.] strcmp
> 10.00% abc [.] a
> 10.00% abc [.] b
> 10.00% abc [.] c
> 8.75% abc [.] main
> 7.50% libc-2.17.so [.] _setjmp
> 6.25% abc [.] _init
> 6.25% abc [.] frame_dummy
> 5.00% abc [.] __libc_csu_init
> 5.00% ld-2.17.so [.] _dl_name_match_p
> 3.75% libc-2.17.so [.] __new_exitfn
> 2.50% libc-2.17.so [.] __cxa_atexit
> 1.25% ld-2.17.so [.] _dl_check_map_versions
> 1.25% ld-2.17.so [.] _dl_setup_hash
> 1.25% ld-2.17.so [.] _dl_sysdep_start
> 1.25% ld-2.17.so [.] brk
> 1.25% ld-2.17.so [.] calloc@plt
> 1.25% ld-2.17.so [.] dl_main
> 1.25% ld-2.17.so [.] match_symbol
> 1.25% ld-2.17.so [.] sbrk
> 1.25% ld-2.17.so [.] strlen
>
>
> $ perf report -F sym,sample,overhead
> ...
> # Symbol Samples Overhead
> # .......................... ............ ........
> #
> [.] __cxa_atexit 2 2.50%
> [.] __libc_csu_init 4 5.00%
> [.] __new_exitfn 3 3.75%
> [.] _dl_check_map_versions 1 1.25%
> [.] _dl_name_match_p 4 5.00%
> [.] _dl_setup_hash 1 1.25%
> [.] _dl_sysdep_start 1 1.25%
> [.] _init 5 6.25%
> [.] _setjmp 6 7.50%
> [.] a 8 10.00%
> [.] b 8 10.00%
> [.] brk 1 1.25%
> [.] c 8 10.00%
> [.] calloc@plt 1 1.25%
> [.] dl_main 1 1.25%
> [.] frame_dummy 5 6.25%
> [.] main 7 8.75%
> [.] match_symbol 1 1.25%
> [.] sbrk 1 1.25%
> [.] strcmp 11 13.75%
> [.] strlen 1 1.25%
>
>
> $ perf report -F sym,sample -s overhead
> ...
> # Symbol Samples Overhead
> # .......................... ............ ........
> #
> [.] strcmp 11 13.75%
> [.] a 8 10.00%
> [.] b 8 10.00%
> [.] c 8 10.00%
> [.] main 7 8.75%
> [.] _setjmp 6 7.50%
> [.] _init 5 6.25%
> [.] frame_dummy 5 6.25%
> [.] __libc_csu_init 4 5.00%
> [.] _dl_name_match_p 4 5.00%
> [.] __new_exitfn 3 3.75%
> [.] __cxa_atexit 2 2.50%
> [.] _dl_check_map_versions 1 1.25%
> [.] _dl_setup_hash 1 1.25%
> [.] _dl_sysdep_start 1 1.25%
> [.] brk 1 1.25%
> [.] calloc@plt 1 1.25%
> [.] dl_main 1 1.25%
> [.] match_symbol 1 1.25%
> [.] sbrk 1 1.25%
> [.] strlen 1 1.25%
>
>
> * changes in v4:
> - fix a tui navigation bug
> - fix a bug in output change of perf diff
> - move call to perf_hpp__init() out of setup_browser()
> - fix alignment of some output fields on stdio
>
> * changes in v3:
> - rename to --fields option for consistency (David)
> - prevent to add same keys multiple times
> - change dso sorting to show unknown dsos last
> - fix minor bugs
>
> * changes in v2:
> - add a cleanup patch using ui__has_annotation()
> - cleanup default sort order managment
> - support perf top also
> - handle elided sort entries properly
> - add Acked-by's from Ingo
>
>
> I pushed the patch series on the 'perf/field-v4' branch in my tree
>
> git://git.kernel.org/pub/scm/linux/kernel/git/namhyung/linux-perf.git
>
>
> Any comments are welcome, please test!
>
> Thanks,
> Namhyung
>
>
> [1] https://lkml.org/lkml/2014/4/10/397
>
> Namhyung Kim (17):
> perf tools: Add ->cmp(), ->collapse() and ->sort() to perf_hpp_fmt
> perf tools: Convert sort entries to hpp formats
> perf tools: Use hpp formats to sort hist entries
> perf tools: Support event grouping in hpp ->sort()
> perf tools: Use hpp formats to sort final output
> perf tools: Consolidate output field handling to hpp format routines
> perf ui: Get rid of callback from __hpp__fmt()
> perf tools: Allow hpp fields to be sort keys
> perf tools: Consolidate management of default sort orders
> perf tools: Call perf_hpp__init() before setting up GUI browsers
> perf report: Add -F option to specify output fields
> perf tools: Add ->sort() member to struct sort_entry
> perf report/tui: Fix a bug when --fields/sort is given
> perf top: Add --fields option to specify output fields
> perf diff: Add missing setup_output_field()
> perf tools: Skip elided sort entries
> perf hists: Reset width of output fields with header length
>
> tools/perf/Documentation/perf-report.txt | 10 +
> tools/perf/Documentation/perf-top.txt | 9 +
> tools/perf/builtin-diff.c | 3 +
> tools/perf/builtin-report.c | 31 +--
> tools/perf/builtin-top.c | 12 +-
> tools/perf/ui/browsers/hists.c | 76 +++----
> tools/perf/ui/gtk/hists.c | 41 +---
> tools/perf/ui/hist.c | 189 ++++++++++++++--
> tools/perf/ui/setup.c | 2 -
> tools/perf/ui/stdio/hist.c | 54 ++---
> tools/perf/util/hist.c | 83 ++-----
> tools/perf/util/hist.h | 20 +-
> tools/perf/util/sort.c | 364 ++++++++++++++++++++++++++++++-
> tools/perf/util/sort.h | 4 +
> 14 files changed, 654 insertions(+), 244 deletions(-)
>
> --
> 1.9.2
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/