【技术实现步骤摘要】
一种面向持久内存的数据管理方法及持久内存控制器
[0001]本专利技术属于数据存储领域,更具体地,涉及一种面向持久内存的数据管理方法及持久内存控制器。
技术介绍
[0002]新型的持久内存技术同时具有接近易失内存的字节访问性能和磁盘的持久性,目前英特尔发布的傲腾持久内存单条容量达到了512GB,有望为海量数据提供高性能的存储服务。然而,目前广泛应用的持久内存异步内存刷新(Asynchronous DRAM Refresh,ADR)机制只保证内存控制器中的写队列的持久性,而CPU缓存行和易失内存的数据仍然是掉电易失,因此,持久内存应用程序需要保证程序重启之后能恢复到一致的状态,称之为崩溃一致性。另外,持久内存具有读写不对称性,例如傲腾持久内存的写带宽只有读带宽的三分之一。
[0003]索引结构是存储系统的关键技术之一。不同于基于树的索引,哈希索引通过哈希函数可以直接定位数据的备选位置,相关操作具有常数级别的时间复杂度,因此广泛应用于存储系统中。现有的服务器平台往往是多核,例如支持傲腾持久内存的一个至强CPU一般有数十个线程,丰富的硬件并行资源可以支撑并发存储系统性能。因此,建立合适的哈希索引结构,对于持久内存中的数据管理而言具有十分重要的意义。
[0004]现有持久内存下的哈希表构建方法及系统主要关注写优化以及崩溃一致性,在高并发以及正确性保证方面有局限性:一方面,很多现有的构建方案通过锁进行并发控制,然而锁在高并发场景下限制了哈希表的并发可扩展性,导致高访问延迟,其中基于粗粒度锁的哈希表扩容操作严重阻 ...
【技术保护点】
【技术特征摘要】
1.一种面向持久内存的数据管理方法,数据为键值对元素,其特征在于,包括:初始化步骤:在持久内存中构建动态多层哈希表,其包括多层哈希表,每层哈希表由多个用于存储指定数量元素指针的哈希桶组成,每个指针在每层哈希表中有X个备选桶,层次越高的哈希表中的哈希桶的数量越多,可访问的哈希表为可见层;在易失内存中构建公告数组,数组元素为哈希桶;X为正整数;指针插入步骤:判断所述动态多层哈希表中是否存在与待插入的元素指针对应的键相同的元素指针,若是,则退出所述指针插入步骤;否则,自顶向下地遍历所有可见层,为待插入的元素指针查找匹配的备选桶,若所匹配的备选桶中存在空闲槽位,则将该指针原子地插入所匹配的备选桶中;若所匹配的备选桶中均无空闲槽位,则为所述动态多层哈希表分配一层新的顶层哈希表后,重新执行指针插入步骤;同步步骤:在将需要存储的元素存储到所述持久内存之后,在所述公告数组中为该元素的指针p
n
查找哈希桶,若所匹配的哈希桶H中已存在旧的元素指针p
o
,则通过所述指针插入步骤将所述指针p
o
插入所述动态多层哈希表之后,将所述哈希桶H中的元素指针原子地替换为所述指针p
n
,通过所述指针插入步骤将所述指针p
n
插入所述动态多层哈希表,之后清空所述哈希桶H;若所述哈希桶H为空,则通过所述指针插入步骤将所述指针p
n
插入所述动态多层哈希表,之后清空所述哈希桶H。2.如权利要求1所述的面向持久内存的数据管理方法,其特征在于,还包括:指针迁移步骤:自顶向下地遍历底层之外的所有可见层,为待迁移的元素指针查找匹配的备选桶,若所匹配的备选桶中存在空闲槽位,则将该指针原子地插入所匹配的备选桶中;若所匹配的备选桶中均无空闲槽位,则为所述动态多层哈希表分配一层新的顶层哈希表后,重新执行指针迁移步骤;在后台执行的重哈希步骤:当可见层的层数超过两层时,通过所述指针迁移步骤将底层哈希表中的元素指针全部迁移到其他可见层中,迁移完成后,释放底层哈希表所占用的存储空间;并且,所述指针插入步骤中,若可见层的层数大于2,则查找与待插入的元素指针匹配的备选桶时,不遍历底层;若插入元素指针之前,可见层的层数为2,而插入元素指针之后,出现了新的可见层,则重新执行所述指针插入步骤。3.如权利要求2所述的面向持久内存的数据管理方法,其特征在于,所述初始化步骤还包括:在所述持久内存还建立环形缓冲区,用于按照层次由低到高的顺序存储各层哈希表的首地址。4.如权利要求3所述的面向持久内存的数据管理方法,其特征在于,还包括:在后台执行的预分配步骤;所述初始化步骤还包括:为所述动态多层哈希表预分配M层哈希表作为不可访问的层次,并将各层哈希表的首地址按顺序存储到所述环形缓冲区中;并且,所述指针插入步骤中,通过将预分配的层次最低的哈希表分配给所述动态多层哈希表作为可见层的方式,为所述动态多层哈希表增加一层新的哈希表作为顶层哈希表;所述预分配步骤包括:当预分配的不可访问的哈希表层数少于M时,为所述动态多层哈希表预分配哈希表作为不可访问的哈希表,并将各层哈希表的首地址按顺序存储到所...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。