From: Milian Wolff <milian.wolff@kdab.com>
To: Namhyung Kim <namhyung@kernel.org>
Cc: Linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
Arnaldo Carvalho de Melo <acme@redhat.com>,
David Ahern <dsahern@gmail.com>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Yao Jin <yao.jin@linux.intel.com>,
kernel-team@lge.com
Subject: Re: [PATCH v2] perf report: fix off-by-one for non-activation frames
Date: Tue, 16 May 2017 18:17:26 +0200 [thread overview]
Message-ID: <3048427.F5Pep8qUR7@agathebauer> (raw)
In-Reply-To: <20170516143829.GA12886@danjae.aot.lge.com>
[-- Attachment #1: Type: text/plain, Size: 2512 bytes --]
On Dienstag, 16. Mai 2017 16:38:29 CEST Namhyung Kim wrote:
> On Tue, May 16, 2017 at 10:59:51AM +0200, Milian Wolff wrote:
> > As the documentation for dwfl_frame_pc says, frames that
> > are no activation frames need to have their program counter
> > decremented by one to properly find the function of the caller.
> >
> > This fixes many cases where perf report currently attributes
> > the cost to the next line. I.e. I have code like this:
> >
> > ~~~~~~~~~~~~~~~
> >
> > #include <thread>
> > #include <chrono>
> >
> > using namespace std;
> >
> > int main()
> > {
> >
> > this_thread::sleep_for(chrono::milliseconds(1000));
> > this_thread::sleep_for(chrono::milliseconds(100));
> > this_thread::sleep_for(chrono::milliseconds(10));
> >
> > return 0;
> >
> > }
> >
> > ~~~~~~~~~~~~~~~
>
> It'd be nice if the test program has a signal frame for verification.
I have pretty much zero experience about signals. Would it be enough to add a
signal handler for, say, SIGUSR1 to my test application and then trigger a
sleep when that signal is delivered? If that should be enough, I'll write and
test it out.
<snip>
> > diff --git a/tools/perf/util/unwind-libunwind-local.c
> > b/tools/perf/util/unwind-libunwind-local.c index
> > f8455bed6e65..30ab26375c80 100644
> > --- a/tools/perf/util/unwind-libunwind-local.c
> > +++ b/tools/perf/util/unwind-libunwind-local.c
> > @@ -690,8 +690,22 @@ static int get_entries(struct unwind_info *ui,
> > unwind_entry_cb_t cb,>
> > if (ret)
> >
> > display_error(ret);
> >
> > + bool previous_frame_was_signal = false;
> >
> > while (!ret && (unw_step(&c) > 0) && i < max_stack) {
> >
> > unw_get_reg(&c, UNW_REG_IP, &ips[i]);
> >
> > +
> > + /*
> > + * Decrement the IP for any non-activation frames.
> > + * this is required to properly find the srcline
> > + * for caller frames.
> > + * See also the documentation for dwfl_frame_pc,
> > + * which this code tries to replicate.
> > + */
> > + bool frame_is_signal = unw_is_signal_frame(&c) > 0;
> > + if (!previous_frame_was_signal && !frame_is_signal)
> > + --ips[i];
> > + previous_frame_was_signal = frame_is_signal;
>
> Does it need to check previous frame too?
That's what dwfl_frame_pc does, if I'm not misunderstanding it's source code?
Bye
--
Milian Wolff | milian.wolff@kdab.com | Software Engineer
KDAB (Deutschland) GmbH&Co KG, a KDAB Group company
Tel: +49-30-521325470
KDAB - The Qt Experts
[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 5903 bytes --]
next prev parent reply other threads:[~2017-05-16 16:17 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-16 8:59 [PATCH v2] perf report: fix off-by-one for non-activation frames Milian Wolff
2017-05-16 14:38 ` Namhyung Kim
2017-05-16 16:17 ` Milian Wolff [this message]
2017-05-16 16:26 ` Milian Wolff
2017-05-17 5:12 ` Namhyung Kim
2017-05-18 8:19 ` Milian Wolff
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=3048427.F5Pep8qUR7@agathebauer \
--to=milian.wolff@kdab.com \
--cc=Linux-kernel@vger.kernel.org \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@redhat.com \
--cc=dsahern@gmail.com \
--cc=kernel-team@lge.com \
--cc=linux-perf-users@vger.kernel.org \
--cc=namhyung@kernel.org \
--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 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.