Thread (23 messages) 23 messages, 6 authors, 2007-04-30

Re: many sockets, slow sendto

From: Eric Dumazet <hidden>
Date: 2007-03-21 22:13:18

Eric Dumazet a écrit :
Currently, udp_hash[UDP_HTABLE_SIZE] is using a hash function based on 
dport number only.

In your case, as you use a single port value, all sockets are in a 
single slot of this hash table :
To find the good socket, __udp4_lib_lookup() has to search in a list 
with thousands of elements. Not that good, isnt it ? :(
In case you want to try, here is a patch that could help you :)

[PATCH] INET : IPV4 UDP lookups converted to a 2 pass algo

Some people want to have many UDP sockets, binded to a single port but many 
different addresses. We currently hash all those sockets into a single chain. 
Processing of incoming packets is very expensive, because the whole chain must 
be examined to find the best match.

I chose in this patch to hash UDP sockets with a hash function that take into 
account both their port number and address : This has a drawback because we 
need two lookups : one with a given address, one with a wildcard (null) address.

Signed-off-by: Eric Dumazet <redacted>

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help