The Linux Kernel Mailing List
 help / color / mirror / Atom feed
From: Namhyung Kim <namhyung@kernel.org>
To: kan.liang@intel.com
Cc: acme@kernel.org, jolsa@kernel.org, ak@linux.intel.com,
	linux-kernel@vger.kernel.org, adrian.hunter@intel.com
Subject: Re: [PATCH RFC V3 3/5] perf,tool: partial time support
Date: Mon, 13 Jul 2015 22:27:42 +0900	[thread overview]
Message-ID: <20150713132742.GA9917@danjae.kornet> (raw)
In-Reply-To: <1436345097-11113-4-git-send-email-kan.liang@intel.com>

Hi,

(CC-ing Adrian)

On Wed, Jul 08, 2015 at 04:44:55AM -0400, kan.liang@intel.com wrote:
> From: Kan Liang <kan.liang@intel.com>
> 
> When multiple events are sampled it may not be needed to collect fine
> grained time stamps on all events. The sample sites are usually nearby.
> It's enough to have time stamps on the regular reference events.
> This patchkit adds the ability to turn off time stamps per event. This
> in term can reduce sampling overhead and the size of the perf.data.

So this patch makes the PERF_SAMPLE_TIME bit set or not independently,
right?  But AFAIK we sometimes just use first evsel for checking
sample_type value, especially for evlist->id_pos.  I'm not sure it'll
work for all cases of mixed time/notime events..

Thanks,
Namhyung


