diff options
author | Namhyung Kim <namhyung@kernel.org> | 2015-08-09 02:45:23 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2015-08-10 16:20:26 -0400 |
commit | 09af2a553577a6e53e40011a910be0f27ce56f3e (patch) | |
tree | 7b42882057118e4d8f5f8a847f644ae8cd206123 /tools/perf | |
parent | 31191a85fb875cf123cea56bbfd34f4b941f3c79 (diff) |
perf record: Support per-event freq term
Now perf can set per-event value of time and (sampling) period. But I
guess most users like me just want to set frequency rather than period.
So add the 'freq' term in the event parser.
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Kan Liang <kan.liang@intel.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1439102724-14079-1-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf')
-rw-r--r-- | tools/perf/Documentation/perf-record.txt | 1 | ||||
-rw-r--r-- | tools/perf/util/evsel.c | 4 | ||||
-rw-r--r-- | tools/perf/util/evsel.h | 2 | ||||
-rw-r--r-- | tools/perf/util/parse-events.c | 6 | ||||
-rw-r--r-- | tools/perf/util/parse-events.h | 1 | ||||
-rw-r--r-- | tools/perf/util/parse-events.l | 1 | ||||
-rw-r--r-- | tools/perf/util/pmu.c | 2 |
7 files changed, 16 insertions, 1 deletions
diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Documentation/perf-record.txt index 0d852d1bc90f..afbe45ef7e3e 100644 --- a/tools/perf/Documentation/perf-record.txt +++ b/tools/perf/Documentation/perf-record.txt | |||
@@ -49,6 +49,7 @@ OPTIONS | |||
49 | These params can be used to overload default config values per event. | 49 | These params can be used to overload default config values per event. |
50 | Here is a list of the params. | 50 | Here is a list of the params. |
51 | - 'period': Set event sampling period | 51 | - 'period': Set event sampling period |
52 | - 'freq': Set event sampling frequency | ||
52 | - 'time': Disable/enable time stamping. Acceptable values are 1 for | 53 | - 'time': Disable/enable time stamping. Acceptable values are 1 for |
53 | enabling time stamping. 0 for disabling time stamping. | 54 | enabling time stamping. 0 for disabling time stamping. |
54 | The default is 1. | 55 | The default is 1. |
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index a59710f88d8a..f664a22b5fea 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c | |||
@@ -600,6 +600,10 @@ static void apply_config_terms(struct perf_evsel *evsel) | |||
600 | attr->sample_period = term->val.period; | 600 | attr->sample_period = term->val.period; |
601 | attr->freq = 0; | 601 | attr->freq = 0; |
602 | break; | 602 | break; |
603 | case PERF_EVSEL__CONFIG_TERM_FREQ: | ||
604 | attr->sample_freq = term->val.freq; | ||
605 | attr->freq = 1; | ||
606 | break; | ||
603 | case PERF_EVSEL__CONFIG_TERM_TIME: | 607 | case PERF_EVSEL__CONFIG_TERM_TIME: |
604 | if (term->val.time) | 608 | if (term->val.time) |
605 | perf_evsel__set_sample_bit(evsel, TIME); | 609 | perf_evsel__set_sample_bit(evsel, TIME); |
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index b948f69d2558..fdf2674ab339 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h | |||
@@ -39,6 +39,7 @@ struct cgroup_sel; | |||
39 | */ | 39 | */ |
40 | enum { | 40 | enum { |
41 | PERF_EVSEL__CONFIG_TERM_PERIOD, | 41 | PERF_EVSEL__CONFIG_TERM_PERIOD, |
42 | PERF_EVSEL__CONFIG_TERM_FREQ, | ||
42 | PERF_EVSEL__CONFIG_TERM_TIME, | 43 | PERF_EVSEL__CONFIG_TERM_TIME, |
43 | PERF_EVSEL__CONFIG_TERM_MAX, | 44 | PERF_EVSEL__CONFIG_TERM_MAX, |
44 | }; | 45 | }; |
@@ -48,6 +49,7 @@ struct perf_evsel_config_term { | |||
48 | int type; | 49 | int type; |
49 | union { | 50 | union { |
50 | u64 period; | 51 | u64 period; |
52 | u64 freq; | ||
51 | bool time; | 53 | bool time; |
52 | } val; | 54 | } val; |
53 | }; | 55 | }; |
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 828936dc3f1e..dbf315df4220 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c | |||
@@ -597,6 +597,9 @@ do { \ | |||
597 | case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD: | 597 | case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD: |
598 | CHECK_TYPE_VAL(NUM); | 598 | CHECK_TYPE_VAL(NUM); |
599 | break; | 599 | break; |
600 | case PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ: | ||
601 | CHECK_TYPE_VAL(NUM); | ||
602 | break; | ||
600 | case PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE: | 603 | case PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE: |
601 | /* | 604 | /* |
602 | * TODO uncomment when the field is available | 605 | * TODO uncomment when the field is available |
@@ -659,6 +662,9 @@ do { \ | |||
659 | case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD: | 662 | case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD: |
660 | ADD_CONFIG_TERM(PERIOD, period, term->val.num); | 663 | ADD_CONFIG_TERM(PERIOD, period, term->val.num); |
661 | break; | 664 | break; |
665 | case PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ: | ||
666 | ADD_CONFIG_TERM(FREQ, freq, term->val.num); | ||
667 | break; | ||
662 | case PARSE_EVENTS__TERM_TYPE_TIME: | 668 | case PARSE_EVENTS__TERM_TYPE_TIME: |
663 | ADD_CONFIG_TERM(TIME, time, term->val.num); | 669 | ADD_CONFIG_TERM(TIME, time, term->val.num); |
664 | break; | 670 | break; |
diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index e6f9aacc1cce..ce2d13a16226 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h | |||
@@ -62,6 +62,7 @@ enum { | |||
62 | PARSE_EVENTS__TERM_TYPE_CONFIG2, | 62 | PARSE_EVENTS__TERM_TYPE_CONFIG2, |
63 | PARSE_EVENTS__TERM_TYPE_NAME, | 63 | PARSE_EVENTS__TERM_TYPE_NAME, |
64 | PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD, | 64 | PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD, |
65 | PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ, | ||
65 | PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE, | 66 | PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE, |
66 | PARSE_EVENTS__TERM_TYPE_TIME, | 67 | PARSE_EVENTS__TERM_TYPE_TIME, |
67 | }; | 68 | }; |
diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l index f5427505ae77..4306f5ad75c7 100644 --- a/tools/perf/util/parse-events.l +++ b/tools/perf/util/parse-events.l | |||
@@ -182,6 +182,7 @@ config1 { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG1); } | |||
182 | config2 { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG2); } | 182 | config2 { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG2); } |
183 | name { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_NAME); } | 183 | name { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_NAME); } |
184 | period { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD); } | 184 | period { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD); } |
185 | freq { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ); } | ||
185 | branch_type { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE); } | 186 | branch_type { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE); } |
186 | time { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_TIME); } | 187 | time { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_TIME); } |
187 | , { return ','; } | 188 | , { return ','; } |
diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index d4b0e6454bc6..d85f11b8cacf 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c | |||
@@ -634,7 +634,7 @@ static char *formats_error_string(struct list_head *formats) | |||
634 | { | 634 | { |
635 | struct perf_pmu_format *format; | 635 | struct perf_pmu_format *format; |
636 | char *err, *str; | 636 | char *err, *str; |
637 | static const char *static_terms = "config,config1,config2,name,period,branch_type,time\n"; | 637 | static const char *static_terms = "config,config1,config2,name,period,freq,branch_type,time\n"; |
638 | unsigned i = 0; | 638 | unsigned i = 0; |
639 | 639 | ||
640 | if (!asprintf(&str, "valid terms:")) | 640 | if (!asprintf(&str, "valid terms:")) |