From 6310e6be9b7c322d56a45729b3ebcd22e26dd0c2 Mon Sep 17 00:00:00 2001 From: Kemi Wang Date: Sat, 1 Dec 2018 07:03:33 -0800 Subject: 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 Reviewed-by: Carlos O'Donell Signed-off-by: Kemi.wang --- sysdeps/generic/adaptive_spin_count.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 sysdeps/generic/adaptive_spin_count.h (limited to 'sysdeps/generic/adaptive_spin_count.h') diff --git a/sysdeps/generic/adaptive_spin_count.h b/sysdeps/generic/adaptive_spin_count.h new file mode 100644 index 0000000000..6b30a2af81 --- /dev/null +++ b/sysdeps/generic/adaptive_spin_count.h @@ -0,0 +1,22 @@ +/* Maximum adaptive spin count by default + Copyright (C) 2018 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* The choice of 100 spins for the default spin count for an adaptive spin + is a completely arbitrary choice that has not been evaluated thoroughly + using modern hardware. */ +#define DEFAULT_ADAPTIVE_COUNT 100 -- cgit 1.4.1