> 
> Signed-off-by: Kan Liang <kan.liang@intel.com>
> ---
>  tools/perf/Documentation/perf-record.txt |  4 +++-
>  tools/perf/util/evsel.c                  | 32 ++++++++++++++++++++++++++++++--
>  tools/perf/util/parse-events.c           |  7 +++++++
>  tools/perf/util/parse-events.h           |  1 +
>  tools/perf/util/parse-events.l           |  1 +
>  5 files changed, 42 insertions(+), 3 deletions(-)
> 
> diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Documentation/perf-record.txt
> index 5b47b2c..df47907 100644
> --- a/tools/perf/Documentation/perf-record.txt
> +++ b/tools/perf/Documentation/perf-record.txt
> @@ -49,7 +49,9 @@ OPTIONS
>  	  These params can be used to set event defaults.
>  	  Here is a list of the params.
>  	  - 'period': Set event sampling period
> -
> +	  - 'time': Disable/enable time stamping. Acceptable values are 1 for
> +		    enabling time stamping. 0 for disabling time stamping.
> +		    The default is 1.
>  	  Note: If user explicitly sets options which conflict with the params,
>  	  the value set by the params will be overridden.
>  
> diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
> index 83c0803..1d58330 100644
> --- a/tools/perf/util/evsel.c
> +++ b/tools/perf/util/evsel.c
> @@ -619,10 +619,37 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts)
>  	struct perf_event_attr *attr = &evsel->attr;
>  	int track = evsel->tracking;
>  	bool per_cpu = opts->target.default_per_cpu && !opts->target.per_thread;
> +	bool sample_time = opts->sample_time;
>  
>  	attr->sample_id_all = perf_missing_features.sample_id_all ? 0 : 1;
>  	attr->inherit	    = !opts->no_inherit;
>  
> +	/*
> +	 * If user doesn't explicitly set time option,
> +	 * let event attribute decide.
> +	 */
> +
> +	if (!opts->sample_time_set) {
> +		if (attr->sample_type & PERF_SAMPLE_TIME)
> +			sample_time = true;
> +		else
> +			sample_time = false;
> +	}
> +
> +	/*
> +	 * Event parsing doesn't check the availability
> +	 * Clear the bit which event parsing may be set.
> +	 * Let following code check and reset if available
> +	 *
> +	 * Also, the sample size may be caculated mistakenly,
> +	 * because event parsing may set the PERF_SAMPLE_TIME.
> +	 * Remove the size which add in perf_evsel__init
> +	 */
> +	if (attr->sample_type & PERF_SAMPLE_TIME) {
> +		attr->sample_type &= ~PERF_SAMPLE_TIME;
> +		evsel->sample_size -= sizeof(u64);
> +	}
> +
>  	perf_evsel__set_sample_bit(evsel, IP);
>  	perf_evsel__set_sample_bit(evsel, TID);
>  
> @@ -705,14 +732,15 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts)
>  	/*
>  	 * When the user explicitely disabled time don't force it here.
>  	 */
> -	if (opts->sample_time &&
> +	if (sample_time &&
>  	    (!perf_missing_features.sample_id_all &&
>  	    (!opts->no_inherit || target__has_cpu(&opts->target) || per_cpu ||
>  	     opts->sample_time_set)))
>  		perf_evsel__set_sample_bit(evsel, TIME);
>  
>  	if (opts->raw_samples && !evsel->no_aux_samples) {
> -		perf_evsel__set_sample_bit(evsel, TIME);
> +		if (sample_time)
> +			perf_evsel__set_sample_bit(evsel, TIME);
>  		perf_evsel__set_sample_bit(evsel, RAW);
>  		perf_evsel__set_sample_bit(evsel, CPU);
>  	}
> diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
> index a71eeb2..9510047 100644
> --- a/tools/perf/util/parse-events.c
> +++ b/tools/perf/util/parse-events.c
> @@ -598,6 +598,13 @@ do {									   \
>  		 * attr->branch_sample_type = term->val.num;
>  		 */
>  		break;
> +	case PARSE_EVENTS__TERM_TYPE_TIME:
> +		CHECK_TYPE_VAL(NUM);
> +		if (term->val.num > 1)
> +			return -EINVAL;
> +		if (term->val.num == 1)
> +			attr->sample_type |= PERF_SAMPLE_TIME;
> +		 break;
>  	case PARSE_EVENTS__TERM_TYPE_NAME:
>  		CHECK_TYPE_VAL(STR);
>  		break;
> diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
> index 131f29b..0d8cae3 100644
> --- a/tools/perf/util/parse-events.h
> +++ b/tools/perf/util/parse-events.h
> @@ -62,6 +62,7 @@ enum {
>  	PARSE_EVENTS__TERM_TYPE_NAME,
>  	PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD,
>  	PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE,
> +	PARSE_EVENTS__TERM_TYPE_TIME,
>  };
>  
>  struct parse_events_term {
> diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
> index 13cef3c..f542750 100644
> --- a/tools/perf/util/parse-events.l
> +++ b/tools/perf/util/parse-events.l
> @@ -183,6 +183,7 @@ 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); }
>  branch_type		{ return term(yyscanner, PARSE_EVENTS__TERM_TYPE_BRANCH_SAMPLE_TYPE); }
> +time			{ return term(yyscanner, PARSE_EVENTS__TERM_TYPE_TIME); }
>  ,			{ return ','; }
>  "/"			{ BEGIN(INITIAL); return '/'; }
>  {name_minus}		{ return str(yyscanner, PE_NAME); }
> -- 
> 1.8.3.1
> 

  reply	other threads:[~2015-07-13 13:29 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-08  8:44 [PATCH RFC V3 0/5] partial callgrap and time support kan.liang
2015-07-08  8:44 ` [PATCH RFC V3 1/5] perf,tools: introduce OPT_CALLBACK_SET/OPT_CALLBACK_NOOPT_SET kan.liang
2015-07-14  6:54   ` Jiri Olsa
2015-07-08  8:44 ` [PATCH RFC V3 2/5] perf/documentation: Add description for period kan.liang
2015-07-14  6:55   ` Jiri Olsa
2015-07-14 14:05     ` Arnaldo Carvalho de Melo
2015-07-21  9:31   ` [tip:perf/core] perf record: Document setting '-e pmu/period=N/' in man page tip-bot for Kan Liang
2015-07-08  8:44 ` [PATCH RFC V3 3/5] perf,tool: partial time support kan.liang
2015-07-13 13:27   ` Namhyung Kim [this message]
2015-07-13 19:01     ` Liang, Kan
2015-07-14  1:04       ` Namhyung Kim
2015-07-15 19:03         ` Liang, Kan
2015-07-17  7:12           ` Namhyung Kim
2015-07-14  6:54   ` Jiri Olsa
2015-07-14  6:54   ` Jiri Olsa
2015-07-08  8:44 ` [PATCH RFC V3 4/5] perf,tool: partial callgrap support kan.liang
2015-07-08  8:44 ` [PATCH RFC V3 5/5] perf,tests: Add tests to callgrap and time parse kan.liang

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=20150713132742.GA9917@danjae.kornet \
    --to=namhyung@kernel.org \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=ak@linux.intel.com \
    --cc=jolsa@kernel.org \
    --cc=kan.liang@intel.com \
    --cc=linux-kernel@vger.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