cvs commit: src/lib/libthr/thread thr_mutex.c
src/lib/libkse/thread thr_mutex.c src/include pthread.h
kris at FreeBSD.org
Mon Oct 29 14:29:37 PDT 2007
Daniel Eischen wrote:
> 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
>> 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.
The point being that certain existing applications already know about
this mutex name and will use it automatically when it exists.
I am a bit wary of making this the default type though. The algorithm
is a pessimization when the conditions described above are not true.
More information about the cvs-src