mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Jin Yao <yao.jin@linux.intel.com>
Cc: jolsa@kernel.org, peterz@infradead.org, mingo@redhat.com,
	alexander.shishkin@linux.intel.com, Linux-kernel@vger.kernel.org,
	ak@linux.intel.com, kan.liang@intel.com, yao.jin@intel.com
Subject: Re: [PATCH v6 2/6] perf record: Get the first sample time and last sample time
Date: Tue, 21 Nov 2017 13:40:22 -0300	[thread overview]
Message-ID: <20171121164022.GN7918@kernel.org> (raw)
In-Reply-To: <1509970871-20996-3-git-send-email-yao.jin@linux.intel.com>

Em Mon, Nov 06, 2017 at 08:21:07PM +0800, Jin Yao escreveu:
> In perf record, it's walked on all samples yet. So it's very easy to get

"In the default 'perf record' configuration, all samples are processed,
to create the HEADER_BUILD_ID table. So..."

> the first/last samples and save the time to perf file header via the
> function write_sample_time().
> 
> In later, perf report/script will fetch the time from perf file header.

  Later, at post processing time, ...

> 
> Change log:
> -----------
> v6: Currently '--buildid-all' is not enabled at default. So the walking

                --no-buildid-all, right?

>     on all samples is the default operation. There is no big overhead
>     to calculate the timestamp boundary in process_sample_event handler
>     once we already go through all samples. So the timestamp boundary
>     calculation is enabled by default when '--buildid-all' is not enabled.
> 
>     While if '--buildid-all' is enabled, we creates a new option
>     "--timestamp-boundary" for user to decide if it enables the
>     timestamp boundary calculation.
> 
> v5: There is an issue that the sample walking can only work when
>     '--buildid-all' is not enabled. So we need to let the walking
>     be able to work even if '--buildid-all' is enabled and let the
>     processing skips the dso hit marking for this case.
> 
>     At first, I want to provide a new option "--record-time-boundaries".
>     While after consideration, I think a new option is not very
>     necessary.
> 
> v3: Remove the definitions of first_sample_time and last_sample_time
>     from struct record and directly save them in perf_evlist.
> 
> Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
> ---
>  tools/perf/Documentation/perf-record.txt |  3 +++
>  tools/perf/builtin-record.c              | 18 +++++++++++++++---
>  2 files changed, 18 insertions(+), 3 deletions(-)
> 
> diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Documentation/perf-record.txt
> index 5a626ef..3eea6de 100644
> --- a/tools/perf/Documentation/perf-record.txt
> +++ b/tools/perf/Documentation/perf-record.txt
> @@ -430,6 +430,9 @@ Configure all used events to run in user space.
>  --timestamp-filename
>  Append timestamp to output file name.
>  
> +--timestamp-boundary::
> +Record timestamp boundary (time of first/last samples).
> +
>  --switch-output[=mode]::
>  Generate multiple perf.data files, timestamp prefixed, switching to a new one
>  based on 'mode' value:
> diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
> index f4d9fc5..082a0cb 100644
> --- a/tools/perf/builtin-record.c
> +++ b/tools/perf/builtin-record.c
> @@ -78,6 +78,7 @@ struct record {
>  	bool			no_buildid_cache_set;
>  	bool			buildid_all;
>  	bool			timestamp_filename;
> +	bool			timestamp_boundary;
>  	struct switch_output	switch_output;
>  	unsigned long long	samples;
>  };
> @@ -391,8 +392,15 @@ static int process_sample_event(struct perf_tool *tool,
>  {
>  	struct record *rec = container_of(tool, struct record, tool);
>  
> -	rec->samples++;
> +	if (rec->evlist->first_sample_time == 0)
> +		rec->evlist->first_sample_time = sample->time;
> +
> +	rec->evlist->last_sample_time = sample->time;
>  
> +	if (rec->buildid_all)
> +		return 0;
> +
> +	rec->samples++;
>  	return build_id__mark_dso_hit(tool, event, sample, evsel, machine);
>  }
>  
> @@ -417,9 +425,11 @@ static int process_buildids(struct record *rec)
>  
>  	/*
>  	 * If --buildid-all is given, it marks all DSO regardless of hits,
> -	 * so no need to process samples.
> +	 * so no need to process samples. But if timestamp_boundary is enabled,
> +	 * it still needs to walk on all samples to get the timestamps of
> +	 * first/last samples.
>  	 */
> -	if (rec->buildid_all)
> +	if (rec->buildid_all && !rec->timestamp_boundary)
>  		rec->tool.sample = NULL;
>  
>  	return perf_session__process_events(session);
> @@ -1579,6 +1589,8 @@ static struct option __record_options[] = {
>  		    "Record build-id of all DSOs regardless of hits"),
>  	OPT_BOOLEAN(0, "timestamp-filename", &record.timestamp_filename,
>  		    "append timestamp to output filename"),
> +	OPT_BOOLEAN(0, "timestamp-boundary", &record.timestamp_boundary,
> +		    "Record timestamp boundary (time of first/last samples)"),
>  	OPT_STRING_OPTARG_SET(0, "switch-output", &record.switch_output.str,
>  			  &record.switch_output.set, "signal,size,time",
>  			  "Switch output when receive SIGUSR2 or cross size,time threshold",
> -- 
> 2.7.4

  reply	other threads:[~2017-11-21 16:40 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-06 12:21 [PATCH v6 0/6] perf report/script: Support percent and multiple range in --time option Jin Yao
2017-11-06 12:21 ` [PATCH v6 1/6] perf header: Record first sample time and last sample time in perf file header Jin Yao
2017-11-21 16:38   ` Arnaldo Carvalho de Melo
2017-11-22  0:55     ` Jin, Yao
2017-11-06 12:21 ` [PATCH v6 2/6] perf record: Get the first sample time and last sample time Jin Yao
2017-11-21 16:40   ` Arnaldo Carvalho de Melo [this message]
2017-11-22  1:09     ` Jin, Yao
2017-11-06 12:21 ` [PATCH v6 3/6] perf util: Create function to parse time percent Jin Yao
2017-11-06 12:21 ` [PATCH v6 4/6] perf util: Create function to perform multiple time range checking Jin Yao
2017-11-06 12:21 ` [PATCH v6 5/6] perf report: support time percent and multiple time ranges Jin Yao
2017-11-06 12:21 ` [PATCH v6 6/6] perf script: " Jin Yao
2017-11-10 13:18 ` [PATCH v6 0/6] perf report/script: Support percent and multiple range in --time option Jin, Yao

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=20171121164022.GN7918@kernel.org \
    --to=acme@kernel.org \
    --cc=Linux-kernel@vger.kernel.org \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=jolsa@kernel.org \
    --cc=kan.liang@intel.com \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=yao.jin@intel.com \
    --cc=yao.jin@linux.intel.com \
    /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