public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [RFC/PATCHSET 00/12] perf report: Add support to event group viewing (v1)
@ 2012-07-24  9:01 Namhyung Kim
  2012-07-24  9:01 ` [PATCH 01/12] perf tools: Add a couple of helper routines to handle groups Namhyung Kim
                   ` (13 more replies)
  0 siblings, 14 replies; 17+ messages in thread
From: Namhyung Kim @ 2012-07-24  9:01 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, LKML,
	Stephane Eranian, Jiri Olsa, Ulrich Drepper, Andi Kleen

Hi all,

This is a patchset to support event grouping on perf report.

It depends on other patches like refactoring hist print [1],
processing file header feature [2] and (obviously) Jiri's event group
management [3]. All of this need to be reviewed though. ;)

The basic idea is move group member's hist entries to a leader, and
sort/collapse them on the leader's tree. The leader will have all of
group members' stat in it. The output is sorted by the leader's period
and in turn first child and so on.

To use it, 'perf record' should group events when recording. And then
perf report parses the saved command line and reconstruct the group
relation. Currently only the '-e { event1,event2 }' syntax is supported
(i.e. --group option is *NOT* supported) to make things easy. But it'd
not be that hard to support --group also.

But I think re-using event parsing routine (at least, in its current
form) has some problems especially if perf report will not run on the
same machine that runs perf record. I cannot find a better way than
extending/changing the perf file format to let perf record know about
the group relationship. Any thought?

Here is an example:

  $ ./perf record -e cycles:u -e '{cache-references,cache-misses}:u' noploop 1

Without --group:

  $ ./perf report --stdio
  ...
  # Samples: 4K of event 'cycles:u'
  # Event count (approx.): 3692183905
  #
  # Overhead  Command       Shared Object                   Symbol
  # ........  .......  ..................  .......................
  #
      99.98%  noploop  noploop             [.] main               
       0.01%  noploop  ld-2.15.so          [.] _dl_relocate_object
       0.00%  noploop  [kernel.kallsyms]   [k] page_fault         
       0.00%  noploop  libc-2.15.so        [.] __execvpe          
       0.00%  noploop  libpthread-2.15.so  [.] __read_nocancel    
       0.00%  noploop  ld-2.15.so          [.] _start             
  
  
  # Samples: 26  of event 'cache-references:u'
  # Event count (approx.): 4229
  #
  # Overhead  Command       Shared Object                              Symbol
  # ........  .......  ..................  ..................................
  #
      55.85%  noploop  ld-2.15.so          [.] do_lookup_x                   
      19.18%  noploop  ld-2.15.so          [.] strlen                        
      14.09%  noploop  libc-2.15.so        [.] getenv                        
       3.17%  noploop  ld-2.15.so          [.] _dl_fini                      
       2.65%  noploop  noploop             [.] main                          
       1.44%  noploop  perf                [.] perf_evlist__prepare_workload 
       1.44%  noploop  [kernel.kallsyms]   [k] page_fault                    
       0.99%  noploop  [kernel.kallsyms]   [k] apic_timer_interrupt          
       0.33%  noploop  noploop             [.] handler                       
       0.33%  noploop  libc-2.15.so        [.] __run_exit_handlers           
       0.33%  noploop  [kernel.kallsyms]   [k] call_function_single_interrupt
       0.12%  noploop  ld-2.15.so          [.] _dl_start                     
       0.05%  noploop  libpthread-2.15.so  [.] __read_nocancel               
       0.02%  noploop  ld-2.15.so          [.] _start                        
  
  
  # Samples: 23  of event 'cache-misses:u'
  # Event count (approx.): 4312
  #
  # Overhead  Command       Shared Object                                Symbol
  # ........  .......  ..................  ....................................
  #
      46.94%  noploop  ld-2.15.so          [.] do_lookup_x                     
      21.78%  noploop  libc-2.15.so        [.] getenv                          
      18.65%  noploop  ld-2.15.so          [.] calloc                          
       6.05%  noploop  ld-2.15.so          [.] rtld_lock_default_lock_recursive
       2.92%  noploop  noploop             [.] main                            
       1.41%  noploop  [kernel.kallsyms]   [k] page_fault                      
       1.32%  noploop  libc-2.15.so        [.] execvp                          
       0.32%  noploop  libc-2.15.so        [.] __run_exit_handlers             
       0.32%  noploop  ld-2.15.so          [.] _dl_fini                        
       0.12%  noploop  perf                [.] perf_evlist__prepare_workload   
       0.12%  noploop  ld-2.15.so          [.] _dl_start                       
       0.02%  noploop  libpthread-2.15.so  [.] __read_nocancel                 
       0.02%  noploop  ld-2.15.so          [.] _start                          
  

