svn commit: r242014 - head/sys/kern

John Baldwin jhb at freebsd.org
Wed Oct 24 18:44:24 UTC 2012


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?

-- 
John Baldwin


More information about the svn-src-head mailing list