[RELEASE] Userspace RCU 0.9.0

Mathieu Desnoyers
2015-10-16T19:58:38Z

Hi,

liburcu is a LGPLv2.1 userspace RCU (read-copy-update) library. This
data synchronization library provides read-side access which scales
linearly with the number of cores. It does so by allowing multiple
copies of a given data structure to live at the same time, and by
monitoring the data structure accesses to detect grace periods after
which memory reclamation is possible.

liburcu-cds provides efficient data structures based on RCU and
lock-free algorithms. Those structures include hash tables, queues,
stacks, and doubly-linked lists.

New and Noteworthy

Two years after the 0.8.0 release, it's about time we release
Userspace RCU 0.9.0 with some interesting new features:

* liburcu.so and liburcu-bp.so now use the membarrier system call
to speed up RCU read-side critical sections when available. It
is newly introduced in Linux 4.3. See kernel/membarrier.c in a
recent Linux kernel tree for details.
* Port Userspace RCU to Android,
* Port Userspace RCU to Solaris 10 and 11,
* Refactoring of tests into the following make targets:
# Short sanity check
make check
# Few minutes regression testing
make regtest
# Few tens of minutes benchmarks
make short_bench
# Hours-long benchmarks
make long_bench
* Tests now output in "tap", for easier integration in continuous
integration. See https://ci.lttng.org/job/liburcu/ for the
Userspace RCU CI job.
- Port to aarch64 and powerpc64le architectures,
- Port to hppa/PA-RISC architecture,

Note: the soname major has been bumped to 4 even though it really
only needed to be bumped to 3.

Changelog:
2015-10-16 Userspace RCU 0.9.0
* Bump soname major to 4
* Cleanup: remove trailing tab
* Fix: Use proper macro to detect stdbool.h
* Configure: Add missing checks
* Port: Add Solaris build instructions
* Fix: regtest outputs valid TAP protocol
* Port: Detect nproc bin name in benchmark scripts
* Port: Add Solaris getcpu support
* Port: Fixes to build system for portability
* Port: Add Solaris support to tests/common/thread-id.h
* Port: Add Solaris support to urcu/syscall-compat.h
* Port: replace bzero() by memset()
* Port: make bootstrap script work on most shell
* tests: rcutorture: use parameters rather than random
* Fix: only define membarrier system call on Linux
* Refactor tests
* Fix: cast caa_cycles_t to unsigned long long
* caa_get_cycles: caa_ prefix for type, use CLOCK_MONOTONIC
* Cleanup: remove trailing whitespaces at EOL
* Cleanup: move generic caa_get_cycles to arch/generic.h
* tile: allocate membarrier system call number
* ia64: allocate membarrier system call number
* aarch64: allocate membarrier system call number
* powerpc64le: use "ppc" architecture
* arm: allocate membarrier system call number
* s390: allocate membarrier system call number
* ppc: allocate membarrier system call number
* lfstack: relax constraints on node re-use
* Fix: format string signedness
* Cleanup: tests: Branch condition evaluates to a garbage value
* Fix: test: unchecked return value
* Fix: test: side-effect in assertion
* x86: allocate membarrier system call number
* urcu-bp: use sys_membarrier when available
* Cleanup: urcu: remove unused membarrier "group" parameter
* urcu/ref.h: implement urcu_ref_get_unless_zero()
* Fix: compat_futex: uninitialized ret variable
* Fix: compat_futex_noasync: don't override return value
* Fix: dynamic fallback to compat futex on sys_futex ENOSYS
* Detect RCU read-side overflows
* Detect RCU read-side underflows
* Introduce urcu_assert and registration check
* Fix: volatile in assert()
* Update following changes to sys_membarrier ABI
* uatomic: Specify complete types for atomic function calls
* Cleanup: remove unused return value warning from tests
* Fix: handle sys_futex() FUTEX_WAIT interrupted by signal
* Fix: compat_futex.c: *uaddr should be read as volatile
* Cleanup: cast poll delay return value to void
* tests: Convert unit tests to TAP
* Fix: make benchmark test run in oot build
* Fix: call_rcu_thread() affinity failure
* Cleanup: cast poll delay return value to void
* Cleanup: cast poll delay return value to void
* Cleanup: cast poll delay return value to void
* Cleanup: cast poll delay return value to void
* Cleanup: cast poll() return value to void for delays
* urcu: fix deprecation warning with new glibc
* urcu: add cds_list_for_each_entry_safe_from macro
* Fix: deadlock when thread join is issued in read-side C.S.
* Fix: rename RCU_DEBUG to DEBUG_RCU in urcu-qsbr.h
* Cleanup some c99 pedantic warnings
* Mark braced-groups within expressions with __extension__
* Fix: compat_futex_noasync race condition
* tests: Use stderr redirection for time output
* Fix: use space after rpath for OS X ld
* Fix: move transparent union attribute after union declaration for clang
* Configure: add check for used type
* Configure: add missing check of headers
* Configure: add missing check for funcs: memset, strerror
* Fix: documentation: urcu-pointer.h: s/rcu_dereference_pointer/rcu_dereference/
* urcu-bp/urcu-qsbr: remove unneeded DEBUG_YIELD code
* Fix: call rcu should call internal RCU API
* Fix: silence gcc -Wextra warning
* compiler: use __GNUC__ instead of the undefined __GNUC_MAJOR__
* Fix: lfstack reversed empty/non-empty return value
* lfstack: fix: add missing __cds_lfs_init
* wfstack: add missing union parameters
* Fix: preserve example files' timestamps when copying
* wfstack: implement mutex-free wfstack with transparent union
* wfcqueue: Implement mutex-free wfcqueue head with transparent union
* lfstack: Implement mutex-free stack head with transparent union (v2)
* rculfhash: remove duplicated code
* rculfhash: handle pthread_create failures
* rculfhash: fall back to single-threaded resize on calloc failure
* x86: drop extra semi-colon in caa_cpu_relax
* Cleanup: tests: cast console write return value as void
* Modernize doc using Markdown
* Fix: update automake following README to README.md change
* Modernize README using Markdown
* Fix: incorrect parenthesis in cds_hlist_for_each_entry_safe_2
* Fix: Use after free in rcu_barrier()
* Fix: rcu_barrier(): uninitialized futex field
* call_rcu threads should clear their PAUSED flag when they unpause
* test_urcu_fork: test many fork, with 3 children deep
* Update list of supported architectures in README
* Add support for hppa/PA-RISC architecture
* Use autoconf AM_MAINTAINER_MODE
* Use gcc atomics on aarch64/powerpc64le
* Fix: move wait loop increment before first conditional block
* Fix: high cpu usage in synchronize_rcu with long RCU read-side C.S.
* Fix: out of tree build: doc/examples
* Fix: out of tree build tests/common
* tests/unit: use lib rather than source
* automake: Rename INCLUDES to AM_CPPFLAGS (new name)
* tests regressions: use lib rather than recompile from source
* tests: use common lib rather than recompile compat sources
* urcu tests: use lib rather than compile from source
* urcu mb tests: use lib rather than recompile from source
* urcu signal tests: use library rather than recompile source
* tests: move yield debug to common test library
* tests urcu bp: use lib rather than recompile source
* test_urcu_defer: link on urcu lib rather than recompile source
* tests/benchmark: use urcu qsbr lib rather than recompile from source
* Pass the CC variable to the example Makefiles
* Fix: urcu-bp interaction with threads vs constructors/destructors
* x86 barrier for Xeon Phi: use rsp on x86-64
* Set RCU_HAVE_FENCE to false on Intel Xeon Phi
* Fix undefined NULL pointer arithmetic in hlist
* Cleanup: Check for pthread in Libc
* Cleanup: Android: Do not redefine gettid
* Fix undefined NULL pointer arithmetic
* Android: implement rand_r()
* Android: do not redefine gettid on Android
* Android: add a compat layer for 'syscall.h'
* Android: do not link pthread on Android
* Android: configure.ac Android check
* Blacklist ARM gcc 4.8.0, 4.8.1, 4.8.2
* rculfhash: document max_nr_buckets = 0
* Library major version number (soname) increment to 3
* Fix: tls-compat multi-lib conflict
* Use cross compiler for doc examples
* Add lttng-dev mailing list to readme
* wfcqueue: remove misleading comment
* gcc warning fixes: -Wsign-compare and -Wextra
* Fix: urcu-qsbr: reversed logic on RCU_DEBUG
* Fix: urcu-bp segfault in glibc pthread_kill()
* Fix urcu-bp: don't move registry
* Fix: compat futex duplicated lock and completion
* Fix: i386 compat code duplicated mutex instances
* Fix: urcu-bp: Bulletproof RCU arena resize bug
* Fix: test_mutex.c uninitialized mutex

Project website: http://liburcu.org
Git repository: git://git.liburcu.org/urcu.git

--
Mathieu Desnoyers
EfficiOS Inc.