Subject: Re: callgraph ARM7
To: Ben Harris <bjh21@netbsd.org>
From: Richard Earnshaw <rearnsha@arm.com>
List: port-arm
Date: 09/25/2001 13:45:59
> On Tue, 25 Sep 2001, Richard Earnshaw wrote:
>
> > Secondly, you need to find out where all those calls to SetCPSR are coming
> > from. SetCPSR is currently defined as ENTRY_NP, though I'm not entirely
> > sure that this is required.
>
> It is required, because it's used by mcount to protect its internal data
> structures. See the end of <machine/profile.h>.
>
> Note that apparently spending a lot of time in SetCPSR may not be
> significant. Anything which blocks all interrupts will get any statclock
> interrupt queued up and delivered when interrupts are re-enabled, which is
> always in SetCPSR. You can probably make this better by having real
> statclock interrupts like arm26 does, and perhaps by arranging that
> SetCPSR restore the I flag at the same time as it returns (like
> int_restore does on arm26).
>
> > Try building a kernel where it is just a normal ENTRY function.
>
> This should crash as soon as a profiled function is called.
If all the calls (well most) are comming from within mcount, then you can
probably ignore SetCPSR as a source of poor performance. I hadn't
realized that mcount called it, though it sort of makes sense. It's still
a little strange that it is so high up the profile graph, however, given
that it is such a short function.
R.