On Wed, Oct 24, 2012 at 11:43 AM, John Baldwin <j...@freebsd.org> wrote: > On Wednesday, October 24, 2012 2:36:41 pm Jim Harris wrote: >> Author: jimharris >> Date: Wed Oct 24 18:36:41 2012 >> New Revision: 242014 >> URL: http://svn.freebsd.org/changeset/base/242014 >> >> Log: >> Pad tdq_lock to avoid false sharing with tdq_load and tdq_cpu_idle. >> >> This enables CPU searches (which read tdq_load) to operate independently >> of any contention on the spinlock. Some scheduler-intensive workloads >> running on an 8C single-socket SNB Xeon show considerable improvement with >> this change (2-3% perf improvement, 5-6% decrease in CPU util). >> >> Sponsored by: Intel >> Reviewed by: jeff >> >> Modified: >> head/sys/kern/sched_ule.c >> >> Modified: head/sys/kern/sched_ule.c >> > ============================================================================== >> --- head/sys/kern/sched_ule.c Wed Oct 24 18:33:44 2012 (r242013) >> +++ head/sys/kern/sched_ule.c Wed Oct 24 18:36:41 2012 (r242014) >> @@ -223,8 +223,13 @@ static int sched_idlespinthresh = -1; >> * locking in sched_pickcpu(); >> */ >> struct tdq { >> - /* Ordered to improve efficiency of cpu_search() and switch(). */ >> + /* >> + * Ordered to improve efficiency of cpu_search() and switch(). >> + * tdq_lock is padded to avoid false sharing with tdq_load and >> + * tdq_cpu_idle. >> + */ >> struct mtx tdq_lock; /* run queue lock. */ >> + char pad[64 - sizeof(struct mtx)]; > > Can this use 'tdq_lock __aligned(CACHE_LINE_SIZE)' instead? >
No - that doesn't pad it. I believe that only works if it's global, i.e. not part of a data structure. I could have aligned tdq_cg instead of using the char array to get the same effect. I chose the padding only because there was precedence for it in sys/vm/vm_page.h - struct vpglocks. _______________________________________________ svn-src-head@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"