{"id":4140,"date":"2025-12-10T22:07:40","date_gmt":"2025-12-10T20:07:40","guid":{"rendered":"https:\/\/fastpixel.io\/?p=4140"},"modified":"2025-12-11T12:12:27","modified_gmt":"2025-12-11T10:12:27","slug":"benchmark-your-dns-resolver-with-dnsperf-a-how-to","status":"publish","type":"post","link":"https:\/\/fastpixel.io\/fr\/blog\/benchmark-your-dns-resolver-with-dnsperf-a-how-to\/","title":{"rendered":"Benchmark Your DNS Resolver with dnsperf &#8211; a How To"},"content":{"rendered":"<p>DNS performance is critical for any network infrastructure. Whether you&#8217;re managing a public resolver, running a caching forwarder like Unbound or dnsmasq, or operating a high-volume recursive DNS service, you need reliable metrics to validate your setup.<\/p>\n\n\n\n<p><strong>dnsperf<\/strong> is the industry-standard benchmarking tool created by DNS-OARC. It measures query throughput, latency, and stability under realistic or even unrealistic \ud83d\ude42 load conditions, giving you the data you need to optimize your DNS infrastructure.<\/p>\n\n\n\n<p>This guide walks you through:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Installing dnsperf<br><\/li>\n\n\n\n<li>Preparing query files<br><\/li>\n\n\n\n<li>Running benchmarks<br><\/li>\n\n\n\n<li>Understanding your results<br><\/li>\n\n\n\n<li>Sample expected performance numbers<br><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">1. What Is dnsperf?<\/h1>\n\n\n\n<p>dnsperf is a specialized DNS load testing tool that simulates high-volume query traffic to measure server performance. It sends DNS queries at maximum sustainable rates while tracking:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Queries per second (QPS)<\/strong> \u2013 Total throughput capacity<\/li>\n\n\n\n<li><strong>Response latency<\/strong> \u2013 How quickly queries are answered<\/li>\n\n\n\n<li><strong>Packet loss and timeouts<\/strong> \u2013 Reliability under load<\/li>\n\n\n\n<li><strong>Server stability<\/strong> \u2013 Sustained performance over time<\/li>\n<\/ul>\n\n\n\n<p>DNS operators, ISPs, and infrastructure engineers rely on dnsperf to validate server capacity, optimize configurations, and plan for growth.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">2. How to Install dnsperf<\/h1>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #000000;color:#000000\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #000000;color:#000000\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewbox=\"0 0 24 24\" version=\"1.2\" baseprofile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1' ><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/fastpixel.io\/fr\/blog\/benchmark-your-dns-resolver-with-dnsperf-a-how-to\/#debianubuntu-installation\" >Debian\/Ubuntu Installation<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/fastpixel.io\/fr\/blog\/benchmark-your-dns-resolver-with-dnsperf-a-how-to\/#the-simplest-installation-method-uses-your-distributions-package-manager\" >The simplest installation method uses your distribution&#8217;s package manager:<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/fastpixel.io\/fr\/blog\/benchmark-your-dns-resolver-with-dnsperf-a-how-to\/#quick-start-25-domain-test-file\" >Quick Start: 25-Domain Test File<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/fastpixel.io\/fr\/blog\/benchmark-your-dns-resolver-with-dnsperf-a-how-to\/#sample-domain-list-25-entries\" >Sample Domain List (25 Entries)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/fastpixel.io\/fr\/blog\/benchmark-your-dns-resolver-with-dnsperf-a-how-to\/#basic-command\" >Basic command<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/fastpixel.io\/fr\/blog\/benchmark-your-dns-resolver-with-dnsperf-a-how-to\/#test-a-dns-server-on-a-non-standard-port-54-in-this-case\" >Test a DNS server on a non-standard port&nbsp; (54 in this case)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/fastpixel.io\/fr\/blog\/benchmark-your-dns-resolver-with-dnsperf-a-how-to\/#run-with-tcp-instead-of-udp\" >Run with TCP instead of UDP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/fastpixel.io\/fr\/blog\/benchmark-your-dns-resolver-with-dnsperf-a-how-to\/#how-to-interpret-results\" >How to interpret results:<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/fastpixel.io\/fr\/blog\/benchmark-your-dns-resolver-with-dnsperf-a-how-to\/#%f0%9f%9a%80-forwarding-resolver-unbound-dnsmasq\" >\ud83d\ude80 Forwarding Resolver (Unbound, dnsmasq)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/fastpixel.io\/fr\/blog\/benchmark-your-dns-resolver-with-dnsperf-a-how-to\/#%f0%9f%94%8d-full-recursive-resolver-unboundbind-full-recursion\" >\ud83d\udd0d Full Recursive Resolver (Unbound\/BIND full recursion)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/fastpixel.io\/fr\/blog\/benchmark-your-dns-resolver-with-dnsperf-a-how-to\/#frequently-asked-questions\" >Frequently Asked Questions<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/fastpixel.io\/fr\/blog\/benchmark-your-dns-resolver-with-dnsperf-a-how-to\/#which-are-the-top-dns-resolvers\" >Which are the top DNS resolvers?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/fastpixel.io\/fr\/blog\/benchmark-your-dns-resolver-with-dnsperf-a-how-to\/#whats-the-difference-between-recursive-and-forwarding-resolvers\" >What&#8217;s the difference between recursive and forwarding resolvers?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/fastpixel.io\/fr\/blog\/benchmark-your-dns-resolver-with-dnsperf-a-how-to\/#can-i-use-dnsperf-to-benchmark-public-resolvers\" >Can I use dnsperf to benchmark public resolvers?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/fastpixel.io\/fr\/blog\/benchmark-your-dns-resolver-with-dnsperf-a-how-to\/#why-do-results-vary-between-test-runs\" >Why do results vary between test runs?<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"debianubuntu-installation\"><\/span><strong>Debian\/Ubuntu Installation<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"the-simplest-installation-method-uses-your-distributions-package-manager\"><\/span>The simplest installation method uses your distribution&#8217;s package manager:<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\nsudo apt install -y dnsperf<\/code><\/pre>\n\n\n\n<p>If dnsperf isn&#8217;t available in your repositories, you can compile it directly:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install -y build-essential libssl-dev libbind-dev libkrb5-dev libcap-dev libxml2-dev git<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>git clone https:\/\/github.com\/DNS-OARC\/dnsperf.git\ncd dnsperf\n.\/autogen.sh\n.\/configure\nmake -j$(nproc)\nsudo make install<\/code><\/pre>\n\n\n\n<p>Verify the installation:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dnsperf -h<\/code><\/pre>\n\n\n\n<p>You should see the help output with available options and usage examples.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">3. Creating a Query File for Testing<\/h1>\n\n\n\n<p>dnsperf requires a <strong>query file<\/strong> formatted like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;domain&gt;. &lt;type&gt;<\/code><\/pre>\n\n\n\n<p>Each line represents one DNS query. The tool loops through this file continuously during benchmarking.<\/p>\n\n\n\n<p>Examples:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>google.com. A\nfacebook.com. AAAA\ncloudflare.com. MX\n8.8.8.8.in-addr.arpa. PTR<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"quick-start-25-domain-test-file\"><\/span>Quick Start: 25-Domain Test File<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<h6 class=\"wp-block-heading\">Here&#8217;s a basic query file covering common record types and real-world domains. Save this as \/tmp\/dnsperf-test.txt<\/h6>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"sample-domain-list-25-entries\"><\/span>Sample Domain List (25 Entries)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>google.com. A\nfacebook.com. A\nyoutube.com. A\nopenai.com. A\ncloudflare.com. A\nmicrosoft.com. AAAA\namazon.com. A\nreddit.com. A\ngithub.com. A\ngitlab.com. A\nnetflix.com. A\ncnn.com. A\nbbc.co.uk. A\nwikipedia.org. A\nmozilla.org. A\nstripe.com. MX\npaypal.com. MX\nairbnb.com. A\nbooking.com. A\noracle.com. AAAA\n8.8.8.8.in-addr.arpa. PTR\n1.1.1.1.in-addr.arpa. PTR\nexample.com. A\ntest12345.example999.com. A\nnonexistent-domain-abc123.com. A<\/code><\/pre>\n\n\n\n<p>This list includes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Popular domains with expected NOERROR responses<\/li>\n\n\n\n<li>Different record types (A, AAAA, MX, PTR)<\/li>\n\n\n\n<li>Non-existent domains to test NXDOMAIN handling<\/li>\n<\/ul>\n\n\n\n<p>dnsperf will loop through this file repeatedly for sustained benchmarking.<\/p>\n\n\n\n<p>Production-Grade Testing: 100,000 Domain List<\/p>\n\n\n\n<p>For realistic benchmarking that mirrors production traffic patterns, a small query file won&#8217;t cut it. With only 25 domains, your resolver&#8217;s cache hit ratio will be artificially high, making forwarding resolvers appear faster than they actually are under real-world conditions.<\/p>\n\n\n\n<p>We&#8217;ve compiled a comprehensive list of 100,000 real-world domains specifically designed for DNS benchmarking:<\/p>\n\n\n\n<p><a href=\"https:\/\/fastpixel.io\/wp-content\/uploads\/2025\/12\/100K-domains-dnsperf-test-list.txt\"><strong>Download 100K Domain List<\/strong><\/a><\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Why Use a Large Domain List?<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Realistic cache behavior<\/strong> \u2013 Simulates actual hit\/miss ratios seen in production<\/li>\n\n\n\n<li><strong>Accurate forwarding tests<\/strong> \u2013 Prevents cache from skewing results<\/li>\n\n\n\n<li><strong>Better recursion testing<\/strong> \u2013 Forces real upstream queries instead of cached responses<\/li>\n\n\n\n<li><strong>Diverse query patterns<\/strong> \u2013 Includes various TLDs, domain structures, and popularity distributions<\/li>\n\n\n\n<li><strong>Statistical significance<\/strong> \u2013 Provides enough data points for meaningful performance metrics<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Using the 100K List<\/strong><\/h4>\n\n\n\n<p>Once downloaded, use it exactly like the smaller test file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bash<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>dnsperf -s 192.168.1.10 -d \/path\/to\/100k-domains.txt -l 60<\/code><\/pre>\n\n\n\n<p>For production validation, the 100K list is essential. It reveals how your resolver performs when caching is less effective, the scenario that matters most for capacity planning.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">4. Running dnsperf<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"basic-command\"><\/span><strong>Basic command<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>The standard dnsperf syntax is straightforward:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dnsperf -s &lt;DNS-SERVER-IP&gt; -d &lt;QUERY-FILE&gt; -l &lt;SECONDS&gt;<\/code><\/pre>\n\n\n\n<p>Example: 30-second test against local resolver<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dnsperf -s 192.168.1.10 -d \/tmp\/dnsperf-test.txt -l 30<\/code><\/pre>\n\n\n\n<p>This command:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sends queries as fast as the server can handle them<\/li>\n\n\n\n<li>Runs for 30 seconds<\/li>\n\n\n\n<li>Uses UDP (default protocol)<\/li>\n\n\n\n<li>Reports comprehensive performance statistics<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"test-a-dns-server-on-a-non-standard-port-54-in-this-case\"><\/span><strong>Test a DNS server on a non-standard port&nbsp; (54 in this case)<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>dnsperf -s 176.9.21.94 -p 54 -d \/tmp\/dnsperf-test.txt -l 30<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"run-with-tcp-instead-of-udp\"><\/span><strong>Run with TCP instead of UDP<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>dnsperf -s 176.9.21.94 -d \/tmp\/dnsperf-test.txt -t -l 30<\/code><\/pre>\n\n\n\n<p>TCP tests are important because:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Some queries exceed UDP packet size limits<\/li>\n\n\n\n<li>TCP provides guaranteed delivery<\/li>\n\n\n\n<li>Performance differs significantly from UDP<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">5. Example Output and Interpretation<\/h1>\n\n\n\n<p>A typical dnsperf output looks like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Queries sent:         2,338,151\nQueries completed:    2,337,872 (99.99%)\nQueries lost:         279 (0.01%)\n\nResponse codes:       NOERROR 2,337,872 (100%)\nRun time (s):         30.000775\nQueries per second:   77,927.05\n\nAverage Latency (s):  0.000701 (0.7 ms)\nLatency StdDev (s):   0.000544<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"how-to-interpret-results\"><\/span><strong>How to interpret results:<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Metric<\/strong><\/td><td><strong>Meaning<\/strong><\/td><\/tr><tr><td><strong>QPS (Queries per second)<\/strong><\/td><td>How many queries your server can handle in steady load<\/td><\/tr><tr><td><strong>Completion %<\/strong><\/td><td>Should be 99.5%+ for healthy resolvers<\/td><\/tr><tr><td><strong>Avg Latency<\/strong><\/td><td>&lt;7ms is excellent; ~40ms performance starts to feel slow<\/td><\/tr><tr><td><strong>Timeouts<\/strong><\/td><td>Should be &lt;0.1%<\/td><\/tr><tr><td><strong>Response codes<\/strong><\/td><td>Mainly NOERROR for valid domains<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">6. What Is Considered &#8220;Good&#8221; Performance?<\/h1>\n\n\n\n<p>DNS performance depends heavily on:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CPU cores and frequency<br><\/li>\n\n\n\n<li>Whether resolver is recursive or just forwarding<br><\/li>\n\n\n\n<li>Cache hit ratio<br><\/li>\n\n\n\n<li>Network link to upstream resolvers<br><\/li>\n<\/ul>\n\n\n\n<p>But as general guidance:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%f0%9f%9a%80-forwarding-resolver-unbound-dnsmasq\"><\/span><strong>\ud83d\ude80 Forwarding Resolver (Unbound, dnsmasq)<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>On a modern Xeon CPU:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>50,000 \u2013 100,000 QPS<\/strong> = Excellent<br><\/li>\n\n\n\n<li><strong>~10-20 ms latency<\/strong> = Very good<br><\/li>\n\n\n\n<li><strong>&gt;99.9% completion<\/strong> = Very healthy<br><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%f0%9f%94%8d-full-recursive-resolver-unboundbind-full-recursion\"><\/span><strong>\ud83d\udd0d Full Recursive Resolver (Unbound\/BIND full recursion)<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>10,000 \u2013 40,000 QPS<\/strong> depending on caching<br><\/li>\n\n\n\n<li>Latency increases due to real upstream lookups<br><\/li>\n<\/ul>\n\n\n\n<p>Forwarders consistently outperform recursive resolvers by 2\u20135\u00d7.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">7. Tips for More Accurate Benchmarking<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Run dnsperf <strong>from a separate machine<\/strong> to avoid local resource conflicts<br><\/li>\n\n\n\n<li>Disable DNSSEC for pure forwarder tests<br><\/li>\n\n\n\n<li>Use at least <strong>100\u201310,000 domains<\/strong> to reduce cache effects<br><\/li>\n\n\n\n<li>Benchmark both <strong>UDP and TCP<\/strong><strong><br><\/strong><\/li>\n\n\n\n<li>Try different durations: 10s, 30s, 60s<br><\/li>\n\n\n\n<li>Monitor CPU usage with htop<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"frequently-asked-questions\"><\/span>Frequently Asked Questions<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"which-are-the-top-dns-resolvers\"><\/span><strong>Which are the top DNS resolvers?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>1. Cloudflare DNS (1.1.1.1)<\/strong> \u2013 Privacy-focused, doesn&#8217;t log IP addresses, consistently one of the fastest globally. Supports DoH\/DoT.<\/p>\n\n\n\n<p><strong>2. Google Public DNS (8.8.8.8 \/ 8.8.4.4)<\/strong> \u2013 Excellent reliability and uptime, massive infrastructure, extensive global coverage.<\/p>\n\n\n\n<p><strong>3. Quad9 (9.9.9.9)<\/strong> \u2013 Security-focused with malware\/phishing blocking, non-profit, privacy-respecting, no personal data logging.<\/p>\n\n\n\n<p><strong>4. OpenDNS (208.67.222.222 \/ 208.67.220.220)<\/strong> \u2013 Content filtering options, phishing protection, popular for families and businesses.<\/p>\n\n\n\n<p><strong>5. AdGuard DNS (94.140.14.14)<\/strong> \u2013 Blocks ads and trackers at DNS level, family protection available, fast performance.<\/p>\n\n\n\n<p>You can also explore DNS performance data at <a href=\"https:\/\/dnsperf.com\/\"><strong>DNSPerf<\/strong><\/a>. We recommend choosing a DNS resolver that best matches the geographic location of your users for optimal performance.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"whats-the-difference-between-recursive-and-forwarding-resolvers\"><\/span><strong>What&#8217;s the difference between recursive and forwarding resolvers?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p><strong>Recursive resolvers<\/strong> perform complete DNS resolution themselves, querying root servers, TLD servers, and authoritative nameservers. They offer full control but require more resources and have higher latency.<\/p>\n\n\n\n<p><strong>Forwarding resolvers<\/strong> simply forward queries to upstream resolvers (like 1.1.1.1 or 8.8.8.8) and cache responses. They&#8217;re faster, simpler to configure, and leverage optimized public infrastructure. Most internal networks use forwarding resolvers.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"can-i-use-dnsperf-to-benchmark-public-resolvers\"><\/span><strong>Can I use dnsperf to benchmark public resolvers?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Yes, but your results will include your network latency and routing to their infrastructure. This is useful for comparing public resolvers from your location, but not for measuring your local resolver&#8217;s capacity. For internal testing, always use a local IP address (192.168.x.x, 10.x.x.x).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"why-do-results-vary-between-test-runs\"><\/span><strong>Why do results vary between test runs?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Main factors: cache state (cold vs warm cache causes 10-100\u00d7 difference), network conditions, server load, and time of day. For consistent results, run at least 3 iterations, discard outliers, and average the remaining results.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">8. Conclusion<\/h1>\n\n\n\n<p>dnsperf is an essential, battle-tested tool for evaluating DNS resolver performance. Whether you&#8217;re tuning a small home resolver or validating a large-scale DNS service, dnsperf helps you measure exactly how fast and reliable your DNS infrastructure is.<\/p>\n\n\n\n<p>With just a few commands, you can benchmark:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Maximum throughput<br><\/li>\n\n\n\n<li>Latency under load<br><\/li>\n\n\n\n<li>Query loss<br><\/li>\n\n\n\n<li>Overall server health<br><\/li>\n<\/ul>\n\n\n\n<p>Properly configured DNS resolvers on modern hardware can handle enormous query loads. With Unbound in forwarding mode on decent server hardware, achieving 50,000-100,000 QPS is routine, far exceeding the requirements of most deployments.<\/p>","protected":false},"excerpt":{"rendered":"<p>DNS performance is critical for any network infrastructure. Whether you&#8217;re managing a public resolver, running a caching forwarder like Unbound or dnsmasq, or operating a high-volume recursive DNS service, you need reliable metrics to validate your setup. dnsperf is the industry-standard benchmarking tool created by DNS-OARC. It measures query throughput, latency, and stability under realistic [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":4139,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"categories":[10],"tags":[],"class_list":["post-4140","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-website-optimization"],"blocksy_meta":[],"uagb_featured_image_src":{"full":["https:\/\/fastpixel.io\/wp-content\/uploads\/2025\/12\/dns.png",1000,612,false],"thumbnail":["https:\/\/fastpixel.io\/wp-content\/uploads\/2025\/12\/dns-150x150.png",150,150,true],"medium":["https:\/\/fastpixel.io\/wp-content\/uploads\/2025\/12\/dns-300x184.png",300,184,true],"medium_large":["https:\/\/fastpixel.io\/wp-content\/uploads\/2025\/12\/dns-768x470.png",768,470,true],"large":["https:\/\/fastpixel.io\/wp-content\/uploads\/2025\/12\/dns.png",1000,612,false],"1536x1536":["https:\/\/fastpixel.io\/wp-content\/uploads\/2025\/12\/dns.png",1000,612,false],"2048x2048":["https:\/\/fastpixel.io\/wp-content\/uploads\/2025\/12\/dns.png",1000,612,false],"trp-custom-language-flag":["https:\/\/fastpixel.io\/wp-content\/uploads\/2025\/12\/dns-18x12.png",18,12,true],"betterdocs-category-thumb":["https:\/\/fastpixel.io\/wp-content\/uploads\/2025\/12\/dns-360x220.png",360,220,true]},"uagb_author_info":{"display_name":"Bianca Rus","author_link":"https:\/\/fastpixel.io\/fr\/blog\/author\/bianca\/"},"uagb_comment_info":0,"uagb_excerpt":"DNS performance is critical for any network infrastructure. Whether you&#8217;re managing a public resolver, running a caching forwarder like Unbound or dnsmasq, or operating a high-volume recursive DNS service, you need reliable metrics to validate your setup. dnsperf is the industry-standard benchmarking tool created by DNS-OARC. It measures query throughput, latency, and stability under realistic\u2026","_links":{"self":[{"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/posts\/4140","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/comments?post=4140"}],"version-history":[{"count":4,"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/posts\/4140\/revisions"}],"predecessor-version":[{"id":4147,"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/posts\/4140\/revisions\/4147"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/media\/4139"}],"wp:attachment":[{"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/media?parent=4140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/categories?post=4140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fastpixel.io\/fr\/wp-json\/wp\/v2\/tags?post=4140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}