linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/3] perf sort: Add 'addr' sort key
@ 2013-03-26 12:11 Namhyung Kim
  2013-03-26 12:11 ` [PATCH 2/3] perf sort: Add 'addr_to/from' " Namhyung Kim
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Namhyung Kim @ 2013-03-26 12:11 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Namhyung Kim, LKML

From: Namhyung Kim <namhyung.kim@lge.com>

New addr sort key provides a way to sort the entries by the symbol
addresses.

Suggested-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/util/hist.c |  2 ++
 tools/perf/util/hist.h |  1 +
 tools/perf/util/sort.c | 23 +++++++++++++++++++++++
 tools/perf/util/sort.h |  1 +
 4 files changed, 27 insertions(+)

diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
index f855941bebea..82b7542db904 100644
--- a/tools/perf/util/hist.c
+++ b/tools/perf/util/hist.c
@@ -52,6 +52,8 @@ void hists__reset_col_len(struct hists *hists)
 
 	for (col = 0; col < HISTC_NR_COLS; ++col)
 		hists__set_col_len(hists, col, 0);
+
+	hists__set_col_len(hists, HISTC_ADDR, BITS_PER_LONG / 4 + 2);
 }
 
 static void hists__set_unres_dso_col_len(struct hists *hists, int dso)
diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h
index 848331377bdb..72c75bef0c68 100644
--- a/tools/perf/util/hist.h
+++ b/tools/perf/util/hist.h
@@ -49,6 +49,7 @@ enum hist_column {
 	HISTC_DSO_FROM,
 	HISTC_DSO_TO,
 	HISTC_SRCLINE,
+	HISTC_ADDR,
 	HISTC_NR_COLS, /* Last entry */
 };
 
diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c
index d41926cb9e3f..27e55562cbbb 100644
--- a/tools/perf/util/sort.c
+++ b/tools/perf/util/sort.c
@@ -334,6 +334,28 @@ struct sort_entry sort_cpu = {
 	.se_width_idx	= HISTC_CPU,
 };
 
+/* --sort addr */
+
+static int64_t
+sort__addr_cmp(struct hist_entry *left, struct hist_entry *right)
+{
+	return right->ip - left->ip;
+}
+
+static int hist_entry__addr_snprintf(struct hist_entry *self, char *bf,
+				     size_t size, unsigned int width)
+{
+	return repsep_snprintf(bf, size, "%#*"PRIx64, width, (uint64_t)self->ip);
+}
+
+struct sort_entry sort_addr = {
+	.se_header      = "Address",
+	.se_cmp	        = sort__addr_cmp,
+	.se_snprintf    = hist_entry__addr_snprintf,
+	.se_width_idx	= HISTC_ADDR,
+};
+
+
 /* sort keys for branch stacks */
 
 static int64_t
@@ -480,6 +502,7 @@ static struct sort_dimension common_sort_dimensions[] = {
 	DIM(SORT_PARENT, "parent", sort_parent),
 	DIM(SORT_CPU, "cpu", sort_cpu),
 	DIM(SORT_SRCLINE, "srcline", sort_srcline),
+	DIM(SORT_ADDR, "addr", sort_addr),
 };
 
 #undef DIM
diff --git a/tools/perf/util/sort.h b/tools/perf/util/sort.h
index b13e56f6ccbe..a24dba16cc8f 100644
--- a/tools/perf/util/sort.h
+++ b/tools/perf/util/sort.h
@@ -130,6 +130,7 @@ enum sort_type {
 	SORT_PARENT,
 	SORT_CPU,
 	SORT_SRCLINE,
+	SORT_ADDR,
 
 	/* branch stack specific sort keys */
 	__SORT_BRANCH_STACK,
-- 
1.7.11.7


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

* [PATCH 2/3] perf sort: Add 'addr_to/from' sort key
  2013-03-26 12:11 [PATCH 1/3] perf sort: Add 'addr' sort key Namhyung Kim
@ 2013-03-26 12:11 ` Namhyung Kim
  2013-03-26 12:11 ` [PATCH 3/3] perf report: Fix alignment of symbol column when -v is given Namhyung Kim
  2013-03-26 14:40 ` [PATCH 1/3] perf sort: Add 'addr' sort key Ingo Molnar
  2 siblings, 0 replies; 6+ messages in thread
