diff options
author | Kemi Wang <kemi.wang@intel.com> | 2018-12-01 07:03:33 -0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2018-12-01 08:19:20 -0800 |
commit | 6310e6be9b7c322d56a45729b3ebcd22e26dd0c2 (patch) | |
tree | 577b9815c0ab096a7d120ddf8ae7ca44ea166c1b /nptl/nptl-init.c | |
parent | 8e67b39eb4a3abb6f3e35de3ad6e5d06ed0e8498 (diff) | |
download | glibc-6310e6be9b7c322d56a45729b3ebcd22e26dd0c2.tar.gz glibc-6310e6be9b7c322d56a45729b3ebcd22e26dd0c2.tar.xz glibc-6310e6be9b7c322d56a45729b3ebcd22e26dd0c2.zip |
Mutex: Add pthread mutex tunables
This patch does not have any functionality change, we only provide a spin count tunes for pthread adaptive spin mutex. The tunable glibc.pthread.mutex_spin_count tunes can be used by system administrator to squeeze system performance according to different hardware capabilities and workload characteristics. The maximum value of spin count is limited to 32767 to avoid the overflow of mutex->__data.__spins variable with the possible type of short in pthread_mutex_lock (). The default value of spin count is set to 100 with the reference to the previous number of times of spinning via trylock. This value would be architecture-specific and can be tuned with kinds of benchmarks to fit most cases in future. I would extend my appreciation sincerely to H.J.Lu for his help to refine this patch series. * manual/tunables.texi (POSIX Thread Tunables): New node. * nptl/Makefile (libpthread-routines): Add pthread_mutex_conf. * nptl/nptl-init.c: Include pthread_mutex_conf.h (__pthread_initialize_minimal_internal) [HAVE_TUNABLES]: Call __pthread_tunables_init. * nptl/pthreadP.h (MAX_ADAPTIVE_COUNT): Remove. (max_adaptive_count): Define. * nptl/pthread_mutex_conf.c: New file. * nptl/pthread_mutex_conf.h: New file. * sysdeps/generic/adaptive_spin_count.h: New file. * sysdeps/nptl/dl-tunables.list: New file. * nptl/pthread_mutex_lock.c (__pthread_mutex_lock): Use max_adaptive_count () not MAX_ADAPTIVE_COUNT. * nptl/pthread_mutex_timedlock.c (__pthrad_mutex_timedlock): Likewise. Suggested-by: Andi Kleen <andi.kleen@intel.com> Reviewed-by: Carlos O'Donell <carlos@redhat.com> Signed-off-by: Kemi.wang <kemi.wang@intel.com>
Diffstat (limited to 'nptl/nptl-init.c')
-rw-r--r-- | nptl/nptl-init.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c index 907411d5bc..20ff3fd559 100644 --- a/nptl/nptl-init.c +++ b/nptl/nptl-init.c @@ -38,6 +38,7 @@ #include <kernel-features.h> #include <libc-pointer-arith.h> #include <pthread-pids.h> +#include <pthread_mutex_conf.h> #ifndef TLS_MULTIPLE_THREADS_IN_TCB /* Pointer to the corresponding variable in libc. */ @@ -431,6 +432,10 @@ __pthread_initialize_minimal_internal (void) /* Determine whether the machine is SMP or not. */ __is_smp = is_smp_system (); + +#if HAVE_TUNABLES + __pthread_tunables_init (); +#endif } strong_alias (__pthread_initialize_minimal_internal, __pthread_initialize_minimal) |