All of lore.kernel.org
 help / color / mirror / Atom feed
From: Namhyung Kim <namhyung@kernel.org>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Ingo Molnar <mingo@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Jiri Olsa <jolsa@kernel.org>, LKML <linux-kernel@vger.kernel.org>,
	Andi Kleen <andi@firstfloor.org>, David Ahern <dsahern@gmail.com>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	Wang Nan <wangnan0@huawei.com>
Subject: [PATCH 06/10] perf report: Fix percent display in callchains on --stdio
Date: Thu, 28 Jan 2016 00:40:53 +0900	[thread overview]
Message-ID: <1453909257-26015-7-git-send-email-namhyung@kernel.org> (raw)
In-Reply-To: <1453909257-26015-1-git-send-email-namhyung@kernel.org>

When there's only a single callchain, perf doesn't print its percentage
in front of the symbols.  This is because it assumes that the percentage
is same as parents.  But if a percent limit is applied, it's possible
that there are actually a couple of child nodes but only one of them is
shown.  In this case it should display the percent to prevent
misunderstanding of its percentage is same as the parent's.

For example, let's see the following callchain.

  $ perf report -s comm --percent-limit 0.01 --stdio
  ...
     9.95%  swapper
            |
            |--7.57%--intel_idle
            |          cpuidle_enter_state
            |          cpuidle_enter
            |          call_cpuidle
            |          cpu_startup_entry
            |          |
            |          |--4.89%--start_secondary
            |          |
            |           --2.68%--rest_init
            |                     start_kernel
            |                     x86_64_start_reservations
            |                     x86_64_start_kernel
	    |
	    |--0.15%--__schedule
	    |          |
	    |          |--0.13%--schedule
	    |          |          schedule_preempt_disable
	    |          |          cpu_startup_entry
            |          |          |
            |          |          |--0.09%--start_secondary
            |          |          |
            |          |           --0.04%--rest_init
            |          |                     start_kernel
            |          |                     x86_64_start_reservations
            |          |                     x86_64_start_kernel
            |          |
            |           --0.01%--schedule_preempt_disabled
            |                     cpu_startup_entry
  ...

Current code omits the percent if 'intel_idle' becomes the only node
when percent limit is set to 0.5%, its percent is not 9.95% but users
will assume it incorrectly.

Before:

  $ perf report --percent-limit 0.5 --stdio
  ...
     9.95%  swapper
            |
            ---intel_idle
               cpuidle_enter_state
               cpuidle_enter
               call_cpuidle
               cpu_startup_entry
               |
               |--4.89%--start_secondary
               |
                --2.68%--rest_init
                          start_kernel
                          x86_64_start_reservations
                          x86_64_start_kernel

After:

  $ perf report --percent-limit 0.5 --stdio
  ...
     9.95%  swapper
            |
             --7.57%--intel_idle
                       cpuidle_enter_state
                       cpuidle_enter
                       call_cpuidle
                       cpu_startup_entry
                       |
                       |--4.89%--start_secondary
                       |
                        --2.68%--rest_init
                                  start_kernel
                                  x86_64_start_reservations
                                  x86_64_start_kernel

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/ui/stdio/hist.c | 26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/tools/perf/ui/stdio/hist.c b/tools/perf/ui/stdio/hist.c
index 96188ea12771..76ff46becac8 100644
--- a/tools/perf/ui/stdio/hist.c
+++ b/tools/perf/ui/stdio/hist.c
@@ -165,6 +165,25 @@ static size_t __callchain__fprintf_graph(FILE *fp, struct rb_root *root,
 	return ret;
 }
 
+/*
+ * If have one single callchain root, don't bother printing
+ * its percentage (100 % in fractal mode and the same percentage
+ * than the hist in graph mode). This also avoid one level of column.
+ *
+ * However when percent-limit applied, it's possible that single callchain
+ * node have different (non-100% in fractal mode) percentage.
+ */
+static bool need_percent_display(struct rb_node *node, u64 parent_samples)
+{
+	struct callchain_node *cnode;
+
+	if (rb_next(node))
+		return true;
+
+	cnode = rb_entry(node, struct callchain_node, rb_node);
+	return callchain_cumul_hits(cnode) != parent_samples;
+}
+
 static size_t callchain__fprintf_graph(FILE *fp, struct rb_root *root,
 				       u64 total_samples, u64 parent_samples,
 				       int left_margin)
