]> git.karo-electronics.de Git - karo-tx-linux.git/commit
TCP: Improve ipv4 established hash function.
authorDavid S. Miller <davem@davemloft.net>
Wed, 5 Mar 2008 22:49:24 +0000 (14:49 -0800)
committerChris Wright <chrisw@sous-sol.org>
Mon, 24 Mar 2008 18:47:04 +0000 (11:47 -0700)
commitbeeb75e6ebc60fb4323f9ce5cfeffaea5ccffc36
tree99f8e42a0860e80d00c594f1a76633331420256c
parent7564c2eb8926cc19fe06f8b0c6f9f08628c544da
TCP: Improve ipv4 established hash function.

Upstream commit: 7adc3830f90df04a13366914d80a3ed407db5381

If all of the entropy is in the local and foreign addresses,
but xor'ing together would cancel out that entropy, the
current hash performs poorly.

Suggested by Cosmin Ratiu:

Basically, the situation is as follows: There is a client
machine and a server machine. Both create 15000 virtual
interfaces, open up a socket for each pair of interfaces and
do SIP traffic. By profiling I noticed that there is a lot of
time spent walking the established hash chains with this
particular setup.

The addresses were distributed like this: client interfaces
were 198.18.0.1/16 with increments of 1 and server interfaces
were 198.18.128.1/16 with increments of 1. As I said, there
were 15000 interfaces. Source and destination ports were 5060
for each connection.  So in this case, ports don't matter for
hashing purposes, and the bits from the address pairs used
cancel each other, meaning there are no differences in the
whole lot of pairs, so they all end up in the same hash chain.

Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
include/net/inet_sock.h