public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCHSET 00/27] perf tools: Add support to accumulate hist periods (v11)
@ 2014-05-29  3:58 Namhyung Kim
  2014-05-29  3:58 ` [PATCH 01/27] perf tools: Introduce hists__inc_nr_samples() Namhyung Kim
                   ` (27 more replies)
  0 siblings, 28 replies; 65+ messages in thread
From: Namhyung Kim @ 2014-05-29  3:58 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Jiri Olsa
  Cc: Peter Zijlstra, Ingo Molnar, Paul Mackerras, Namhyung Kim,
	Namhyung Kim, LKML, David Ahern, Frederic Weisbecker, Andi Kleen,
	Arun Sharma, Rodrigo Campos, Don Zickus

Hello,

This is a new attempt to implement cumulative hist period report.
This work begins from Arun's SORT_INCLUSIVE patch [1] but I completely
rewrote it from scratch.

This patchset basically adds period in a sample to every node in the
callchain.  A hist_entry now has an additional fields to keep the
cumulative period if --children option is given on perf report.

I changed the option as a separate --children and added a new
"Children" column (and renamed the default "Overhead" column into
"Self").  The output will be sorted by children (cumulative) overhead
for now.  It also adds 'overhead_children' field to -F/--fields option
to be selected by user and it'll show you "N/A" if the cumulation is
not supported (due to missing callchain).

I added Tested-by from Rodrigo Campos since this version is basically
rebase of previous series + bugfix.  But it still needs to be tested
more intensively IMHO.  Also note that, this will change default
behavior of perf report/top if callchain is recorded, so might confuse
old users.  Let's see how many of them come to shout. :)  I think we
need to merge Jiri's TUI column header patch at least.


 * changes in v11:
  - factor out hists__inc_nr_samples  (Jiri)
  - remove unrelated change  (Jiri)
  - disable accumulation on branch or mem mode
  - slightly refactor hist_iter code

 * changes in v10:
  - fix callchain display bug in stdio, gtk
  - add a testcase
  - add Tested-by from Rodrigo

 * changes in v9:
  - support output field option
  - add Acked-by tags from Jiri

 * changes in v8:
  - not depends on --percentage patchkit
  - fix callchain resolving bug (Jiri)
  - convert to sample__resolve_{mem,bstack}
  - eliminate 'event' field from hist_entry_iter

 * changes in v7:
  - add Tested-by tags from Arun
  - rebase onto current acme/perf/core

 * changes in v6:
  - separate struct hist_iter_ops (Jiri)
  - check iter->he before calling ->add_entry_cb (Jiri)
  - fix locking issue on perf top (Jiri)

 * changes in v5:
  - support both of --children and --call-graph (Arun)
  - refactor hist_entry_iter to share with perf top (Jiri)
  - various cleanups and fixes (Jiri)
  - add ack's from Jiri

 * changes in v4:
  - change to --children option (Ingo)
  - rebased on new annotation change (Arnaldo)
  - support perf top also
  - enable --children option by default (Ingo)

 * changes in v3:
  - change to --cumulate option
  - fix a couple of bugs (Jiri, Rodrigo)
  - rename some help functions (Arnaldo)
  - cache previous hist entries rathen than just symbol and dso
  - add some preparatory cleanups
  - add report.cumulate config option


Let me show you an example:

  $ cat abc.c
  #define barrier() asm volatile("" ::: "memory")

  void a(void)
  {
  	int i;
  	for (i = 0; i < 1000000; i++)
  		barrier();
  }
  void b(void)
  {
  	a();
  }
  void c(void)
  {
  	b();
  }
  int main(void)
  {
  	c();
  	return 0;
  }

With this simple program I ran perf record and report:

  $ perf record -g -e cycles:u ./abc


Case 1.

  $ perf report --stdio --no-call-graph --no-children

  # Overhead  Command      Shared Object          Symbol
  # ........  .......  .................  ..............
  #
      91.50%      abc  abc                [.] a         
       8.18%      abc  ld-2.17.so         [.] strlen    
       0.31%      abc  [kernel.kallsyms]  [k] page_fault
       0.01%      abc  ld-2.17.so         [.] _start    


Case 2. (current default behavior)

  $ perf report --stdio --call-graph --no-children

  # Overhead  Command      Shared Object          Symbol
  # ........  .......  .................  ..............
  #
      91.50%      abc  abc                [.] a         
                  |
                  --- a
                      b
                      c
                      main
                      __libc_start_main

       8.18%      abc  ld-2.17.so         [.] strlen    
                  |
                  --- strlen
                      _dl_sysdep_start

       0.31%      abc  [kernel.kallsyms]  [k] page_fault
                  |
                  --- page_fault
                      _start

       0.01%      abc  ld-2.17.so         [.] _start    
                  |
                  --- _start


