Messages in this thread Patch in this message | | | Date | Fri, 30 Apr 2004 16:33:24 -0500 | From | "Jose R. Santos" <> | Subject | Re: [PATCH] dentry and inode cache hash algorithm performance changes. |
| |
On 04/30/04 15:57:01, Jose R. Santos wrote: > err... Wrote the patch to fast. It should read > > tmp = (hashval * sb) ^ (GOLDEN_RATIO_PRIME + hashval) / L1_CACHE_BYTES > > I screw up... I'll send a fixed patch in a while.
Just notice I've made another error in the inode hash code.
Fixed patch (I hope) with beautification.
-JRS
diff -Nru a/fs/dcache.c b/fs/dcache.c --- a/fs/dcache.c Fri Apr 30 16:27:41 2004 +++ b/fs/dcache.c Fri Apr 30 16:27:41 2004 @@ -28,6 +28,7 @@ #include <asm/uaccess.h> #include <linux/security.h> #include <linux/seqlock.h> +#include <linux/hash.h> #define DCACHE_PARANOIA 1 /* #define DCACHE_DEBUG 1 */ @@ -799,8 +800,8 @@ static inline struct hlist_head * d_hash(struct dentry * parent, unsigned long hash) { - hash += (unsigned long) parent / L1_CACHE_BYTES; - hash = hash ^ (hash >> D_HASHBITS); + hash += ((unsigned long) parent ^ GOLDEN_RATIO_PRIME) / L1_CACHE_BYTES; + hash = hash ^ ((hash ^ GOLDEN_RATIO_PRIME) >> D_HASHBITS); return dentry_hashtable + (hash & D_HASHMASK); } diff -Nru a/fs/inode.c b/fs/inode.c --- a/fs/inode.c Fri Apr 30 16:27:41 2004 +++ b/fs/inode.c Fri Apr 30 16:27:41 2004 @@ -671,12 +671,13 @@ static inline unsigned long hash(struct super_block *sb, unsigned long hashval) { - unsigned long tmp = hashval + ((unsigned long) sb / L1_CACHE_BYTES); - tmp = tmp + (tmp >> I_HASHBITS); + unsigned long tmp; + + tmp = (hashval * (unsigned long)sb) ^ (GOLDEN_RATIO_PRIME + hashval) / + L1_CACHE_BYTES; + tmp = tmp ^ ((tmp ^ GOLDEN_RATIO_PRIME) >> I_HASHBITS); return tmp & I_HASHMASK; } - -/* Yeah, I know about quadratic hash. Maybe, later. */ /** * iunique - get a unique inode number - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |