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


Groups > linux.kernel > #1500441 > unrolled thread

[PATCH 04/27] perf list: Add support for listing only json events

Started byArnaldo Carvalho de Melo <acme@kernel.org>
First post2016-10-13 18:40 +0200
Last post2016-10-17 17:00 +0200
Articles 5 — 3 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH 04/27] perf list: Add support for listing only json events Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-13 18:40 +0200
    Re: [PATCH 04/27] perf list: Add support for listing only json events Ingo Molnar <mingo@kernel.org> - 2016-10-16 09:00 +0200
      Re: [PATCH 04/27] perf list: Add support for listing only json events Andi Kleen <ak@linux.intel.com> - 2016-10-17 16:00 +0200
        [GIT PULL] Re: [PATCH 04/27] perf list: Add support for listing only  json events Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-10-17 16:30 +0200
          Re: [GIT PULL] Re: [PATCH 04/27] perf list: Add support for listing  only json events Ingo Molnar <mingo@kernel.org> - 2016-10-17 17:00 +0200

#1500441 — [PATCH 04/27] perf list: Add support for listing only json events

FromArnaldo Carvalho de Melo <acme@kernel.org>
Date2016-10-13 18:40 +0200
Subject[PATCH 04/27] perf list: Add support for listing only json events
Message-ID<srRd0-5TH-31@gated-at.bofh.it>
From: Andi Kleen <ak@linux.intel.com>

Add an argument to only list json events. To be used for the command
line completion script. This requires adding a new flag to the alias
structure.

Committer notes:

Using it:

  $ perf list json

  Cache:
    l1d.replacement
         [L1D data line replacements]
    l1d_pend_miss.fb_full
         [Cycles a demand request was blocked due to Fill Buffers inavailability]
    l1d_pend_miss.pending
         [L1D miss oustandings duration in cycles]
    l1d_pend_miss.pending_cycles
         [Cycles with L1D load Misses outstanding]
<SNIP>
    page_walker_loads.itlb_l1
         [Number of ITLB page walker hits in the L1+FB]
    page_walker_loads.itlb_l2
         [Number of ITLB page walker hits in the L2]
    page_walker_loads.itlb_l3
         [Number of ITLB page walker hits in the L3 + XSNP]
    tlb_flush.dtlb_thread
         [DTLB flush attempts of the thread-specific entries]
    tlb_flush.stlb_any
         [STLB flush attempts]
  $

Signed-off-by: Andi Kleen <ak@linux.intel.com>
Suggested-and-Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Link: http://lkml.kernel.org/r/1475781807-6034-1-git-send-email-andi@firstfloor.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/Documentation/perf-list.txt |  2 +-
 tools/perf/builtin-list.c              |  9 ++++++---
 tools/perf/util/parse-events.c         |  2 +-
 tools/perf/util/pmu.c                  | 14 ++++++++++----
 tools/perf/util/pmu.h                  |  3 ++-
 5 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/tools/perf/Documentation/perf-list.txt b/tools/perf/Documentation/perf-list.txt
index 41857cce5e86..50a35b27a64d 100644
--- a/tools/perf/Documentation/perf-list.txt
+++ b/tools/perf/Documentation/perf-list.txt
@@ -8,7 +8,7 @@ perf-list - List all symbolic event types
 SYNOPSIS
 --------
 [verse]
-'perf list' [--no-desc] [--long-desc] [hw|sw|cache|tracepoint|pmu|event_glob]
+'perf list' [--no-desc] [--long-desc] [hw|sw|cache|tracepoint|pmu|json|sdt|event_glob]
 
 DESCRIPTION
 -----------
diff --git a/tools/perf/builtin-list.c b/tools/perf/builtin-list.c
index ba9322ff858b..b9ccdc7ec733 100644
--- a/tools/perf/builtin-list.c
+++ b/tools/perf/builtin-list.c
@@ -32,7 +32,7 @@ int cmd_list(int argc, const char **argv, const char *prefix __maybe_unused)
 		OPT_END()
 	};
 	const char * const list_usage[] = {
-		"perf list [<options>] [hw|sw|cache|tracepoint|pmu|sdt|event_glob]",
+		"perf list [<options>] [hw|sw|cache|tracepoint|pmu|sdt|json|event_glob]",
 		NULL
 	};
 
