cvs commit: src/lib/libthr/thread thr_mutex.c src/lib/libkse/thread thr_mutex.c src/include pthread.h

Daniel Eischen deischen at freebsd.org
Mon Oct 29 14:19:56 PDT 2007


On Mon, 29 Oct 2007, Kris Kennaway wrote:

> kris        2007-10-29 21:01:47 UTC
>
>  FreeBSD src repository
>
>  Modified files:
>    lib/libthr/thread    thr_mutex.c
>    lib/libkse/thread    thr_mutex.c
>    include              pthread.h
>  Log:
>  Add a new "non-portable" mutex type, PTHREAD_MUTEX_ADAPTIVE_NP.  This
>  is also implemented in glibc and is used by a number of existing
>  applications (mysql, firefox, etc).
>
>  This mutex type is a default mutex with the additional property that
>  it spins briefly when attempting to acquire a contested lock, doing
>  trylock operations in userland before entering the kernel to block if
>  eventually unsuccessful.
>
>  The expectation is that applications requesting this mutex type know
>  that the mutex is likely to be only held for very brief periods, so it
>  is faster to spin in userland and probably succeed in acquiring the
>  mutex, than to enter the kernel and sleep, only to be woken up almost
>  immediately.  This can help significantly in certain cases when
>  pthread mutexes are heavily contended and held for brief durations
>  (such as mysql).
>
>  Spin up to 200 times before entering the kernel, which represents only
>  a few us on modern CPUs.  No performance degradation was observed with
>  this value and it is sufficient to avoid a large performance drop in
>  mysql performance in the heavily contended pthread mutex case.
>
>  The libkse implementation is a NOP.

The libkse implementation already spins for a bit.  The default
number of spins is 500.

I'm not sure that another mutex type is warranted, the default
mutex implementation should be adaptive I think.

-- 
DE


More information about the cvs-src mailing list