原贴:http://zh.linuxvirtualserver.org/node/326
关于LVS HASH算法的一个问题
由 peon 在 周日, 2006-09-17 22:08 提交
LVS集群
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 < 0xFF ; i++)
{
ip = (i << 10) + 0x82;
printf("Hello %x, key %x /n" , ip, ip_vs_hash_key(ip) );
}
输出结果是:
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);
就不会有这个问题(取结果高位)
» 1709 次阅读
这个想法不错,谢谢
由 wensong 在 周六, 2006-09-23 18:20 提交
这个想法不错,谢谢!:)
»
回复