[Pdns-users] Performance of pdns authoritative server on big machines with different backends

Marc Haber mh+pdns-users at zugschlus.de
Tue Jan 4 14:20:44 UTC 2011


Hi,

in my current project, I have the task of finding out which
performance to expect from a PowerDNS authoritative server running on
a big machine.

My test box is an HP DL 360 G6 with two quad core hyperthreading CPUs
(so I have 8 real cores with Linux seeing 16 cores) and 48 GB RAM
running Debian GNU/Linux unstable with kernel 2.6.36, and powerdns
2.9.22.x-3 statically compiled (I ported the packaging of the
pdns-static.deb from powerdns.com to x-3).

My test setup is deliberately big and contains about ten million zones
which are served via mysql backend (MySQL servr running on the same
system, connected to via file system socket). The cache of the MySQL
server has been warmed up, and the box has enough memory to hold the
entire database in RAM (and it does so).

The simplest test setup is running
dnsperf -s <address> -t 5 -q 5000 -l 600 -d queryfile
with a query file containing roughly 4,2 million synthetically
generated queries, a good part of them generating NXDOMAIN.

After some days of testing, I found out that this setup is fastest
when I configure PowerDNS with 32 receiver threads and 48 distributor
threads. While the test is running, PowerDNS roughly takes four cores,
while MySQL takes eight to ten cores, with a good percentage of the
system still being idle, putting out roughly 35 kqps.

I would expect the test to be able to saturate my CPUs and thus
suspect that there is something wrong in my setup.

To take the database out as possible source of error, I have
configured PowerDNS to use the bind backend, loaded a single small
zone file, and re-ran the test with a query file containing a single A
query for an existing record and a single A record for a non-existing
record.

I expected this setup to be _much_ faster, but I found out that this
setup would only use a single of my cores, delivering well below
25 qkps. Setting distributor-threads=1 and disabling the packet cache
as suggested in the docs made the system even slower.

What am I doing wrong? Why is the bind backend only using one CPU? Why
isn't the bind backend much faster than MySQL? What would you
recommend to make the MySQL setup faster?

Greetings
Marc

-- 
-----------------------------------------------------------------------------
Marc Haber         | "I don't trust Computers. They | Mailadresse im Header
Mannheim, Germany  |  lose things."    Winona Ryder | Fon: *49 621 72739834
Nordisch by Nature |  How to make an American Quilt | Fax: *49 3221 2323190



More information about the Pdns-users mailing list