DNS query performance
rwatson at FreeBSD.org
Wed Sep 13 10:27:19 PDT 2006
On Wed, 13 Sep 2006, Robert Watson wrote:
> On Mon, 11 Sep 2006, Marcelo Gardini do Amaral wrote:
>> 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:
> Are you able to boot a 7.x kernel on this box? An as yet un-MFC'd
> optimization to the UDP send path is present in the 7.x kernel, suggested by
> ISC, which significantly improves threaded BIND9 performance. I've not
> benchmarked unthreaded BIND9 with the change. If you want to test
> specifically the before/after case for that change, you can find the
> reference to sosend_dgram in src/sys/netinet/udp_usrreq.c and swap it to
> sosend, which restores the old behavior.
The other common optimization advice that you may already have received is to
check which time counter FreeBSD has selected. Right now, 6.x/7.x err on the
side of accurate over fast. There's been quite a bit of debate about this
approach, and it's useful to investigate the issue. You can view and set the
current choice by looking at the sysctl kern.timecounter.hardware, and you can
see the choices on your hardware by looking at kern.timecounter.choice.
Typically, TSC is the fastest, but may suffer from drift as the CPU changes
speed (as a result of temperature, power saving, etc). Set it to TSC if it's
not already TSC, and see what the effect is. As many event libraries read
time stamps frequently to set up sleeping in user space, it can have a
substantial performance impact.
Robert N M Watson
University of Cambridge
More information about the freebsd-net