tunables: Add IFUNC selection and cache sizes

System Internals / glibc - H.J. Lu [gmail.com] - 20 June 2017 11:37 EDT

The current IFUNC selection is based on microbenchmarks in glibc. It should give the best performance for most workloads. But other choices may have better performance for a particular workload or on the hardware which wasn't available at the selection was made. The environment
variable, GLIBC_TUNABLES=glibc.tune.ifunc=-xxx,yyy,-zzz...., can be used to enable CPU/ARCH feature yyy, disable CPU/ARCH feature yyy and zzz, where the feature name is case-sensitive and has to match the ones in cpu-features.h. It can be used by glibc developers to override the IFUNC selection to tune for a new processor or improve performance for a particular workload. It isn't intended for normal end users.

NOTE: the IFUNC selection may change over time. Please check all multiarch implementations when experimenting.

Also, GLIBC_TUNABLES=glibc.tune.x86_non_temporal_threshold=NUMBER is provided to set threshold to use non temporal store to NUMBER, GLIBC_TUNABLES=glibc.tune.x86_data_cache_size=NUMBER to set data cache size, GLIBC_TUNABLES=glibc.tune.x86_shared_cache_size=NUMBER to set shared cache size.

- elf/dl-tunables.list (tune): Add ifunc, x86_non_temporal_threshold, x86_data_cache_size and x86_shared_cache_size.
- manual/tunables.texi: Document glibc.tune.ifunc, glibc.tune.x86_data_cache_size, glibc.tune.x86_shared_cache_size and glibc.tune.x86_non_temporal_threshold.
- sysdeps/unix/sysv/linux/x86/dl-sysdep.c: New file.
- sysdeps/x86/cpu-tunables.c: Likewise.
- sysdeps/x86/cacheinfo.c (init_cacheinfo): Check and get data cache size, shared cache size and non temporal threshold from cpu_features.
- sysdeps/x86/cpu-features.c [HAVE_TUNABLES] (TUNABLE_NAMESPACE): New. [HAVE_TUNABLES] Include . [HAVE_TUNABLES] Include . [HAVE_TUNABLES] (TUNABLE_CALLBACK (set_ifunc)): Likewise. [HAVE_TUNABLES] (init_cpu_features): Use TUNABLE_GET to set IFUNC selection, data cache size, shared cache size and non temporal threshold.
- sysdeps/x86/cpu-features.h (cpu_features): Add data_cache_size, shared_cache_size and non_temporal_threshold.

905947c tunables: Add IFUNC selection and cache sizes
ChangeLog | 25 +++
elf/dl-tunables.list | 16 ++
manual/tunables.texi | 36 ++++
sysdeps/unix/sysv/linux/x86/dl-sysdep.c | 21 ++
sysdeps/x86/cacheinfo.c | 10 +-
sysdeps/x86/cpu-features.c | 19 ++
sysdeps/x86/cpu-features.h | 8 +
sysdeps/x86/cpu-tunables.c | 330 ++++++++++++++++++++++++++++++++
8 files changed, 464 insertions(+), 1 deletion(-)

Upstream: sourceware.org

  • Share