mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 1/2] perf record: Support per-event freq term
@ 2015-08-09  6:45 Namhyung Kim
  2015-08-09  6:45 ` [PATCH 2/2] perf evlist: Be more specific on -F/--freq Namhyung Kim
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Namhyung Kim @ 2015-08-09  6:45 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Ingo Molnar, Peter Zijlstra, Jiri Olsa, LKML, David Ahern, Kan Liang

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.

Cc: Kan Liang <kan.liang@intel.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/Documentation/perf-record.txt | 1 +
 tools/perf/util/evsel.c                  | 4 ++++
 tools/perf/util/evsel.h                  | 2 ++
 tools/perf/util/parse-events.c           | 6 ++++++
 tools/perf/util/parse-events.h           | 1 +
 tools/perf/util/parse-events.l           | 1 +
 tools/perf/util/pmu.c                    | 2 +-
 7 files changed, 16 insertions(+), 1 deletion(-)

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
 	  These params can be used to overload default config values per event.
 	  Here is a list of the params.
 	  - 'period': Set event sampling period
+	  - 'freq': Set event sampling frequency
 	  - 'time': Disable/enable time stamping. Acceptable values are 1 for
 		    enabling time stamping. 0 for disabling time stamping.
 		    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)
 			attr->sample_period = term->val.period;
 			attr->freq = 0;
 			break;
+		case PERF_EVSEL__CONFIG_TERM_FREQ:
+			attr->sample_freq = term->val.freq;
+			attr->freq = 1;
+			break;
 		case PERF_EVSEL__CONFIG_TERM_TIME:
 			if (term->val.time)
 				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;
 */
 enum {
 	PERF_EVSEL__CONFIG_TERM_PERIOD,
+	PERF_EVSEL__CONFIG_TERM_FREQ,
 	PERF_EVSEL__CONFIG_TERM_TIME,
 	PERF_EVSEL__CONFIG_TERM_MAX,
 };
@@ -48,6 +49,7 @@ struct perf_evsel_config_term {
 	int	type;
 	union {
 		u64	period;
+		u64	freq;
 		bool	time;
 	} val;
 };
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 {									   \
 	case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD:
 		CHECK_TYPE_VAL(NUM);
 		break;
+	case PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ:
+		CHECK_TYPE_VAL(NUM);
+		break;
 	case PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE:
 		/*
 		 * TODO uncomment when the field is available
@@ -659,6 +662,9 @@ do {								\
 		case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD:
 			ADD_CONFIG_TERM(PERIOD, period, term->val.num);
 			break;
+		case PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ:
+			ADD_CONFIG_TERM(FREQ, freq, term->val.num);
+			break;
 		case PARSE_EVENTS__TERM_TYPE_TIME:
 			ADD_CONFIG_TERM(TIME, time, term->val.num);
 			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 {
 	PARSE_EVENTS__TERM_TYPE_CONFIG2,
 	PARSE_EVENTS__TERM_TYPE_NAME,
 	PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD,
+	PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ,
 	PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE,
 	PARSE_EVENTS__TERM_TYPE_TIME,
 };
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); }
 config2			{ return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG2); }
 name			{ return term(yyscanner, PARSE_EVENTS__TERM_TYPE_NAME); }
 period			{ return term(yyscanner, PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD); }
+freq			{ return term(yyscanner, PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ); }
 branch_type		{ return term(yyscanner, PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE); }
 time			{ return term(yyscanner, PARSE_EVENTS__TERM_TYPE_TIME); }
 ,			{ 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)
 {
 	struct perf_pmu_format *format;
 	char *err, *str;
-	static const char *static_terms = "config,config1,config2,name,period,branch_type,time\n";
+	static const char *static_terms = "config,config1,config2,name,period,freq,branch_type,time\n";
 	unsigned i = 0;
 
 	if (!asprintf(&str, "valid terms:"))
-- 
2.5.0


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 2/2] perf evlist: Be more specific on -F/--freq
  2015-08-09  6:45 [PATCH 1/2] perf record: Support per-event freq term Namhyung Kim
@ 2015-08-09  6:45 ` Namhyung Kim
  2015-08-09  9:34   ` Jiri Olsa
  2015-08-12 12:31   ` [tip:perf/core] " tip-bot for Namhyung Kim
  2015-08-09  9:34 ` [PATCH 1/2] perf record: Support per-event freq term Jiri Olsa
  2015-08-12 12:31 ` [tip:perf/core] " tip-bot for Namhyung Kim
  2 siblings, 2 replies; 7+ messages in thread
