perf: optimize DNS query hot path #15

Merged
razvandimescu merged 2 commits from perf/hot-path-optimizations into main 2026-03-27 08:01:08 +08:00

2 Commits

Author SHA1 Message Date
Razvan Dimescu
f8e340ca17 chore: simplify benchmark code after review
- Remove redundant DnsHeader::new() (already set by DnsPacket::new())
- Remove unused DnsHeader import
- Change simulate_cached_pipeline to take &DnsCache (lookup is &self now)
- Remove unnecessary mut on cache in cache_lookup_miss bench

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 06:14:00 +02:00
Razvan Dimescu
aed0e095e1 perf: optimize hot path — RwLock, inline filtering, pre-allocated strings
- Mutex → RwLock for cache, blocklist, and overrides (concurrent read access)
- Make cache.lookup() and overrides.lookup() take &self (read-only)
- Eliminate 3 Vec allocations per DnsPacket::write() via inline filtering
- Pre-allocate domain strings with capacity 64 in parse path
- Add criterion micro-benchmarks (hot_path + throughput)
- Add bench README documenting both benchmark suites

Measured improvement: ~14% faster parsing, ~9% pipeline throughput,
round-trip cached 733ns → 698ns (~2.3M queries/sec).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 22:51:34 +02:00