xxHash 是一种极快的哈希算法,在 RAM 速度限制下运行。它成功完成了 SMHasher 测试套件,该套件评估了哈希函数的碰撞、分散和随机性质量。代码具有高度的可移植性,所有平台上的哈希值都相同(little / big endian)。
它有四种版本(XXH32、XXH64、XXH3_64bits和XXH3_128bits)。最新的变体,XXH3,提供了全面的性能改进,特别是在小数据上。
参考系统使用英特尔 i7-9700K cpu,并运行 Ubuntu x64 20.04。开源基准测试程序是用 clang v10.0编 译的,使用- O3flag。
Hash Name | Width | Bandwidth (GB/s) | Small Data Velocity | Quality | Comment |
---|---|---|---|---|---|
XXH3 (SSE2) | 64 | 31.5 GB/s | 133.1 | 10 | |
XXH128 (SSE2) | 128 | 29.6 GB/s | 118.1 | 10 | |
RAM sequential read | N/A | 28.0 GB/s | N/A | N/A | for reference |
City64 | 64 | 22.0 GB/s | 76.6 | 10 | |
T1ha2 | 64 | 22.0 GB/s | 99.0 | 9 | Slightly worse collisions |
City128 | 128 | 21.7 GB/s | 57.7 | 10 | |
XXH64 | 64 | 19.4 GB/s | 71.0 | 10 | |
SpookyHash | 64 | 19.3 GB/s | 53.2 | 10 | |
Mum | 64 | 18.0 GB/s | 67.0 | 9 | Slightly worse collisions |
XXH32 | 32 | 9.7 GB/s | 71.9 | 10 | |
City32 | 32 | 9.1 GB/s | 66.0 | 10 | |
Murmur3 | 32 | 3.9 GB/s | 56.1 | 10 | |
SipHash | 64 | 3.0 GB/s | 43.2 | 10 | |
FNV64 | 64 | 1.2 GB/s | 62.7 | 5 | Poor avalanche properties |
Blake2 | 256 | 1.1 GB/s | 5.1 | 10 | Cryptographic |
SHA1 | 160 | 0.8 GB/s | 5.6 | 10 | Cryptographic but broken |
MD5 | 128 | 0.6 GB/s | 7.8 | 10 | Cryptographic but broken |
XXH3 专为在长输入和小输入上都具有出色的性能而设计,如下图所示:
xxHash已经用Austin Appleby的优秀的SMHasher测试套件进行了测试,并通过了所有测试,确保了合理的质量水平。它还通过了SMHasher较新分叉的扩展测试,具有额外的场景和条件。
最后,xxHash提供了自己的大规模碰撞测试器,能够生成并比较数十亿的哈希值,以测试64位哈希算法的极限。在这方面,xxHash也具有良好的结果,与生日悖论一致。更详细的分析记录在 wiki 中。