commit beeb75e6ebc60fb4323f9ce5cfeffaea5ccffc36
Author: David S. Miller <[EMAIL PROTECTED]>
Date:   Wed Mar 5 14:49:24 2008 -0800

    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 <[EMAIL PROTECTED]>
    Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]>
    Signed-off-by: Chris Wright <[EMAIL PROTECTED]>

diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h
index 70013c5..89cd011 100644
--- a/include/net/inet_sock.h
+++ b/include/net/inet_sock.h
@@ -175,7 +175,8 @@ extern void build_ehash_secret(void);
 static inline unsigned int inet_ehashfn(const __be32 laddr, const __u16 lport,
                                        const __be32 faddr, const __be16 fport)
 {
-       return jhash_2words((__force __u32) laddr ^ (__force __u32) faddr,
+       return jhash_3words((__force __u32) laddr,
+                           (__force __u32) faddr,
                            ((__u32) lport) << 16 | (__force __u32)fport,
                            inet_ehash_secret);
 }
_______________________________________________
unionfs-cvs mailing list: http://unionfs.filesystems.org/
[email protected]
http://www.fsl.cs.sunysb.edu/mailman/listinfo/unionfs-cvs

Reply via email to