summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrian Hunter <adrian.hunter@intel.com>2019-08-06 04:46:05 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2019-08-14 09:59:59 -0400
commit1b9921546a9641aefc4a52c1c635b96b67142993 (patch)
tree184d7138edc904074aef93a1b55ff2f988a63061
parent9e64cefe4335b0f2799956d3f3cca8bb652d950f (diff)
perf tools: Add aux-output config term
Expose the aux_output attribute flag to the user to configure, by adding a config term 'aux-output'. For events that support it, selection of 'aux-output' causes the generation of AUX records instead of event records. This requires that an AUX area event is also provided. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/20190806084606.4021-7-alexander.shishkin@linux.intel.com Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rw-r--r--tools/perf/Documentation/perf-record.txt2
-rw-r--r--tools/perf/util/evsel.c3
-rw-r--r--tools/perf/util/evsel.h2
-rw-r--r--tools/perf/util/parse-events.c8
-rw-r--r--tools/perf/util/parse-events.h1
-rw-r--r--tools/perf/util/parse-events.l1
6 files changed, 17 insertions, 0 deletions
diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Documentation/perf-record.txt
index d5e58e0a2bca..c6f9f31b6039 100644
--- a/tools/perf/Documentation/perf-record.txt
+++ b/tools/perf/Documentation/perf-record.txt
@@ -60,6 +60,8 @@ OPTIONS
60 - 'name' : User defined event name. Single quotes (') may be used to 60 - 'name' : User defined event name. Single quotes (') may be used to
61 escape symbols in the name from parsing by shell and tool 61 escape symbols in the name from parsing by shell and tool
62 like this: name=\'CPU_CLK_UNHALTED.THREAD:cmask=0x1\'. 62 like this: name=\'CPU_CLK_UNHALTED.THREAD:cmask=0x1\'.
63 - 'aux-output': Generate AUX records instead of events. This requires
64 that an AUX area event is also provided.
63 65
64 See the linkperf:perf-list[1] man page for more parameters. 66 See the linkperf:perf-list[1] man page for more parameters.
65 67
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index 897a97af2d81..5da40511546b 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -833,6 +833,9 @@ static void apply_config_terms(struct evsel *evsel,
833 break; 833 break;
834 case PERF_EVSEL__CONFIG_TERM_PERCORE: 834 case PERF_EVSEL__CONFIG_TERM_PERCORE:
835 break; 835 break;
836 case PERF_EVSEL__CONFIG_TERM_AUX_OUTPUT:
837 attr->aux_output = term->val.aux_output ? 1 : 0;
838 break;
836 default: 839 default:
837 break; 840 break;
838 } 841 }
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
index 3cf35aa782b9..8a316dd54cd0 100644
--- a/tools/perf/util/evsel.h
+++ b/tools/perf/util/evsel.h
@@ -52,6 +52,7 @@ enum term_type {
52 PERF_EVSEL__CONFIG_TERM_DRV_CFG, 52 PERF_EVSEL__CONFIG_TERM_DRV_CFG,
53 PERF_EVSEL__CONFIG_TERM_BRANCH, 53 PERF_EVSEL__CONFIG_TERM_BRANCH,
54 PERF_EVSEL__CONFIG_TERM_PERCORE, 54 PERF_EVSEL__CONFIG_TERM_PERCORE,
55 PERF_EVSEL__CONFIG_TERM_AUX_OUTPUT,
55}; 56};
56 57
57struct perf_evsel_config_term { 58struct perf_evsel_config_term {
@@ -70,6 +71,7 @@ struct perf_evsel_config_term {
70 char *branch; 71 char *branch;
71 unsigned long max_events; 72 unsigned long max_events;
72 bool percore; 73 bool percore;
74 bool aux_output;
73 } val; 75 } val;
74 bool weak; 76 bool weak;
75}; 77};
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index 2cfec3b7a982..9101568946d2 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -963,6 +963,7 @@ static const char *config_term_names[__PARSE_EVENTS__TERM_TYPE_NR] = {
963 [PARSE_EVENTS__TERM_TYPE_NOOVERWRITE] = "no-overwrite", 963 [PARSE_EVENTS__TERM_TYPE_NOOVERWRITE] = "no-overwrite",
964 [PARSE_EVENTS__TERM_TYPE_DRV_CFG] = "driver-config", 964 [PARSE_EVENTS__TERM_TYPE_DRV_CFG] = "driver-config",
965 [PARSE_EVENTS__TERM_TYPE_PERCORE] = "percore", 965 [PARSE_EVENTS__TERM_TYPE_PERCORE] = "percore",
966 [PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT] = "aux-output",
966}; 967};
967 968
968static bool config_term_shrinked; 969static bool config_term_shrinked;
@@ -1083,6 +1084,9 @@ do { \
1083 return -EINVAL; 1084 return -EINVAL;
1084 } 1085 }
1085 break; 1086 break;
1087 case PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT:
1088 CHECK_TYPE_VAL(NUM);
1089 break;
1086 default: 1090 default:
1087 err->str = strdup("unknown term"); 1091 err->str = strdup("unknown term");
1088 err->idx = term->err_term; 1092 err->idx = term->err_term;
@@ -1133,6 +1137,7 @@ static int config_term_tracepoint(struct perf_event_attr *attr,
1133 case PARSE_EVENTS__TERM_TYPE_MAX_EVENTS: 1137 case PARSE_EVENTS__TERM_TYPE_MAX_EVENTS:
1134 case PARSE_EVENTS__TERM_TYPE_OVERWRITE: 1138 case PARSE_EVENTS__TERM_TYPE_OVERWRITE:
1135 case PARSE_EVENTS__TERM_TYPE_NOOVERWRITE: 1139 case PARSE_EVENTS__TERM_TYPE_NOOVERWRITE:
1140 case PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT:
1136 return config_term_common(attr, term, err); 1141 return config_term_common(attr, term, err);
1137 default: 1142 default:
1138 if (err) { 1143 if (err) {
@@ -1225,6 +1230,9 @@ do { \
1225 ADD_CONFIG_TERM(PERCORE, percore, 1230 ADD_CONFIG_TERM(PERCORE, percore,
1226 term->val.num ? true : false); 1231 term->val.num ? true : false);
1227 break; 1232 break;
1233 case PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT:
1234 ADD_CONFIG_TERM(AUX_OUTPUT, aux_output, term->val.num ? 1 : 0);
1235 break;
1228 default: 1236 default:
1229 break; 1237 break;
1230 } 1238 }
diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
index 48111b8fc232..616ca1eda0eb 100644
--- a/tools/perf/util/parse-events.h
+++ b/tools/perf/util/parse-events.h
@@ -76,6 +76,7 @@ enum {
76 PARSE_EVENTS__TERM_TYPE_OVERWRITE, 76 PARSE_EVENTS__TERM_TYPE_OVERWRITE,
77 PARSE_EVENTS__TERM_TYPE_DRV_CFG, 77 PARSE_EVENTS__TERM_TYPE_DRV_CFG,
78 PARSE_EVENTS__TERM_TYPE_PERCORE, 78 PARSE_EVENTS__TERM_TYPE_PERCORE,
79 PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT,
79 __PARSE_EVENTS__TERM_TYPE_NR, 80 __PARSE_EVENTS__TERM_TYPE_NR,
80}; 81};
81 82
diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
index ca6098874fe2..7469497cd28e 100644
--- a/tools/perf/util/parse-events.l
+++ b/tools/perf/util/parse-events.l
@@ -284,6 +284,7 @@ no-inherit { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_NOINHERIT); }
284overwrite { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_OVERWRITE); } 284overwrite { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_OVERWRITE); }
285no-overwrite { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_NOOVERWRITE); } 285no-overwrite { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_NOOVERWRITE); }
286percore { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_PERCORE); } 286percore { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_PERCORE); }
287aux-output { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT); }
287, { return ','; } 288, { return ','; }
288"/" { BEGIN(INITIAL); return '/'; } 289"/" { BEGIN(INITIAL); return '/'; }
289{name_minus} { return str(yyscanner, PE_NAME); } 290{name_minus} { return str(yyscanner, PE_NAME); }