From: Namhyung Kim @ 2015-08-09  6:45 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Ingo Molnar, Peter Zijlstra, Jiri Olsa, LKML, David Ahern

Currently perf evlist -F shows the number as if it's always sampling
frequency.  But we now support per-event freq/period settings.  So it'd
better to show more detailed info whether it's freq or period.

  $ perf record -e 'cpu/config=1/,cpu/config=2,period=300000/' sleep 1
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 0.017 MB perf.data ]

  $ perf evlist -F
  cpu/config=1/: sample_freq=4000
  cpu/config=2,period=300000/: sample_period=300000

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/util/evsel.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index f664a22b5fea..04fddddc6b6f 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -2158,8 +2158,13 @@ int perf_evsel__fprintf(struct perf_evsel *evsel,
 		printed += perf_event_attr__fprintf(fp, &evsel->attr,
 						    __print_attr__fprintf, &first);
 	} else if (details->freq) {
-		printed += comma_fprintf(fp, &first, " sample_freq=%" PRIu64,
-					 (u64)evsel->attr.sample_freq);
+		const char *term = "sample_freq";
+
+		if (!evsel->attr.freq)
+			term = "sample_period";
+
+		printed += comma_fprintf(fp, &first, " %s=%" PRIu64,
+					 term, (u64)evsel->attr.sample_freq);
 	}
 out:
 	fputc('\n', fp);
-- 
2.5.0


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] perf record: Support per-event freq term
  2015-08-09  6:45 [PATCH 1/2] perf record: Support per-event freq term Namhyung Kim
  2015-08-09  6:45 ` [PATCH 2/2] perf evlist: Be more specific on -F/--freq Namhyung Kim
@ 2015-08-09  9:34 ` Jiri Olsa
  2015-08-10 15:44   ` Arnaldo Carvalho de Melo
  2015-08-12 12:31 ` [tip:perf/core] " tip-bot for Namhyung Kim
  2 siblings, 1 reply; 7+ messages in thread
From: Jiri Olsa @ 2015-08-09  9:34 UTC (permalink / raw)
  To: Namhyung Kim
  Cc: Arnaldo Carvalho de Melo, Ingo Molnar, Peter Zijlstra, LKML,
	David Ahern, Kan Liang

On Sun, Aug 09, 2015 at 03:45:23PM +0900, Namhyung Kim wrote:
> 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.
> 
> Cc: Kan Liang <kan.liang@intel.com>
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>

Acked-by: Jiri Olsa <jolsa@kernel.org>

thanks,
jirka

