Rychlost paralelniho resolvovani (long)

Jaroslav Gratz xgratz01 na stud.fee.vutbr.cz
Neděle Leden 14 16:48:49 CET 2001


On Fri, 12 Jan 2001, Michal Krause wrote:

> Prosel jsem si to nekolikrat dokola, ale zjevnou chybu nevidim. Presto
> jeden thread zresolvuje tech 1000 adres asi 48 vterin, deset threadu
> priblizne za minutu. Ani pri opakovanych testech jsem se s vice vlakny
> nedostal na stejny cas, jako s vlaknem jednim.
> 
> Zadna dalsi vlakna nebezi (main() jen vytvori thready a vola
> pthread_exit()), takze chyba muze byt IMHO jedine v gethostbyaddr_r().

Je vubec gethostbyaddr_r() v Linuxu reentrantni? Ja bych rekl ze ne, i
kdyz by mela byt. Jenoduchy test:

ipchains -A input -p TCP -d 0.0.0.0/0 53 -j DENY
ipchains -A input -p UDP -d 0.0.0.0/0 53 -j DENY

Pak zavolam gethostbyaddr_r() a samozrejme nic nezresolvuje a po 75
vterinach to zabali (nejaky timeout). Kdyz zavolam gethostbyaddr_r() 2x,
je to celkem 150 vterin. Kdyz zavolam gethostbyaddr_r soucasne ve dvou
threadech, je to taky 150 vterin, takze s tou reentrantnosti bych to videl
cerne.

Blbej napad, co s tim delat: V kazdem threadu spustit nslookup a nechat
jej prevadet IP adresy na jmena. Mam dojem, ze nslookup nevola
gethostby*() a rovnou posila pakety nameserveru. Ale je to dost velka
rezie navic. No ja rikal, ze je to blbej napad :)

Jaroslav Gratz



Další informace o konferenci Linux