关于LVS HASH算法的一个问题

 
http://zh.linuxvirtualserver.org/node/59
使用了如下的HASH算法:

inline unsigned ip_vs_hash_key(unsigned int key)
{
    return (key * 2654435761UL) & IP_VS_TAB_MASK;
}

发现在使用中,仅仅是key的低位产生了作用

 for (i=0; i 


输出结果是:
Hello 82, key 3e2
Hello 482, key 3e2
Hello 882, key 3e2
...
Hello 3f082, key 3e2
Hello 3f482, key 3e2
Hello 3f882, key 3e2

假如使用
(key* 2654435761UL) >>(32-MASK_N_BIT);
就不会有这个问题(取结果高位)

Forums:

这个想法不错,谢谢!:)

randomness