From: Namhyung Kim <namhyung@kernel.org>
To: Jiri Olsa <jolsa@redhat.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Ingo Molnar <mingo@kernel.org>, Paul Mackerras <paulus@samba.org>,
Namhyung Kim <namhyung.kim@lge.com>,
LKML <linux-kernel@vger.kernel.org>,
David Ahern <dsahern@gmail.com>, Andi Kleen <andi@firstfloor.org>
Subject: Re: [PATCH 4/9] perf tools: Introduce hists__inc_dump_events()
Date: Wed, 23 Apr 2014 14:58:50 +0900 [thread overview]
Message-ID: <87y4ywr3hh.fsf@sejong.aot.lge.com> (raw)
In-Reply-To: <20140422165355.GK1104@krava.brq.redhat.com> (Jiri Olsa's message of "Tue, 22 Apr 2014 18:53:55 +0200")
On Tue, 22 Apr 2014 18:53:55 +0200, Jiri Olsa wrote:
> On Tue, Apr 22, 2014 at 05:49:46PM +0900, Namhyung Kim wrote:
>
> SNIP
>
>> index f955ae5a41c5..883340d7d43e 100644
>> --- a/tools/perf/util/hist.c
>> +++ b/tools/perf/util/hist.c
>> @@ -333,6 +333,19 @@ void hists__inc_nr_events(struct hists *hists, u32 type)
>> __events_stats__add(&hists->stats, type, 1);
>> }
>>
>> +void hists__inc_dump_events(struct hists *hists)
>> +{
>> + if (!dump_trace)
>> + return;
>> +
>> + /*
>> + * If dump_trace is enabled, perf will exit before accounting
>> + * sample events during hists__output_resort(). Thus it needs to
>> + * be done separately.
>> + */
>> + __events_stats__add(&hists->stats, PERF_RECORD_SAMPLE, 1);
>> +}
>
> hum, we already clear all the stats before resorting for output so why done
> we call hists__inc_nr_entries from add_hist_entry? (at out label)
In short, because it could be seen by perf top's display thread before
the entry actually moves in the output tree.
Let me explain what this series does again.
There're three main fields in the hists->stats to affect the output:
number of samples, number of hist entries and total periods.
Also there're three stages to process samples: at first, samples are
converted to a hist entry and added to the input tree, and then they are
moved to the collapsed tree if needed, and finally they're moved to the
output tree to be shown to user.
The (part of) stats are accounted when samples are added to the input
tree and then reset before moving to the output tree, and re-counted
during insertion to the output tree.
I can see some reason to do it this way but it's basically not necessary
and could make a problem in multi-threaded programs like perf top.
The perf report does all these passes sequentially in a single thread so
it seems no problem. But perf top uses two threads - one for gathering
samples (in the input tree) and another for (collapsing and) moving them
to the output tree. Thus accounting stat in parallel can result in an
inaccurate stats and the output.
So I'd like to get rid of the accounting on the input stage as you can
see it just gets dropped before doing output resort. I originally make
the all three stats are accounted when doing output resort but changed
mind to account number of samples in the input stage and others in the
output stage. Because it'd make more sense accounting number of events
(sample event) in the input stage (as all other events are also
accounted in the input stage) and it'd make less changes in code.
So yes, it has a same problem of inaccurate number of samples, but its
impact should be smaller than other stats - seeing increasing sample
count (could be slightly inaccurate) without new entries in the browser.
Thoughts?
Thanks,
Namhyung
next prev parent reply other threads:[~2014-04-23 5:58 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-22 8:49 [PATCHSET 0/9] perf tools: Fixup for the --percentage change Namhyung Kim
2014-04-22 8:49 ` [PATCH 1/9] perf report: Count number of entries and samples separately Namhyung Kim
2014-04-22 14:51 ` Jiri Olsa
2014-04-23 4:52 ` Namhyung Kim
2014-04-22 16:43 ` Jiri Olsa
2014-04-22 8:49 ` [PATCH 2/9] perf hists: Introduce hists__add_nr_events() Namhyung Kim
2014-04-22 14:52 ` Jiri Olsa
2014-04-23 4:53 ` Namhyung Kim
2014-04-22 8:49 ` [PATCH 3/9] perf tools: Account entry stats when it's added to the output tree Namhyung Kim
2014-04-22 14:54 ` Jiri Olsa
2014-04-23 4:58 ` Namhyung Kim
2014-04-22 17:10 ` Jiri Olsa
2014-04-23 5:14 ` Namhyung Kim
2014-04-22 8:49 ` [PATCH 4/9] perf tools: Introduce hists__inc_dump_events() Namhyung Kim
2014-04-22 16:53 ` Jiri Olsa
2014-04-23 5:58 ` Namhyung Kim [this message]
2014-04-22 8:49 ` [PATCH 5/9] perf hists: Add missing update on nr_non_filtered_entries Namhyung Kim
2014-04-22 8:49 ` [PATCH 6/9] perf ui/tui: Fix off-by-one in hist_browser__update_nr_entries() Namhyung Kim
2014-04-22 8:49 ` [PATCH 7/9] perf ui/tui: Rename hist_browser__update_nr_entries() Namhyung Kim
2014-04-22 8:49 ` [PATCH 8/9] perf top/tui: Update nr_entries properly after a filter is applied Namhyung Kim
2014-04-22 8:49 ` [PATCH 9/9] perf hists/tui: Count callchain rows separately Namhyung Kim
2014-04-22 17:39 ` Jiri Olsa
2014-04-22 9:55 ` [PATCHSET 0/9] perf tools: Fixup for the --percentage change Ingo Molnar
2014-04-23 4:49 ` Namhyung Kim
2014-04-23 6:09 ` Ingo Molnar
2014-04-25 7:53 ` Namhyung Kim
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=87y4ywr3hh.fsf@sejong.aot.lge.com \
--to=namhyung@kernel.org \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@kernel.org \
--cc=andi@firstfloor.org \
--cc=dsahern@gmail.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung.kim@lge.com \
--cc=paulus@samba.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
Powered by JetHome