Ran into a discrepancy I can't explain and I'm curious whether it reproduces for others.
SETUP
ASUS RT-AX88U Pro on Asuswrt-Merlin, dnsmasq forwarding to OpenDNS.
Business fiber, static IP, no VPN in path.
DNS Benchmark Release 5 (latest).
WHAT GRC REPORTS
Router (192.168.0.1):
Avg 0.056-0.060
Cached 0.062-0.064
Min 0.017
Three runs across different conditions: one with a PS5 saturating the downlink, two idle, one with a custom server list.
Router numbers were identical each time.
Public resolvers in the same runs varied normally with conditions.
WHAT DIRECT MEASUREMENT SHOWS
From a Windows client:
Measure-Command { Resolve-DnsName -Server 192.168.0.1 -Name google.com -DnsOnly }
Run 1: 215ms (cold + cmdlet startup)
Run 2: 3.8ms
Run 3: 10.4ms
Run 4: 3.3ms
Run 5: 2.8ms
So roughly 3ms measured against roughly 62ms reported.
DNSMASQ'S OWN STATS
cache size 10000, 0/24445 cache insertions re-used unexpired cache entries
server 208.67.222.222#53: queries sent 344, retried 3, failed 0,
nxdomain replies 6, avg. latency 30ms
Zero evictions after 24k insertions. Zero upstream failures.
WHAT I'VE RULED OUT
My understanding is that GRC primes the cache before timing the "Cached Name" pass, so this shouldn't be measuring a forward to upstream.
But there's a floor around 17ms I can't account for.
- Merlin sets no-negcache, so every NXDOMAIN goes upstream. If GRC's
test set includes bogus names, some of the average is uncacheable by
design.
- DNSSEC counters are all zero, so validation isn't running and isn't
the cost.
- Zero evictions, so no cache pressure.
THE QUESTION
Has anyone compared GRC's local-forwarder numbers against direct measurement on other hardware?
Trying to work out whether this is something about dnsmasq specifically, something in my config, or expected behavior when the tool is pointed at a forwarder rather than a recursive resolver.
CONFIG (Merlin defaults, only cache-size changed)
bind-dynamic
no-resolv
servers-file=/tmp/resolv.dnsmasq
no-negcache
cache-size=10000
edns-packet-max=1232
SETUP
ASUS RT-AX88U Pro on Asuswrt-Merlin, dnsmasq forwarding to OpenDNS.
Business fiber, static IP, no VPN in path.
DNS Benchmark Release 5 (latest).
WHAT GRC REPORTS
Router (192.168.0.1):
Avg 0.056-0.060
Cached 0.062-0.064
Min 0.017
Three runs across different conditions: one with a PS5 saturating the downlink, two idle, one with a custom server list.
Router numbers were identical each time.
Public resolvers in the same runs varied normally with conditions.
WHAT DIRECT MEASUREMENT SHOWS
From a Windows client:
Measure-Command { Resolve-DnsName -Server 192.168.0.1 -Name google.com -DnsOnly }
Run 1: 215ms (cold + cmdlet startup)
Run 2: 3.8ms
Run 3: 10.4ms
Run 4: 3.3ms
Run 5: 2.8ms
So roughly 3ms measured against roughly 62ms reported.
DNSMASQ'S OWN STATS
cache size 10000, 0/24445 cache insertions re-used unexpired cache entries
server 208.67.222.222#53: queries sent 344, retried 3, failed 0,
nxdomain replies 6, avg. latency 30ms
Zero evictions after 24k insertions. Zero upstream failures.
WHAT I'VE RULED OUT
My understanding is that GRC primes the cache before timing the "Cached Name" pass, so this shouldn't be measuring a forward to upstream.
But there's a floor around 17ms I can't account for.
- Merlin sets no-negcache, so every NXDOMAIN goes upstream. If GRC's
test set includes bogus names, some of the average is uncacheable by
design.
- DNSSEC counters are all zero, so validation isn't running and isn't
the cost.
- Zero evictions, so no cache pressure.
THE QUESTION
Has anyone compared GRC's local-forwarder numbers against direct measurement on other hardware?
Trying to work out whether this is something about dnsmasq specifically, something in my config, or expected behavior when the tool is pointed at a forwarder rather than a recursive resolver.
CONFIG (Merlin defaults, only cache-size changed)
bind-dynamic
no-resolv
servers-file=/tmp/resolv.dnsmasq
no-negcache
cache-size=10000
edns-packet-max=1232

