svn commit: r242014 - head/sys/kern
Jim Harris
jimharris at FreeBSD.org
Wed Oct 24 18:36:41 UTC 2012
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)];
struct cpu_group *tdq_cg; /* Pointer to cpu topology. */
volatile int tdq_load; /* Aggregate load. */
volatile int tdq_cpu_idle; /* cpu_idle() is active. */
More information about the svn-src-all
mailing list