Case 3.

  $ perf report --no-call-graph --children --stdio

  #     Self  Children  Command      Shared Object                 Symbol
  # ........  ........  .......  .................  .....................
  #
       0.00%    91.50%      abc  libc-2.17.so       [.] __libc_start_main
       0.00%    91.50%      abc  abc                [.] main             
       0.00%    91.50%      abc  abc                [.] c                
       0.00%    91.50%      abc  abc                [.] b                
      91.50%    91.50%      abc  abc                [.] a                
       0.00%     8.18%      abc  ld-2.17.so         [.] _dl_sysdep_start 
       8.18%     8.18%      abc  ld-2.17.so         [.] strlen           
       0.01%     0.33%      abc  ld-2.17.so         [.] _start           
       0.31%     0.31%      abc  [kernel.kallsyms]  [k] page_fault       

As you can see __libc_start_main -> main -> c -> b -> a callchain show
up in the output.

Finally, it looks like below with both option enabled:

Case 4. (default behavior?)

  $ perf report --call-graph --children --stdio

  #     Self  Children  Command      Shared Object                 Symbol
  # ........  ........  .......  .................  .....................
  #
       0.00%    91.50%      abc  libc-2.17.so       [.] __libc_start_main
                  |
                  --- __libc_start_main

       0.00%    91.50%      abc  abc                [.] main             
                  |
                  --- main
                      __libc_start_main

       0.00%    91.50%      abc  abc                [.] c                
                  |
                  --- c
                      main
                      __libc_start_main

       0.00%    91.50%      abc  abc                [.] b                
                  |
                  --- b
                      c
                      main
                      __libc_start_main

      91.50%    91.50%      abc  abc                [.] a                
                  |
                  --- a
                      b
                      c
                      main
                      __libc_start_main
  ...


Currently the perf enables both of --call-graph and --children when it
finds callchains in the samples.  While this is useful for TUI or GTK,
I'm not sure for stdio as it'd consume so much lines.

It does not handle all kind of cases like event annotation yet, but I
really want to release it and get reviews.

You can also get this series on 'perf/cumulate-v11' branch in my tree at:

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


Any comments are welcome, thanks.
Namhyung


Cc: Arun Sharma <asharma@fb.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>

[1] https://lkml.org/lkml/2012/3/31/6


Namhyung Kim (27):
  perf tools: Introduce hists__inc_nr_samples()
  perf tools: Introduce struct hist_entry_iter
  perf hists: Add support for accumulated stat of hist entry
  perf hists: Check if accumulated when adding a hist entry
  perf hists: Accumulate hist entry stat based on the callchain
  perf tools: Update cpumode for each cumulative entry
  perf report: Cache cumulative callchains
  perf callchain: Add callchain_cursor_snapshot()
  perf tools: Save callchain info for each cumulative entry
  perf ui/hist: Add support to accumulated hist stat
  perf ui/browser: Add support to accumulated hist stat
  perf ui/gtk: Add support to accumulated hist stat
  perf tools: Apply percent-limit to cumulative percentage
  perf tools: Add more hpp helper functions
  perf report: Add --children option
  perf report: Add report.children config option
  perf tools: Do not auto-remove Children column if --fields given
  perf tools: Add callback function to hist_entry_iter
  perf top: Convert to hist_entry_iter
  perf top: Add --children option
  perf top: Add top.children config option
  perf tools: Enable --children option by default
  perf ui/stdio: Fix invalid percentage value of cumulated hist entries
  perf ui/gtk: Fix callchain display
  perf tools: Reset output/sort order to default
  perf tests: Define and use symbolic names for fake symbols
  perf tests: Add a test case for cumulating callchains

 tools/perf/Documentation/perf-report.txt |   7 +-
 tools/perf/Documentation/perf-top.txt    |   8 +-
 tools/perf/Makefile.perf                 |   1 +
 tools/perf/builtin-annotate.c            |   5 +-
 tools/perf/builtin-diff.c                |   2 +-
 tools/perf/builtin-report.c              | 200 ++-------
 tools/perf/builtin-sched.c               |   2 +-
 tools/perf/builtin-top.c                 |  89 ++--
 tools/perf/tests/builtin-test.c          |   4 +
 tools/perf/tests/hists_common.c          |  52 ++-
 tools/perf/tests/hists_common.h          |  32 +-
 tools/perf/tests/hists_cumulate.c        | 726 +++++++++++++++++++++++++++++++
 tools/perf/tests/hists_filter.c          |  39 +-
 tools/perf/tests/hists_link.c            |  36 +-
 tools/perf/tests/hists_output.c          |  31 +-
 tools/perf/tests/tests.h                 |   1 +
 tools/perf/ui/browsers/hists.c           |  65 +--
 tools/perf/ui/gtk/hists.c                |  33 +-
 tools/perf/ui/hist.c                     | 119 +++++
 tools/perf/ui/stdio/hist.c               |   8 +-
 tools/perf/util/callchain.c              |  45 +-
 tools/perf/util/callchain.h              |  11 +
 tools/perf/util/hist.c                   | 513 +++++++++++++++++++++-
 tools/perf/util/hist.h                   |  49 ++-
 tools/perf/util/sort.c                   |   4 +
 tools/perf/util/sort.h                   |  18 +-
 tools/perf/util/symbol.c                 |  11 +-
 tools/perf/util/symbol.h                 |   1 +
 28 files changed, 1780 insertions(+), 332 deletions(-)
 create mode 100644 tools/perf/tests/hists_cumulate.c

