diff options
author | jhb <jhb@FreeBSD.org> | 2002-05-21 20:47:11 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2002-05-21 20:47:11 +0000 |
commit | d3398f2f58c001872e59fc5b51c2a69a0ab7f11d (patch) | |
tree | 5af883d743f198bf32fb18ba42652e18b049c23d /sys/conf/options | |
parent | 715c35adadcc4804b9b8abab2e4f86a59606d599 (diff) | |
download | FreeBSD-src-d3398f2f58c001872e59fc5b51c2a69a0ab7f11d.zip FreeBSD-src-d3398f2f58c001872e59fc5b51c2a69a0ab7f11d.tar.gz |
Add code to make default mutexes adaptive if the ADAPTIVE_MUTEXES kernel
option is used (not on by default).
- In the case of trying to lock a mutex, if the MTX_CONTESTED flag is set,
then we can safely read the thread pointer from the mtx_lock member while
holding sched_lock. We then examine the thread to see if it is currently
executing on another CPU. If it is, then we keep looping instead of
blocking.
- In the case of trying to unlock a mutex, it is now possible for a mutex
to have MTX_CONTESTED set in mtx_lock but to not have any threads
actually blocked on it, so we need to handle that case. In that case,
we just release the lock as if MTX_CONTESTED was not set and return.
- We do not adaptively spin on Giant as Giant is held for long times and
it slows SMP systems down to a crawl (it was taking several minutes,
like 5-10 or so for my test alpha and sparc64 SMP boxes to boot up when
they adaptively spinned on Giant).
- We only compile in the code to do this for SMP kernels, it doesn't make
sense for UP kernels.
Tested on: i386, alpha, sparc64
Diffstat (limited to 'sys/conf/options')
-rw-r--r-- | sys/conf/options | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/conf/options b/sys/conf/options index 14133e2..5caf9b5 100644 --- a/sys/conf/options +++ b/sys/conf/options @@ -57,6 +57,7 @@ ADW_ALLOW_MEMIO opt_adw.h # Allow PCI devices to use memory # Miscellaneous options. GEOM opt_geom.h +ADAPTIVE_MUTEXES COMPAT_43 opt_compat.h COMPAT_SUNOS opt_compat.h COMPILING_LINT opt_global.h |