left header graphic The Network People
Solutions for Hosting Providers
right header graphic

methods home : internet : dns : interland : caching authoritative


Interland DNS
Caching Test Results

 

Testing Strategy / Approach

Caching performance.

For testing caching performance, we’ll use a dns client program named dnsfilter running on 1 to 3 client machines to rapidly query the name servers. Dnsfilter takes a list of IP addresses as input and outputs the result as a list of IP addresses and the hostnames returned by the DNS. I wrote a program that generates an input file suitable for dnsfilter. An input file named “iplist-a” will contain an entire Class A block of IP addresses and a second file named ‘iplist-b” will contain an entire Class B block of IP addresses.

A dnswall has been set up on 216.122.69.110. Each caching name server (dnscache, BIND 8, BIND 9) will be configured to forward all requests to the dnswall. The resolv.conf file on the caching name servers will contain no “search” or “domain” keywords and will contain only one nameserver entry that points all DNS resolution to the currently active dns server on that machine. The resolver will be configured to only search the dns for resolution.

To begin the test, start up the first dns server to be tested. For dnscache, the command “services start” will start it up. For BIND 8, the command “ndc start” will work and for BIND 9 use “rndc start”. Grab an SSH login into the dns client and get ready to start testing. After starting up the caching server, start the monitoring program “watchme.sh”. Watchme is a simple little script that will record the next 5 minutes of activity on the server outputting the CPU and memory usage of each server to a file named “watchme.out”. We’ll then run a batch of tests and record the output. So, here’s exactly what to do:

Server:
# script ; records the session
# services start ; starts up dnscache
# watchme.sh ; monitors server CPU and RAM usage.

Client:
# script
# time runtest-b.sh > b1.out
# time runtest-b.sh > b2.out
# time runtest-b.sh > b3.out

Record the following from watchme.out: starting and ending RAM value, Max CPU.
Record the following from the time output: real time.
Grep the output files to record: successful queries (“grep = a?.out | wc –l”)
Calculate the accuracy and qps. Accuracy = success / total. Total is the number of lines in the file iplist-b. Qps (queries per second) = success / time.

A table is included below to record the data. Once the first run is done for dnscache, clear the cache server “svc –t /services/dnscache”, start the watchme script and then run the test again on the clients but with the class A iplist:

Server:
# svc –t /service/dnscache ; restarts dnscache
# watchme.sh ; monitors server CPU and RAM usage.

Client:
# time runtest-a.sh > a1.out
# time runtest-a.sh > a2.out
# time runtest-a.sh > a3.out

Record the results and then proceed to the next dns server (BIND 8) and finally for (BIND 9). Follow the exact same tests as above except alter the commands used to start and stop BIND as documented above.

65,536 queries (Class B) – 1 client - FreeBSD

Cache start
RAM
end
RAM
CPU Time success Accuracy qps
dnscache 100 100 52% 30 65,536 100 2,184
dnscache 100 100 57% 16 65,536 100 4,096
dnscache 100 100 51% 16 65,536 100 4,096
               
BIND 8 2 8 38% 13 65,536 100 5,041
BIND 8 8 8 82% 30 65,536 100 2,185
BIND 8 8 8 87% 33 65,536 100 1,986
               
BIND 9 5 10 95% 72 65,536 100 910
BIND 9 10 10 61% 23 65,536 100 2,850
BIND 9 10 10 64% 23 65,536 100 2,850

 


65,536 queries (Class B) – 1 client - Solaris

Cache start
RAM
end
RAM
CPU Time success Accuracy qps
dnscache 100 100 76% 76 65,536 100 862
dnscache 100 100 80% 33 65,536 100 1986
dnscache 100 100 80% 34 65,536 100 1927
               
BIND 8 3 9 35% 53 65536 100 1237
BIND 8 9 9 88% 51 65536 100 1285
BIND 8 9 9 92% 51 65536 100 1285


16711680 queries (Class A) – 1 client - FreeBSD

Cache start
RAM
end
RAM
CPU Time (s) success Accuracy qps
Dnscache 100 100 85% 2:14:35 16,777,216 * 2,087
Dnscache 100 100 85% 2:15:41 16,777,216 * 2,071
Dnscache 100 100 85% 2:24:45 16,777,216 * 1,942
               

BIND 8
2   85% 23:31 CRASH * FAILED
BIND 8         * *  
BIND 8         * *  
               
BIND 9 5 515 96% 22:29:55 FAILED * FAILED
BIND 9         * *  
BIND 9         * *  


16711680 queries (Class A) – 1 client - Solaris

Cache start
RAM
end
RAM
CPU Time (s) success Accuracy qps
Dnscache 100 100 %   16,777,216 *  
Dnscache 100 100 %   16,777,216 *  
Dnscache 100 100 %   16,777,216 *  
               
BIND 8 2   %        
BIND 8              
BIND 8              



Once that batch of tests is run, we’ll do the exact same series of test again except with three clients hitting the name servers at the same time.
65,536 queries (Class B) – 3 clients - FreeBSD

Cache start
RAM

end
RAM
CPU Time success Accuracy qps
dnscache 100 100 75 63 196,608   3,121
dnscache 100 100 65 50 196,608   3,932

dnscache
100 100 65 50 196,608   3,932
               
BIND 8 2 8 85 44 196,608   4,468
BIND 8 8 8 95 86 196,608   2,286
BIND 8 8 8 94 83 196,608   2,369
               
BIND 9 5 12 95 108 196,608   1,820
BIND 9 12 12 94 69 196,608 2,979 2,849
BIND 9 12 12 94 66 196,608    



Last modified on 4/25/05.