bind9/dtrace
Ondřej Surý 6c1e1e8e9a
Add dtrace/ with example SystemTap trace scripts
Introduces a top-level dtrace/ directory for user-contributed trace
scripts that consume the USDT probes exported by libdns, libns, and
libisc.  Ships with delegdb-trace.stp, which streams every insertion,
eviction, and rndc flush-delegation removal in the delegation cache,
and a README pointing at the provider files and explaining how to list
and run the probes on Linux (SystemTap) and on FreeBSD/macOS (DTrace).
2026-04-20 13:14:19 +02:00
..
delegdb-trace.stp Add dtrace/ with example SystemTap trace scripts 2026-04-20 13:14:19 +02:00
README.md Add dtrace/ with example SystemTap trace scripts 2026-04-20 13:14:19 +02:00

dtrace/

Example trace scripts for BIND 9's static user-space (USDT) probes.

What's instrumented

BIND 9 ships USDT probes declared in three providers:

  • lib/dns/probes-dns.d — provider libdns (xfrin_*, delegdb_*)
  • lib/ns/probes-ns.d — provider libns (rrl_*)
  • lib/isc/probes-isc.d — provider libisc (rwlock_*, job_*)

The probes compile to zero-cost nops when no consumer is attached, and are only wired up when the build finds dtrace and sys/sdt.h (meson option -Dtracing=auto|enabled, default auto). With -Dtracing=disabled the probe macros are stripped entirely.

Listing available probes

On Linux (SystemTap / USDT):

stap -l 'process("/path/to/named").mark("*")' | sort

On FreeBSD or macOS (DTrace):

dtrace -l -n 'libdns*:::*'

Scripts

Script Purpose
delegdb-trace.stp Streams every insertion, eviction, and rndc flush-delegation removal in the delegation cache.

Running a script

The scripts take the named binary path as their first positional argument, so they work with either an installed or a freshly-built named:

sudo stap dtrace/delegdb-trace.stp /usr/sbin/named -x $(pidof named)
sudo stap dtrace/delegdb-trace.stp build/named -c "build/named -g -f"

The -c form runs named under stap's supervision and exits with it.