[Dnsmasq-discuss] [PATCH] Optimize speed on massive server=/.../... records
Simon Kelley
simon at thekelleys.org.uk
Mon Nov 21 22:22:44 UTC 2022
Thanks for this. It was in my mind that vary large number of domains
would be --local=/domain/ or --address=/domain/, not forwarding to servers.
I've applied something that looks very like your patch, but with
cosmetic code changes.
Cheers,
Simon.
On 20/11/2022 05:50, Ye Zhou wrote:
> Hi all,
>
> I'm attaching a patch to optimize a speed issue introduced in version 2.86.
>
> I have two ISP upstreams and need to forward different sites to
> different ISP's DNS providers. For example:
>
> server=/meituan.com/114.114.114.114 <http://meituan.com/114.114.114.114>
> ... (lots of records)
> server=/taobao.com/223.5.5.5 <http://taobao.com/223.5.5.5>
> ... (lots of records)
>
> It works well before v2.86. Since v2.86 the configuration load time
> becomes extremely long (more than 1 minutes to load all server records).
> The time consuming part is inside the rewritten domain-match.c. When
> adding a new server record, the code will traverse all existing records
> so the configuration load becomes quadratic time complexity. The issue
> still persists on v2.88rc3.
> This patch will optimize the config load time by bypassing the time
> consuming code block. During the config load mark_servers() will never
> be called so does not need to waste time on the record traversal and
> re-order part.
>
> Before:
> dnsmasq --test 77.50s user 0.30s system 99% cpu 1:17.84 total
> After:
> dnsmasq --test 0.16s user 0.02s system 99% cpu 0.188 total
>
> https://gist.github.com/zhouye/adfd509f51645d314f53992331449c45
> <https://gist.github.com/zhouye/adfd509f51645d314f53992331449c45>
>
>
> _______________________________________________
> Dnsmasq-discuss mailing list
> Dnsmasq-discuss at lists.thekelleys.org.uk
> https://lists.thekelleys.org.uk/cgi-bin/mailman/listinfo/dnsmasq-discuss
More information about the Dnsmasq-discuss
mailing list