[Dnsmasq-discuss] [PATCH] Optimize speed on massive server=/.../... records

Ye Zhou zhouye01 at gmail.com
Sun Nov 20 05:50:10 UTC 2022


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
... (lots of records)
server=/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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/attachments/20221120/4f14f0b7/attachment.htm>


More information about the Dnsmasq-discuss mailing list