<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >PowerDNS Recursor performance</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="PowerDNS manual" HREF="index.html"><LINK REL="UP" TITLE="PowerDNS resolver/recursing nameserver" HREF="built-in-recursor.html"><LINK REL="PREVIOUS" TITLE="Controlling and querying the recursor" HREF="rec-control.html"><LINK REL="NEXT" TITLE="Details" HREF="recursor-details.html"></HEAD ><BODY CLASS="SECT1" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >PowerDNS manual</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="rec-control.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" >Chapter 12. PowerDNS resolver/recursing nameserver</TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="recursor-details.html" ACCESSKEY="N" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="SECT1" ><H1 CLASS="SECT1" ><A NAME="RECURSOR-PERFORMANCE" >12.3. PowerDNS Recursor performance</A ></H1 ><P > To get the best out of the PowerDNS recursor, which is important if you are doing thousands of queries per second, please consider the following. <P ></P ><UL ><LI ><P > Limit the size of the cache to a sensible value. Cache hit rate does not improve meaningfully beyond 4 million <B CLASS="COMMAND" >max-cache-entries</B >, reducing the memory footprint reduces CPU cache misses. </P ></LI ><LI ><P > Compile using g++ 4.1 or later. This compiler really does a good job on PowerDNS, much better than 3.4 or 4.0. </P ></LI ><LI ><P > Consider performing a 'profiled build' as described in the README. This is good for a 20% performance boost in some cases. </P ></LI ><LI ><P > When running with >3000 queries per second, and running Linux versions prior to 2.6.17 on some motherboards, your computer may spend an inordinate amount of time working around an ACPI bug for each call to gettimeofday. This is solved by rebooting with 'clock=tsc' or upgrading to a 2.6.17 kernel. </P ><P > The above is relevant if dmesg shows <B CLASS="COMMAND" >Using pmtmr for high-res timesource</B > </P ></LI ><LI ><P > A busy server may need hundreds of file descriptors on startup, and deals with spikes better if it has that many available later on. Linux by default restricts processes to 1024 file descriptors, which should suffice most of the time, but Solaris has a default limit of 256. This can be raised using the ulimit command. FreeBSD has a default limit that is high enough for even very heavy duty use. </P ></LI ><LI ><P > If you need it, try <B CLASS="COMMAND" >--fork</B >, this will fork the daemon into two halves, allowing it to benefit from a second CPU. This feature almost doubles performance, but is a bit of a hack. </P ></LI ></UL > Following the instructions above, you should be able to attain very high query rates. </P ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="rec-control.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="recursor-details.html" ACCESSKEY="N" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Controlling and querying the recursor</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="built-in-recursor.html" ACCESSKEY="U" >Up</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Details</TD ></TR ></TABLE ></DIV ></BODY ></HTML >