From: Stephane Eranian <eranian@google.com>
To: linux-kernel@vger.kernel.org
Cc: acme@redhat.com, peterz@infradead.org, mingo@elte.hu, dsahern@gmail.com
Subject: [PATCH] perf: fix broken number of samples for perf report -n
Date: Mon, 3 Oct 2011 11:38:15 +0200 [thread overview]
Message-ID: <20111003093815.GA6393@quad> (raw)
The perf report -n option was broken because it was not reporting
the correct number of samples depending on the sorting mode. By
default, samples are sorted by comm,dso,sym. That means that
samples for the same command (binary) get collapsed.
The hists__collapse_insert_entry() had a bug whereby
it was aggregating the number of events observed (periods)
but not the number of samples. Consequently, the number
of samples reported could be below reality. The percentage
remained correct because based on the periods.
This patch fixes the problem by also aggregating
the number of samples. Here is an example:
$ perf report -n --stdio
# Events: 13K cycles
#
# Overhead Samples Command Shared Object Symbol
# ........ .......... ....... .................... ...................
#
12.38% 842 pong [kernel.kallsyms] [k] __lock_acquire
Here pong (a ctxsw stress test), is the only program running
and thus it is the only one responsible for the lock_acquire samples.
If we change the sorting mode:
$ perf report -n --stdio --sort=sym
# Events: 13K cycles
#
# Overhead Samples Symbol
# ........ .......... ...........................
#
12.38% 1732 [k] __lock_acquire
The actual number of samples is shown.
With the fix:
$ perf report -n --stdio
# Events: 13K cycles
#
# Overhead Samples Command Shared Object Symbol
# ........ .......... ....... .................... ...................
#
12.38% 1732 pong [kernel.kallsyms] [k] __lock_acquire
Signed-off-by: Stephane Eranian <eranian@google.com>
---
diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
index 677e1da..649eb99 100644
--- a/tools/perf/util/hist.c
+++ b/tools/perf/util/hist.c
@@ -239,6 +239,7 @@ static bool hists__collapse_insert_entry(struct hists *self,
if (!cmp) {
iter->period += he->period;
+ iter->nr_events += he->nr_events;
if (symbol_conf.use_callchain) {
callchain_cursor_reset(&self->callchain_cursor);
callchain_merge(&self->callchain_cursor, iter->callchain,
next reply other threads:[~2011-10-03 9:38 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-03 9:38 Stephane Eranian [this message]
2011-10-03 16:25 ` [PATCH] perf: fix broken number of samples for perf report -n Arnaldo Carvalho de Melo
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=20111003093815.GA6393@quad \
--to=eranian@google.com \
--cc=acme@redhat.com \
--cc=dsahern@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=peterz@infradead.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