pebble.
Pebble / Docs / Internals

Benchmarks

Only measured results are recorded here, each with its environment and method. Nothing in this directory was measured on the FreeBSD target yet.

File What Where
dns-filtering-macos-m2.tsv Unbound local-zone vs RPZ, 250,000 domains Apple M2, macOS 27.0.1, Unbound 1.26.1 (development machine)
below web interface and agent memory Apple M2, macOS 27.0.1, Go 1.27.1, simulated router (--dev-fixtures)

Web interface and agent (development machine, simulated router)#

Method: pebble agent --dev-fixtures examples/site-to-site.yaml and pebble web serve as separate processes (-trimpath -ldflags "-s -w", 12.4 MB binary); one sign-in, 110 page loads (every page ten times), then two minutes idle. RSS from ps -o rss.

Process Start After 110 pages Idle after 2 min CPU time Budget
pebble web serve 16.2 MB 40.5 MB 37.0 MB 0.22 s idle < 40 MB
pebble agent (with flight recorder, 10 s sampling) 16.6 MB 23.2 MB 20.8 MB 0.47 s —

Mean page time was 49 ms, almost all of it the agent's (simulated) data collection. The 19 MiB argon2id buffer used at sign-in is released after each verification, and at most two verifications run at once. The journal is capped at monitoring.journal_max_mb (default 32 MB) on disk.

These figures come from macOS on a fast CPU; FreeBSD's RSS accounting and a FUTRO's CPU will differ. Re-measure on the router before relying on them.

To measure on the router (FreeBSD, as root or any user):

sh scripts/bench-dns-filtering.sh 250000 /usr/local/sbin
PEBBLE_TEST_DESTRUCTIVE=yes sh scripts/test-freebsd.sh   # prints RSS of unbound/dnsmasq, status latency, iperf3 NAT throughput if installed

Still to be measured on a FUTRO S930 with FreeBSD 15.1: idle RSS and total memory, DNS cache usage, DHCP service memory, WireGuard and NAT throughput, CPU under load, boot time and recovery time, and the web interface, agent and flight recorder figures above.