bind9/lib
Alessio Podda 25daa047d4 Replace per-zone lock buckets with global buckets
Qpzone employs a locking strategy where rwlocks are grouped into
buckets, and each zone gets 17 buckets.
This strategy is suboptimal in two ways:
 - If named is serving a single zone or a zone is the majority of the
   traffic, this strategy pretty much guarantees contention when using
   more than a dozen threads.
 - If named is serving many small zones, it causes substantial memory
   usage.

This commit switches the locking to a global table initialized at start
time. This should have three effects:
 - Performance should improve in the single zone case, since now we are
   selecting from a bigger pool of locks.
 - Memory consumption should go down significantly in the many zone
   cases.
 - Performance should not degrade substantially in the many zone cases.
   The reason for this is that, while we could have substantially more
   zones than locks, we can query/edit only O(num threads) at the same
   time. So by making the global table much bigger than the expected
   number of threads, we can limit contention.
2025-07-09 15:27:38 +02:00
..
dns Replace per-zone lock buckets with global buckets 2025-07-09 15:27:38 +02:00
isc Change the .inuse member of isc_mem to be per-thread/per-loop 2025-06-30 13:23:17 +02:00
isccc replace the build system with meson 2025-06-11 10:30:12 +03:00
isccfg Use clang-format-20 to update formatting 2025-06-25 12:44:22 +10:00
ns Convert the isc/tid.h to use own signed integer isc_tid_t type 2025-06-28 13:32:12 +02:00
.gitignore The isc/platform.h header has been completely removed 2021-07-06 05:33:48 +00:00
meson.build replace the build system with meson 2025-06-11 10:30:12 +03:00