cvs commit: src/lib/libthr/thread thr_init.c thr_mutex.c thr_private.h

David Xu davidxu at
Mon Oct 29 22:57:37 PDT 2007

davidxu     2007-10-30 05:57:37 UTC

  FreeBSD src repository

  Modified files:
    lib/libthr/thread    thr_init.c thr_mutex.c thr_private.h 
  Add my recent work of adaptive spin mutex code. Use two environments variable
  to tune pthread mutex performance:
          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).
          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.
  Revision  Changes    Path
  1.47      +9 -1      src/lib/libthr/thread/thr_init.c
  1.56      +37 -45    src/lib/libthr/thread/thr_mutex.c
  1.79      +4 -1      src/lib/libthr/thread/thr_private.h

More information about the cvs-src mailing list