Eric Dumazet wrote:Chris Friesen a Ãcrit :
Based on the profiling information we're spending time in sctp_endpoint_lookup_assoc() which doesn't actually use hashes, so I can't see how the hash would be related. I'm pretty new to SCTP though, so I may be missing something.
Well, it does use hashes :)
hash = sctp_assoc_hashfn(ep->base.bind_addr.port, rport);
head = &sctp_assoc_hashtable[hash];
read_lock(&head->lock);
sctp_for_each_hentry(epb, node, &head->chain) {
/* maybe your machine is traversing here a *really* long chain */
}
The latest released kernel doesn't have this code, it was only added in November. The SCTP maintainer just pointed me to the patch, and made some other suggestions as well.