面向持久内存的写优化动态哈希CCEH

引言:

本篇文章由韩国蔚山国立科学技术学院Moohyeon Nam等人发表在FAST‘19上,主要研究关注持久内存PM或者非易失内存NVM上的动态哈希设计,解决一致性问题和以及传统静态哈希resize问题。

背景

静态hash

传统的静态散列(hash音译哈希)在哈希键冲突时,需要进行全表的重新散列操作。而全表的重新散列操作需要大量的计算资源和存储开销,是比较昂贵的。
为了避免全表重新散列操作,引入了线性探测(linear probing)、链式(chaining)以及双散列如布谷鸟散列。

基于磁盘的可扩展哈希(Extendible hashing)

动态地分裂一个桶(bucket)或同时合并两个bucket。插入一个键值对,如果散列到的桶满载了,则出现了散列冲突,需要分裂该桶。分裂过程需要更新目录,至少需要更新两个指针。如果单一指针指向了满载的桶,则需要进行目录加倍操作。

持久内存PM(persistent memory)

PM具有和DRAM相当的高性能,字节寻址,以及具有如辅存SSD/HDD的持久性。
挑战有三点:
(1)PM的原子写单元大小为8字节;
(2)易失性CPU缓存cache和PM之间的数据传输单元为64字节的缓存行大小;
(3)为了优化计算机性能,CPU或内存控制器会重新排序内存写操作,因此内存写操作的有序性没有保证。

缓存感知的可扩展散列

内存扩展散列的挑战

方案一:扩展散列有着页大小的bucket,而对bucket的访问却是以64字节缓存行大小。好处是目录较小,指针索引少。
方案二:扩展散列有着缓存行大小的bucket,由于每个缓存行需要一个指针,因此需要一个大的目录。

面向PM的扩展散列的挑战

分裂操作需要更新多个指针,而这一操作过程不能够确保故障原子性(failure-atomic)。

改文章的贡献点

主要有如下3点:
(1)3层结构,通过引入中间层segment,查找操作仅需要访问两个缓存行即可;
(2)故障原子的目录更新操作(Failure atomic Directory Updates);引入split buddy tree管理分裂历史;
(3)故障原子的段分裂(Failure atomic Segment Split),通过延迟删除(lazy deletion)机制最小化脏写(dirty writes)。

段segment,中间层

将多个缓存行大小的bucket组成一组称为段(segment)。
通过引入中间层段,使得动态散列CCEH能够确保减小目录大小并且维持小的散列桶大小。
3层结构:目录(directory)–段(segment)–缓存行大小的桶(bucket)。

最小化段中缓存行的访问

如果段很大,那么如何减少缓存行的访问呢?
通过散列key分别对段和桶进行索引,过滤掉无关的段和桶。

故障原子目录更新

恢复:CCEH中的拆分历史伙伴树(buddy tree)

使用MSB段索引,拆分的段由相邻目录条目指向;每个段必须要有指针指向,否则回滚该分裂操作。(由于本人能力有限,对这个buddy tree的分裂恢复过程不是很懂,就先写这么多)。

故障原子段分裂

传统的段分裂采用写时拷贝(COW,copy-on-write)方法,可以支持无锁查询(lock-free search)。
延迟删除操作可以最小化脏写次数;可以通过单次缓存行刷新使得所有迁移的数据失效。

实验环境

在这里插入图片描述

性能评估

CCEH和传统的扩展散列对比

在这里插入图片描述
从上图可以看出,CCEH和传统的可扩展散列进行对比,有如下的优缺点:
优点:对不同的目录大小具有常量级的缓存行访问数;
缺点:降低的内存占用率以及由于散列冲突导致的相对更多的缓存行刷新操作。

插入性能比较

在这里插入图片描述
由于更少的缓存行访问,延迟删除使得段分裂操作高效,因此CCEH获得了比Level hashing(OSDI‘18)快70%的性能。

装载因子

在这里插入图片描述
其中的CCEH括号内的数字4,16等表示段内线性探测的距离;改文章指出Level hashing遭遇如其他静态散列的全表重新散列操作,而CCEH每次动态分配小的段,因此装载因子曲线相对更平滑。

总结

基于磁盘的散列需要修改以便适应PM,同时充分高效利用缓存。CCEH通过引入中间段的3层结构,既能减少目录大小,也能减小bucket的大小,从而实现常量级的查找,即仅通过两次缓存行访问。原子写优化延迟删除操作可以降低IO开销。

详细请参考
Write-Optimized Dynamic Hashing for Persistent Memory [FAST’19] Moohyeon Nam, Hokeun Cha,
Young-ri Choi and Sam H. Noh, Beomseok Nam

Write-Optimized Dynamic Hashing for Persistent Memory [slides]

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值