Skip to main content
QUICK REVIEW

[论文解读] Concurrent Hash Tables: Fast and General?(!)

Tobias Maier, Peter Sanders|arXiv (Cornell University)|Jan 15, 2016
Algorithms and Data Compression参考文献 20被引用 6
一句话总结

本文提出了一种高度优化的无锁并发哈希表,基于线性探测技术,支持动态扩容和通用键值类型,同时保持接近峰值性能。结果表明,通过精心设计,添加可扩展性特性(如扩容、删除和任意数据类型)的性能开销极小,相较于现有通用并发哈希表,性能最高可提升一个数量级,尤其在高竞争环境下表现优异。

ABSTRACT

Concurrent hash tables are one of the most important concurrent data structures with numerous applications. Since hash table accesses can dominate the execution time of the overall application, we need implementations that achieve good speedup. Unfortunately, currently available concurrent hashing libraries turn out to be far away from this requirement in particular when contention on some elements occurs. Our starting point for better performing data structures is a fast and simple lock-free concurrent hash table based on linear probing that is limited to word-sized key-value types and does not support dynamic size adaptation. We explain how to lift these limitations in a provably scalable way and demonstrate that dynamic growing has a performance overhead comparable to the same generalization in sequential hash tables. We perform extensive experiments comparing the performance of our implementations with six of the most widely used concurrent hash tables. Ours are considerably faster than the best algorithms with similar restrictions and an order of magnitude faster than the best more general tables. In some extreme cases, the difference even approaches four orders of magnitude.

研究动机与目标

  • 为解决现有通用并发哈希表在真实工作负载下(尤其是存在竞争和动态扩容时)可扩展性差的问题。
  • 探究在将一个快速、固定大小、字长的线性探测哈希表扩展为支持动态扩容、删除操作和任意数据类型时,是否能够保持高性能。
  • 评估在多核环境中并发哈希表设计中性能与通用性之间的权衡。
  • 证明通用化带来的性能开销与顺序哈希表相当,使其在性能关键的应用中具有可行性。

提出的方法

  • 设计一种针对字长键值优化的无锁线性探测哈希表,仅使用原子比较并交换(CAS)操作。
  • 通过一种新颖且可扩展的迁移算法,将基础设计扩展以支持动态扩容,避免全局同步瓶颈。
  • 引入基于标记的删除与内存回收机制,实现在不阻塞的情况下高效重用空间。
  • 利用英特尔硬件事务同步(TSX)加速高竞争场景下的插入和更新操作。
  • 通过序列化和指针式存储实现对任意键值类型的通用支持,最大限度减少性能影响。
  • 使用部分模板特化和抽象层,提供统一且用户友好的接口,同时为特定场景保留高性能。

实验结果

研究问题

  • RQ1能否在无锁线性探测哈希表中实现动态扩容,且与固定大小版本相比性能下降极小?
  • RQ2在存在竞争和不同工作负载下,高度优化的固定大小并发哈希表与通用实现相比性能如何?
  • RQ3在并发哈希表中支持任意键值类型和删除操作的性能开销是多少?是否可与顺序哈希表的扩展开销相媲美?
  • RQ4硬件事务内存(HTM)在并发插入和更新操作中能在多大程度上提升性能?
  • RQ5通过抽象和模板特化,单一实现能否高效支持专用和通用使用场景?

主要发现

  • 在高竞争查找操作下,固定大小、字长的线性探测哈希表性能优于所有竞争对手高达四个数量级,表明在读密集场景中使用锁或CAS操作会带来极高的性能代价。
  • 动态扩容的性能开销对插入和更新操作不足两倍,对查找操作可忽略不计,与顺序哈希表相当。
  • 在通用实现中,仅有TBB、Cuckoo和RCU支持任意数据类型,但它们的插入性能比本方案至少慢一个数量级。
  • Cuckoo哈希表的插入性能仅慢五倍,但在高竞争下慢了5,600倍,凸显了部分通用设计的脆弱性。
  • 所提出的基于标记的迁移扩容机制在更新密集型工作负载下性能优于全局同步扩容机制。
  • 硬件事务内存(英特尔TSX)进一步加速了插入和更新操作,显示出在高竞争场景下实现性能提升的巨大潜力。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。