Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1305277

[tip:perf/core] perf tools: Add 'trace_fields' dynamic sort key

From tip-bot for Namhyung Kim <tipbot@zytor.com>
Newsgroups linux.kernel
Subject [tip:perf/core] perf tools: Add 'trace_fields' dynamic sort key
Date 2016-01-09 17:30 +0100
Message-ID <qP4yV-83p-55@gated-at.bofh.it> (permalink)
References <qIyBI-6Kl-35@gated-at.bofh.it> <qNxvk-Wb-9@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Commit-ID:  2e422fd1e4b0a1c0ca11d360be2147c87911dd1a
Gitweb:     http://git.kernel.org/tip/2e422fd1e4b0a1c0ca11d360be2147c87911dd1a
Author:     Namhyung Kim <namhyung@kernel.org>
AuthorDate: Wed, 23 Dec 2015 02:07:09 +0900
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Wed, 6 Jan 2016 20:11:13 -0300

perf tools: Add 'trace_fields' dynamic sort key

The 'trace_fields' sort key is similar as 'trace' sort key, but it shows
each fields separately.  Each event will get different columns as their
fields.

  $ perf report -s trace_fields --stdio
  # To display the perf.data header info, please use --header/--header-only options.
  #
  #
  # Total Lost Samples: 0
  #
  # Samples: 20K of event 'kmem:kmalloc'
  # Event count (approx.): 20533
  #
  # Overhead  Command           call_site                 ptr  bytes_req  bytes_alloc            gfp_flags
  # ........  .......  ..................  ..................  .........  ...........  ...................
  #
      99.89%  perf       ffffffffa01d4396  0xffff8803ffb79720         96           96    GFP_NOFS|GFP_ZERO
       0.06%  sleep      ffffffff8114e1cd  0xffff8803d228a000       4096         4096           GFP_KERNEL
       0.03%  perf       ffffffff811d6ae6  0xffff8803f7678f00        240          256  GFP_KERNEL|GFP_ZERO
       0.00%  perf       ffffffff812263c1  0xffff880406172380        128          128           GFP_KERNEL
       0.00%  perf       ffffffff812264b9  0xffff8803ffac1600        504          512           GFP_KERNEL
       0.00%  perf       ffffffff81226634  0xffff880401dc5280         28           32           GFP_KERNEL
       0.00%  sleep      ffffffff81226da9  0xffff8803ffac3a00        392          512           GFP_KERNEL

  # Samples: 20K of event 'kmem:kfree'
  # Event count (approx.): 20597
  #
  # Overhead           call_site                 ptr
  # ........  ..................  ..................
  #
      99.58%    ffffffffa01d85ad  0xffff8803ffb79720
       0.07%    ffffffff81443f5c  0xffff8803f7669400
       0.02%    ffffffff811d5753  0xffff8803f7678f00
       0.01%    ffffffff81443f5c  0xffff8803f766be00
       0.01%    ffffffff8114e359  0xffff8803d228a000
       0.01%    ffffffff81443f5c  0xffff8800d156dc00
       0.01%    ffffffff81443f5c  0xffff8803f7669400
       0.01%    ffffffff8114e359  0xffff8803d228a000
       0.01%    ffffffff8114e359  0xffff8803d228a000
       0.01%    ffffffff8114e359  0xffff8803d228a000

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1450804030-29193-13-git-send-email-namhyung@kernel.org
[ Combined with "perf tools: Fix segfault when using -s trace_fields" ]
Link: http://lkml.kernel.org/r/1451991518-25673-1-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/sort.c | 47 ++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 38 insertions(+), 9 deletions(-)

diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c
index fd56223..79aa71d 100644
--- a/tools/perf/util/sort.c
+++ b/tools/perf/util/sort.c
@@ -1932,6 +1932,38 @@ static int __dynamic_dimension__add(struct perf_evsel *evsel,
 	return 0;
 }
 
