diff options
author | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2020-06-10 13:40:40 +0100 |
---|---|---|
committer | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2020-07-08 17:32:56 +0100 |
commit | ffb17e7ba3a5ba9632cee97330b325072fbe41dd (patch) | |
tree | bf6865a3ec36c6a818a73bee954b06568154a90f /manual | |
parent | 17796419b5fd694348cceb65c3f77601faae082c (diff) | |
download | glibc-ffb17e7ba3a5ba9632cee97330b325072fbe41dd.tar.gz glibc-ffb17e7ba3a5ba9632cee97330b325072fbe41dd.tar.xz glibc-ffb17e7ba3a5ba9632cee97330b325072fbe41dd.zip |
rtld: Avoid using up static TLS surplus for optimizations [BZ #25051]
On some targets static TLS surplus area can be used opportunistically for dynamically loaded modules such that the TLS access then becomes faster (TLSDESC and powerpc TLS optimization). However we don't want all surplus TLS to be used for this optimization because dynamically loaded modules with initial-exec model TLS can only use surplus TLS. The new contract for surplus static TLS use is: - libc.so can have up to 192 bytes of IE TLS, - other system libraries together can have up to 144 bytes of IE TLS. - Some "optional" static TLS is available for opportunistic use. The optional TLS is now tunable: rtld.optional_static_tls, so users can directly affect the allocated static TLS size. (Note that module unloading with dlclose does not reclaim static TLS. After the optional TLS runs out, TLS access is no longer optimized to use static TLS.) The default setting of rtld.optional_static_tls is 512 so the surplus TLS is 3*192 + 4*144 + 512 = 1664 by default, the same as before. Fixes BZ #25051. Tested on aarch64-linux-gnu and x86_64-linux-gnu. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Diffstat (limited to 'manual')
-rw-r--r-- | manual/tunables.texi | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/manual/tunables.texi b/manual/tunables.texi index 7e8140199c..23ef0d40e7 100644 --- a/manual/tunables.texi +++ b/manual/tunables.texi @@ -250,6 +250,23 @@ increase the per-thread memory usage as necessary, so this tunable does not need to be changed to allow many audit modules e.g. via @env{LD_AUDIT}. @end deftp +@deftp Tunable glibc.rtld.optional_static_tls +Sets the amount of surplus static TLS in bytes to allocate at program +startup. Every thread created allocates this amount of specified surplus +static TLS. This is a minimum value and additional space may be allocated +for internal purposes including alignment. Optional static TLS is used for +optimizing dynamic TLS access for platforms that support such optimizations +e.g. TLS descriptors or optimized TLS access for POWER (@code{DT_PPC64_OPT} +and @code{DT_PPC_OPT}). In order to make the best use of such optimizations +the value should be as many bytes as would be required to hold all TLS +variables in all dynamic loaded shared libraries. The value cannot be known +by the dynamic loader because it doesn't know the expected set of shared +libraries which will be loaded. The existing static TLS space cannot be +changed once allocated at process startup. The default allocation of +optional static TLS is 512 bytes and is allocated in every thread. +@end deftp + + @node Elision Tunables @section Elision Tunables @cindex elision tunables |