[PATCH 0/4] perf report: Omit dummy events in the output (v2)

Namhyung Kim posted 4 patches 1 year, 8 months ago
tools/perf/builtin-annotate.c  |   4 +-
tools/perf/builtin-report.c    |  12 +--
tools/perf/ui/hist.c           | 144 ++++++++++++++++-----------------
tools/perf/ui/stdio/hist.c     |   5 +-
tools/perf/util/events_stats.h |   3 +-
tools/perf/util/evsel.c        |  13 ++-
tools/perf/util/hist.c         |   6 +-
tools/perf/util/hist.h         |   3 +-
tools/perf/util/python.c       |   3 +
tools/perf/util/session.c      |   5 +-
tools/perf/util/session.h      |   3 +-
tools/perf/util/symbol_conf.h  |   3 +-
12 files changed, 105 insertions(+), 99 deletions(-)
[PATCH 0/4] perf report: Omit dummy events in the output (v2)
Posted by Namhyung Kim 1 year, 8 months ago
Hello,

This work is to make the output compact by removing dummy events in
the output.  The dummy events are used to save side-band information
like task creation or memory address space change using mmap(2).  But
after collecting these, it's not used because it won't have any
samples.

 v2 changes)
 * just hide the (dummy) event instead of removing it from evlist

Sometimes users want to run perf report --group to show all recorded
events together but they are not interested in those dummy events.
This just wastes the precious screen space so we want to get rid of
them after use.

perf report already has --skip-empty option to skip 0 result in the
stat output.  I think we can extend it to skip empty events that have
no samples.

Example output:

Before)
  #
  # Samples: 232  of events 'cpu/mem-loads,ldlat=30/P, cpu/mem-stores/P, dummy:u'
  # Event count (approx.): 3089861
  #
  #                 Overhead  Command      Shared Object      Symbol                               
  # ........................  ...........  .................  .....................................
  #
       9.29%   0.00%   0.00%  swapper      [kernel.kallsyms]  [k] update_blocked_averages
       5.26%   0.15%   0.00%  swapper      [kernel.kallsyms]  [k] __update_load_avg_se
       4.15%   0.00%   0.00%  perf-exec    [kernel.kallsyms]  [k] slab_update_freelist.isra.0
       3.87%   0.00%   0.00%  perf-exec    [kernel.kallsyms]  [k] memcg_slab_post_alloc_hook
       3.79%   0.17%   0.00%  swapper      [kernel.kallsyms]  [k] enqueue_task_fair
       3.63%   0.00%   0.00%  sleep        [kernel.kallsyms]  [k] next_uptodate_page
       2.86%   0.00%   0.00%  swapper      [kernel.kallsyms]  [k] __update_load_avg_cfs_rq
       2.78%   0.00%   0.00%  swapper      [kernel.kallsyms]  [k] __schedule
       2.34%   0.00%   0.00%  swapper      [kernel.kallsyms]  [k] intel_idle
       2.32%   0.97%   0.00%  swapper      [kernel.kallsyms]  [k] psi_group_change

After)
  #
  # Samples: 232  of events 'cpu/mem-loads,ldlat=30/P, cpu/mem-stores/P'
  # Event count (approx.): 3089861
  #
  #         Overhead  Command      Shared Object      Symbol                               
  # ................  ...........  .................  .....................................
  #
       9.29%   0.00%  swapper      [kernel.kallsyms]  [k] update_blocked_averages
       5.26%   0.15%  swapper      [kernel.kallsyms]  [k] __update_load_avg_se
       4.15%   0.00%  perf-exec    [kernel.kallsyms]  [k] slab_update_freelist.isra.0
       3.87%   0.00%  perf-exec    [kernel.kallsyms]  [k] memcg_slab_post_alloc_hook
       3.79%   0.17%  swapper      [kernel.kallsyms]  [k] enqueue_task_fair
       3.63%   0.00%  sleep        [kernel.kallsyms]  [k] next_uptodate_page
       2.86%   0.00%  swapper      [kernel.kallsyms]  [k] __update_load_avg_cfs_rq
       2.78%   0.00%  swapper      [kernel.kallsyms]  [k] __schedule
       2.34%   0.00%  swapper      [kernel.kallsyms]  [k] intel_idle
       2.32%   0.97%  swapper      [kernel.kallsyms]  [k] psi_group_change

Now 'Overhead' column only has two values for mem-loads and mem-stores.

Thanks,
Namhyung


Namhyung Kim (4):
  perf hist: Factor out __hpp__fmt_print()
  perf hist: Simplify __hpp_fmt() using hpp_fmt_data
  perf hist: Add symbol_conf.skip_empty
  perf hist: Honor symbol_conf.skip_empty

 tools/perf/builtin-annotate.c  |   4 +-
 tools/perf/builtin-report.c    |  12 +--
 tools/perf/ui/hist.c           | 144 ++++++++++++++++-----------------
 tools/perf/ui/stdio/hist.c     |   5 +-
 tools/perf/util/events_stats.h |   3 +-
 tools/perf/util/evsel.c        |  13 ++-
 tools/perf/util/hist.c         |   6 +-
 tools/perf/util/hist.h         |   3 +-
 tools/perf/util/python.c       |   3 +
 tools/perf/util/session.c      |   5 +-
 tools/perf/util/session.h      |   3 +-
 tools/perf/util/symbol_conf.h  |   3 +-
 12 files changed, 105 insertions(+), 99 deletions(-)

