DNS Load Testing Results

November 20, 2007

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 inputfile -s 207.171.12.31DNS Query Performance Testing ToolVersion: $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 completeStatistics:Parse input file: onceEnded due to: reaching end of fileQueries sent: 600000 queriesQueries completed: 600000 queriesQueries lost: 0 queriesQueries delayed(?): 0 queriesRTT max: 0.087436 secRTT min: 0.000055 secRTT average: 0.002845 secRTT std deviation: 0.000680 secRTT out of range: 0 queriesPercentage completed: 100.00%Percentage lost: 0.00%Started at: Tue Nov 20 15:29:18 2007Finished at: Tue Nov 20 15:30:44 2007Ran for: 85.816039 secondsQueries 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 inputfile -s 207.171.11.22DNS Query Performance Testing ToolVersion: $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 completeStatistics:Parse input file: onceEnded due to: reaching end of fileQueries sent: 600000 queriesQueries completed: 600000 queriesQueries lost: 0 queriesQueries delayed(?): 0 queriesRTT max: 0.086546 secRTT min: 0.000401 secRTT average: 0.002508 secRTT std deviation: 0.000601 secRTT out of range: 0 queriesPercentage completed: 100.00%Percentage lost: 0.00%Started at: Tue Nov 20 15:32:11 2007Finished at: Tue Nov 20 15:33:26 2007Ran for: 75.741798 secondsQueries per second: 7921.649813 qps

The last test is BIND 9.3.3:

> ./queryperf -d input2 -s 207.171.11.32DNS Query Performance Testing ToolVersion: $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 completeStatistics:Parse input file: onceEnded due to: reaching end of fileQueries sent: 600000 queriesQueries completed: 599999 queriesQueries lost: 1 queriesQueries delayed(?): 0 queriesRTT max: 3.932287 secRTT min: 0.000397 secRTT average: 0.001155 secRTT std deviation: 0.007110 secRTT out of range: 0 queriesPercentage completed: 100.00%Percentage lost: 0.00%Started at: Tue Nov 20 15:36:26 2007Finished at: Tue Nov 20 15:37:02 2007Ran for: 35.493465 secondsQueries 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.

Transform your business without wasting money.

We help you identify, audit and implement technology changes within your business to create leverage points to scale your company faster.