From: Namhyung Kim @ 2013-03-26 12:11 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Namhyung Kim, LKML,
	Stephane Eranian

From: Namhyung Kim <namhyung.kim@lge.com>

New addr_{to,from} sort keys provide a way to sort the entries by the
source/target symbol addresses.

Cc: Stephane Eranian <eranian@google.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/util/hist.c |  2 ++
 tools/perf/util/hist.h |  2 ++
 tools/perf/util/sort.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
 tools/perf/util/sort.h |  2 ++
 4 files changed, 56 insertions(+)

diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
index 82b7542db904..b951f4101d7e 100644
--- a/tools/perf/util/hist.c
+++ b/tools/perf/util/hist.c
@@ -54,6 +54,8 @@ void hists__reset_col_len(struct hists *hists)
 		hists__set_col_len(hists, col, 0);
 
 	hists__set_col_len(hists, HISTC_ADDR, BITS_PER_LONG / 4 + 2);
+	hists__set_col_len(hists, HISTC_ADDR_FROM, BITS_PER_LONG / 4 + 2);
+	hists__set_col_len(hists, HISTC_ADDR_TO, BITS_PER_LONG / 4 + 2);
 }
 
 static void hists__set_unres_dso_col_len(struct hists *hists, int dso)
diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h
index 72c75bef0c68..ad1462c87918 100644
--- a/tools/perf/util/hist.h
+++ b/tools/perf/util/hist.h
@@ -50,6 +50,8 @@ enum hist_column {
 	HISTC_DSO_TO,
 	HISTC_SRCLINE,
 	HISTC_ADDR,
+	HISTC_ADDR_FROM,
+	HISTC_ADDR_TO,
 	HISTC_NR_COLS, /* Last entry */
 };
 
diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c
index 27e55562cbbb..988d7ea3ecc2 100644
--- a/tools/perf/util/sort.c
+++ b/tools/perf/util/sort.c
@@ -428,6 +428,40 @@ static int hist_entry__sym_to_snprintf(struct hist_entry *self, char *bf,
 
 }
 
