I had to perform some performance / load testing on some authoritative DNS servers, came across the venerable
queryperf but unfortunately it seems to have disappeared from the contrib part of Bind.
So just to make my life easier, and make sure I’ll find it again next time, I’ve made a “standalone” copy of
contrib/queryperf on my Github profile.
Installation is straightforward (I should probably need to spend 5 minutes to build a debian package … let’s keep that in mind) :
$ git clone https://github.com/adedommelin-ducksify/queryperf.git $ cd queryperf/ $ ./configure $ make $ cp queryperf ~/bin/ # or everywhere in your $PATH
queryperf usage, stressing the 220.127.116.11 server :
$ queryperf -d ~/tmp/test_file -s 18.104.22.168 –l 300 –i 60 –c -q 20
Which should output something like that :
DNS Query Performance Testing Tool Version: $Id: queryperf.c,v 1.12 2007/09/05 07:36:04 marka Exp $ [Status] Processing input data [Status] Sending queries (beginning with 22.214.171.124) [Status] Testing complete Statistics: Parse input file: once Ended due to: reaching end of file Queries sent: 20003 queries Queries completed: 20003 queries Queries lost: 0 queries Queries delayed(?): 0 queries RTT max: 0.001429 sec RTT min: 0.000118 sec RTT average: 0.000474 sec RTT std deviation: 0.000141 sec RTT out of range: 0 queries Percentage completed: 100.00% Percentage lost: 0.00% Started at: Sun Dec 13 07:40:07 2020 Finished at: Sun Dec 13 07:40:08 2020 Ran for: 0.512049 seconds Queries per second: 39064.620769 qps
~/tmp/testfile contains a list of records to be tested (in the example above, a 20003 generated list) in the following form :
record1 A record2 AAAA [...]
queryperf options :
Usage: queryperf [-d datafile] [-s server_addr] [-p port] [-q num_queries] [-b bufsize] [-t timeout] [-n] [-l limit] [-f family] [-1] [-i interval] [-r arraysize] [-u unit] [-H histfile] [-T qps] [-e] [-D] [-R] [-c] [-v] [-h] -d specifies the input data file (default: stdin) -s sets the server to query (default: 127.0.0.1) -p sets the port on which to query the server (default: 53) -q specifies the maximum number of queries outstanding (default: 20) -t specifies the timeout for query completion in seconds (default: 5) -n causes configuration changes to be ignored -l specifies how a limit for how long to run tests in seconds (no default) -1 run through input only once (default: multiple iff limit given) -b set input/output buffer size in kilobytes (default: 32 k) -i specifies interval of intermediate outputs in seconds (default: 0=none) -f specify address family of DNS transport, inet or inet6 (default: any) -r set RTT statistics array size (default: 50000) -u set RTT statistics time unit in usec (default: 100) -H specifies RTT histogram data file (default: none) -T specify the target qps (default: 0=unspecified) -e enable EDNS 0 -D set the DNSSEC OK bit (implies EDNS) -R disable recursion -c print the number of packets with each rcode -v verbose: report the RCODE of each response on stdout -h print this usage
Interesting KB available on ISC website : https://kb.isc.org/docs/aa-00561