xxHash

xxHash
Extremely Fast Hash
设计者
Yann Collet
首次发布
2012 (XXH32/64)
2019 (XXH3)
类别
非加密哈希函数
输出长度
32 / 64 / 128 bit
速度
~11 GB/s (XXH3)
许可证
BSD 2-Clause
安全用途
不适用

xxHash 是由 Yann Collet(同时也是 Zstandard 压缩算法的作者)设计的超高速非加密哈希算法族。xxHash 以接近内存带宽极限的吞吐量著称,广泛用于数据校验、文件分片、哈希表等对性能要求极高的场景。

算法变体
变体输出发布速度 (GB/s)特点
XXH3232 bit2012~6.0兼容32位平台,简单快速
XXH6464 bit2012~9.564位平台最佳,广泛使用
XXH364/128 bit2019~11.0最新版本,速度之王
XXH128128 bit2019~11.0XXH3 的128位输出变体
XXH3 技术特点

XXH3 是 xxHash 系列的最新成员,采用了多项创新技术:

  • 宽读取策略:每次读取 64 字节(一行缓存行),充分利用内存带宽
  • 延迟乘法:使用 64×64→128 位乘法作为主要混合手段,比传统旋转更高效
  • 分层处理:小输入(≤ 16 字节)使用专用快速路径,中等输入使用迭代路径,大输入使用条纹(stripe)路径
  • 秘密值:使用预定义的随机常量表(secret)增强分布质量
  • 零分支设计:核心循环无分支预测失败
XXH3-64 核心迭代(简化): for each 64-byte stripe: # 读取两个 64 位值 data_val = read64(input + offset) data_val2 = read64(input + offset + 8) # 使用秘密值和乘法混合 acc += data_val ^ secret[i] acc = mul128_fold64(acc, data_val2) # 更多轮混合... final_mix(acc) # 最终雪崩混合
性能基准

在 Intel Core i9-11900K (DDR4-3200) 上的实测吞吐量(大输入,单线程):

算法吞吐量 (GB/s)占内存带宽比例
XXH3~11.0~70%
XXH64~9.5~60%
CRC-32 (硬件)~15.0~94%
MurmurHash3~5.5~34%
BLAKE3~7.0~44%
SHA-256~1.8~11%
应用场景
  • 数据校验:Zstandard 压缩格式使用 xxHash 作为默认校验
  • 分布式存储:Ceph、MinIO 等用于数据分片和校验
  • 数据库:ClickHouse 用于数据校验和哈希分区
  • 文件系统:Btrfs 的 xxHash 校验选项
  • 网络:gRPC 用于消息校验
参考文献
  1. Collet, Y. (2012-2024). "xxHash — Extremely Fast Hash Algorithm". GitHub: cyan4973/xxHash.
  2. xxHash Benchmark. https://github.com/Cyan4973/xxHash#benchmark