Re: ia64_do_page_fault shows 19.4% slowdown from notify_die.

Robin Holt
2006-04-19T11:11:24Z

On Wed, Apr 19, 2006 at 02:30:35AM +0200, Andi Kleen wrote:
> Robin Holt <holt@sgi.com> writes:
>
> > 499 nSec/fault ia64_do_page_fault notify_die commented out.
> > 501 nSec/fault ia64_do_page_fault with nobody registered.
> > 533 nSec/fault notify_die in and just kprobes.
> > 596 nSec/fault notify_die in and kdb, kprobes, mca, and xpc loaded.
> >
>
> With kdb some slowdown is expected.

kdb does not register a die notifier. It only does the notify_die
callouts. Sorry for the confusion. mca handler and xpc both register
notifiers and both have very early exits.

>
> But just going through kprobes shouldn't be that slow. I guess
> there would be optimization potential there.
>
> Do you have finer grained profiling what is actually slow?
>
>
> > Having the notify_page_fault() without anybody registered was only a
> > 0.4% slowdown. I am not sure that justifies the optimize away, but I
> > would certainly not object.
>
> Still sounds far too much for what is essentially a call + load + test + return
> Where is that overhead comming from? I know IA64 doesn't like indirect
> calls, but there shouldn't any be there for this case.

I think each registered notifier is adding approx 32 nSec. Actually,
the noise on these samples was about +-9nSec which I assumed was processor
stalls on cacheline load.

I think it looks like a lot of time when viewed as nSec, but when viewed
as a percentage of process run time, it is probably not that great of
an issue which is why it has been allowed to creep by for so long.

I can not think of an easy way to diagnose this slowdown any further.
I could run through this code on the simulator so you can see which
instructions actually got executed. Would that be helpful?

Thanks,
Robin