svn commit: r332285 - head/sys/kern

Steven Hartland steven.hartland at multiplay.co.uk
Sun Apr 8 19:06:59 UTC 2018


Worth making the sysctls so they can be tuned the the HW / use case?

On 08/04/2018 17:34, Mateusz Guzik wrote:
> Author: mjg
> Date: Sun Apr  8 16:34:10 2018
> New Revision: 332285
> URL: https://svnweb.freebsd.org/changeset/base/332285
>
> Log:
>    locks: tweak backoff a little bit
>    
>    Previous limits were chosen when locking primitives had spurious lock
>    accesses.
>    
>    Flipping the starting point to 1 (or rather 2 as the first call shifts it)
>    provides a modest win when mild contention is seen while not hurting worse
>    cases. Tested on a bunch of one, two and four socket old and new systems
>    (Westmere, Skylake, Threadreaper and others) by doing concurrent page faults,
>    buildkernel/buildworld and other stuff (although not all systems got all the
>    tests).
>    
>    Another thing is the upper limit. It is semi-arbitrarily chosen as it was
>    getting out of hand for slightly less small systems (e.g. a 128-thread one).
>    
>    Note that backoff is fundamentally a speculative bandaid and this change just
>    makes it fit a little bit better. It remains completely oblivious to the
>    hardware topology or the contention pattern. This is being experimented with.
>
> Modified:
>    head/sys/kern/subr_lock.c
>
> Modified: head/sys/kern/subr_lock.c
> ==============================================================================
> --- head/sys/kern/subr_lock.c	Sun Apr  8 16:29:24 2018	(r332284)
> +++ head/sys/kern/subr_lock.c	Sun Apr  8 16:34:10 2018	(r332285)
> @@ -156,8 +156,10 @@ void
>   lock_delay_default_init(struct lock_delay_config *lc)
>   {
>   
> -	lc->base = lock_roundup_2(mp_ncpus) / 4;
> -	lc->max = lc->base * 1024;
> +	lc->base = 1;
> +	lc->max = lock_roundup_2(mp_ncpus) * 256;
> +	if (lc->max > 32678)
> +		lc->max = 32678;
>   }
>   
>   #ifdef DDB
>



More information about the svn-src-head mailing list