+static int add_evsel_fields(struct perf_evsel *evsel, bool raw_trace)
+{
+	int ret;
+	struct format_field *field;
+
+	field = evsel->tp_format->format.fields;
+	while (field) {
+		ret = __dynamic_dimension__add(evsel, field, raw_trace);
+		if (ret < 0)
+			return ret;
+
+		field = field->next;
+	}
+	return 0;
+}
+
+static int add_all_dynamic_fields(struct perf_evlist *evlist, bool raw_trace)
+{
+	int ret;
+	struct perf_evsel *evsel;
+
+	evlist__for_each(evlist, evsel) {
+		if (evsel->attr.type != PERF_TYPE_TRACEPOINT)
+			continue;
+
+		ret = add_evsel_fields(evsel, raw_trace);
+		if (ret < 0)
+			return ret;
+	}
+	return 0;
+}
+
 static int add_dynamic_entry(struct perf_evlist *evlist, const char *tok)
 {
 	char *str, *event_name, *field_name, *opt_name;
@@ -1961,6 +1993,11 @@ static int add_dynamic_entry(struct perf_evlist *evlist, const char *tok)
 		raw_trace = true;
 	}
 
+	if (!strcmp(field_name, "trace_fields")) {
+		ret = add_all_dynamic_fields(evlist, raw_trace);
+		goto out;
+	}
+
 	evsel = find_evsel(evlist, event_name);
 	if (evsel == NULL) {
 		pr_debug("Cannot find event: %s\n", event_name);
@@ -1975,15 +2012,7 @@ static int add_dynamic_entry(struct perf_evlist *evlist, const char *tok)
 	}
 
 	if (!strcmp(field_name, "*")) {
-		field = evsel->tp_format->format.fields;
-
-		while (field) {
-			ret = __dynamic_dimension__add(evsel, field, raw_trace);
-			if (ret < 0)
-				goto out;
-
-			field = field->next;
-		}
+		ret = add_evsel_fields(evsel, raw_trace);
 	} else {
 		field = pevent_find_any_field(evsel->tp_format, field_name);
 		if (field == NULL) {

Back to linux.kernel | Previous | NextPrevious in thread | Find similar | Unroll thread


Thread

[PATCH v2 1/5] perf tools: Fix segfault when using -s trace_fields Namhyung Kim <namhyung@kernel.org> - 2016-01-05 12:00 +0100
  [PATCH v2 3/5] perf tools: Add document for dynamic sort keys Namhyung Kim <namhyung@kernel.org> - 2016-01-05 12:00 +0100
    [tip:perf/core] perf report:   Add documentation for dynamic sort keys tip-bot for Namhyung Kim <tipbot@zytor.com> - 2016-01-09 17:30 +0100
  [PATCH v2 2/5] perf tools: Add all matching dynamic sort keys for field name Namhyung Kim <namhyung@kernel.org> - 2016-01-05 12:00 +0100
    Re: [PATCH v2 2/5] perf tools: Add all matching dynamic sort keys  for field name Jiri Olsa <jolsa@redhat.com> - 2016-01-05 15:30 +0100
    [tip:perf/core] perf tools:   Add all matching dynamic sort keys for field name tip-bot for Namhyung Kim <tipbot@zytor.com> - 2016-01-09 17:40 +0100
  [PATCH v2 4/5] perf tools: Support dynamic sort keys for -F/--fields Namhyung Kim <namhyung@kernel.org> - 2016-01-05 12:10 +0100
    Re: [PATCH v2 4/5] perf tools: Support dynamic sort keys for  -F/--fields Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-01-05 23:20 +0100
      Re: [PATCH v2 4/5] perf tools: Support dynamic sort keys for  -F/--fields Namhyung Kim <namhyung@kernel.org> - 2016-01-06 01:00 +0100
  [PATCH v2 5/5] perf evlist: Add -T/--trace option to show trace fields Namhyung Kim <namhyung@kernel.org> - 2016-01-05 12:10 +0100
    Re: [PATCH v2 5/5] perf evlist: Add -T/--trace option to show trace  fields Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-01-05 23:30 +0100
      Re: [PATCH v2 5/5] perf evlist: Add -T/--trace option to show trace  fields Namhyung Kim <namhyung@kernel.org> - 2016-01-06 01:10 +0100
        Re: [PATCH v2 5/5] perf evlist: Add -T/--trace option to show trace  fields Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-01-06 03:00 +0100
  Re: [PATCH v2 1/5] perf tools: Fix segfault when using -s  trace_fields Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-01-05 23:00 +0100
    Re: [PATCH v2 1/5] perf tools: Fix segfault when using -s  trace_fields Namhyung Kim <namhyung@kernel.org> - 2016-01-06 00:40 +0100
  [tip:perf/core] perf tools: Add 'trace_fields' dynamic sort key tip-bot for Namhyung Kim <tipbot@zytor.com> - 2016-01-09 17:30 +0100

csiph-web