DNS Load Testing Results
Years ago I stopped running BIND as an Authoritative Name Server within my sites - initially this was for security reasons but was quickly eclipsed for maintainability. After running almost every alternate DNS software available we’ve ended up running a mix of PowerDNS and BIND (BIND sneaked back in because of $GENERATE is just to convenient for in-addr.arpa domains). We are running PowerDNS against a Master -> Slave MySQL backend configuration and even though the maintainability is super easy (what could be better than a web interface to a SQL backend) I’ve always been a little paranoid about the potential loss of the DB backend and the loss of our DNS services as a result. I’ve always personally liked the simplicity of Tinydns from DJBDNS but the assumed performance loss on my part has always kept me at bay. Well today I broke down and ran some benchmarks. You could say that the results surprised me a little…
The first test is tinydns-1.05
> ./queryperf -d input_file -s 207.171.12.31 DNS Query Performance Testing Tool Version: $Id: queryperf.c,v 1.8.192.3 2005/10/29 00:21:12 jinmei Exp $ [Status] Processing input data [Status] Sending queries (beginning with 207.171.12.31) [Status] Testing complete Statistics: Parse input file: once Ended due to: reaching end of file Queries sent: 600000 queries Queries completed: 600000 queries Queries lost: 0 queries Queries delayed(?): 0 queries RTT max: 0.087436 sec RTT min: 0.000055 sec RTT average: 0.002845 sec RTT std deviation: 0.000680 sec RTT out of range: 0 queries Percentage completed: 100.00% Percentage lost: 0.00% Started at: Tue Nov 20 15:29:18 2007 Finished at: Tue Nov 20 15:30:44 2007 Ran for: 85.816039 seconds Queries per second: 6991.700001 qps
Note: Tinydns is running with a 150 MByte data.cdb
The second test is PowerDNS 2.9.21 w/ MySQL:
> ./queryperf -d input_file -s 207.171.11.22 DNS Query Performance Testing Tool Version: $Id: queryperf.c,v 1.8.192.3 2005/10/29 00:21:12 jinmei Exp $ [Status] Processing input data [Status] Sending queries (beginning with 207.171.11.22) [Status] Testing complete Statistics: Parse input file: once Ended due to: reaching end of file Queries sent: 600000 queries Queries completed: 600000 queries Queries lost: 0 queries Queries delayed(?): 0 queries RTT max: 0.086546 sec RTT min: 0.000401 sec RTT average: 0.002508 sec RTT std deviation: 0.000601 sec RTT out of range: 0 queries Percentage completed: 100.00% Percentage lost: 0.00% Started at: Tue Nov 20 15:32:11 2007 Finished at: Tue Nov 20 15:33:26 2007 Ran for: 75.741798 seconds Queries per second: 7921.649813 qps
The last test is BIND 9.3.3:
> ./queryperf -d input2 -s 207.171.11.32 DNS Query Performance Testing Tool Version: $Id: queryperf.c,v 1.8.192.3 2005/10/29 00:21:12 jinmei Exp $ [Status] Processing input data [Status] Sending queries (beginning with 207.171.11.32) [Timeout] Query timed out: msg id 60619 [Status] Testing complete Statistics: Parse input file: once Ended due to: reaching end of file Queries sent: 600000 queries Queries completed: 599999 queries Queries lost: 1 queries Queries delayed(?): 0 queries RTT max: 3.932287 sec RTT min: 0.000397 sec RTT average: 0.001155 sec RTT std deviation: 0.007110 sec RTT out of range: 0 queries Percentage completed: 100.00% Percentage lost: 0.00% Started at: Tue Nov 20 15:36:26 2007 Finished at: Tue Nov 20 15:37:02 2007 Ran for: 35.493465 seconds Queries per second: 16904.492137 qps
Needless to say I was impressed (and encouraged) to see that Tinydns wasn’t much slower than PowerDNS in our configuration. However I was blown away that BIND ran twice as fast! I have some serious investigation to do and some further testing. I wonder what tinydns would look like against an SSD or RAMDISK.

Hi Max. I found your blog while googling for DNS load testing utilities. I should advise you that queryperf is deprecated, and quite crappy. :) I ran into multiple issues with it, especially with multicore processors. I'd highly suggest running your tests again using 'dnsperf' by Nominum, and using 'resperf' for your caching nameservers if desired. These tools are current, and provide much more accurate results in my experience.
They are available here: http://nominum.org/testing_tools.php
-Dave