[lttng-dev] [RELEASE] Userspace RCU 0.10.0, 0.9.4, 0.8.10 (EOL)

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Tue Jun 13 00:16:12 UTC 2017


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


More information about the lttng-dev mailing list