[Dnsmasq-discuss] [PATCH] Optimize speed on massive server=/.../... records
Simon Kelley
simon at thekelleys.org.uk
Sat Nov 26 18:51:09 UTC 2022
Patch tweaked and applied.
Given the rate of good changes coming in, I'm not going to make the
final 2.88 release this weekend. Let's give it a few more days to settle.
Cheers,
Simon.
On 25/11/2022 13:11, Petr Menšík wrote:
> When looking what this change did, I have noticed mark_servers() cleanup
> of local_domains is using serv->next after it has freed serv. Use
> additional variable just like in cleanup_servers().
>
> Patch attached.
>
> On 11/21/22 23:22, Simon Kelley wrote:
>> 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
>>
>> _______________________________________________
>> Dnsmasq-discuss mailing list
>> Dnsmasq-discuss at lists.thekelleys.org.uk
>> https://lists.thekelleys.org.uk/cgi-bin/mailman/listinfo/dnsmasq-discuss
>
>
> _______________________________________________
> 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