[Dnsmasq-discuss] Extremely long startup times when using libidn2 (and proposed fix)
Simon Kelley
simon at thekelleys.org.uk
Wed Sep 8 20:49:45 UTC 2021
On 06/09/2021 14:27, Gustaf Ullberg wrote:
> Hi Simon and dnsmasq contributors,
>
> I am running dnsmasq with a blocklist from
> https://github.com/notracking/hosts-blocklists/blob/master/dnsmasq/dnsmasq.blacklist.txt
> <https://github.com/notracking/hosts-blocklists/blob/master/dnsmasq/dnsmasq.blacklist.txt>
>
> I have noticed that building dnsmasq with libidn2 support (which my
> distro does) can cause extreme slowdowns. The slowdowns seem to come
> from the call to idn2_to_ascii_lz in canonicalise() being very slow.
>
> idn2_to_ascii_lz is run on every domain name in the blocklist to encode
> special characters, and this is surprisingly slow even when there are no
> special characters. I developed a patch (attached to this email) that
> checks a domain name for other characters than . - a-z 0-9. If any such
> character is found, the domain name will be encoded. If no such
> character is found the domain name will not be encoded (as encoding
> won't change it). This removes most of the overhead of using libidn2.
> Unless you find any problems with this approach, I wish the patch can be
> mainlined.
>
> Some benchmarks on a Raspberry Pi (slow, but probably not an uncommon
> device for running dnsmasq) running ArchLinux and dnsmasq git master:
>
> # Without libidn2: Acceptable speed
>> make
>> time ./src/dnsmasq -C dnsmasq.blacklist.txt --test
> dnsmasq: syntax check OK.
>
> real 0m3.699s
> user 0m3.468s
> sys 0m0.200s
>
>
>
> # With libidn2: To slow to be usable
>> make COPTS="-DHAVE_LIBIDN2"
>> time ./src/dnsmasq -C dnsmasq.blacklist.txt --test
> dnsmasq: syntax check OK.
>
> real 1m6.921s
> user 0m59.509s
> sys 0m0.606s
>
>
> # With libidn2 and attached patch: Back to acceptable speed
>> git am 0001-Avoid-IDN-translations-when-not-needed.patch
>> make COPTS="-DHAVE_LIBIDN2"
>> time ./src/dnsmasq -C dnsmasq.blacklist.txt --test
> dnsmasq: syntax check OK.
>
> real 0m3.903s
> user 0m3.643s
> sys 0m0.219s
I see a similar ratio (but much faster absolute execution times) on my
Pentium laptop with the latest code.
Petr's implementation looks better, but the idea is a good one.
Will add to the 2.87 cycle.
Cheers,
Simon.
>
> Best regards,
> Gustaf
>
> _______________________________________________
> 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