Use initial-exec tls model
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 18 Oct 2017 20:55:18 +0000 (16:55 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 19 Oct 2017 14:49:31 +0000 (10:49 -0400)
commit6fd172f599e8d798e68974a786dd930d876f182e
treed3699d09f7fa2d265d94d08c0695c1dda5bcf5d2
parent64478021edcf7a5ac3bca3fa9e8b8108d2fbb9b6
Use initial-exec tls model

The initial-exec tls model removes requirement on performing memory
allocation the first time a tls variable is touched by any given thread.
This is needed to ensure usage of the TLS from a signal handler works
fine.

Given that the link-editor figures out the right model to use at
runtime, we can change the tls model without changing the soname major
version.

This also brings interesting speedups over the GD model. This does not
affects TLS accesses performed by executables, but does affect TLS
accesses performed by libraries.

* Executable (no change)

./test_urcu 1 0 10
SUMMARY /media/truecrypt1/compudj/doc/userspace-rcu/tests/benchmark/.libs/test_urcu testdur   10 nr_readers   1 rdur      0 wdur      0 nr_writers   0 wdelay      0 nr_reads   4420328692 nr_writes            0 nr_ops   4420328692

(with initial-exec)
./test_urcu 1 0 10
SUMMARY /media/truecrypt1/compudj/doc/userspace-rcu/tests/benchmark/.libs/test_urcu testdur   10 nr_readers   1 rdur      0 wdur      0 nr_writers   0 wdelay      0 nr_reads   4424925864 nr_writes            0 nr_ops   4424925864

* Library

(with global-dynamic)
./test_urcu_dynamic_link 1 0 10
SUMMARY /media/truecrypt1/compudj/doc/userspace-rcu/tests/benchmark/.libs/test_urcu_dynamic_link testdur   10 nr_readers   1 rdur      0 wdur      0 nr_writers   0 wdelay      0 nr_reads    573209491 nr_writes            0 nr_ops    573209491

(with initial-exec)
./test_urcu_dynamic_link 1 0 10
SUMMARY /media/truecrypt1/compudj/doc/userspace-rcu/tests/benchmark/.libs/test_urcu_dynamic_link testdur   10 nr_readers   1 rdur      0 wdur      0 nr_writers   0 wdelay      0 nr_reads   1088836185 nr_writes            0 nr_ops   1088836185

Link: https://docs.oracle.com/cd/E23824_01/html/819-0690/chapter8-20.html
Link: https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html#Common-Variable-Attributes
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
include/urcu/tls-compat.h
src/urcu-bp.c
src/urcu-call-rcu-impl.h
src/urcu-defer-impl.h
src/urcu-qsbr.c
src/urcu.c
This page took 0.025668 seconds and 4 git commands to generate.