lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <1358845787-1350-1-git-send-email-namhyung@kernel.org>
Date:	Tue, 22 Jan 2013 18:09:28 +0900
From:	Namhyung Kim <namhyung@...nel.org>
To:	Arnaldo Carvalho de Melo <acme@...stprotocols.net>
Cc:	Peter Zijlstra <a.p.zijlstra@...llo.nl>,
	Paul Mackerras <paulus@...ba.org>,
	Ingo Molnar <mingo@...nel.org>,
	LKML <linux-kernel@...r.kernel.org>,
	Namhyung Kim <namhyung.kim@....com>,
	Jiri Olsa <jolsa@...hat.com>,
	Stephane Eranian <eranian@...gle.com>,
	Pekka Enberg <penberg@...nel.org>
Subject: [PATCH 00/19] perf report: Add support for event group view (v9)

Hello,

This is a 9th attempt to enable event group view support to perf report.

The basic idea is link group member's hist entries to a leader so that
they can be shown with leader's output together. The output is sorted
by the leader's period and in turn first group member's and so on.

To use it, 'perf record' should group events when recording. And then
perf report parses the saved group relation from file header and
prints them together if --group option is provided.  You can use 'perf
evlist' command to see event group information:

  $ perf record -e '{ref-cycles,cycles}' noploop 1
  [ perf record: Woken up 2 times to write data ]
  [ perf record: Captured and wrote 0.385 MB perf.data (~16807 samples) ]

  $ perf evlist --group
  {ref-cycles,cycles}


With this example, default perf report will show you each event
separately like this:

  $ perf report
  ...
  # group: {ref-cycles,cycles}
  # ========
  #
  # Samples: 3K of event 'ref-cycles'
  # Event count (approx.): 3153797218
  #
  # Overhead  Command      Shared Object                      Symbol
  # ........  .......  .................  ..........................
  #
      99.84%  noploop  noploop            [.] main                  
       0.07%  noploop  ld-2.15.so         [.] strcmp                
       0.03%  noploop  [kernel.kallsyms]  [k] timerqueue_del        
       0.03%  noploop  [kernel.kallsyms]  [k] sched_clock_cpu       
       0.02%  noploop  [kernel.kallsyms]  [k] account_user_time     
       0.01%  noploop  [kernel.kallsyms]  [k] __alloc_pages_nodemask
       0.00%  noploop  [kernel.kallsyms]  [k] native_write_msr_safe 
  
  
  # Samples: 3K of event 'cycles'
  # Event count (approx.): 3722310525
  #
  # Overhead  Command      Shared Object                     Symbol
  # ........  .......  .................  .........................
  #
      99.76%  noploop  noploop            [.] main                 
       0.11%  noploop  [kernel.kallsyms]  [k] _raw_spin_lock       
       0.06%  noploop  [kernel.kallsyms]  [k] find_get_page        
       0.03%  noploop  [kernel.kallsyms]  [k] sched_clock_cpu      
       0.02%  noploop  [kernel.kallsyms]  [k] rcu_check_callbacks  
       0.02%  noploop  [kernel.kallsyms]  [k] __current_kernel_time
       0.00%  noploop  [kernel.kallsyms]  [k] native_write_msr_safe


In this case the event group information will be shown in the end of
header area.  So you can use --group option to enable event group view.

  $ perf report --group
  ...
  # group: {ref-cycles,cycles}
  # ========
  #
  # Samples: 7K of event 'anon group { ref-cycles, cycles }'
  # Event count (approx.): 6876107743
  #
  #         Overhead  Command      Shared Object                      Symbol
  # ................  .......  .................  ..........................
  #
      99.84%  99.76%  noploop  noploop            [.] main                  
       0.07%   0.00%  noploop  ld-2.15.so         [.] strcmp                
       0.03%   0.00%  noploop  [kernel.kallsyms]  [k] timerqueue_del        
       0.03%   0.03%  noploop  [kernel.kallsyms]  [k] sched_clock_cpu       
       0.02%   0.00%  noploop  [kernel.kallsyms]  [k] account_user_time     
       0.01%   0.00%  noploop  [kernel.kallsyms]  [k] __alloc_pages_nodemask
       0.00%   0.00%  noploop  [kernel.kallsyms]  [k] native_write_msr_safe 
       0.00%   0.11%  noploop  [kernel.kallsyms]  [k] _raw_spin_lock        
       0.00%   0.06%  noploop  [kernel.kallsyms]  [k] find_get_page         
       0.00%   0.02%  noploop  [kernel.kallsyms]  [k] rcu_check_callbacks   
       0.00%   0.02%  noploop  [kernel.kallsyms]  [k] __current_kernel_time 


