[dns-operations] DNS server benchmarking sanity check

Mark Delany x2t at foxtrot.emu.st
Mon Aug 15 00:42:54 UTC 2016

On 14Aug16, P Vixie allegedly wrote:

> > mainstream kernels

> Try FreeBSD.

I consider FBSD to be mainstream.

I don't have the data handy any more, but the order of best to worse
on a 24core Xeon of some sort with an Intel 10G NIC of some sort was:

linux using recvmmsg()
linux using recvmsg()
FBSD using recvmsg()

    (Since it's an internal app I was also able to try netmap. In the
    special case where the number of NIC rings is >= the number of
    cores, netmap wins, but that condition generally doesn't hold true
    for modern large systems.)

In general, for systems with many cores, I could not find a way to
fully utilize the CPUs due to locking and serializing thru the kernel.

Increasing the number of threads to match the cores and even binding
to CPUs and using unique SO_REUSEPORT sockets still showed a decline
starting at around 8 threads/cores... as best I recall.

The best absolute UDP performance I could achieve was with one thread
per CPU with their respective socket bound to a unique port (53, 54,
55, etc). This setup was able to consume vastly more pps than any
combination accepting on just a single port. Not useful from a DNS
server perspective, but this does suggest some serialization/locking
on a port basis in both FBSD and Linux.


More information about the dns-operations mailing list