On Tue, 2007-03-20 at 11:09 +0100, Eric Dumazet wrote: > struct clocksource is a critical data structure. > > Most of its fields are read only, some of them are heavily modified at each > timer interrupt. > > It makes sense to separate those fields and make sure they all share one > cache line, or at least the minimum for machines with small cache lines. > > Signed-off-by: Eric Dumazet <[EMAIL PROTECTED]>
Sounds fine to me. Can you actually observe a difference? Acked-by: John Stultz <[EMAIL PROTECTED]> > --- linux-2.6.21-rc4-mm1/include/linux/clocksource.h > +++ linux-2.6.21-rc4-mm1-ed/include/linux/clocksource.h > @@ -49,25 +49,35 @@ struct clocksource; > * @flags: flags describing special properties > * @vread: vsyscall based read > * @cycle_interval: Used internally by timekeeping core, please ignore. > * @xtime_interval: Used internally by timekeeping core, please ignore. > */ > struct clocksource { > + /* > + * First part of structure is read mostly > + */ > char *name; > struct list_head list; > int rating; > cycle_t (*read)(void); > cycle_t mask; > u32 mult; > u32 shift; > unsigned long flags; > cycle_t (*vread)(void); > > /* timekeeping specific data, ignore */ > - cycle_t cycle_last, cycle_interval; > - u64 xtime_nsec, xtime_interval; > + cycle_t cycle_interval; > + u64 xtime_interval; > + /* > + * Second part is written at each timer interrupt > + * Keep it in a different cache line to dirty no > + * more than one cache line. > + */ > + cycle_t cycle_last ____cacheline_aligned_in_smp; > + u64 xtime_nsec; > s64 error; > > #ifdef CONFIG_CLOCKSOURCE_WATCHDOG > /* Watchdog related data, used by the framework */ > struct list_head wd_list; > cycle_t wd_last; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/