As you can see the Overhead column now contains both of ref-cycles and
cycles and header line shows group information also - 'anon group {
ref-cycles, cycles }'.  The output is sorted by period of group leader
first.

If perf.data file doesn't contain group information, this --group
option does nothing.  So if you want enable event group view by
default you can set it in ~/.perfconfig file:

  $ cat ~/.perfconfig
  [report]
  group = true

It can be overridden with command line if you want:

  $ perf report --no-group


You can also get this on my 'perf/group-v9' branch in

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


Any comments are welcome, thanks.
Namhyung


Cc: Jiri Olsa <jolsa@...hat.com>
Cc: Stephane Eranian <eranian@...gle.com>
Cc: Pekka Enberg <penberg@...nel.org>


v8 -> v9:
 * split patches have multiple changes (Arnaldo)
 * add --group option to perf evlist (Arnaldo)

v7 -> v8:
 * rebase onto acme/perf/core
 * patch 3 in the previous version is merged
 * add Jiri's Acked-by's

v6 -> v7:
 * hists__{match,link} changes are merged separately
 * factor out inc_group_count() from parsing group_def (Jiri)
 * add checking for group fields in evlist/evsel (Jiri)
 * check return value of during header processing (Arnaldo)
 * get rid of a temporal array in hpp functions (Arnaldo)
 * convert hpp macros to static inline functions (Jiri)

v5 -> v6:
 * set ->leader alse for leader evsel (Arnaldo)
 * use hists__{match,link} (Arnaldo)

v4 -> v5:
 * rebase onto acme/perf/core

v3 -> v4:
 * patch 1-9 in previous post are merged.
 * add Jiri's Acked-by
 * add report.group config option

v2 -> v3:
 * drop patch 1 since it's merged into acme/perf/core
 * cherry-pick Jiri's hpp changes
 * add missing bswap_32 on reading nr_groups (Jiri)
 * remove perf_evlist__recalc_nr_groups() in favor of list_is_last (Jiri)

v1 -> v2:
 * save group relation to header (Jiri)


Namhyung Kim (19):
  perf tools: Keep group information
  perf tests: Add group test conditions
  perf header: Add HEADER_GROUP_DESC feature
  perf report: Make another loop for linking group hists
  perf hists: Resort hist entries using group members for output
  perf ui/hist: Consolidate hpp helpers
  perf hist browser: Convert hpp helpers to a function
  perf gtk/browser: Convert hpp helpers to a function
  perf ui/hist: Add support for event group view
  perf hist browser: Move coloring logic to hpp functions
  perf hist browser: Add suppport for event group view
  perf gtk/browser: Add support for event group view
  perf tools: Move ltrim() to util/string.c
  perf gtk/browser: Trim column header string when event group enabled
  perf report: Bypass non-leader events when event group is enabled
  perf report: Show group description when event group is enabled
  perf report: Add --group option
  perf report: Add report.group config option
  perf evlist: Add --group option

 tools/perf/Documentation/perf-evlist.txt |   4 +
 tools/perf/Documentation/perf-report.txt |   3 +
 tools/perf/builtin-evlist.c              |   7 +
 tools/perf/builtin-record.c              |   3 +
 tools/perf/builtin-report.c              |  47 ++++-
 tools/perf/builtin-script.c              |  12 --
 tools/perf/tests/parse-events.c          |  28 +++
 tools/perf/ui/browsers/hists.c           | 217 ++++++++++++++++++----
 tools/perf/ui/gtk/hists.c                | 130 ++++++++++---
 tools/perf/ui/hist.c                     | 306 +++++++++++++++----------------
 tools/perf/ui/stdio/hist.c               |   2 +
 tools/perf/util/evlist.c                 |   7 +-
 tools/perf/util/evlist.h                 |   1 +
 tools/perf/util/evsel.c                  |  49 ++++-
 tools/perf/util/evsel.h                  |  16 ++
 tools/perf/util/header.c                 | 164 +++++++++++++++++
 tools/perf/util/header.h                 |   2 +
 tools/perf/util/hist.c                   |  59 +++++-
 tools/perf/util/parse-events.c           |   1 +
 tools/perf/util/parse-events.h           |   1 +
 tools/perf/util/parse-events.y           |  10 +
 tools/perf/util/string.c                 |  18 ++
 tools/perf/util/symbol.h                 |   3 +-
 tools/perf/util/util.h                   |   1 +
 24 files changed, 855 insertions(+), 236 deletions(-)

-- 
1.7.11.7

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