With --group:

  $ ./perf report --group --stdio
  ...
  # Samples: 4K of event 'cycles:u'
  # Event count (approx.): 7384367810
  #
  # Overhead  Command       Shared Object                   Symbol
  # ........  .......  ..................  .......................
  #
      99.98%  noploop  noploop             [.] main               
       0.01%  noploop  ld-2.15.so          [.] _dl_relocate_object
       0.00%  noploop  [kernel.kallsyms]   [k] page_fault         
       0.00%  noploop  libc-2.15.so        [.] __execvpe          
       0.00%  noploop  libpthread-2.15.so  [.] __read_nocancel    
       0.00%  noploop  ld-2.15.so          [.] _start             
  
  
  # Samples: 49  of event 'anon_group { cache-references:u, cache-misses:u }'
  # Event count (approx.): 12770
  #
  # Overhead          Command       Shared Object                                Symbol
  # ................  .......  ..................  ....................................
  #
      55.85%  46.94%  noploop  ld-2.15.so          [.] do_lookup_x                     
      19.18%   0.00%  noploop  ld-2.15.so          [.] strlen                          
      14.09%  21.78%  noploop  libc-2.15.so        [.] getenv                          
       3.17%   0.32%  noploop  ld-2.15.so          [.] _dl_fini                        
       2.65%   2.92%  noploop  noploop             [.] main                            
       1.44%   1.41%  noploop  [kernel.kallsyms]   [k] page_fault                      
       1.44%   0.12%  noploop  perf                [.] perf_evlist__prepare_workload   
       0.99%   0.00%  noploop  [kernel.kallsyms]   [k] apic_timer_interrupt            
       0.33%   0.32%  noploop  libc-2.15.so        [.] __run_exit_handlers             
       0.33%   0.00%  noploop  noploop             [.] handler                         
       0.33%   0.00%  noploop  [kernel.kallsyms]   [k] call_function_single_interrupt  
       0.12%   0.12%  noploop  ld-2.15.so          [.] _dl_start                       
       0.05%   0.02%  noploop  libpthread-2.15.so  [.] __read_nocancel                 
       0.02%   0.02%  noploop  ld-2.15.so          [.] _start                          
       0.00%  18.65%  noploop  ld-2.15.so          [.] calloc                          
       0.00%   6.05%  noploop  ld-2.15.so          [.] rtld_lock_default_lock_recursive
       0.00%   1.32%  noploop  libc-2.15.so        [.] execvp                          
  
(Hmm.. looks like there's a bug in group event counting in the header
area. But I believe the period value itself is intact.)

You can access it via my tree as well (if you want to test it).

  git://git.kernel.org/pub/scm/linux/kernel/git/namhyung/linux-perf.git perf/report-group-v1

Any comments are welcome, thanks.
Namhyung

[1] https://lkml.org/lkml/2012/7/19/263
[2] https://lkml.org/lkml/2012/7/21/75
[3] https://lkml.org/lkml/2012/7/19/419


Namhyung Kim (12):
  perf tools: Add a couple of helper routines to handle groups
  perf hist: Convert to struct he_stat
  perf hist: Collapse group hist_entries to a leader
  perf hist: Maintain total periods of group members in the leader
  perf report: Make another loop for output resorting
  perf header: Reconstruct group relationship by parsing cmdline
  perf ui/hist: Add support to group viewing
  perf ui/browser: Add support to group viewing
  perf ui/gtk: Add support to group viewing
  perf report: Show leader events only when event group is enabled
  perf report: Show group description when event group is enabled
  perf report: Add --group option

 tools/perf/builtin-report.c    |   29 +++++++
 tools/perf/ui/browsers/hists.c |  105 +++++++++++++++++++++---
 tools/perf/ui/gtk/browser.c    |   69 +++++++++++++---
 tools/perf/ui/hist.c           |  158 +++++++++++++++++++++++++++++------
 tools/perf/util/evsel.c        |   25 ++++++
 tools/perf/util/evsel.h        |   21 +++++
 tools/perf/util/header.c       |  110 +++++++++++++++++++++++++
 tools/perf/util/hist.c         |  177 ++++++++++++++++++++++++++++++++++------
 tools/perf/util/hist.h         |    1 +
 tools/perf/util/parse-events.c |    6 +-
 tools/perf/util/sort.h         |   17 ++--
 tools/perf/util/symbol.c       |    4 +
 tools/perf/util/symbol.h       |    3 +-
 13 files changed, 641 insertions(+), 84 deletions(-)

-- 
1.7.10.4


^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2012-07-25 15:52 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-07-24  9:01 [RFC/PATCHSET 00/12] perf report: Add support to event group viewing (v1) Namhyung Kim
2012-07-24  9:01 ` [PATCH 01/12] perf tools: Add a couple of helper routines to handle groups Namhyung Kim
2012-07-24  9:01 ` [PATCH 02/12] perf hist: Convert to struct he_stat Namhyung Kim
2012-07-24  9:01 ` [PATCH 03/12] perf hist: Collapse group hist_entries to a leader Namhyung Kim
2012-07-24  9:01 ` [PATCH 04/12] perf hist: Maintain total periods of group members in the leader Namhyung Kim
2012-07-24  9:01 ` [PATCH 05/12] perf report: Make another loop for output resorting Namhyung Kim
2012-07-24  9:01 ` [PATCH 06/12] perf header: Reconstruct group relationship by parsing cmdline Namhyung Kim
2012-07-25 15:39   ` Jiri Olsa
2012-07-25 15:52     ` Namhyung Kim
2012-07-24  9:01 ` [PATCH 07/12] perf ui/hist: Add support to group viewing Namhyung Kim
2012-07-24  9:01 ` [PATCH 08/12] perf ui/browser: " Namhyung Kim
2012-07-24  9:01 ` [PATCH 09/12] perf ui/gtk: " Namhyung Kim
2012-07-24  9:01 ` [PATCH 10/12] perf report: Show leader events only when event group is enabled Namhyung Kim
2012-07-24  9:01 ` [PATCH 11/12] perf report: Show group description " Namhyung Kim
2012-07-24  9:01 ` [PATCH 12/12] perf report: Add --group option Namhyung Kim
2012-07-24  9:13 ` [RFC/PATCHSET 00/12] perf report: Add support to event group viewing (v1) Namhyung Kim
2012-07-24 21:17 ` Andi Kleen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox