Messages in this thread | | | Date | Tue, 13 Jun 2017 00:16:12 +0000 (UTC) | From | Mathieu Desnoyers <> | Subject | [RELEASE] Userspace RCU 0.10.0, 0.9.4, 0.8.10 (EOL) |
| |
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.
Version 0.10.0 of liburcu introduces mainly the following changes over version 0.9.x:
- Introduce a urcu_ref_get_safe API, which can return a failure in case of reference count overflow,
- Remove RCU caller context restrictions on RCU lock-free hash table cds_lfht_destroy API:
Up to and including liburcu 0.9.x, the RCU lock-free hash table required that the destroy function should not be called from within RCU read-side critical sections. This is caused by the lazy resize, which uses the call_rcu worker thread, even though all it really needs is a workqueue/worker thread scheme.
Use the new internal workqueue API instead of call_rcu in rculfhash to remove this restriction starting from liburcu 0.10.x.
- Allow forcing the use of the sys_membarrier() system call:
When using the default (liburcu.so) and bulletproof (liburcu-bp.so) flavours of Userspace RCU, kernel support for sys-membarrier is detected dynamically and stored in the rcu_has_sys_membarrier_memb and urcu_bp_has_sys_membarrier global variables.
Checking the value of these variables adds a small but measurable overhead to smp_mb_slave. On systems which support sys-membarrier, it would be nice to have a way of avoiding that overhead.
Here is the proposed approach: if CONFIG_RCU_FORCE_SYS_MEMBARRIER is defined then rcu_has_sys_membarrier_memb/urcu_bp_has_sys_membarrier are replaced with the constant 1, eliminating the overhead in smp_mb_slave. As a sanity check, support for sys-membarrier is still detected at startup. A program using liburcu or liburcu-bp compiled with this option aborts in the library constructor if the membarrier system call is not supported by the operating system.
- Introduce support for NIOS2 and m68k architectures,
- ARM32: use lighter-weight dmb ish (inner shareable domain) for smp barrier,
- Introduce a --enable-rcu-debug configure option, which builds internal RCU consistency checks into the library,
Versions 0.9.4 and 0.8.10 introduce an important fix for ARM32: a missing release barrier was added before uatomic_xchg(). They introduce other minor fixes.
liburcu 0.8.10 will be the last release of the stable-0.8 series. liburcu stable-0.8 branch has now reached end of life with the release of liburcu 0.10.0. Users of liburcu 0.8.x should upgrade to 0.10.x or 0.9.x.
Enjoy!
Mathieu
Project website: http://liburcu.org Git repository: git://git.liburcu.org/urcu.git
Changelog:
2017-06-12 Userspace RCU 0.10.0 * Bump library soname due to urcu flavor structure change * Cleanup: use mutex_lock() wrapper in rculfhash * Use workqueue in rculfhash * Implement urcu workqueues internal API * Add support for m68k architecture * Set -Wall globally in AM_CFLAGS * Fix: remove double use of PTHREAD_CFLAGS * Re-add PTHREAD_CFLAGS to global CFLAGS * Fix: Don't override user variables within the build system * Add report at the end of configure * uatomic-api docs: use the third-person singular * Add --enable-rcu-debug to configure * ARM32: use dmb ish (inner shareable domain) for smp barriers * Cleanup: remove cmm_wmb() from rcu_xchg_pointer and rcu_cmpxchg_pointer * Fix: uatomic arm32: add missing release barrier before uatomic_xchg * Tests: Add verbose support to test script * Fix: add missing CONFIG_RCU_FORCE_SYS_MEMBARRIER to urcu/config.h.in * Allow forcing the use of sys membarrier * Fix: rcutorture: work-around signal issue on mac os x * Fix: rcutorture should register thread using call_rcu * Fix: add missing backslash in Makefile.am * Fix: Do not use wildcards in include/Makefile.am * Bump version to 0.10-pre * Fix: check for rand_r() in compat-rand.h * Fix: Move rand-compat to private src dir * Fix: remove AC_FUNC_MALLOC from configure.ac * Cleanup: Re-organise source dir * Cleanup: remove leftover manual pthread detection * Fix: update ax_pthread macro to handle newer clang * Update library current version due to adding destroy API * Fix: Use pthread_self to get threadid on OSX * Fix: examples: use destroy API for queues/stacks * Update library age due to new stack/queue destroy API * Fix: tests: invoke destroy APIs for queues/stacks * Fix: add missing destroy functions to queues/stack APIs * Fix: add missing __cds_wfcq_init for LGPL API * Fix: memory leak on hash table destroy * Fix: Add failover for platforms without nproc * Fix: use clock_get_time for caa_get_cycles fallback on MacOSX * Fix: syscall-compat.h MacOSX support * Fix: Add solaris-build.md to dist * rculfhash: Documentation: clarify need for grace period before "re-using" * Port: build shared libraries in Cygwin * Port: fix compatibility header for Cygwin * Add GNU Hurd support to syscall-compat.h * Add support for aarch64_be * Fix: urcu-bp: re-initialize list head on library exit * bootstrap: Standardize on autoreconf -vi * Harmonize bootstrap script across projects * Fix: examples make distcheck failure * wfcqueue: add C++ compatibility API * Fix: CDS_WFCQ_WOULDBLOCK typing for c++ * Fix: configure.ac: check for possibly required libs for clock_gettime * Support for NIOS2 architecture * urcu_ref_get_safe: introduce new API * Fix: handle reference count overflow * Fix: compat_futex should work-around futex signal-restart kernel bug * Support for Xeon-Phi with newer MPSS * sparc64: allocate membarrier system call number * hppa: allocate membarrier system call number * Fix build on non-Linux Debian ports * Fix: urcu-signal: smp_mb_master() needs registry lock * Fix: rculfhash only needs to include urcu-pointers.h * Fix: out-of-tree benchmark/regtest * Fix: add missing regtest and benchmark files to dist tarball * Fix: add missing run.sh to benchmark makefile
2017-06-12 Userspace RCU 0.9.4 * Fix: Don't override user variables within the build system * Fix: uatomic arm32: add missing release barrier before uatomic_xchg * Tests: Add verbose support to test script
2017-12-06 Userspace RCU 0.8.10 (End of Life) * Fix: Don't override user variables within the build system * Fix: uatomic arm32: add missing release barrier before uatomic_xchg * Fix: rcutorture: work-around signal issue on mac os x * Fix: rcutorture should register thread using call_rcu * Fix: remove AC_FUNC_MALLOC from configure.ac * Update library current version due to adding destroy API * Fix: Use pthread_self to get threadid on OSX * Fix: examples: use destroy API for queues/stacks * Update library age due to new stack/queue destroy API * Fix: tests: invoke destroy APIs for queues/stacks * Fix: add missing destroy functions to queues/stack APIs * Fix: memory leak on hash table destroy * Fix: urcu-bp: re-initialize list head on library exit * Fix: examples make distcheck failure * Cleanup: remove unused return value warning from tests
-- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com
| |