Interland DNS
Caching Test Results
Testing Strategy / Approach
Caching performance.
For testing caching performance, well 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. Well
then run a batch of tests and record the output. So, heres 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, well 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 |
|
|
|