All of lore.kernel.org
 help / color / mirror / Atom feed
From: Taeung Song <treeze.taeung@gmail.com>
To: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
Cc: linux-kernel@vger.kernel.org, Jiri Olsa <jolsa@kernel.org>,
	Namhyung Kim <namhyung@kernel.org>,
	Ingo Molnar <mingo@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Wang Nan <wangnan0@huawei.com>,
	Masami Hiramatsu <mhiramat@kernel.org>,
	Jiri Olsa <jolsa@redhat.com>, Martin Liska <mliska@suse.cz>
Subject: Re: [PATCH v4] perf annotate: Fix missing number of samples for source_line_samples
Date: Wed, 29 Mar 2017 01:15:43 +0900	[thread overview]
Message-ID: <ffeb5567-dc30-ac99-50f0-686a3ebb64a0@gmail.com> (raw)
In-Reply-To: <20170328152837.GB17135@kernel.org>



On 03/29/2017 12:28 AM, Arnaldo Carvalho de Melo wrote:
> Em Tue, Mar 28, 2017 at 11:21:33PM +0900, Taeung Song escreveu:
>>
>>
>> On 03/28/2017 10:48 PM, Arnaldo Carvalho de Melo wrote:
>>> Em Tue, Mar 28, 2017 at 09:12:05PM +0900, Taeung Song escreveu:
>>>> The option 'show-total-period' works fine without a option '-l'.
>>>> But if running 'perf annotate --stdio -l --show-total-period',
>>>> you can see a problem showing only zero '0' for number of samples.
>>>
>>> If you do that at that point, don't you have to change the TUI not to do
>>> it again?
>>>
>>> - Arnaldo
>>>
>>
>> Yes, there isn't the same problem when using 't' on TUI of 'perf annotate'.
>> (As you know, 't' is show-total-period option)
>
> Yeah, there is no problem on the TUI, but since you do it in a function
> taht the TUI uses, it may not be needed to do this in

No, TUI don't use the function I modified in this patch at all.
(i.e. symbol__get_source_line())

Only symbol__tty_annotate() use symbol__get_source_line().

(As you know, annotate TUI use symbol__tui_annotate() )

> tools/perf/util/annotate.c _and_ in tools/perf/ui/browsers/annotate.c,
> right?
>
> - Arnaldo


Are there something I missed or misunderstand ?

Thanks,
Taeung

