[Unbound-users] Unbound vs MS Resolver

Carsten Strotmann unbound at strotmann.de
Sun Jun 15 07:30:51 UTC 2014

Hi Olaf,
Hi Unbound-Users,

I've did some benchmarking yesterday. I will continue later this month
(with different hardware, see below), but here are the first
results. I'm posting it here because you might have some ideas on how to
improve the benchmark-setup.

DISCLAIMER 1: the hardware used is not "Enterprise" or "Telco" level, I'm
aware of that. It is what I had available. 

DISCLAIMER 2: this is a benchmark in a synthetic lab environment. It is
not how DNS resolvers work in the real Internet. This results can give
indications, but do not replace your own measurements in your own
environment using your own hardware. 

Lab setup:

* one "load generating" machine running Unbound's own "perf" tool
  (Thinkpad E330 4 Core, 16GB RAM, running Fedora Linux 20) , sending
  1.000.000 queries to the DNS resolver (out of a zone of 10.000.000
  IPv4-A-records). I've tested using more than one "load generating"
  machine, but with the limited hardware of the resolver, more
  load-machines did not change the measured results

* one "authoritative" DNS server, hosting a root zone containing
  10.000.000 A-Records. BIND 9.9.5, Solaris 11, 8 GB. No delegation,
  everything is inside one large root zone. TTL is 86400.

* one DNS resolver for testing Unbound vs. WinDNS. AMD Athlon 64 X2 Dual
  Core 2.31 Ghz 1 Socket 2 Cores 256 L1 Cache 1 MB L2 Cache, 2GB RAM 533
  Mhz DIMM, Ethernet Intel PRO/100S Desktop NIC

All machines were connected via a HP ProCurve 1410 16G Switch

I did 3 tests: Unbound on FreeBSD 10-RELEASE, Unbound on Windows 2012
ServerCore and Windows DNS Server on Windows 2012 ServerCore

Memory was measured by "top" on FreeBSD and by Windows 2012 taskmgr.

Each setup was tested in 2 runs. Run 1 with cold (empty cache) and Run 2
with filled cache (no DNS resolution towards the authoritative).

1 FreeBSD 10 unbound 1.4.20

  1.000.000 Records

   Run                 Memory  average qps  CPU
   Run 1 (cold cache)                 9000  90 %
   Run 2 (warm cache)  736M          43000  79 %

2 Windows 2012 Core unbound 1.4.22

  1.000.000 Records

   Run                 Memory  average qps  CPU
   Run 1 (cold cache)                 4113  53%
   Run 2 (warm cache)  398M          30900  50% (63% System)

3 Windows 2012 Core dns.exe 23D99296 (6.2 build 9200)

  1.000.000 Records

   Run                 Memory  average qps  CPU
   Run 1 (cold cache)                 3160  15-60%
   Run 2 (warm cache)  747M          37443  78% (98% System)


* According to Sysinternals "process explorer"
  Unbound on Windows is a single threaded application. It does not make
  use of multiple cores.

* According to the same "process explorer", dns.exe is

* dns.exe qps throughput and CPU usage is fluctuating while resolving to the
  authoritative servers. QPS was between 1000-6000 with an average on
  3160 during this time. Unbound is more steady while doing resolving.

* dns.exe uses more memory during resolution (up to 1.2 GB seen), but
  frees memory after getting into stable state (all queries cached)

* dns.exe is faster when only answering from cache (probably due to
  multi-threading), Unbound is faster resolving from the authoritative

* memory allocation on Windows seems to be more resourceful compared to

I will re-run these tests on a 4 Core Dell R210 Server later this month
and report the numbers here.

Please let me know if you see flaws in my measurement setup (there are
probably some) and how to fix them.

Best regards


Olaf Kolkman writes:

> Folk,
> We recently got a query from somebody in the industry asking how Unbound compares to Windows Resolver performance in terms of qps and CPU (memory is under user control).
> All our benchmarking is Unix based and we never really did a comparison ourselves. Is there somebody on this list that has performed such measurements, or knows of a reference?

Carsten Strotmann
Email: cas at strotmann.de
Blog: strotmann.de

More information about the Unbound-users mailing list