Benchmarking
View SourceThis guide contains some information on how to benchmark erldns locally.
Install dnsperf
The recommended benchmarking tool is dnsperf. You can compile it from source or, if on macOS, install it with:
brew install dnsperf
Create a Queries File
dnsperf requires DNS queries to run in order to perform benchmarks. You can use whatever queries to test different aspects of erldns, such as how it behaves when mostly responding to unknown records or when you execute the same query many times in a row.
A good start is a small file with some example.com-related queries, as example.com domains are the default in the sample config file.
Put this in queries.txt:
thumbs2.ebaystatic.com. AAAA
sip.hotmail.com. A
google.com. A
cache.defamer.com. A
example.com. A
www.example.com. CNAMEStart the Server
Important
Start erldns as a release to make sure it gets compiled with production-like settings, rather than dev settings (as in rebar3 shell).
First, create a release:
rebar3 release
Then, start the release in the foreground:
./_build/default/rel/erldns/bin/erldns foreground
Run the Benchmark
Now you're ready to run benchmarks. For example:
dnsperf -p 8053 -d ./queries.txt -T 4 -c 20 -n 10000
See dnsperf -h for an explanation of the flags.
Latest Benchmark
The latest benchmark was run on 2025/06/06 by @nelsonvides, on an 2023 Apple MacBook Pro, 16-inch, M3 Pro CPU, 36GB of memory.
In these conditions, erldns can serve around 85k QPS, in a mix of resolvable and
non-authoritative cases; and around 71k QPS when all queries are resolvable
The details of the benchmark are below.
A mix of resolvable and non-authoritative
With this query file:
thumbs2.ebaystatic.com. AAAA
sip.hotmail.com. A
google.com. A
cache.defamer.com. A
example.com. A
www.example.com. CNAMEThe results are as follows:
DNS Performance Testing Tool
Version 2.14.0
[Status] Command line: dnsperf -p 8053 -d ./queries.txt -T 6 -c 256 -l 30
[Status] Sending queries (to 127.0.0.1:8053)
[Status] Started at: Fri Jun 6 20:49:49 2025
[Status] Stopping after 30.000000 seconds
[Status] Testing complete (time limit)
Statistics:
Queries sent: 2558497
Queries completed: 2558497 (100.00%)
Queries lost: 0 (0.00%)
Response codes: NOERROR 852832 (33.33%), REFUSED 1705665 (66.67%)
Average packet size: request 33, response 43
Run time (s): 30.000527
Queries per second: 85281.735218
Average Latency (s): 0.000934 (min 0.000039, max 0.022900)
Latency StdDev (s): 0.000513All resolvable
With this query file:
example.com A
example.com NS
example.com AAAA
example.com CAA
example.com CNAME
ldap.example.com A
ns2.test.com A
www.test.com CNAMEThe results are as follows:
DNS Performance Testing Tool
Version 2.14.0
[Status] Command line: dnsperf -p 8053 -d ./queries.txt -T 6 -c 256 -l 30
[Status] Sending queries (to 127.0.0.1:8053)
[Status] Started at: Fri Jun 6 20:47:56 2025
[Status] Stopping after 30.000000 seconds
[Status] Testing complete (time limit)
Statistics:
Queries sent: 2143197
Queries completed: 2143197 (100.00%)
Queries lost: 0 (0.00%)
Response codes: NOERROR 1875298 (87.50%), NXDOMAIN 267899 (12.50%)
Average packet size: request 29, response 74
Run time (s): 30.001319
Queries per second: 71436.759164
Average Latency (s): 0.001183 (min 0.000035, max 0.057426)
Latency StdDev (s): 0.001117