>
>> In 'annotate' TUI, we can use the 't' functionality without the problem.
>> Because of the code (util/annotate.c:911 and ui/browsers/annotate.c:412) as
>> below.
>>
>>  881 double disasm__calc_percent(struct annotation *notes, int evidx, s64
>> offset,
>>  882                             s64 end, const char **path, u64
>> *nr_samples)
>>  883 {
>>  ...
>>  910                 if (h->sum) {
>>  911                         *nr_samples = hits;
>>
>> And,
>>
>>  378 static void annotate_browser__calc_percent(struct annotate_browser
>> *browser,
>>  379                                            struct perf_evsel *evsel)
>>  380 {
>>  ...
>>  407                         bpos->samples[i].percent =
>> disasm__calc_percent(notes,
>>  408                                                 evsel->idx + i,
>>  409                                                 pos->offset,
>>  410                                                 next ? next->offset :
>> len,
>>  411                                                 &path, &nr_samples);
>>  412                         bpos->samples[i].nr = nr_samples;
>>
>>
>> And 'perf annotate --stdio --show-total-period' hasn't the problem, too.
>> Because of the same code (util/annotate.c:911).
>>
>>
>> But if with '-l', i.e. 'perf annotate --stdio -l --show-total-period',
>> the problem happen. Because 'nr' of source_line_samples aren't ordinarily
>> set
>> in symbol__get_source_line() (util/annotate.c:1634~..)
>> ,so fix it as this patch
>>
>> Are there something I missed or misunderstand ?
>>
>>
>> Thanks,
>> Taeung
>>
>>
>>>> Before:
>>>>     $ perf annotate --stdio -l --show-total-period
>>>> ...
>>>>        0 :        400816:       push   %rbp
>>>>        0 :        400817:       mov    %rsp,%rbp
>>>>        0 :        40081a:       mov    %edi,-0x24(%rbp)
>>>>        0 :        40081d:       mov    %rsi,-0x30(%rbp)
>>>>        0 :        400821:       mov    -0x24(%rbp),%eax
>>>>        0 :        400824:       mov    -0x30(%rbp),%rdx
>>>>        0 :        400828:       mov    (%rdx),%esi
>>>>        0 :        40082a:       mov    $0x0,%edx
>>>> ...
>>>>
>>>> The reason is it was missed to set number of samples
>>>> of source_line_samples, so set it ordinarily.
>>>>
>>>> After:
>>>>     $ perf annotate --stdio -l --show-total-period
>>>> ...
>>>>        3 :        400816:       push   %rbp
>>>>        4 :        400817:       mov    %rsp,%rbp
>>>>        0 :        40081a:       mov    %edi,-0x24(%rbp)
>>>>        0 :        40081d:       mov    %rsi,-0x30(%rbp)
>>>>        1 :        400821:       mov    -0x24(%rbp),%eax
>>>>        2 :        400824:       mov    -0x30(%rbp),%rdx
>>>>        0 :        400828:       mov    (%rdx),%esi
>>>>        1 :        40082a:       mov    $0x0,%edx
>>>> ...
>>>>
>>>> Cc: Namhyung Kim <namhyung@kernel.org>
>>>> Cc: Jiri Olsa <jolsa@redhat.com>
>>>> Cc: Martin Liska <mliska@suse.cz>
>>>> Fixes: 0c4a5bcea460 ("perf annotate: Display total number of samples with --show-total-period")
>>>> Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
>>>> ---
>>>>  tools/perf/util/annotate.c | 6 ++++--
>>>>  tools/perf/util/annotate.h | 2 +-
>>>>  2 files changed, 5 insertions(+), 3 deletions(-)
>>>>
>>>> diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
>>>> index 11af5f0..a37032b 100644
>>>> --- a/tools/perf/util/annotate.c
>>>> +++ b/tools/perf/util/annotate.c
>>>> @@ -1665,7 +1665,7 @@ static int symbol__get_source_line(struct symbol *sym, struct map *map,
>>>>  	start = map__rip_2objdump(map, sym->start);
>>>>
>>>>  	for (i = 0; i < len; i++) {
>>>> -		u64 offset;
>>>> +		u64 offset, nr_samples;
>>>>  		double percent_max = 0.0;
>>>>
>>>>  		src_line->nr_pcnt = nr_pcnt;
>>>> @@ -1674,12 +1674,14 @@ static int symbol__get_source_line(struct symbol *sym, struct map *map,
>>>>  			double percent = 0.0;
>>>>
>>>>  			h = annotation__histogram(notes, evidx + k);
>>>> +			nr_samples = h->addr[i];
>>>>  			if (h->sum)
>>>> -				percent = 100.0 * h->addr[i] / h->sum;
>>>> +				percent = 100.0 * nr_samples / h->sum;
>>>>
>>>>  			if (percent > percent_max)
>>>>  				percent_max = percent;
>>>>  			src_line->samples[k].percent = percent;
>>>> +			src_line->samples[k].nr = nr_samples;
>>>>  		}
>>>>
>>>>  		if (percent_max <= 0.5)
>>>> diff --git a/tools/perf/util/annotate.h b/tools/perf/util/annotate.h
>>>> index 09776b5..948aa8e 100644
>>>> --- a/tools/perf/util/annotate.h
>>>> +++ b/tools/perf/util/annotate.h
>>>> @@ -98,7 +98,7 @@ struct cyc_hist {
>>>>  struct source_line_samples {
>>>>  	double		percent;
>>>>  	double		percent_sum;
>>>> -	double          nr;
>>>> +	u64		nr;
>>>>  };
>>>>
>>>>  struct source_line {
>>>> --
>>>> 2.7.4

  reply	other threads:[~2017-03-28 16:16 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-28 12:12 [PATCH v4] perf annotate: Fix missing number of samples for source_line_samples Taeung Song
2017-03-28 13:48 ` Arnaldo Carvalho de Melo
2017-03-28 14:21   ` Taeung Song
2017-03-28 14:26     ` Taeung Song
2017-03-28 15:28     ` Arnaldo Carvalho de Melo
2017-03-28 16:15       ` Taeung Song [this message]
2017-03-29  8:53         ` Taeung Song
2017-04-05  5:52 ` [tip:perf/core] " tip-bot for Taeung Song

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=ffeb5567-dc30-ac99-50f0-686a3ebb64a0@gmail.com \
    --to=treeze.taeung@gmail.com \
    --cc=arnaldo.melo@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhiramat@kernel.org \
    --cc=mingo@kernel.org \
    --cc=mliska@suse.cz \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=wangnan0@huawei.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.