> ---
>  tools/perf/Documentation/perf-record.txt | 1 +
>  tools/perf/util/evsel.c                  | 4 ++++
>  tools/perf/util/evsel.h                  | 2 ++
>  tools/perf/util/parse-events.c           | 6 ++++++
>  tools/perf/util/parse-events.h           | 1 +
>  tools/perf/util/parse-events.l           | 1 +
>  tools/perf/util/pmu.c                    | 2 +-
>  7 files changed, 16 insertions(+), 1 deletion(-)
> 
> 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
>  	  These params can be used to overload default config values per event.
>  	  Here is a list of the params.
>  	  - 'period': Set event sampling period
> +	  - 'freq': Set event sampling frequency
>  	  - 'time': Disable/enable time stamping. Acceptable values are 1 for
>  		    enabling time stamping. 0 for disabling time stamping.
>  		    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)
>  			attr->sample_period = term->val.period;
>  			attr->freq = 0;
>  			break;
> +		case PERF_EVSEL__CONFIG_TERM_FREQ:
> +			attr->sample_freq = term->val.freq;
> +			attr->freq = 1;
> +			break;
>  		case PERF_EVSEL__CONFIG_TERM_TIME:
>  			if (term->val.time)
>  				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;
>  */
>  enum {
>  	PERF_EVSEL__CONFIG_TERM_PERIOD,
> +	PERF_EVSEL__CONFIG_TERM_FREQ,
>  	PERF_EVSEL__CONFIG_TERM_TIME,
>  	PERF_EVSEL__CONFIG_TERM_MAX,
>  };
> @@ -48,6 +49,7 @@ struct perf_evsel_config_term {
>  	int	type;
>  	union {
>  		u64	period;
> +		u64	freq;
>  		bool	time;
>  	} val;
>  };
> 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 {									   \
>  	case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD:
>  		CHECK_TYPE_VAL(NUM);
>  		break;
> +	case PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ:
> +		CHECK_TYPE_VAL(NUM);
> +		break;
>  	case PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE:
>  		/*
>  		 * TODO uncomment when the field is available
> @@ -659,6 +662,9 @@ do {								\
>  		case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD:
>  			ADD_CONFIG_TERM(PERIOD, period, term->val.num);
>  			break;
> +		case PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ:
> +			ADD_CONFIG_TERM(FREQ, freq, term->val.num);
> +			break;
>  		case PARSE_EVENTS__TERM_TYPE_TIME:
>  			ADD_CONFIG_TERM(TIME, time, term->val.num);
>  			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 {
>  	PARSE_EVENTS__TERM_TYPE_CONFIG2,
>  	PARSE_EVENTS__TERM_TYPE_NAME,
>  	PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD,
> +	PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ,
>  	PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE,
>  	PARSE_EVENTS__TERM_TYPE_TIME,
>  };
> 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); }
>  config2			{ return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG2); }
>  name			{ return term(yyscanner, PARSE_EVENTS__TERM_TYPE_NAME); }
>  period			{ return term(yyscanner, PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD); }
> +freq			{ return term(yyscanner, PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ); }
>  branch_type		{ return term(yyscanner, PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE); }
>  time			{ return term(yyscanner, PARSE_EVENTS__TERM_TYPE_TIME); }
>  ,			{ 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)
>  {
>  	struct perf_pmu_format *format;
>  	char *err, *str;
> -	static const char *static_terms = "config,config1,config2,name,period,branch_type,time\n";
> +	static const char *static_terms = "config,config1,config2,name,period,freq,branch_type,time\n";
>  	unsigned i = 0;
>  
>  	if (!asprintf(&str, "valid terms:"))
> -- 
> 2.5.0
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] perf evlist: Be more specific on -F/--freq
  2015-08-09  6:45 ` [PATCH 2/2] perf evlist: Be more specific on -F/--freq Namhyung Kim
@ 2015-08-09  9:34   ` Jiri Olsa
  2015-08-12 12:31   ` [tip:perf/core] " tip-bot for Namhyung Kim
  1 sibling, 0 replies; 7+ messages in thread
From: Jiri Olsa @ 2015-08-09  9:34 UTC (permalink / raw)
  To: Namhyung Kim
  Cc: Arnaldo Carvalho de Melo, Ingo Molnar, Peter Zijlstra, LKML, David Ahern

On Sun, Aug 09, 2015 at 03:45:24PM +0900, Namhyung Kim wrote:
> Currently perf evlist -F shows the number as if it's always sampling
> frequency.  But we now support per-event freq/period settings.  So it'd
> better to show more detailed info whether it's freq or period.
> 
>   $ perf record -e 'cpu/config=1/,cpu/config=2,period=300000/' sleep 1
>   [ perf record: Woken up 1 times to write data ]
>   [ perf record: Captured and wrote 0.017 MB perf.data ]
> 
>   $ perf evlist -F
>   cpu/config=1/: sample_freq=4000
>   cpu/config=2,period=300000/: sample_period=300000
> 
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>

Acked-by: Jiri Olsa <jolsa@kernel.org>

thanks,
jirka

> ---
>  tools/perf/util/evsel.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
> index f664a22b5fea..04fddddc6b6f 100644
> --- a/tools/perf/util/evsel.c
> +++ b/tools/perf/util/evsel.c
> @@ -2158,8 +2158,13 @@ int perf_evsel__fprintf(struct perf_evsel *evsel,
>  		printed += perf_event_attr__fprintf(fp, &evsel->attr,
>  						    __print_attr__fprintf, &first);
>  	} else if (details->freq) {
> -		printed += comma_fprintf(fp, &first, " sample_freq=%" PRIu64,
> -					 (u64)evsel->attr.sample_freq);
> +		const char *term = "sample_freq";
> +
> +		if (!evsel->attr.freq)
> +			term = "sample_period";
> +
> +		printed += comma_fprintf(fp, &first, " %s=%" PRIu64,
> +					 term, (u64)evsel->attr.sample_freq);
>  	}
>  out:
>  	fputc('\n', fp);
> -- 
> 2.5.0
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] perf record: Support per-event freq term
  2015-08-09  9:34 ` [PATCH 1/2] perf record: Support per-event freq term Jiri Olsa
@ 2015-08-10 15:44   ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 7+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-08-10 15:44 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: Namhyung Kim, Ingo Molnar, Peter Zijlstra, LKML, David Ahern, Kan Liang

Em Sun, Aug 09, 2015 at 11:34:11AM +0200, Jiri Olsa escreveu:
> On Sun, Aug 09, 2015 at 03:45:23PM +0900, Namhyung Kim wrote:
> > 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.
> > 
> > Cc: Kan Liang <kan.liang@intel.com>
> > Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> 
> Acked-by: Jiri Olsa <jolsa@kernel.org>

Thanks, applied both patches.

- Arnaldo

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [tip:perf/core] perf record: Support per-event freq term
  2015-08-09  6:45 [PATCH 1/2] perf record: Support per-event freq term Namhyung Kim
  2015-08-09  6:45 ` [PATCH 2/2] perf evlist: Be more specific on -F/--freq Namhyung Kim
  2015-08-09  9:34 ` [PATCH 1/2] perf record: Support per-event freq term Jiri Olsa
@ 2015-08-12 12:31 ` tip-bot for Namhyung Kim
  2 siblings, 0 replies; 7+ messages in thread
From: tip-bot for Namhyung Kim @ 2015-08-12 12:31 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: hpa, a.p.zijlstra, dsahern, tglx, kan.liang, linux-kernel, mingo,
	acme, jolsa, namhyung

Commit-ID:  09af2a553577a6e53e40011a910be0f27ce56f3e
Gitweb:     http://git.kernel.org/tip/09af2a553577a6e53e40011a910be0f27ce56f3e
Author:     Namhyung Kim <namhyung@kernel.org>
AuthorDate: Sun, 9 Aug 2015 15:45:23 +0900
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Mon, 10 Aug 2015 17:20:26 -0300

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>
---
 tools/perf/Documentation/perf-record.txt | 1 +
 tools/perf/util/evsel.c                  | 4 ++++
 tools/perf/util/evsel.h                  | 2 ++
 tools/perf/util/parse-events.c           | 6 ++++++
 tools/perf/util/parse-events.h           | 1 +
 tools/perf/util/parse-events.l           | 1 +
 tools/perf/util/pmu.c                    | 2 +-
 7 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Documentation/perf-record.txt
index 0d852d1..afbe45e 100644
--- a/tools/perf/Documentation/perf-record.txt
+++ b/tools/perf/Documentation/perf-record.txt
@@ -49,6 +49,7 @@ OPTIONS
 	  These params can be used to overload default config values per event.
 	  Here is a list of the params.
 	  - 'period': Set event sampling period
+	  - 'freq': Set event sampling frequency
 	  - 'time': Disable/enable time stamping. Acceptable values are 1 for
 		    enabling time stamping. 0 for disabling time stamping.
 		    The default is 1.
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index a59710f..f664a22 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)
 			attr->sample_period = term->val.period;
 			attr->freq = 0;
 			break;
+		case PERF_EVSEL__CONFIG_TERM_FREQ:
+			attr->sample_freq = term->val.freq;
+			attr->freq = 1;
+			break;
 		case PERF_EVSEL__CONFIG_TERM_TIME:
 			if (term->val.time)
 				perf_evsel__set_sample_bit(evsel, TIME);
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
index b948f69..fdf2674 100644
--- a/tools/perf/util/evsel.h
+++ b/tools/perf/util/evsel.h
@@ -39,6 +39,7 @@ struct cgroup_sel;
 */
 enum {
 	PERF_EVSEL__CONFIG_TERM_PERIOD,
+	PERF_EVSEL__CONFIG_TERM_FREQ,
 	PERF_EVSEL__CONFIG_TERM_TIME,
 	PERF_EVSEL__CONFIG_TERM_MAX,
 };
@@ -48,6 +49,7 @@ struct perf_evsel_config_term {
 	int	type;
 	union {
 		u64	period;
+		u64	freq;
 		bool	time;
 	} val;
 };
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index 828936d..dbf315d 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -597,6 +597,9 @@ do {									   \
 	case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD:
 		CHECK_TYPE_VAL(NUM);
 		break;
+	case PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ:
+		CHECK_TYPE_VAL(NUM);
+		break;
 	case PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE:
 		/*
 		 * TODO uncomment when the field is available
@@ -659,6 +662,9 @@ do {								\
 		case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD:
 			ADD_CONFIG_TERM(PERIOD, period, term->val.num);
 			break;
+		case PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ:
+			ADD_CONFIG_TERM(FREQ, freq, term->val.num);
+			break;
 		case PARSE_EVENTS__TERM_TYPE_TIME:
 			ADD_CONFIG_TERM(TIME, time, term->val.num);
 			break;
diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
index e6f9aacc..ce2d13a 100644
--- a/tools/perf/util/parse-events.h
+++ b/tools/perf/util/parse-events.h
@@ -62,6 +62,7 @@ enum {
 	PARSE_EVENTS__TERM_TYPE_CONFIG2,
 	PARSE_EVENTS__TERM_TYPE_NAME,
 	PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD,
+	PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ,
 	PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE,
 	PARSE_EVENTS__TERM_TYPE_TIME,
 };
diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
index f542750..4306f5a 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); }
 config2			{ return term(yyscanner, PARSE_EVENTS__TERM_TYPE_CONFIG2); }
 name			{ return term(yyscanner, PARSE_EVENTS__TERM_TYPE_NAME); }
 period			{ return term(yyscanner, PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD); }
+freq			{ return term(yyscanner, PARSE_EVENTS__TERM_TYPE_SAMPLE_FREQ); }
 branch_type		{ return term(yyscanner, PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE); }
 time			{ return term(yyscanner, PARSE_EVENTS__TERM_TYPE_TIME); }
 ,			{ return ','; }
diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
index d4b0e64..d85f11b 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)
 {
 	struct perf_pmu_format *format;
 	char *err, *str;
-	static const char *static_terms = "config,config1,config2,name,period,branch_type,time\n";
+	static const char *static_terms = "config,config1,config2,name,period,freq,branch_type,time\n";
 	unsigned i = 0;
 
 	if (!asprintf(&str, "valid terms:"))

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [tip:perf/core] perf evlist: Be more specific on -F/--freq
  2015-08-09  6:45 ` [PATCH 2/2] perf evlist: Be more specific on -F/--freq Namhyung Kim
  2015-08-09  9:34   ` Jiri Olsa
@ 2015-08-12 12:31   ` tip-bot for Namhyung Kim
  1 sibling, 0 replies; 7+ messages in thread
From: tip-bot for Namhyung Kim @ 2015-08-12 12:31 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: hpa, acme, jolsa, tglx, dsahern, mingo, linux-kernel,
	a.p.zijlstra, namhyung

Commit-ID:  4605bb55b91449a1a953a51f0334d3bc02351adb
Gitweb:     http://git.kernel.org/tip/4605bb55b91449a1a953a51f0334d3bc02351adb
Author:     Namhyung Kim <namhyung@kernel.org>
AuthorDate: Sun, 9 Aug 2015 15:45:24 +0900
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Mon, 10 Aug 2015 17:20:26 -0300

perf evlist: Be more specific on -F/--freq

Currently perf evlist -F shows the number as if it's always sampling
frequency.  But we now support per-event freq/period settings.  So it'd
better to show more detailed info whether it's freq or period.

  $ perf record -e 'cpu/config=1/,cpu/config=2,period=300000/' sleep 1
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 0.017 MB perf.data ]

  $ perf evlist -F
  cpu/config=1/: sample_freq=4000
  cpu/config=2,period=300000/: sample_period=300000

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: David Ahern <dsahern@gmail.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1439102724-14079-2-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/evsel.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index f664a22..04fdddd 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -2158,8 +2158,13 @@ int perf_evsel__fprintf(struct perf_evsel *evsel,
 		printed += perf_event_attr__fprintf(fp, &evsel->attr,
 						    __print_attr__fprintf, &first);
 	} else if (details->freq) {
-		printed += comma_fprintf(fp, &first, " sample_freq=%" PRIu64,
-					 (u64)evsel->attr.sample_freq);
+		const char *term = "sample_freq";
+
+		if (!evsel->attr.freq)
+			term = "sample_period";
+
+		printed += comma_fprintf(fp, &first, " %s=%" PRIu64,
+					 term, (u64)evsel->attr.sample_freq);
 	}
 out:
 	fputc('\n', fp);

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2015-08-12 12:31 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-08-09  6:45 [PATCH 1/2] perf record: Support per-event freq term Namhyung Kim
2015-08-09  6:45 ` [PATCH 2/2] perf evlist: Be more specific on -F/--freq Namhyung Kim
2015-08-09  9:34   ` Jiri Olsa
2015-08-12 12:31   ` [tip:perf/core] " tip-bot for Namhyung Kim
2015-08-09  9:34 ` [PATCH 1/2] perf record: Support per-event freq term Jiri Olsa
2015-08-10 15:44   ` Arnaldo Carvalho de Melo
2015-08-12 12:31 ` [tip:perf/core] " tip-bot for Namhyung Kim

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