DNS query performance
Marcelo Gardini do Amaral
marcelo at registro.br
Mon Sep 11 12:56:19 PDT 2006
I would like to discuss a little bit more about UDP performance. I've
made some tests and the results may have some value here.
In this test is easy to see that there is something different in the
FreeBSD 6 branch.
I made a benchmark with bind 9.3.2 (without threads support) and nsd
3.0.1 (1 server forked) on a HP Proliant Dual AMD Opteron 2.4GHz among
FreeBSD 4.11, 6.1 and Linux kernel 2.6.15, all of them for i386
systems. I used this simple zone file:
# cat db.FOO.BAR
@ 172800 in soa foo.dns.bar. hostmaster.foo.bar. (
1800 ;refresh 30 minutos
900 ;retry 15 minutos
604800 ;expire 7 dias
900 ) ;negative caching 15 minutos
172800 in ns foo.dns.bar.
; zone delegation begin
test1 IN NS qq1.bsd.
test2 IN NS qq2.bsd.
test3 IN NS qq3.bsd.
test4 IN NS qq4.bsd.
test5 IN NS qq5.bsd.
test6 IN NS qq6.bsd.
test7 IN NS qq7.bsd.
test8 IN NS qq8.bsd.
test9 IN NS qq9.bsd.
In another box with the same hardware I used FreeBSD 4.11 and
queryperf (DNS Query Performance Testing Tool) as a client to realize
1.000.000 of NS queries on the servers. Below I show the results:
queries per second
OS Bind 9.3.2 NSD 3.0.1
---- ---- ----
Linux 2.6 SMP 38845 59645
FreeBSD 4.11 SMP 34977 59417
FreeBSD 4.11 UP 33926 59547
FreeBSD 6.1 SMP 14953 15908
FreeBSD 6.1 UP 15516 14752
Linux had a performance just 10% better than FreeBSD 4.11 with
bind. With nsd I didn't see any difference between them. There is no
difference also tweaking the kernel from UP to SMP.
With nsd the performance was improved to ~60k queries per second on
4.11 and Linux, i.e., it was almost doubled comparing with bind. I
couldn't see any packet loss in any case.
On the other hand, on FreeBSD 6.1 the result was lower than half of
bind's performance on the others systems tested. And with nsd the
result didn't get better (unlike happend on FreeBSD 4.11). I also got
some 'timeout' on FreeBSD 6.1 - about 200 from 1M packets were lost.
In actual fact, I think that is important to emphasize that the same
limit was reached on both name servers - no more than ~15k queries per
second was possible on 6.1. I think there is an issue on the system,
not on bind neither nsd.
Besides this, I've noticed some problems with bge interface
driver. Many times the interface is up and running and suddenly goes
down, without any reason, or after a reboot it doesn't go up. And if
you just remove and insert again the cable, everything returns to
work. On up-to-date FreeBSD 6 boxes I don't see this problem so often,
but with 'netstat -i' it's possible to find some input errors - I was
used to see no errors on 4.11 and others.
Does anybody noticed this behavior?
For my purpose, the UDP performance is very important. I would be glad
with any kind of help to tune my box and improve its performance.
For those who wants to try, the queryperf can be found in the bind
source tree, at bind-9.3.2/contrib/queryperf. I used a query load file
like this (1M of lines making reference to the zones in db.FOO.BAR):
# cat query.txt
More information about the freebsd-net