论文部分内容阅读
随着多处理器技术的日臻成熟以及集成到单个处理器上的处理器核心数量的日趋增加,计算机的运算能力的瓶颈不断被打破,同时这也为设计具有高可扩展性的并发数据结构以及开发基于多核架构的高性能软件系统提出了挑战。并发哈希表是一种重要的并发数据结构,因其处理元素的开销为常数时间的特性被广泛应用于多核架构的软件系统开发。在并发哈希表的设计、优化以及应用中,处理器的体系结构,缓存一致性协议,内存带宽,内存访问延迟以及多线程的同步机制都对其性能产生重大影响。本文针对基于多核系统的并发哈希表做了如下工作:首先,设计了用于并发哈希表的测试、评估的统一测试框架CHTBench。CHTBench是目前第一个用于并发哈希表性能比较与评估的,能保证测试结果公平性与客观性的测试框架。它提供统一的测试接口,具有可配置的线程与核的映射关系,能够测试不同规模的数据集以及数据集中更新操作的比重等。此外,CHTBench使用sspfd进行延迟的测算,综合考察不同并发哈希表线程扩展性,查询和更新吞吐量等宏观指标。结合其它的工具,如likwid对缓存命中率,内存带宽,跨内存节点通信开销等微观指标进行分析以及sspfd对各种操作类型的延迟进行比较。使用CHTBench可以为并发哈希表的评估和比较提供相对公平的测试环境。第二,基于CHTBench测试框架对现有的几种具有代表性的并发哈希表在四个不同的多核系统上进行了深入的剖析。对并发哈希表的评估选用的性能指标涵盖宏观和微观两个层面,包括吞吐量的线程扩展性,延迟,分层内存结构对性能的影响,不同线程与核映射方式之间的性能差异,同步机制的性能评估以及内存消耗。通过对上述指标的分析,找出现有并发哈希表设计方法中存在的问题以及可能的性能瓶颈,分析总结了8条设计、优化并发哈希表的最佳实践原则,为将来进一步设计基于多核系统的、具有高可扩展性的并发哈希表奠定理论和实践基础。根据对比现有文献以及相关研究工作,我们对于并发哈希表的评估所用的方法和涉及的评估指标是迄今为止最全面的。第三,使用Intel限制性事务内存(RTM)实现了基于硬件事务内存的缓存行哈希表。使用全局锁实现了基于RTM的缓存行哈希表。实验评估结果表明,当数据集的规模大于最后一级缓存容量时,基于RTM的缓存行哈希表的性能是使用传统的细粒度锁方法实现的缓存行哈希表的120%。使用硬件事务内存进行并发哈希表的设计真正做到了粗粒度锁方法的简便与细粒度锁方法的高性能的有机结合。同时,为了消除Intel TSX的Lemming效应对性能的影响,设计了两种软件辅助方法:软件辅助的锁省略方法(SLR)和软件辅助的冲突管理方法(SCM)。实验结果表明,这两种方法对基于RTM的缓存行哈希表性能的提升比使用Intel官方推荐的RTM Retry机制更明显。最后,使用不完整键Cuckoo哈希方法设计并实现了支持多线程并发的Cuckoo过滤器。这是迄今为止第一款支持多线程并发的过滤器实现,同时也是第一款基于硬件事务内存的过滤器。原始的布隆过滤器不支持删除操作,实现删除操作需要引入额外的空间开销,通过使用不完整键Cuckoo哈希方法,通过哈希函数生成指纹,利用Cuckoo哈希表多路组相连能够存储多个相同的指纹信息的特点实现了删除操作,不额外增加过滤器的空间开销。使用基于IntelRTM的读写锁实现了多线程并发的Cuckoo过滤器。实验评估表明,并发Cuckoo过滤器的初始化速度是使用单个线程初始化的10倍,查询操作的性能是单个线程的38倍,处理更新占10%的数据集的性能是单个线程的11倍。此外,还对retry的最大值如何选取以及使用不同软件优化方法的Cuckoo过滤器版本进行了线程扩展性的比较。