-- 
2.45.1.288.g0e0cd299f1-goog
Re: [PATCH 0/4] perf report: Omit dummy events in the output (v2)
Posted by Arnaldo Carvalho de Melo 1 year, 8 months ago
On Mon, Jun 03, 2024 at 03:44:08PM -0700, Namhyung Kim wrote:
> Hello,
> 
> This work is to make the output compact by removing dummy events in
> the output.  The dummy events are used to save side-band information
> like task creation or memory address space change using mmap(2).  But
> after collecting these, it's not used because it won't have any
> samples.
> 
>  v2 changes)
>  * just hide the (dummy) event instead of removing it from evlist
> 
> Sometimes users want to run perf report --group to show all recorded
> events together but they are not interested in those dummy events.
> This just wastes the precious screen space so we want to get rid of
> them after use.
> 
> perf report already has --skip-empty option to skip 0 result in the
> stat output.  I think we can extend it to skip empty events that have
> no samples.
> 
> Example output:

Would be interesting to have this as an example in the cset where this
becomes the norm, together with stating that the 'perf.data' file was
generated with 'perf mem record'.

Apart from that, nice feature:

Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>

- Arnaldo
 
> Before)
>   #
>   # Samples: 232  of events 'cpu/mem-loads,ldlat=30/P, cpu/mem-stores/P, dummy:u'
>   # Event count (approx.): 3089861
>   #
>   #                 Overhead  Command      Shared Object      Symbol                               
>   # ........................  ...........  .................  .....................................
>   #
>        9.29%   0.00%   0.00%  swapper      [kernel.kallsyms]  [k] update_blocked_averages
>        5.26%   0.15%   0.00%  swapper      [kernel.kallsyms]  [k] __update_load_avg_se
>        4.15%   0.00%   0.00%  perf-exec    [kernel.kallsyms]  [k] slab_update_freelist.isra.0
>        3.87%   0.00%   0.00%  perf-exec    [kernel.kallsyms]  [k] memcg_slab_post_alloc_hook
>        3.79%   0.17%   0.00%  swapper      [kernel.kallsyms]  [k] enqueue_task_fair
>        3.63%   0.00%   0.00%  sleep        [kernel.kallsyms]  [k] next_uptodate_page
>        2.86%   0.00%   0.00%  swapper      [kernel.kallsyms]  [k] __update_load_avg_cfs_rq
>        2.78%   0.00%   0.00%  swapper      [kernel.kallsyms]  [k] __schedule
>        2.34%   0.00%   0.00%  swapper      [kernel.kallsyms]  [k] intel_idle
>        2.32%   0.97%   0.00%  swapper      [kernel.kallsyms]  [k] psi_group_change
> 
> After)
>   #
>   # Samples: 232  of events 'cpu/mem-loads,ldlat=30/P, cpu/mem-stores/P'
>   # Event count (approx.): 3089861
>   #
>   #         Overhead  Command      Shared Object      Symbol                               
>   # ................  ...........  .................  .....................................
>   #
>        9.29%   0.00%  swapper      [kernel.kallsyms]  [k] update_blocked_averages
>        5.26%   0.15%  swapper      [kernel.kallsyms]  [k] __update_load_avg_se
>        4.15%   0.00%  perf-exec    [kernel.kallsyms]  [k] slab_update_freelist.isra.0
>        3.87%   0.00%  perf-exec    [kernel.kallsyms]  [k] memcg_slab_post_alloc_hook
>        3.79%   0.17%  swapper      [kernel.kallsyms]  [k] enqueue_task_fair
>        3.63%   0.00%  sleep        [kernel.kallsyms]  [k] next_uptodate_page
>        2.86%   0.00%  swapper      [kernel.kallsyms]  [k] __update_load_avg_cfs_rq
>        2.78%   0.00%  swapper      [kernel.kallsyms]  [k] __schedule
>        2.34%   0.00%  swapper      [kernel.kallsyms]  [k] intel_idle
>        2.32%   0.97%  swapper      [kernel.kallsyms]  [k] psi_group_change
> 
> Now 'Overhead' column only has two values for mem-loads and mem-stores.
> 
> Thanks,
> Namhyung
> 
> 
> Namhyung Kim (4):
>   perf hist: Factor out __hpp__fmt_print()
>   perf hist: Simplify __hpp_fmt() using hpp_fmt_data
>   perf hist: Add symbol_conf.skip_empty
>   perf hist: Honor symbol_conf.skip_empty
> 
>  tools/perf/builtin-annotate.c  |   4 +-
>  tools/perf/builtin-report.c    |  12 +--
>  tools/perf/ui/hist.c           | 144 ++++++++++++++++-----------------
>  tools/perf/ui/stdio/hist.c     |   5 +-
>  tools/perf/util/events_stats.h |   3 +-
>  tools/perf/util/evsel.c        |  13 ++-
>  tools/perf/util/hist.c         |   6 +-
>  tools/perf/util/hist.h         |   3 +-
>  tools/perf/util/python.c       |   3 +
>  tools/perf/util/session.c      |   5 +-
>  tools/perf/util/session.h      |   3 +-
>  tools/perf/util/symbol_conf.h  |   3 +-
>  12 files changed, 105 insertions(+), 99 deletions(-)
> 
> -- 
> 2.45.1.288.g0e0cd299f1-goog