Re: [RFC] time: xtime_lock is held too long

Thomas Gleixner
2011-05-06T10:18:34Z

On Thu, 5 May 2011, Andi Kleen wrote:

> > > Another idea would be to prime cache lines to be dirtied in cpu cache
> > > before taking locks, and better pack variables to reduce number of cache
> > > lines.
> >
> > Most variables are packed already in struct timekeeper, which should
> > be pretty cache hot anyway, so I don't know whether we gain much.
>
> There's actually some potential here. I got a moderate speedup in a
> database benchmark with this patch recently. The biggest win

Numbers please.

> was in the timer interrupt.

Because this _is_ the timer interrupt ?

> All those variables are on separate cache lines.

Well, then we should make sure that they are not.

And looking at a few kernel images the interesting variables
timekeeper, xtime, wall_to_monotonic are in a consecutive area which
is not really surprising. Further all images have xtime and
wall_to_monotonic in the same cacheline, just xtime_lock is somewhere
else.

> (needs some cleanups, just for illustration)

And how's that cleanup going to look like? Making the timekeeping
internal variables global again is not going to happen. And if you
want prefetching those variables in the timer interrupt, then you want
to prefetch them in any random code path which ends up touching them.

That's the completely wrong aproach, really. If stuff takes too long,
then we need to tackle it at the root of the problem and not solve it
by sprinkling magic prefetches all over the place.

Thanks,

tglx