@@ -69,9 +69,12 @@ int cmd_list(int argc, const char **argv, const char *prefix __maybe_unused)
 			print_hwcache_events(NULL, raw_dump);
 		else if (strcmp(argv[i], "pmu") == 0)
 			print_pmu_events(NULL, raw_dump, !desc_flag,
-						long_desc_flag);
+						long_desc_flag, false);
 		else if (strcmp(argv[i], "sdt") == 0)
 			print_sdt_events(NULL, NULL, raw_dump);
+		else if (strcmp(argv[i], "json") == 0)
+			print_pmu_events(NULL, raw_dump, !desc_flag,
+					long_desc_flag, true);
 		else if ((sep = strchr(argv[i], ':')) != NULL) {
 			int sep_idx;
 
@@ -100,7 +103,7 @@ int cmd_list(int argc, const char **argv, const char *prefix __maybe_unused)
 					    event_symbols_sw, PERF_COUNT_SW_MAX, raw_dump);
 			print_hwcache_events(s, raw_dump);
 			print_pmu_events(s, raw_dump, !desc_flag,
-						long_desc_flag);
+						long_desc_flag, false);
 			print_tracepoint_events(NULL, s, raw_dump);
 			print_sdt_events(NULL, s, raw_dump);
 			free(s);
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index 4e778eae1510..948ef84e4c6a 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -2275,7 +2275,7 @@ void print_events(const char *event_glob, bool name_only, bool quiet_flag,
 
 	print_hwcache_events(event_glob, name_only);
 
-	print_pmu_events(event_glob, name_only, quiet_flag, long_desc);
+	print_pmu_events(event_glob, name_only, quiet_flag, long_desc, false);
 
 	if (event_glob != NULL)
 		return;
diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
index b1474dcadfa2..d8d7d4c0319c 100644
--- a/tools/perf/util/pmu.c
+++ b/tools/perf/util/pmu.c
@@ -224,7 +224,7 @@ static int perf_pmu__parse_snapshot(struct perf_pmu_alias *alias,
 
 static int __perf_pmu__new_alias(struct list_head *list, char *dir, char *name,
 				 char *desc, char *val, char *long_desc,
-				 char *topic)
+				 char *topic, bool json)
 {
 	struct perf_pmu_alias *alias;
 	int ret;
@@ -238,6 +238,7 @@ static int __perf_pmu__new_alias(struct list_head *list, char *dir, char *name,
 	alias->unit[0] = '\0';
 	alias->per_pkg = false;
 	alias->snapshot = false;
+	alias->json = json;
 
 	ret = parse_events_terms(&alias->terms, val);
 	if (ret) {
@@ -278,7 +279,7 @@ static int perf_pmu__new_alias(struct list_head *list, char *dir, char *name, FI
 
 	buf[ret] = 0;
 
-	return __perf_pmu__new_alias(list, dir, name, NULL, buf, NULL, NULL);
+	return __perf_pmu__new_alias(list, dir, name, NULL, buf, NULL, NULL, false);
 }
 
 static inline bool pmu_alias_info_file(char *name)
@@ -537,7 +538,8 @@ static void pmu_add_cpu_aliases(struct list_head *head)
 		/* need type casts to override 'const' */
 		__perf_pmu__new_alias(head, NULL, (char *)pe->name,
 				(char *)pe->desc, (char *)pe->event,
-				(char *)pe->long_desc, (char *)pe->topic);
+				(char *)pe->long_desc, (char *)pe->topic,
+				true);
 	}
 
 out:
@@ -1103,7 +1105,7 @@ static void wordwrap(char *s, int start, int max, int corr)
 }
 
 void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag,
-			bool long_desc)
+			bool long_desc, bool json_only)
 {
 	struct perf_pmu *pmu;
 	struct perf_pmu_alias *alias;
@@ -1134,6 +1136,9 @@ void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag,
 				format_alias(buf, sizeof(buf), pmu, alias);
 			bool is_cpu = !strcmp(pmu->name, "cpu");
 
+			if (json_only && !alias->json)
+				continue;
+
 			if (event_glob != NULL &&
 			    !(strglobmatch(name, event_glob) ||
 			      (!is_cpu && strglobmatch(alias->name,
@@ -1158,6 +1163,7 @@ void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag,
 			j++;
 		}
 		if (pmu->selectable &&
+		    !json_only &&
 		    (event_glob == NULL || strglobmatch(pmu->name, event_glob))) {
 			char *s;
 			if (asprintf(&s, "%s//", pmu->name) < 0)
diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h
index 25712034c815..19fa2e19dbe9 100644
--- a/tools/perf/util/pmu.h
+++ b/tools/perf/util/pmu.h
@@ -49,6 +49,7 @@ struct perf_pmu_alias {
 	double scale;
 	bool per_pkg;
 	bool snapshot;
+	bool json;
 };
 
 struct perf_pmu *perf_pmu__find(const char *name);
@@ -75,7 +76,7 @@ int perf_pmu__format_parse(char *dir, struct list_head *head);
 struct perf_pmu *perf_pmu__scan(struct perf_pmu *pmu);
 
 void print_pmu_events(const char *event_glob, bool name_only, bool quiet,
-		      bool long_desc);
+		      bool long_desc, bool json_only);
 bool pmu_have_event(const char *pname, const char *name);
 
 int perf_pmu__scan_file(struct perf_pmu *pmu, const char *name, const char *fmt,
-- 
2.7.4

[toc] | [next] | [standalone]


#1501408

FromIngo Molnar <mingo@kernel.org>
Date2016-10-16 09:00 +0200
Message-ID<ssNAl-2gL-1@gated-at.bofh.it>
In reply to#1500441
* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> From: Andi Kleen <ak@linux.intel.com>
> 
> Add an argument to only list json events. To be used for the command
> line completion script. This requires adding a new flag to the alias
> structure.
> 
> Committer notes:
> 
> Using it:
> 
>   $ perf list json

Sigh, this is a pretty poor user interface. :-(

 - 'JSON' is an internal data format used by the source code and by vendors to 
   publish event lists. perf might use something else in the future to store the 
   events (for example native .c/.h files) - we don't know. Why should the user 
   care or remember?

 - Also, even if the user remembers, it's not clear that using a weird acronym 
   that does not mean much in itself is a good way to key off a high level user 
   interface. Acronyms Seriously Suck.

 - The output of 'perf list help' is not really helpful either, so the user who 
   knows that there's "something" to list the vendor hardware events is still 
   stuck. Also, 'perf list hardware' will list the wrong things.

What we do know about the CPU vendor event names is that they are vendor specific, 
and that's a pretty stable property. So my suggestion would be to simply make it:

	perf list vendor

with perhaps add aliases as well:

	perf list model
	perf list cpu-model

... and 'perf list hardware' should probably also list all the vendor specific 
hardware events as well.

Could we please work a bit more on making vendor specific hardware event handling 
more usable to people who don't care about internals?

Thanks,

	Ingo

[toc] | [prev] | [next] | [standalone]


#1501982

FromAndi Kleen <ak@linux.intel.com>
Date2016-10-17 16:00 +0200
Message-ID<stgCm-4aL-25@gated-at.bofh.it>
In reply to#1501408
> What we do know about the CPU vendor event names is that they are vendor specific, 
> and that's a pretty stable property. So my suggestion would be to simply make it:
> 
> 	perf list vendor
> 
> with perhaps add aliases as well:
> 
> 	perf list model
> 	perf list cpu-model
> 
> ... and 'perf list hardware' should probably also list all the vendor specific 
> hardware events as well.

Sure can change it.

> 
> Could we please work a bit more on making vendor specific hardware event handling 
> more usable to people who don't care about internals?

Do you prefer fully new patches, or are incremential patches ok? 

-Andi

[toc] | [prev] | [next] | [standalone]


#1502024 — [GIT PULL] Re: [PATCH 04/27] perf list: Add support for listing only json events

FromArnaldo Carvalho de Melo <acme@kernel.org>
Date2016-10-17 16:30 +0200
Subject[GIT PULL] Re: [PATCH 04/27] perf list: Add support for listing only json events
Message-ID<sth5n-4CT-3@gated-at.bofh.it>
In reply to#1501982
Em Mon, Oct 17, 2016 at 06:57:56AM -0700, Andi Kleen escreveu:
> > What we do know about the CPU vendor event names is that they are vendor specific, 
> > and that's a pretty stable property. So my suggestion would be to simply make it:
> > 
> > 	perf list vendor
> > 
> > with perhaps add aliases as well:
> > 
> > 	perf list model
> > 	perf list cpu-model
> > 
> > ... and 'perf list hardware' should probably also list all the vendor specific 
> > hardware events as well.
> 
> Sure can change it.
> 
> > 
> > Could we please work a bit more on making vendor specific hardware event handling 
> > more usable to people who don't care about internals?
> 
> Do you prefer fully new patches, or are incremential patches ok? 

I would like for you to base of my perf/urgent branch as of now, that
has those two patches yanked out so that the others can go thru.

Ingo, please consider pulling from the perf-urgent-for-mingo-20161017
tag, just signed and pushed, it has:

tag perf-urgent-for-mingo-20161017
Tagger: Arnaldo Carvalho de Melo <acme@redhat.com>
Date:   Mon Oct 17 11:26:10 2016 -0300

perf/urgent fixes:

- Fix handling of numa nodes in perf.data files (Jiri Olsa)

- Fix scrolling when refreshing 'perf top --tui --hierarchy' entries
  (Namhyung Kim)

- Fix building of JIT support on Ubuntu 16.04 (Anton Blanchard)

- Fix handling of events including .c and .o, that were being treated as
  BPF scripts instead of vendor ones (Wang Nan)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

- Arnaldo

[toc] | [prev] | [next] | [standalone]


#1502073 — Re: [GIT PULL] Re: [PATCH 04/27] perf list: Add support for listing only json events

FromIngo Molnar <mingo@kernel.org>
Date2016-10-17 17:00 +0200
SubjectRe: [GIT PULL] Re: [PATCH 04/27] perf list: Add support for listing only json events
Message-ID<sthyq-4Nc-43@gated-at.bofh.it>
In reply to#1502024
* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Em Mon, Oct 17, 2016 at 06:57:56AM -0700, Andi Kleen escreveu:
> > > What we do know about the CPU vendor event names is that they are vendor specific, 
> > > and that's a pretty stable property. So my suggestion would be to simply make it:
> > > 
> > > 	perf list vendor
> > > 
> > > with perhaps add aliases as well:
> > > 
> > > 	perf list model
> > > 	perf list cpu-model
> > > 
> > > ... and 'perf list hardware' should probably also list all the vendor specific 
> > > hardware events as well.
> > 
> > Sure can change it.
> > 
> > > 
> > > Could we please work a bit more on making vendor specific hardware event handling 
> > > more usable to people who don't care about internals?
> > 
> > Do you prefer fully new patches, or are incremential patches ok? 
> 
> I would like for you to base of my perf/urgent branch as of now, that
> has those two patches yanked out so that the others can go thru.
> 
> Ingo, please consider pulling from the perf-urgent-for-mingo-20161017
> tag, just signed and pushed, it has:
> 
> tag perf-urgent-for-mingo-20161017
> Tagger: Arnaldo Carvalho de Melo <acme@redhat.com>
> Date:   Mon Oct 17 11:26:10 2016 -0300
> 
> perf/urgent fixes:
> 
> - Fix handling of numa nodes in perf.data files (Jiri Olsa)
> 
> - Fix scrolling when refreshing 'perf top --tui --hierarchy' entries
>   (Namhyung Kim)
> 
> - Fix building of JIT support on Ubuntu 16.04 (Anton Blanchard)
> 
> - Fix handling of events including .c and .o, that were being treated as
>   BPF scripts instead of vendor ones (Wang Nan)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

Pulled, thanks a lot Arnaldo!

	Ingo

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web