From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org,
Charles Baylis <charles.baylis@linaro.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org>,
Peter Zijlstra <peterz@infradead.org>,
Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: [PATCH 20/35] perf tools: Allow sorting by symbol size
Date: Mon, 6 Mar 2017 16:38:10 -0300 [thread overview]
Message-ID: <20170306193825.24011-21-acme@kernel.org> (raw)
In-Reply-To: <20170306193825.24011-1-acme@kernel.org>
From: Charles Baylis <charles.baylis@linaro.org>
Add new sort key 'symbol_size' to allow user to sort by symbol size, or
(more usefully) display the symbol size using --fields=...,symbol_size.
Committer note:
Testing it together with the recently added -q, to remove the headers,
and using the '+' sign with -s, to add the symbol_size sort order to
the default, which is '-s/--sort comm,dso,symbol':
# perf report -q -s +symbol_size | head -10
10.39% swapper [kernel.vmlinux] [k] intel_idle 270
3.45% swapper [kernel.vmlinux] [k] update_blocked_averages 1546
2.61% swapper [kernel.vmlinux] [k] update_load_avg 1292
2.36% swapper [kernel.vmlinux] [k] update_cfs_shares 240
1.83% swapper [kernel.vmlinux] [k] __hrtimer_run_queues 606
1.74% swapper [kernel.vmlinux] [k] update_cfs_rq_load_avg. 1187
1.66% swapper [kernel.vmlinux] [k] apic_timer_interrupt 152
1.60% CPU 0/KVM [kvm] [k] kvm_set_msr_common 3046
1.60% gnome-shell libglib-2.0.so.0 [.] g_slist_find 37
1.46% gnome-termina libglib-2.0.so.0 [.] g_hash_table_lookup 370
#
Signed-off-by: Charles Baylis <charles.baylis@linaro.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1487943176-13840-1-git-send-email-charles.baylis@linaro.org
[ Use symbol__size(), remove needless %lld + (long long) casting ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/Documentation/perf-report.txt | 1 +
tools/perf/util/hist.h | 1 +
tools/perf/util/sort.c | 41 ++++++++++++++++++++++++++++++++
tools/perf/util/sort.h | 1 +
4 files changed, 44 insertions(+)
diff --git a/tools/perf/Documentation/perf-report.txt b/tools/perf/Documentation/perf-report.txt
index c04cc0647c16..33f91906f5dc 100644
--- a/tools/perf/Documentation/perf-report.txt
+++ b/tools/perf/Documentation/perf-report.txt
@@ -80,6 +80,7 @@ OPTIONS
- pid: command and tid of the task
- dso: name of library or module executed at the time of sample
- symbol: name of function executed at the time of sample
+ - symbol_size: size of function executed at the time of sample
- parent: name of function matched to the parent regex filter. Unmatched
entries are displayed as "[other]".
- cpu: cpu number the task ran at the time of sample
diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h
index 28c216e3d5b7..2e839bf40bdd 100644
--- a/tools/perf/util/hist.h
+++ b/tools/perf/util/hist.h
@@ -57,6 +57,7 @@ enum hist_column {
HISTC_SRCLINE_FROM,
HISTC_SRCLINE_TO,
HISTC_TRACE,
+ HISTC_SYM_SIZE,
HISTC_NR_COLS, /* Last entry */
};
diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c
index 0ff622288d24..f8f16c0e20b6 100644
--- a/tools/perf/util/sort.c
+++ b/tools/perf/util/sort.c
@@ -1396,6 +1396,46 @@ struct sort_entry sort_transaction = {
.se_width_idx = HISTC_TRANSACTION,
};
+/* --sort symbol_size */
+
+static int64_t _sort__sym_size_cmp(struct symbol *sym_l, struct symbol *sym_r)
+{
+ int64_t size_l = sym_l != NULL ? symbol__size(sym_l) : 0;
+ int64_t size_r = sym_r != NULL ? symbol__size(sym_r) : 0;
+
+ return size_l < size_r ? -1 :
+ size_l == size_r ? 0 : 1;
+}
+
+static int64_t
+sort__sym_size_cmp(struct hist_entry *left, struct hist_entry *right)
+{
+ return _sort__sym_size_cmp(right->ms.sym, left->ms.sym);
+}
+
+static int _hist_entry__sym_size_snprintf(struct symbol *sym, char *bf,
+ size_t bf_size, unsigned int width)
+{
+ if (sym)
+ return repsep_snprintf(bf, bf_size, "%*d", width, symbol__size(sym));
+
+ return repsep_snprintf(bf, bf_size, "%*s", width, "unknown");
+}
+
+static int hist_entry__sym_size_snprintf(struct hist_entry *he, char *bf,
+ size_t size, unsigned int width)
+{
+ return _hist_entry__sym_size_snprintf(he->ms.sym, bf, size, width);
+}
+
+struct sort_entry sort_sym_size = {
+ .se_header = "Symbol size",
+ .se_cmp = sort__sym_size_cmp,
+ .se_snprintf = hist_entry__sym_size_snprintf,
+ .se_width_idx = HISTC_SYM_SIZE,
+};
+
+
struct sort_dimension {
const char *name;
struct sort_entry *entry;
@@ -1418,6 +1458,7 @@ static struct sort_dimension common_sort_dimensions[] = {
DIM(SORT_GLOBAL_WEIGHT, "weight", sort_global_weight),
DIM(SORT_TRANSACTION, "transaction", sort_transaction),
DIM(SORT_TRACE, "trace", sort_trace),
+ DIM(SORT_SYM_SIZE, "symbol_size", sort_sym_size),
};
#undef DIM
diff --git a/tools/perf/util/sort.h b/tools/perf/util/sort.h
index 796c847e2f00..f583325a3743 100644
--- a/tools/perf/util/sort.h
+++ b/tools/perf/util/sort.h
@@ -211,6 +211,7 @@ enum sort_type {
SORT_GLOBAL_WEIGHT,
SORT_TRANSACTION,
SORT_TRACE,
+ SORT_SYM_SIZE,
/* branch stack specific sort keys */
__SORT_BRANCH_STACK,
--
2.9.3
next prev parent reply other threads:[~2017-03-06 19:47 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-06 19:37 [GIT PULL 00/35] perf/core improvements and fixes Arnaldo Carvalho de Melo
2017-03-06 19:37 ` [PATCH 01/35] perf vendor events: Add mapping for KnightsMill PMU events Arnaldo Carvalho de Melo
2017-03-06 19:37 ` [PATCH 02/35] perf stat: Issue a HW watchdog disable hint Arnaldo Carvalho de Melo
2017-03-06 19:37 ` [PATCH 03/35] tools include: Adopt __compiletime_error Arnaldo Carvalho de Melo
2017-03-06 19:37 ` [PATCH 04/35] tools arch x86: Include asm/cmpxchg.h Arnaldo Carvalho de Melo
2017-03-06 19:37 ` [PATCH 05/35] tools arch x86: Introduce atomic_cmpxchg() Arnaldo Carvalho de Melo
2017-03-06 19:37 ` [PATCH 06/35] tools include: Introduce atomic_cmpxchg_{relaxed,release}() Arnaldo Carvalho de Melo
2017-03-06 19:37 ` [PATCH 07/35] tools include: Provide gcc based cmpxchg fallback for !x86 Arnaldo Carvalho de Melo
2017-03-06 19:37 ` [PATCH 08/35] tools include: Add UINT_MAX def to kernel.h Arnaldo Carvalho de Melo
2017-03-06 19:37 ` [PATCH 09/35] tools include: Adopt kernel's refcount.h Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 10/35] perf cgroup: Convert cgroup_sel.refcnt from atomic_t to refcount_t Arnaldo Carvalho de Melo
2017-03-06 19:38 ` Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 11/35] perf cpumap: Convert cpu_map.refcnt " Arnaldo Carvalho de Melo
2017-03-06 19:38 ` Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 12/35] perf comm: Convert comm_str.refcnt " Arnaldo Carvalho de Melo
2017-03-06 19:38 ` Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 13/35] perf dso: Convert dso.refcnt " Arnaldo Carvalho de Melo
2017-03-06 19:38 ` Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 14/35] perf map: Convert map.refcnt " Arnaldo Carvalho de Melo
2017-03-06 19:38 ` Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 15/35] perf map: Convert map_groups.refcnt " Arnaldo Carvalho de Melo
2017-03-06 19:38 ` Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 16/35] perf evlist: Convert perf_map.refcnt " Arnaldo Carvalho de Melo
2017-03-06 19:38 ` Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 17/35] perf thread: convert thread.refcnt " Arnaldo Carvalho de Melo
2017-03-06 19:38 ` Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 18/35] perf thread_map: Convert thread_map.refcnt " Arnaldo Carvalho de Melo
2017-03-06 19:38 ` Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 19/35] perf evlist: Clarify a bit the use of perf_mmap->refcnt Arnaldo Carvalho de Melo
2017-03-06 19:38 ` Arnaldo Carvalho de Melo [this message]
2017-03-06 19:38 ` [PATCH 21/35] perf ftrace: Add support for --pid option Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 22/35] perf cpumap: Introduce cpu_map__snprint_mask() Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 23/35] perf ftrace: Add support for -a and -C option Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 24/35] perf ftrace: Use pager for displaying result Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 25/35] kretprobes: Ensure probe location is at function entry Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 26/35] trace/kprobes: Allow return probes with offsets and absolute addresses Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 27/35] perf probe: Generalize probe event file open routine Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 28/35] perf intel-PT/BTS: Add missing initialization Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 29/35] trace/kprobes: Add back warning about offset in return probes Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 30/35] perf tools: Force uncore events to system wide monitoring Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 31/35] tools build: Add test for sched_getcpu() Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 32/35] perf bench futex: Use __maybe_unused Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 33/35] perf bench futex: Fix build on musl + clang Arnaldo Carvalho de Melo
2017-09-08 8:04 ` Jörg Krause
2017-09-08 13:47 ` Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 34/35] tools build: Use the same CC for feature detection and actual build Arnaldo Carvalho de Melo
2017-03-06 19:38 ` [PATCH 35/35] perf bench numa: Add more comment for -c option Arnaldo Carvalho de Melo
2017-03-07 7:17 ` [GIT PULL 00/35] perf/core improvements and fixes Ingo Molnar
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=20170306193825.24011-21-acme@kernel.org \
--to=acme@kernel.org \
--cc=acme@redhat.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=charles.baylis@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maxim.kuvyrkov@linaro.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
/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.