All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Jin, Yao" <yao.jin@linux.intel.com>
To: Jiri Olsa <jolsa@redhat.com>
Cc: acme@kernel.org, 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 v3 1/3] perf diff: Support --time filter option
Date: Tue, 5 Mar 2019 09:06:04 +0800	[thread overview]
Message-ID: <2e1114ce-424a-d795-589a-67d1807e26d4@linux.intel.com> (raw)
In-Reply-To: <20190304154101.GN30476@krava>



On 3/4/2019 11:41 PM, Jiri Olsa wrote:
> On Mon, Mar 04, 2019 at 08:52:38PM +0800, Jin Yao wrote:
>> For better support for perf diff, it would be useful to add --time filter
>> option to diff the samples within given time window.
>>
>> It supports time percent with multipe time ranges. Time string is
>> 'a%/n,b%/m,...' or 'a%-b%,c%-%d,...'.
>>
>> For example:
>>
>> Select the second 10% time slice to diff:
>> perf diff --time 10%/2
>>
>> Select from 0% to 10% time slice to diff:
>> perf diff --time 0%-10%
>>
>> Select the first and the second 10% time slices to diff:
>> perf diff --time 10%/1,10%/2
>>
>> Select from 0% to 10% and 30% to 40% slices to diff:
>> perf diff --time 0%-10%,30%-40%
>>
>> It also supports to analyze samples within given time window as:
>> <start>,<stop>. Times have the format seconds.microseconds. If start
>> is not given (i.e., time string is ',x.y') then analysis starts at
>> the beginning of the file. If stop time is not given (i.e, time
>> string is 'x.y,') then analysis goes to end of file. Time string is
>> 'a1.b1,c1.d1:a2.b2,c2.d2'. Use ':' to separate timestamps for different
>> perf.data files.
>>
>> For example, we get the timestamp information from perf script.
>>
>> perf script -i perf.data.old
>>    mgen 13940 [000]  3946.361400: ...
>>
>> perf script -i perf.data
>>    mgen 13940 [000]  3971.150589 ...
>>
>> perf diff --time 3946.361400,:3971.150589,
>>
>> It analyzes the perf.data.old from the timestamp 3946.361400 to
>> the end of perf.data.old and analyzes the perf.data from the
>> timestamp 3971.150589 to the end of perf.data.
>>
>>   v3:
>>   ---
>>   Don't parse the time string if --time option is not set.
>>   Refactor the code to make it simpler.
> 
> it's much clearer now, thanks for doing this, some nits below
> 

Thanks!

> SNIP
> 
>> +
>>   static int __cmd_diff(void)
>>   {
>>   	struct data__file *d;
>>   	int ret = -EINVAL, i;
>> +	char *abstime_ostr, *abstime_tmp;
>> +
>> +	abstime_ostr = abstime_str_dup();
>> +	abstime_tmp = abstime_ostr;
> 
> could be just one line:
> 
> 	abstime_ostr = abstime_tmp = abstime_str_dup();
> 
> also please fail if the allocation fails
> 

OK, I will fix that.

>>   
>>   	data__for_each_file(i, d) {
>> -		d->session = perf_session__new(&d->data, false, &tool);
>> +		d->session = perf_session__new(&d->data, false, &pdiff.tool);
>>   		if (!d->session) {
>>   			pr_err("Failed to open %s\n", d->data.path);
>>   			ret = -1;
>>   			goto out_delete;
>>   		}
>>   
>> +		if (pdiff.time_str) {
>> +			ret = parse_time_str(d, abstime_ostr, &abstime_tmp);
>> +			if (ret < 0)
>> +				goto out_delete;
>> +		}
>> +
>>   		ret = perf_session__process_events(d->session);
>>   		if (ret) {
>>   			pr_err("Failed to process %s\n", d->data.path);
>> @@ -791,6 +889,9 @@ static int __cmd_diff(void)
>>   		}
>>   
>>   		perf_evlist__collapse_resort(d->session->evlist);
>> +
>> +		if (pdiff.ptime_range)
>> +			zfree(&pdiff.ptime_range);
>>   	}
>>   
>>   	data_process();
>> @@ -802,6 +903,13 @@ static int __cmd_diff(void)
>>   	}
>>   
>>   	free(data__files);
>> +
>> +	if (pdiff.ptime_range)
>> +		zfree(&pdiff.ptime_range);
> 
> is this zfree needed? you free it in a loop for every data above
> 

Yes, we need this zfree. Because if we read the __cmd_diff() in 
uiltin-diff.c directly (not only read from this patch), we may see other 
"goto out_delete" cases, the zfree in loop may be not called. So we need 
an additional zfree checking in error handling.

Thanks
Jin Yao

> jirka
> 
> 
> SNIP
> 

  reply	other threads:[~2019-03-05  1:06 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-04 12:52 [PATCH v3 0/3] perf diff: Add new filter options Jin Yao
2019-03-04 12:52 ` [PATCH v3 1/3] perf diff: Support --time filter option Jin Yao
2019-03-04 15:41   ` Jiri Olsa
2019-03-05  1:06     ` Jin, Yao [this message]
2019-03-04 12:52 ` [PATCH v3 2/3] perf diff: Support --cpu " Jin Yao
2019-03-04 12:52 ` [PATCH v3 3/3] perf diff: Support --pid/--tid filter options 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=2e1114ce-424a-d795-589a-67d1807e26d4@linux.intel.com \
    --to=yao.jin@linux.intel.com \
    --cc=Linux-kernel@vger.kernel.org \
    --cc=acme@kernel.org \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=jolsa@kernel.org \
    --cc=jolsa@redhat.com \
    --cc=kan.liang@intel.com \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=yao.jin@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.