On 24.10.2012 21:06, Attilio Rao wrote:
On Wed, Oct 24, 2012 at 8:00 PM, Jim Harris <jim.har...@gmail.com> wrote:
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.

As I've already said in another thread __align() doesn't work on
object declaration, so what that won't pad it either if it is global
or part of a struct.
It is just implemented as __attribute__((aligned(X))):
http://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/Type-Attributes.html

Actually it seems gcc itself doesn't really care and it up to the
linker to honor that.

--
Andre

_______________________________________________
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"

Reply via email to