[lttng-dev] [RELEASE] Userspace RCU 0.11

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Mon May 6 16:32:54 EDT 2019


Hi,

This is a 0.11 release of the Userspace RCU project.

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.

Here is the high-level view of the changes introduced in this release:

* Allow combining many urcu flavors within the same
  compile unit. Prefix public APIs with urcu_<flavor>_ prefix. Keep old
  symbols as aliases for backward compatibility.

* liburcu flavors public headers are moved, including them from previous
  headers for backward compatibility:

  urcu-bp.h -> urcu/urcu-bp.h
  urcu-qsbr.h -> urcu/urcu-qsbr.h
  urcu.h -> urcu/urcu-memb.h
  urcu.h (after #define RCU_MEMBARRIER) -> urcu/urcu-memb.h
  urcu.h (after #define RCU_MB) -> urcu/urcu-mb.h
  urcu.h (after #define RCU_SIGNAL) -> urcu/urcu-mb.h

* The library liburcu is renamed to liburcu-memb, keeping the old
  library name as alias for backward compatibility.

* RCU lock-free hash table debugging:

  --enable-cds-lfht-iter-debug is introduced.

  Building liburcu with --enable-cds-lfht-iter-debug and rebuilding
  application to match the ABI change allows finding cases where the hash
  table iterator is re-purposed to be used on a different hash table
  while still being used to iterate on a hash table.

  This option alters the rculfhash ABI. Make sure to compile both library
  and application with matching configuration.

* Added support for RISC-V architecture.

* Use membarrier PRIVATE_EXPEDITED when available from liburcu-bp and
  liburcu-memb flavors.

The backward compatibility header files, library shared objects, and
symbols will be kept for a few liburcu versions before being removed, at
which point a major soname bump will happen.

As always, feedback is welcome!

Thanks,

Mathieu

Changelog:

2019-05-06 Userspace RCU 0.11.0
        * Bump library version to 6:0:1
        * Cleanup: update code layout to fix old gcc warning
        * Fix: typo CPPLAGS in examples Makefile
        * Harmonize pprint macro across projects
        * Check for TLS support after CC detection
        * Update macros from the autotools archive
        * tap-driver.sh: flush stdout after each test result
        * Update dead link in lgpl-relicensing.txt
        * Add multiflavor compat identifiers
        * Cleanup: missing sign compare fixes
        * Cleanup: enable signed/unsigned compare compiler warning
        * Cleanup: compiler warning on 32-bit architectures
        * config.h.in: rename CONFIG_RCU_MULTIFLAVOR to CONFIG_RCU_HAVE_MULTIFLAVOR
        * rculfhash: implement iterator debugging config option
        * Fix: examples silent rules on Solaris
        * Add missing fall through annotations
        * Fix: symbol aliases with TLS compat
        * Port: no symbols aliases on MacOS
        * Add -Wextra to CFLAGS
        * Add silent mode to examples Makefiles
        * doc: update examples to API changes
        * test multiflavor single compile unit
        * Update README following API changes
        * Use new header locations for includes from urcu code
        * Update call-rcu.h and defer.h comments and include guards
        * rculfqueue.h: do not include urcu-call-rcu.h
        * rculfhash: support use with multiple flavors per compile unit
        * rculfhash: do not include urcu-call-rcu.h from public API
        * Refactor liburcu to support many flavors per compile unit
        * Fix: only wait if work queue is empty in real-time mode
        * Fix: don't wait after completion of a work queue job batch
        * Fix: don't wait after completion of job batch if work queue is empty
        * Fix: workqueue: struct urcu_work vs rcu_head mixup
        * Cleanup: workqueue: update comments referring to call-rcu
        * Fix: mixup between URCU_WORKQUEUE_RT and URCU_CALL_RCU_RT
        * test_rwlock: Add per-thread count to verbose output
        * Add *.exe to gitignore for Cygwin
        * Fix: pthread_rwlock initialization on Cygwin
        * Fix: compat_futex_noasync on Cygwin
        * wfcqueue: allow defining CDS_WFCQ_WAIT_SLEEP to override `poll'
        * Update documentation for call_rcu before/after fork
        * Add support for the RISC-V architecture
        * Tests: Add tap-driver.sh for automake < 1.12
        * Tests: Replace prove by autotools tap runner
        * liburcu-bp: Use membarrier private expedited when available
        * liburcu: Use membarrier private expedited when available
        * rculfhash: improve error handling of mmap backend
        * Fix: don't use overlapping mmap mappings on Cygwin
        * Tests fix: errors in shell scripts
        * Revert "Use initial-exec tls model"
        * Use initial-exec tls model
        * Fix: don't use membarrier SHARED syscall command in liburcu-bp
        * Tests fix: add missing Cygwin thread id
        * Fix: assignment from incompatible pointer type warnings
        * Tests fix: unused variable warnings
        * Fix: add missing m68k headers to dist
        * Bump version to 0.11-pre


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

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com


More information about the lttng-dev mailing list