-- 
1.9.2


^ permalink raw reply	[flat|nested] 65+ messages in thread
* [GIT PULL 00/27] perf/core improvements and fixes
@ 2014-06-01 13:31 Jiri Olsa
  2014-06-01 13:31 ` [PATCH 22/27] perf tools: Enable --children option by default Jiri Olsa
  0 siblings, 1 reply; 65+ messages in thread
From: Jiri Olsa @ 2014-06-01 13:31 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Andi Kleen, Arnaldo Carvalho de Melo, Arun Sharma,
	David Ahern, Don Zickus, Frederic Weisbecker, Namhyung Kim,
	Paul Mackerras, Peter Zijlstra, Rodrigo Campos, Stephane Eranian,
	Jiri Olsa

hi Ingo,
please consider pulling

thanks,
jirka


The following changes since commit e450f90e8c7d0bf70519223c1b848446ae63f313:

  Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf into perf/core (2014-05-22 11:37:40 +0200)

are available in the git repository at:


  git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git tags/perf-core-for-mingo

for you to fetch changes up to 0506aecce999d4370b979892f88cf1118cfe8dcb:

  perf tests: Add a test case for cumulating callchains (2014-06-01 14:35:11 +0200)

----------------------------------------------------------------
perf/core improvements and fixes:

. Add support to accumulate hist periods (Namhyung Kim)

Signed-off-by: Jiri Olsa <jolsa@kernel.org>

----------------------------------------------------------------
Namhyung Kim (27):
      perf tools: Introduce hists__inc_nr_samples()
      perf tools: Introduce struct hist_entry_iter
      perf hists: Add support for accumulated stat of hist entry
      perf hists: Check if accumulated when adding a hist entry
      perf hists: Accumulate hist entry stat based on the callchain
      perf tools: Update cpumode for each cumulative entry
      perf report: Cache cumulative callchains
      perf callchain: Add callchain_cursor_snapshot()
      perf tools: Save callchain info for each cumulative entry
      perf ui/hist: Add support to accumulated hist stat
      perf ui/browser: Add support to accumulated hist stat
      perf ui/gtk: Add support to accumulated hist stat
      perf tools: Apply percent-limit to cumulative percentage
      perf tools: Add more hpp helper functions
      perf report: Add --children option
      perf report: Add report.children config option
      perf tools: Do not auto-remove Children column if --fields given
      perf tools: Add callback function to hist_entry_iter
      perf top: Convert to hist_entry_iter
      perf top: Add --children option
      perf top: Add top.children config option
      perf tools: Enable --children option by default
      perf ui/stdio: Fix invalid percentage value of cumulated hist entries
      perf ui/gtk: Fix callchain display
      perf tools: Reset output/sort order to default
      perf tests: Define and use symbolic names for fake symbols
      perf tests: Add a test case for cumulating callchains

 tools/perf/Documentation/perf-report.txt |   7 +-
 tools/perf/Documentation/perf-top.txt    |   8 +-
 tools/perf/Makefile.perf                 |   1 +
 tools/perf/builtin-annotate.c            |   5 +-
 tools/perf/builtin-diff.c                |   2 +-
 tools/perf/builtin-report.c              | 210 +++------
 tools/perf/builtin-sched.c               |   2 +-
 tools/perf/builtin-top.c                 |  90 ++--
 tools/perf/tests/builtin-test.c          |   4 +
 tools/perf/tests/hists_common.c          |  52 ++-
 tools/perf/tests/hists_common.h          |  32 +-
 tools/perf/tests/hists_cumulate.c        | 726 +++++++++++++++++++++++++++++++
 tools/perf/tests/hists_filter.c          |  39 +-
 tools/perf/tests/hists_link.c            |  36 +-
 tools/perf/tests/hists_output.c          |  31 +-
 tools/perf/tests/tests.h                 |   1 +
 tools/perf/ui/browsers/hists.c           |  65 +--
 tools/perf/ui/gtk/hists.c                |  33 +-
 tools/perf/ui/hist.c                     | 119 +++++
 tools/perf/ui/stdio/hist.c               |   8 +-
 tools/perf/util/callchain.c              |  45 +-
 tools/perf/util/callchain.h              |  11 +
 tools/perf/util/hist.c                   | 481 +++++++++++++++++++-
 tools/perf/util/hist.h                   |  49 ++-
 tools/perf/util/sort.c                   |   4 +
 tools/perf/util/sort.h                   |  18 +-
 tools/perf/util/symbol.c                 |  11 +-
 tools/perf/util/symbol.h                 |   1 +
 28 files changed, 1768 insertions(+), 323 deletions(-)
 create mode 100644 tools/perf/tests/hists_cumulate.c

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

end of thread, other threads:[~2014-07-29 23:29 UTC | newest]

Thread overview: 65+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-29  3:58 [PATCHSET 00/27] perf tools: Add support to accumulate hist periods (v11) Namhyung Kim
2014-05-29  3:58 ` [PATCH 01/27] perf tools: Introduce hists__inc_nr_samples() Namhyung Kim
2014-06-03 18:31   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 02/27] perf tools: Introduce struct hist_entry_iter Namhyung Kim
2014-06-03 18:31   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 03/27] perf hists: Add support for accumulated stat of hist entry Namhyung Kim
2014-06-03 18:31   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 04/27] perf hists: Check if accumulated when adding a " Namhyung Kim
2014-06-03 18:31   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 05/27] perf hists: Accumulate hist entry stat based on the callchain Namhyung Kim
2014-06-03 18:32   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 06/27] perf tools: Update cpumode for each cumulative entry Namhyung Kim
2014-06-03 18:32   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 07/27] perf report: Cache cumulative callchains Namhyung Kim
2014-06-03 18:32   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 08/27] perf callchain: Add callchain_cursor_snapshot() Namhyung Kim
2014-06-03 18:32   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 09/27] perf tools: Save callchain info for each cumulative entry Namhyung Kim
2014-06-03 18:33   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 10/27] perf ui/hist: Add support to accumulated hist stat Namhyung Kim
2014-06-03 18:33   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 11/27] perf ui/browser: " Namhyung Kim
2014-06-03 18:33   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 12/27] perf ui/gtk: " Namhyung Kim
2014-06-03 18:33   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 13/27] perf tools: Apply percent-limit to cumulative percentage Namhyung Kim
2014-06-03 18:33   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 14/27] perf tools: Add more hpp helper functions Namhyung Kim
2014-06-03 18:34   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 15/27] perf report: Add --children option Namhyung Kim
2014-06-03 18:34   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 16/27] perf report: Add report.children config option Namhyung Kim
2014-06-03 18:34   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 17/27] perf tools: Do not auto-remove Children column if --fields given Namhyung Kim
2014-06-03 18:34   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 18/27] perf tools: Add callback function to hist_entry_iter Namhyung Kim
2014-05-29 13:16   ` Jiri Olsa
2014-05-30  4:50     ` Namhyung Kim
2014-06-03 18:34       ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 19/27] perf top: Convert " Namhyung Kim
2014-06-03 18:35   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 20/27] perf top: Add --children option Namhyung Kim
2014-06-03 18:35   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 21/27] perf top: Add top.children config option Namhyung Kim
2014-06-03 18:35   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 22/27] perf tools: Enable --children option by default Namhyung Kim
2014-06-03 18:35   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-07-28 19:23   ` [PATCH 22/27] " Andres Freund
2014-07-29  6:52     ` Namhyung Kim
2014-07-29 11:45       ` Andres Freund
2014-07-29 13:06         ` Arnaldo Carvalho de Melo
2014-07-29 23:29         ` Namhyung Kim
2014-05-29  3:58 ` [PATCH 23/27] perf ui/stdio: Fix invalid percentage value of cumulated hist entries Namhyung Kim
2014-06-03 18:35   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 24/27] perf ui/gtk: Fix callchain display Namhyung Kim
2014-06-03 18:36   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 25/27] perf tools: Reset output/sort order to default Namhyung Kim
2014-06-03 18:36   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 26/27] perf tests: Define and use symbolic names for fake symbols Namhyung Kim
2014-06-03 18:36   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29  3:58 ` [PATCH 27/27] perf tests: Add a test case for cumulating callchains Namhyung Kim
2014-06-03 18:36   ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-05-29 13:59 ` [PATCHSET 00/27] perf tools: Add support to accumulate hist periods (v11) Jiri Olsa
2014-05-30  4:58   ` Namhyung Kim
  -- strict thread matches above, loose matches on Subject: below --
2014-06-01 13:31 [GIT PULL 00/27] perf/core improvements and fixes Jiri Olsa
2014-06-01 13:31 ` [PATCH 22/27] perf tools: Enable --children option by default Jiri Olsa

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