@@ -178,13 +197,8 @@ static size_t callchain__fprintf_graph(FILE *fp, struct rb_root *root,
 	int ret = 0;
 	char bf[1024];
 
-	/*
-	 * If have one single callchain root, don't bother printing
-	 * its percentage (100 % in fractal mode and the same percentage
-	 * than the hist in graph mode). This also avoid one level of column.
-	 */
 	node = rb_first(root);
-	if (node && !rb_next(node)) {
+	if (node && !need_percent_display(node, parent_samples)) {
 		cnode = rb_entry(node, struct callchain_node, rb_node);
 		list_for_each_entry(chain, &cnode->val, list) {
 			/*
-- 
2.6.4

  parent reply	other threads:[~2016-01-27 15:43 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-27 15:40 [PATCHSET 00/10] perf tools: Apply percent-limit to callchains (v2) Namhyung Kim
2016-01-27 15:40 ` [PATCH 01/10] perf hists: Fix min callchain hits calculation Namhyung Kim
2016-02-03 10:21   ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-01-27 15:40 ` [PATCH 02/10] perf hists: Update hists' total period when adding entries Namhyung Kim
2016-02-03 10:21   ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-01-27 15:40 ` [PATCH 03/10] perf report: Apply --percent-limit to callchains also Namhyung Kim
2016-02-01 20:19   ` Arnaldo Carvalho de Melo
2016-02-02 13:05     ` Namhyung Kim
2016-02-02 13:55       ` Arnaldo Carvalho de Melo
2016-02-02 14:15         ` Namhyung Kim
2016-02-02 14:27           ` Arnaldo Carvalho de Melo
2016-02-02 14:35             ` Namhyung Kim
2016-02-02 14:57               ` Arnaldo Carvalho de Melo
2016-02-02 15:03                 ` Namhyung Kim
2016-02-03 10:22   ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-01-27 15:40 ` [PATCH 04/10] perf report: Get rid of hist_entry__callchain_fprintf() Namhyung Kim
2016-02-03 10:22   ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-01-27 15:40 ` [PATCH 05/10] perf tools: Pass parent_samples to __callchain__fprintf_graph() Namhyung Kim
2016-02-03 10:22   ` [tip:perf/core] perf callchain: " tip-bot for Namhyung Kim
2016-01-27 15:40 ` Namhyung Kim [this message]
2016-02-03 10:22   ` [tip:perf/core] perf report: Fix percent display in callchains on --stdio tip-bot for Namhyung Kim
2016-01-27 15:40 ` [PATCH 07/10] perf hists browser: Fix dump to show correct callchain style Namhyung Kim
2016-02-03 10:23   ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-01-27 15:40 ` [PATCH 08/10] perf hists browser: Pass parent_total to callchain print functions Namhyung Kim
2016-02-03 10:23   ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-01-27 15:40 ` [PATCH 09/10] perf hists browser: Fix percent display in callchains Namhyung Kim
2016-02-03 10:24   ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-01-27 15:40 ` [RFC/PATCH 10/10] perf tools: Change default calchain percent limit to 0.005% Namhyung Kim
2016-01-27 16:06   ` Andi Kleen
2016-01-27 23:34     ` Namhyung Kim
2016-01-28  8:14 ` [PATCHSET 00/10] perf tools: Apply percent-limit to callchains (v2) Jiri Olsa
2016-01-28  8:42   ` Namhyung Kim
2016-01-28  8:16 ` Jiri Olsa
2016-01-28 10:14   ` Namhyung Kim
2016-01-28 10:16     ` Namhyung Kim
2016-01-28 12:12       ` Jiri Olsa
2016-01-28 12:24         ` Namhyung Kim
2016-01-28 19:52           ` Jiri Olsa
2016-01-29 21:00             ` Arnaldo Carvalho de Melo
2016-01-30 13:52               ` Namhyung Kim
2016-02-03 10:24           ` [tip:perf/core] perf report: Don' t show blank lines if entry has no callchain tip-bot for Namhyung Kim
2016-02-01 21:49 [GIT PULL 00/10] perf/core callchains improvements and fixes Arnaldo Carvalho de Melo
2016-02-01 21:49 ` [PATCH 06/10] perf report: Fix percent display in callchains on --stdio Arnaldo Carvalho de Melo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1453909257-26015-7-git-send-email-namhyung@kernel.org \
    --to=namhyung@kernel.org \
    --cc=acme@kernel.org \
    --cc=andi@firstfloor.org \
    --cc=dsahern@gmail.com \
    --cc=fweisbec@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=peterz@infradead.org \
    --cc=wangnan0@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.