<html><head></head><body><div>Hi,</div><div><br></div><div>we've configured a timeout of 15 seconds for xfr. I did see a load improvement (of course the server never was that loaded to begin with, but it is calming down and all CPU cycles count <img src="cid:c79f8b7ee15d98a45af64d9785946643942877a4.camel@telenet.be-0" alt=":-)" width="16px" height="16px"> )</div><div><br></div><div>Franky</div><div><span></span></div><div><br></div><div>On Fri, 2022-09-16 at 13:32 +0200, Jeroen Koekkoek wrote:</div><blockquote type="cite" style="margin:0 0 0 .8ex; border-left:2px #729fcf solid;padding-left:1ex"><div>Hi Anand, Franky,<br></div><div><br></div><div>Just a quick remark on Anand's excelent explanation.<br></div><div><br></div><div>It's not the child processes that apply updates. Rather, it's the main<br></div><div>server that gets forked, applies the updates and then starts new<br></div><div>children. If the reload succeeds, the old server and it's children are<br></div><div>killed.<br></div><div><br></div><div>The reason for this is that it gives us completely lock free database<br></div><div>access across multiple processes and that greatly improves performance.<br></div><div>This builds on the fork behavior found on UNIX platforms, which shares<br></div><div>the memory between every forked process in a copy-on-write manner. On<br></div><div>unices, forking is relatively cheap.<br></div><div><br></div><div>Obviously, if you have lots of zone updates and there are lots of<br></div><div>restarts, that becomes increasingly expensive. Allowing for a little<br></div><div>more time between reloads solves that, like Anand stated.<br></div><div><br></div><div>Best,<br></div><div>Jeroen<br></div><div><br></div><div><br></div><div>On Thu, 2022-09-15 at 15:48 +0200, Anand Buddhdev via nsd-users wrote:<br></div><blockquote type="cite" style="margin:0 0 0 .8ex; border-left:2px #729fcf solid;padding-left:1ex"><div>On 15/09/2022 15:28, Franky Van Liedekerke wrote:<br></div><div><br></div><div>Hi Franky,<br></div><div><br></div><blockquote type="cite" style="margin:0 0 0 .8ex; border-left:2px #729fcf solid;padding-left:1ex"><div>So the process restarts to serve freshly updated zones? Is there<br></div><div>any<br></div></blockquote><div><br></div><div>Yes, kind of. The master creates new child processes, which have the<br></div><div>old <br></div><div>zone data in them. These child processes apply the updates to their <br></div><div>in-memory copy of the zones, and then take over serving zones from<br></div><div>the <br></div><div>previous processes.<br></div><div><br></div><blockquote type="cite" style="margin:0 0 0 .8ex; border-left:2px #729fcf solid;padding-left:1ex"><div>reason to that logic? Because it is indeed a server that serves<br></div><div>more<br></div><div>than 7000 zones with the real masters indeed updating their zones<br></div><div>regularly, and restarting a dns process because a zone was updated<br></div><div>is a<br></div><div>very costly step ...<br></div></blockquote><div><br></div><div>Well, there are different ways to apply updates to existing zones,<br></div><div>and <br></div><div>the NSD developers chose this one (fork new child processes to apply<br></div><div>the <br></div><div>update). Other name servers like BIND and Knot DNS do things<br></div><div>differently.<br></div><div><br></div><div>I agree with you that it's not the most efficient way to do things.<br></div><div>For <br></div><div>starters, NSD temporarily causes memory usage to double when applying<br></div><div>zone updates. So you either have to provision a server with double<br></div><div>the <br></div><div>amount of RAM, or play tricks with swap and/or tune the kernel's<br></div><div>memory <br></div><div>variables (eg. overcommit) to ensure that fork() doesn't fail.<br></div><div><br></div><div>However, this is how NSD works, so if you're using it, then it's good<br></div><div>to <br></div><div>understand it, and tune your server accordingly.<br></div><div><br></div><div>If you feel that the reloads are too frequent, you can slow them down<br></div><div>by <br></div><div>adjusting "xfrd-reload-timeout" from the default of 1s to 10s or even<br></div><div>higher. This causes the server processes to be restarted less <br></div><div>frequently. The consequence is that more updates are batched<br></div><div>together, <br></div><div>and zone updates will not be visible immediately.<br></div><div><br></div><div>Regards,<br></div><div>Anand<br></div><div>_______________________________________________<br></div><div>nsd-users mailing list<br></div><div><a href="mailto:nsd-users@lists.nlnetlabs.nl">nsd-users@lists.nlnetlabs.nl</a><br></div><div><a href="https://lists.nlnetlabs.nl/mailman/listinfo/nsd-users">https://lists.nlnetlabs.nl/mailman/listinfo/nsd-users</a><br></div></blockquote><div><br></div></blockquote></body></html>