bind9/doc
Tony Finch 9b7aa536ba QSBR: safe memory reclamation for lock-free data structures
This "quiescent state based reclamation" module provides support for
the qp-trie module in dns/qp. It is a replacement for liburcu, written
without reference to the urcu source code, and in fact it works in a
significantly different way.

A few specifics of BIND make this variant of QSBR somewhat simpler:

  * We can require that wait-free access to a qp-trie only happens in
    an isc_loop callback. The loop provides a natural quiescent state,
    after the callbacks are done, when no qp-trie access occurs.

  * We can dispense with any API like rcu_synchronize(). In practice,
    it takes far too long to wait for a grace period to elapse for each
    write to a data structure.

  * We use the idea of "phases" (aka epochs or eras) from EBR to
    reduce the amount of bookkeeping needed to track memory that is no
    longer needed, knowing that the qp-trie does most of that work
    already.

I considered hazard pointers for safe memory reclamation. They have
more read-side overhead (updating the hazard pointers) and it wasn't
clear to me how to nicely schedule the cleanup work. Another
alternative, epoch-based reclamation, is designed for fine-grained
lock-free updates, so it needs some rethinking to work well with the
heavily read-biased design of the qp-trie. QSBR has the fastest read
side of the basic SMR algorithms (with no barriers), and fits well
into a libuv loop. More recent hybrid SMR algorithms do not appear to
have enough benefits to justify the extra complexity.
2023-02-23 15:57:53 +00:00
..
arm remove isc_task completely 2023-02-16 18:35:32 +01:00
design remove nonfunctional DSCP implementation 2023-01-09 12:15:21 -08:00
dev QSBR: safe memory reclamation for lock-free data structures 2023-02-23 15:57:53 +00:00
dnssec-guide remove /etc/bind.keys 2023-02-06 14:39:31 -08:00
doxygen Remove libbind9 2023-02-21 13:12:26 +00:00
man Remove pregenerated manpages from the repo 2023-02-10 11:24:03 +01:00
misc Remove do-nothing header <isc/print.h> 2023-02-15 16:44:47 +00:00
notes Add CHANGES and release note 2023-02-21 13:12:26 +00:00
Makefile.am Remove pregenerated manpages from the repo 2023-02-10 11:24:03 +01:00