diff options
author | davidxu <davidxu@FreeBSD.org> | 2007-10-30 05:57:37 +0000 |
---|---|---|
committer | davidxu <davidxu@FreeBSD.org> | 2007-10-30 05:57:37 +0000 |
commit | 97a20b1db74998b4f5211f1961a0c9d7e51b697a (patch) | |
tree | 85fcbcaf75e4cc350edc0ece2d8413fd982fed32 /usr.bin/xargs | |
parent | 9a82deac9e7798e8b266554e32ecacef71ffdee1 (diff) | |
download | FreeBSD-src-97a20b1db74998b4f5211f1961a0c9d7e51b697a.zip FreeBSD-src-97a20b1db74998b4f5211f1961a0c9d7e51b697a.tar.gz |
Add my recent work of adaptive spin mutex code. Use two environments variable
to tune pthread mutex performance:
1. LIBPTHREAD_SPINLOOPS
If a pthread mutex is being locked by another thread, this environment
variable sets total number of spin loops before the current thread
sleeps in kernel, this saves a syscall overhead if the mutex will be
unlocked very soon (well written application code).
2. LIBPTHREAD_YIELDLOOPS
If a pthread mutex is being locked by other threads, this environment
variable sets total number of sched_yield() loops before the currrent
thread sleeps in kernel. if a pthread mutex is locked, the current thread
gives up cpu, but will not sleep in kernel, this means, current thread
does not set contention bit in mutex, but let lock owner to run again
if the owner is on kernel's run queue, and when lock owner unlocks the
mutex, it does not need to enter kernel and do lots of work to resume
mutex waiters, in some cases, this saves lots of syscall overheads for
mutex owner.
In my practice, sometimes LIBPTHREAD_YIELDLOOPS can massively improve performance
than LIBPTHREAD_SPINLOOPS, this depends on application. These two environments
are global to all pthread mutex, there is no interface to set them for each
pthread mutex, the default values are zero, this means spinning is turned off
by default.
Diffstat (limited to 'usr.bin/xargs')
0 files changed, 0 insertions, 0 deletions