[bind10-dev] auth testing

Jeremy C. Reed jreed at isc.org
Tue Sep 15 20:48:40 UTC 2009


I have questions at the bottom of this email.

Goals for BIND 10 development include having performance and resource 
usage targets. Also during development and design hopefully do 
benchmarking of our components and microbenchmarking of specific functions 
and tasks. To help define benchmark targets, I am working on gathering 
some data.

We now have a dedicated system for doing performance and benchmark 
testing. I don't know what type of hardware it is. I think it has two 
physical CPUs. The dmesg says:

 Memory: 4032428k/5242880k available (2493k kernel code, 152780k reserved, 
    1263k data, 200k init
 Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz stepping 05
 Brought up 8 CPUs

The operating system is CentOS 5.3 running a x86_64 Linux 
2.6.18-128.7.1.el5 with SMP.

I installed a few DNS servers from source:

bind-8.4.7
bind-9.6.1
pdns-2.9.22
nsd-3.2.3
(and a simple 40 line python script that provides a fake auth DNS server).

(I didn't realize I didn't have openssl headers installed yet until I nsd 
which requires them. So my bind8 and bind9 are built without SSL. I will 
redo my tests for them later with ssl. powerdns doesn't use ssl, so 
doesn't matter.)

I made simple configurations for testing authoritative, recursion turned 
off, and running on alternative port. (For pdns, I use the "bind" 
backend.)

I have a simple zone with three records: SOA, NS, and A (for that NS 
target).

My script to gather resource usage stores the /proc/$PID/status, stat, and 
statm files, and ps output like:

%CPU  C     ELAPSED     TIME   TIME - -  UTIME %MEM   RSS   RES    SZ - 
START    VSZ COMMAND
40.0 40       00:01 00:00:00   0:00 - -      -  0.0  1808     -  1512 - 
12:10   5736 named

The queryperf I used for all of them is from bind-9.6.1/contrib. I use no 
special options for it. My queryperf input file is 30,000 entries long and 
just repeats the queries for the three available records. I am running 
queryperf on the same system.

I wrote some scripts to start each server, record some resource usage, dig 
one time (prime it?), record resource usage, queryperf, record resource 
usage, stop server.

I have lots of data stored, but here is a summary:

Server		Queries/second	Virtual Size	cputime/realtime
------		--------------	------------	----------------
bind-8.4.7	77582 qps	5736 kB		40.0%
bind-9.6.1	37745 qps	8536 kB		79.0%
pdns-2.9.22	89884 qps	148364 kB	0.0%
nsd-3.2.3	83938 qps	14228 kB	0.0%
python-test	29812 qps	104184 kB	101%

(I don't know why the %CPU is 0.0 sometimes. And I don't know how it is 
101% either, must be very inefficient? Also I saw pdns reach 213900 kB 
VSIZE and 32.0 PCPU. And I have see nsd reach 90450 qps. I did several 
runs, but above summary is not an average.)

I didn't do any special configurations to help with performance or memory 
usage. As for pdns, I couldn't get it to even run when I tried to ulimit 
-v 100000.

I plan on doing various other tests too (such as huge zones and many 
zones) and also adding tinydns and maybe a server based on perl 
Net::DNS::Server to the mix. (Months ago, I did some ACL performance and 
resource usage tests. I may also do them again.)

Later, I will also do same tests on a 233MHz StrongARM system with 32M (or 
64M) memory running NetBSD. (I don't have the hardware yet.)

My questions:

1) Any types of tests you'd like me to run?

2) Any configurations you'd like me to use?

3) Other server software?

4) Any queryperf patches or options I should use?

5) Any queryperf input data files I should use?

6) What other data should I collect?

7) Any suggestions or pointers for creating graphs? What do you want to 
see? How should it be presented? Should I average results?



More information about the bind10-dev mailing list