+static int64_t
+sort__addr_from_cmp(struct hist_entry *left, struct hist_entry *right)
+{
+	struct addr_map_symbol *from_l = &left->branch_info->from;
+	struct addr_map_symbol *from_r = &right->branch_info->from;
+
+	return from_r->addr - from_l->addr;
+}
+
+static int hist_entry__addr_from_snprintf(struct hist_entry *self, char *bf,
+					  size_t size, unsigned int width)
+{
+	struct addr_map_symbol *from = &self->branch_info->from;
+	return repsep_snprintf(bf, size, "%#*"PRIx64, width,
+					(uint64_t)from->addr);
+}
+
+static int64_t
+sort__addr_to_cmp(struct hist_entry *left, struct hist_entry *right)
+{
+	struct addr_map_symbol *to_l = &left->branch_info->to;
+	struct addr_map_symbol *to_r = &right->branch_info->to;
+
+	return to_r->addr - to_l->addr;
+}
+
+static int hist_entry__addr_to_snprintf(struct hist_entry *self, char *bf,
+					size_t size, unsigned int width)
+{
+	struct addr_map_symbol *to = &self->branch_info->to;
+	return repsep_snprintf(bf, size, "%#*"PRIx64, width,
+					(uint64_t)to->addr);
+}
+
 struct sort_entry sort_dso_from = {
 	.se_header	= "Source Shared Object",
 	.se_cmp		= sort__dso_from_cmp,
@@ -456,6 +490,20 @@ struct sort_entry sort_sym_to = {
 	.se_width_idx	= HISTC_SYMBOL_TO,
 };
 
+struct sort_entry sort_addr_from = {
+	.se_header	= "Source Address",
+	.se_cmp		= sort__addr_from_cmp,
+	.se_snprintf	= hist_entry__addr_from_snprintf,
+	.se_width_idx	= HISTC_ADDR_FROM,
+};
+
+struct sort_entry sort_addr_to = {
+	.se_header	= "Target Address",
+	.se_cmp		= sort__addr_to_cmp,
+	.se_snprintf	= hist_entry__addr_to_snprintf,
+	.se_width_idx	= HISTC_ADDR_TO,
+};
+
 static int64_t
 sort__mispredict_cmp(struct hist_entry *left, struct hist_entry *right)
 {
@@ -514,6 +562,8 @@ static struct sort_dimension bstack_sort_dimensions[] = {
 	DIM(SORT_DSO_TO, "dso_to", sort_dso_to),
 	DIM(SORT_SYM_FROM, "symbol_from", sort_sym_from),
 	DIM(SORT_SYM_TO, "symbol_to", sort_sym_to),
+	DIM(SORT_ADDR_FROM, "addr_from", sort_addr_from),
+	DIM(SORT_ADDR_TO, "addr_to", sort_addr_to),
 	DIM(SORT_MISPREDICT, "mispredict", sort_mispredict),
 };
 
diff --git a/tools/perf/util/sort.h b/tools/perf/util/sort.h
index a24dba16cc8f..1c049cf58f34 100644
--- a/tools/perf/util/sort.h
+++ b/tools/perf/util/sort.h
@@ -138,6 +138,8 @@ enum sort_type {
 	SORT_DSO_TO,
 	SORT_SYM_FROM,
 	SORT_SYM_TO,
+	SORT_ADDR_FROM,
+	SORT_ADDR_TO,
 	SORT_MISPREDICT,
 };
 
-- 
1.7.11.7


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

* [PATCH 3/3] perf report: Fix alignment of symbol column when -v is given
  2013-03-26 12:11 [PATCH 1/3] perf sort: Add 'addr' sort key Namhyung Kim
  2013-03-26 12:11 ` [PATCH 2/3] perf sort: Add 'addr_to/from' " Namhyung Kim
@ 2013-03-26 12:11 ` Namhyung Kim
  2013-03-26 14:40 ` [PATCH 1/3] perf sort: Add 'addr' sort key Ingo Molnar
  2 siblings, 0 replies; 6+ messages in thread
From: Namhyung Kim @ 2013-03-26 12:11 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Namhyung Kim, LKML

From: Namhyung Kim <namhyung.kim@lge.com>

When -v option is given, the symbol sort key prints its address also
but it wasn't properly aligned since hists__calc_col_len() misses the
additional part.  Also it missed 2 spaces for 0x prefix when printing.

  $ perf report --stdio -v -s sym
  # Samples: 133  of event 'cycles'
  # Event count (approx.): 50536717
  #
  # Overhead                          Symbol
  # ........  ..............................
  #
      12.20%  0xffffffff81384c50 v [k] intel_idle
       7.62%  0xffffffff8170976a v [k] ftrace_caller
       7.02%  0x2d986d         B [.] 0x00000000002d986d

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/util/hist.c | 20 +++++++++++++++++---
 tools/perf/util/sort.c |  2 +-
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
index b951f4101d7e..7d4bb1f515d1 100644
--- a/tools/perf/util/hist.c
+++ b/tools/perf/util/hist.c
@@ -73,8 +73,17 @@ void hists__calc_col_len(struct hists *hists, struct hist_entry *h)
 	const unsigned int unresolved_col_width = BITS_PER_LONG / 4;
 	u16 len;
 
-	if (h->ms.sym)
-		hists__new_col_len(hists, HISTC_SYMBOL, h->ms.sym->namelen + 4);
+	if (h->ms.sym) {
+		/*
+		 * +4 accounts for '[x] ' priv level info
+		 * +2 accounts for 0x prefix on raw addresses
+		 * +3 accounts for ' y ' symtab origin info
+		 */
+		len = h->ms.sym->namelen + 4;
+		if (verbose)
+			len += BITS_PER_LONG / 4 + 2 + 3;
+		hists__new_col_len(hists, HISTC_SYMBOL, len);
+	}
 	else
 		hists__set_unres_dso_col_len(hists, HISTC_DSO);
 
@@ -94,10 +103,13 @@ void hists__calc_col_len(struct hists *hists, struct hist_entry *h)
 		int symlen;
 		/*
 		 * +4 accounts for '[x] ' priv level info
-		 * +2 account of 0x prefix on raw addresses
+		 * +2 accounts for 0x prefix on raw addresses
+		 * +3 accounts for ' y ' symtab origin info
 		 */
 		if (h->branch_info->from.sym) {
 			symlen = (int)h->branch_info->from.sym->namelen + 4;
+			if (verbose)
+				symlen += BITS_PER_LONG / 4 + 2 + 3;
 			hists__new_col_len(hists, HISTC_SYMBOL_FROM, symlen);
 
 			symlen = dso__name_len(h->branch_info->from.map->dso);
@@ -110,6 +122,8 @@ void hists__calc_col_len(struct hists *hists, struct hist_entry *h)
 
 		if (h->branch_info->to.sym) {
 			symlen = (int)h->branch_info->to.sym->namelen + 4;
+			if (verbose)
+				symlen += BITS_PER_LONG / 4 + 2 + 3;
 			hists__new_col_len(hists, HISTC_SYMBOL_TO, symlen);
 
 			symlen = dso__name_len(h->branch_info->to.map->dso);
diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c
index 988d7ea3ecc2..5df020f3f59b 100644
--- a/tools/perf/util/sort.c
+++ b/tools/perf/util/sort.c
@@ -194,7 +194,7 @@ static int _hist_entry__sym_snprintf(struct map *map, struct symbol *sym,
 	if (verbose) {
 		char o = map ? dso__symtab_origin(map->dso) : '!';
 		ret += repsep_snprintf(bf, size, "%-#*llx %c ",
-				       BITS_PER_LONG / 4, ip, o);
+				       BITS_PER_LONG / 4 + 2, ip, o);
 	}
 
 	ret += repsep_snprintf(bf + ret, size - ret, "[%c] ", level);
-- 
1.7.11.7


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

* Re: [PATCH 1/3] perf sort: Add 'addr' sort key
  2013-03-26 12:11 [PATCH 1/3] perf sort: Add 'addr' sort key Namhyung Kim
  2013-03-26 12:11 ` [PATCH 2/3] perf sort: Add 'addr_to/from' " Namhyung Kim
  2013-03-26 12:11 ` [PATCH 3/3] perf report: Fix alignment of symbol column when -v is given Namhyung Kim
@ 2013-03-26 14:40 ` Ingo Molnar
  2013-03-27  6:12   ` Namhyung Kim
  2 siblings, 1 reply; 6+ messages in thread
From: Ingo Molnar @ 2013-03-26 14:40 UTC (permalink / raw)
  To: Namhyung Kim
  Cc: Arnaldo Carvalho de Melo, Peter Zijlstra, Paul Mackerras,
	Namhyung Kim, LKML


* Namhyung Kim <namhyung@kernel.org> wrote:

> From: Namhyung Kim <namhyung.kim@lge.com>
> 
> New addr sort key provides a way to sort the entries by the symbol
> addresses.

No objections from me - just wondering about the motivation: why would we 
want to sort by symbol address?

Perhaps to see the overhead layout/distribution within a DSO, to better 
cache-pack hot functions by placing them next to each other?

Putting a short usecase into the changelog (or even better, the 
documentation) would be nice.

Thanks,

	Ingo

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

* Re: [PATCH 1/3] perf sort: Add 'addr' sort key
  2013-03-26 14:40 ` [PATCH 1/3] perf sort: Add 'addr' sort key Ingo Molnar
@ 2013-03-27  6:12   ` Namhyung Kim
  2013-03-27 20:59     ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 6+ messages in thread
From: Namhyung Kim @ 2013-03-27  6:12 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Arnaldo Carvalho de Melo, Peter Zijlstra, Paul Mackerras,
	Namhyung Kim, LKML

Hi Ingo,

On Tue, 26 Mar 2013 15:40:23 +0100, Ingo Molnar wrote:
> * Namhyung Kim <namhyung@kernel.org> wrote:
>
>> From: Namhyung Kim <namhyung.kim@lge.com>
>> 
>> New addr sort key provides a way to sort the entries by the symbol
>> addresses.
>
> No objections from me - just wondering about the motivation: why would we 
> want to sort by symbol address?

In fact, it came from bugzilla:

  https://bugzilla.kernel.org/show_bug.cgi?id=55561

>
> Perhaps to see the overhead layout/distribution within a DSO, to better 
> cache-pack hot functions by placing them next to each other?
>
> Putting a short usecase into the changelog (or even better, the 
> documentation) would be nice.

Well, I didn't thought it much, but yeah, aforementioned usecase looks
promising.  Also it might be useful to find out which part is the
hotpath in a function if you have some really big functions (possibly
due to auto-inlining or something).

Arnaldo, do you have other usecase/scenario in mind?

Thanks,
Namhyung

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

* Re: [PATCH 1/3] perf sort: Add 'addr' sort key
  2013-03-27  6:12   ` Namhyung Kim
@ 2013-03-27 20:59     ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 6+ messages in thread
From: Arnaldo Carvalho de Melo @ 2013-03-27 20:59 UTC (permalink / raw)
  To: Namhyung Kim
  Cc: Ingo Molnar, Peter Zijlstra, Paul Mackerras, Namhyung Kim, LKML

Em Wed, Mar 27, 2013 at 03:12:34PM +0900, Namhyung Kim escreveu:
> On Tue, 26 Mar 2013 15:40:23 +0100, Ingo Molnar wrote:
> > * Namhyung Kim <namhyung@kernel.org> wrote:
> >> New addr sort key provides a way to sort the entries by the symbol
> >> addresses.

> > No objections from me - just wondering about the motivation: why would we 
> > want to sort by symbol address?
 
> In fact, it came from bugzilla:
 
>   https://bugzilla.kernel.org/show_bug.cgi?id=55561

Will Cohen asked if this was possible while trying to figure out why
some libxul.so samples were not being resolved to symbols, Will?

Namhyung, I'm using:

BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=55561

Just before the: Link: entry, consider adding it when addressing some
bugzilla entry, be it from bugzilla.kernel.org or from some other
bugzilla where problems or feature requests were made.

- Arnaldo
 
> >
> > Perhaps to see the overhead layout/distribution within a DSO, to better 
> > cache-pack hot functions by placing them next to each other?
> >
> > Putting a short usecase into the changelog (or even better, the 
> > documentation) would be nice.
> 
> Well, I didn't thought it much, but yeah, aforementioned usecase looks
> promising.  Also it might be useful to find out which part is the
> hotpath in a function if you have some really big functions (possibly
> due to auto-inlining or something).
> 
> Arnaldo, do you have other usecase/scenario in mind?

See above.

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

end of thread, other threads:[~2013-03-27 20:59 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-03-26 12:11 [PATCH 1/3] perf sort: Add 'addr' sort key Namhyung Kim
2013-03-26 12:11 ` [PATCH 2/3] perf sort: Add 'addr_to/from' " Namhyung Kim
2013-03-26 12:11 ` [PATCH 3/3] perf report: Fix alignment of symbol column when -v is given Namhyung Kim
2013-03-26 14:40 ` [PATCH 1/3] perf sort: Add 'addr' sort key Ingo Molnar
2013-03-27  6:12   ` Namhyung Kim
2013-03-27 20:59     ` Arnaldo Carvalho de Melo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).