From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754080AbcBZOPl (ORCPT ); Fri, 26 Feb 2016 09:15:41 -0500 Received: from mail.kernel.org ([198.145.29.136]:40419 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753125AbcBZOPj (ORCPT ); Fri, 26 Feb 2016 09:15:39 -0500 Date: Fri, 26 Feb 2016 11:15:33 -0300 From: Arnaldo Carvalho de Melo To: Namhyung Kim Cc: Ingo Molnar , Peter Zijlstra , Jiri Olsa , LKML , David Ahern , Andi Kleen , Stephane Eranian , Wang Nan Subject: Re: [PATCH 2/5] perf report: Show message for percent limit on stdio Message-ID: <20160226141533.GV8720@kernel.org> References: <1456488800-28124-1-git-send-email-namhyung@kernel.org> <1456488800-28124-2-git-send-email-namhyung@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1456488800-28124-2-git-send-email-namhyung@kernel.org> X-Url: http://acmel.wordpress.com User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Em Fri, Feb 26, 2016 at 09:13:17PM +0900, Namhyung Kim escreveu: > When the hierarchy mode is used, some entries might be omiited due to a > percent limit or filter. In this case the output hierarchy is different > than other entries. Add an informative message to users about this. > > For example, when 4% of percent limit is applied: > > Before: > # Overhead Command / Shared Object / Symbol > # .............. .......................................... > # > 49.09% swapper > 48.67% [kernel.vmlinux] > 34.42% [k] intel_idle > 11.51% firefox > 8.87% libpthread-2.22.so > 6.60% [.] __GI___libc_recvmsg > 10.49% gnome-shell > 4.74% libc-2.22.so > 10.08% Xorg > 6.11% libc-2.22.so > 5.27% [.] __memcpy_sse2_unaligned > 6.15% perf That is great, and while testing it another idea came to me, what about telling how many entries are below the threshold (--percent-limit)? Something like: 47.60% firefox 44.98% libxul.so 11.01% [.] 0x0000000001187918 10.84% [.] 0x0000000001187a5c 3.10% [.] 0x00000000011875c9 1.62% [.] 0x000000000118792b 1.47% [.] 0x00000000011875d8 1.39% [.] 0x0000000001187a6f 1.31% [.] 0x0000000001187a4a 1.27% [.] 0x0000000001187906 1.45% perf-9205.map no entry >= 1.00% 33.40% swapper 33.35% [kernel.vmlinux] 30.50% [k] intel_idle 25 entries < 1% 14.86% qemu-system-x86 7.58% [kvm] 2.40% [k] kvm_arch_vcpu_runnable 1.03% [k] kvm_vcpu_check_block 1 entry < 1% Another: pressing enter over these 'no entry >= M%' and 'N entries < M%' would show those entries, for that specific point. One more: Make '1.00%' appear as '1%' no need for .00, it adds no information and takes precious screen space. Thanks! Applying this patch and looking at the others in this patchkit, - Arnaldo > Note that, gnome-shell/libc has no symbols and perf has no dso/symbols. > With that patch the output will look like below: > > After: > > # Overhead Command / Shared Object / Symbol > # .............. .......................................... > # > 49.09% swapper > 48.67% [kernel.vmlinux] > 34.42% [k] intel_idle > 11.51% firefox > 8.87% libpthread-2.22.so > 6.60% [.] __GI___libc_recvmsg > 10.49% gnome-shell > 4.74% libc-2.22.so > no entry >= 4.00% > 10.08% Xorg > 6.11% libc-2.22.so > 5.27% [.] __memcpy_sse2_unaligned > 6.15% perf > no entry >= 4.00% > > Suggested-by: Arnaldo Carvalho de Melo > Signed-off-by: Namhyung Kim > --- > tools/perf/ui/stdio/hist.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/tools/perf/ui/stdio/hist.c b/tools/perf/ui/stdio/hist.c > index 435eaaaf2f1d..b3bdfcb245f9 100644 > --- a/tools/perf/ui/stdio/hist.c > +++ b/tools/perf/ui/stdio/hist.c > @@ -628,6 +628,7 @@ size_t hists__fprintf(struct hists *hists, bool show_header, int max_rows, > bool first = true; > size_t linesz; > char *line = NULL; > + unsigned indent; > > init_rem_hits(); > > @@ -704,6 +705,8 @@ print_entries: > goto out; > } > > + indent = hists__overhead_width(hists) + 4; > + > for (nd = rb_first(&hists->entries); nd; nd = __rb_hierarchy_next(nd, HMD_FORCE_CHILD)) { > struct hist_entry *h = rb_entry(nd, struct hist_entry, rb_node); > float percent; > @@ -720,6 +723,20 @@ print_entries: > if (max_rows && ++nr_rows >= max_rows) > break; > > + /* > + * If all children are filtered out or percent-limited, > + * display "no entry >= x.xx%" message. > + */ > + if (!h->leaf && !hist_entry__has_hierarchy_children(h, min_pcnt)) { > + int nr_sort = hists->hpp_list->nr_sort_keys; > + > + print_hierarchy_indent(sep, nr_sort + h->depth + 1, spaces, fp); > + fprintf(fp, "%*sno entry >= %.2f%%\n", indent, "", min_pcnt); > + > + if (max_rows && ++nr_rows >= max_rows) > + break; > + } > + > if (h->ms.map == NULL && verbose > 1) { > __map_groups__fprintf_maps(h->thread->mg, > MAP__FUNCTION, fp); > -- > 2.7.1