mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org, Linux Weekly News <lwn@lwn.net>,
	Andi Kleen <ak@linux.intel.com>, Jiri Olsa <jolsa@kernel.org>,
	Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: [PATCH 01/68] perf list: Add support for listing only json events
Date: Tue, 11 Oct 2016 14:30:56 -0300	[thread overview]
Message-ID: <1476207123-21791-2-git-send-email-acme@kernel.org> (raw)
In-Reply-To: <1476207123-21791-1-git-send-email-acme@kernel.org>

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

  reply	other threads:[~2016-10-11 18:03 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-11 17:30 [GIT PULL 00/68] perf/core improvements and fixes Arnaldo Carvalho de Melo
2016-10-11 17:30 ` Arnaldo Carvalho de Melo [this message]
2016-10-11 17:30 ` [PATCH 02/68] perf tools: Handle completion of upper case events Arnaldo Carvalho de Melo
2016-10-11 17:30 ` [PATCH 03/68] perf intel-pt/bts: Tidy instruction buffer size usage Arnaldo Carvalho de Melo
2016-10-11 17:30 ` [PATCH 04/68] perf intel-pt/bts: Report instruction bytes and length in sample Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 05/68] perf top: Fix refreshing hierarchy entries on TUI Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 06/68] perf tools: Sync copy of x86's syscall table Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 07/68] perf c2c: Introduce c2c_decode_stats function Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 08/68] perf c2c: Introduce c2c_add_stats function Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 09/68] perf c2c: Add c2c command Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 10/68] perf c2c: Add record subcommand Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 11/68] perf c2c: Add report subcommand Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 12/68] perf c2c report: Add dimension support Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 13/68] perf c2c report: Add sort_entry " Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 14/68] perf c2c report: Fallback to standard dimensions Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 15/68] perf c2c report: Add sample processing Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 16/68] perf c2c report: Add cacheline hists processing Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 17/68] perf c2c report: Decode c2c_stats for hist entries Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 18/68] perf c2c report: Add header macros Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 19/68] perf c2c report: Add 'dcacheline' dimension key Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 20/68] perf c2c report: Add 'offset' " Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 21/68] perf c2c report: Add 'iaddr' " Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 22/68] perf c2c report: Add hitm related dimension keys Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 23/68] perf c2c report: Add stores " Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 24/68] perf c2c report: Add loads " Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 25/68] perf c2c report: Add llc and remote " Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 26/68] perf c2c report: Add llc load miss dimension key Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 27/68] perf c2c report: Add total record sort key Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 28/68] perf c2c report: Add total loads " Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 29/68] perf c2c report: Add hitm percent " Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 30/68] perf c2c report: Add hitm/store percent related sort keys Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 31/68] perf c2c report: Add dram " Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 32/68] perf c2c report: Add 'pid' sort key Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 33/68] perf c2c report: Add 'tid' " Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 34/68] perf c2c report: Add 'symbol' and 'dso' sort keys Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 35/68] perf c2c report: Add 'node' sort key Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 36/68] perf c2c report: Add stats related sort keys Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 37/68] perf c2c report: Add 'cpucnt' sort key Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 38/68] perf c2c report: Add src line " Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 39/68] perf c2c report: Setup number of header lines for hists Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 40/68] perf c2c report: Set final resort fields Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 41/68] perf c2c report: Add stdio output support Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 42/68] perf c2c report: Add main TUI browser Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 43/68] perf c2c report: Add TUI cacheline browser Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 44/68] perf c2c report: Add global stats stdio output Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 45/68] perf c2c report: Add shared cachelines " Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 46/68] perf c2c report: Add c2c related " Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 47/68] perf c2c report: Allow to report callchains Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 48/68] perf c2c report: Limit the cachelines table entries Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 49/68] perf c2c report: Add support to choose local HITMs Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 50/68] perf c2c report: Allow to set cacheline sort fields Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 51/68] perf c2c report: Recalc width of global sort entries Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 52/68] perf c2c report: Add cacheline index entry Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 53/68] perf c2c report: Add support to manage symbol name length Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 54/68] perf c2c report: Iterate node display in browser Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 55/68] perf c2c report: Add help windows Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 56/68] perf c2c: Add man page and credits Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 57/68] tools lib traceevent: Add install_headers target Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 58/68] tools lib traceevent: Add do_install_mkdir Makefile function Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 59/68] tools lib traceevent: Rename LIB_FILE to LIB_TARGET Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 60/68] tools lib traceevent: Add version for traceevent shared object Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 61/68] tools lib: Add for_each_clear_bit macro Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 62/68] perf report: Move captured info to generic header info Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 63/68] perf header: Display missing features Arnaldo Carvalho de Melo
2016-10-11 17:31 ` [PATCH 64/68] perf header: Display feature name on write failure Arnaldo Carvalho de Melo
2016-10-11 17:32 ` [PATCH 65/68] perf header: Set nr_numa_nodes only when we parsed all the data Arnaldo Carvalho de Melo
2016-10-11 17:32 ` [PATCH 66/68] perf c2c report: Add --no-source option Arnaldo Carvalho de Melo
2016-10-11 17:32 ` [PATCH 67/68] perf c2c report: Add --show-all option Arnaldo Carvalho de Melo
2016-10-11 17:32 ` [PATCH 68/68] perf jevents: Handle events including .c and .o Arnaldo Carvalho de Melo

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=1476207123-21791-2-git-send-email-acme@kernel.org \
    --to=acme@kernel.org \
    --cc=acme@redhat.com \
    --cc=ak@linux.intel.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lwn@lwn.net \
    --cc=mingo@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome