From: Peter Zijlstra <a.p.zijlstra@chello.nl>
To: Jamie Iles <jamie@jamieiles.com>
Cc: Ming Lei <tom.leiming@gmail.com>,
Paul Mackerras <paulus@samba.org>, Ingo Molnar <mingo@elte.hu>,
Arnaldo Carvalho de Melo <acme@redhat.com>,
Russell King <linux@arm.linux.org.uk>,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org
Subject: Re: [Questions] How to run 'perf top' on ARM to profile kernel functions with modules loaded
Date: Thu, 11 Nov 2010 13:30:26 +0100 [thread overview]
Message-ID: <1289478626.2084.73.camel@laptop> (raw)
In-Reply-To: <20101111122143.GF2929@pulham.picochip.com>
On Thu, 2010-11-11 at 12:21 +0000, Jamie Iles wrote:
> On Thu, Nov 11, 2010 at 01:06:16PM +0100, Peter Zijlstra wrote:
> > On Thu, 2010-11-11 at 09:17 +0000, Jamie Iles wrote:
> > > On Thu, Nov 11, 2010 at 03:52:07PM +0800, Ming Lei wrote:
> > > > 2010/11/11 Ming Lei <tom.leiming@gmail.com>:
> > > > > Hi,
> > > > >
> > > > > 'perf top' can't display any functions when modules are loaded on ARM.
> > > >
> > > > Sorry, should be can't display any kernel functions when modules are loaded
> > > > on ARM.
> > > I've noticed this myself and I spent a bit of time looking into it last week
> > > but didn't get too far. I did wonder if it was something to do with the map
> > > fixups after loading the modules. If you look at the raw events after a perf
> > > record with 'perf report -D' then the last module has a size that takes it to
> > > 0xFFFFFFFF which overlaps with the rest of the kernel symbols.
> > >
> > > On x86 it looks like the modules are loaded after the kernel image in VM
> > > unlike ARM.
> >
> > Order shouldn't matter, but that overlap is very likely what kills it.
> > That module size is buggy.
> I'm guessing that its in util/symbol.c:__map_groups__fixup_end():
>
> for (nd = rb_next(prevnd); nd; nd = rb_next(nd)) {
> prev = curr;
> curr = rb_entry(nd, struct map, rb_node);
> prev->end = curr->start - 1;
> }
>
> /*
> * We still haven't the actual symbols, so guess the
> * last map final address.
> */
> curr->end = ~0UL;
>
> I've noticed that if I change the symbol_conf.{use_modules,try_vmlinux_path}
> then I can get perf events for kernel symbols from /proc/kallsyms but nothing
> for the modules.
Hrm,.. depending on how we load things this might be easy or hard to
fix. If we load the module symbols after having loaded the kernel
symbols we can replace ~0ULL with the address before the next symbol.
If however we load modules first we're in a bind and should look at
changing the load order to make the first suggestion work.
next prev parent reply other threads:[~2010-11-11 12:30 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-11 6:56 [Questions] How to run 'perf top' on ARM to profile kernel functions with modules loaded Ming Lei
2010-11-11 7:52 ` Ming Lei
2010-11-11 8:28 ` Ingo Molnar
2010-11-11 8:34 ` Kyungmin Park
2010-11-11 10:03 ` Ming Lei
2010-11-11 9:17 ` Jamie Iles
2010-11-11 12:06 ` Peter Zijlstra
2010-11-11 12:21 ` Jamie Iles
2010-11-11 12:30 ` Peter Zijlstra [this message]
2010-11-12 1:40 ` Ming Lei
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=1289478626.2084.73.camel@laptop \
--to=a.p.zijlstra@chello.nl \
--cc=acme@redhat.com \
--cc=jamie@jamieiles.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=mingo@elte.hu \
--cc=paulus@samba.org \
--cc=tom.leiming@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox