一种面向持久内存的数据管理方法及持久内存控制器技术

技术编号:35566440 阅读:16 留言:0更新日期:2022-11-12 15:50
本发明专利技术公开了一种面向持久内存的数据管理方法及持久内存控制器,属于数据存储领域,包括:在持久内存和易失内存中分别构建动态多层哈希表和公告数组;将元素存储到持久内存后,在公告数组中为其指针p

【技术实现步骤摘要】
一种面向持久内存的数据管理方法及持久内存控制器


[0001]本专利技术属于数据存储领域,更具体地,涉及一种面向持久内存的数据管理方法及持久内存控制器。

技术介绍

[0002]新型的持久内存技术同时具有接近易失内存的字节访问性能和磁盘的持久性,目前英特尔发布的傲腾持久内存单条容量达到了512GB,有望为海量数据提供高性能的存储服务。然而,目前广泛应用的持久内存异步内存刷新(Asynchronous DRAM Refresh,ADR)机制只保证内存控制器中的写队列的持久性,而CPU缓存行和易失内存的数据仍然是掉电易失,因此,持久内存应用程序需要保证程序重启之后能恢复到一致的状态,称之为崩溃一致性。另外,持久内存具有读写不对称性,例如傲腾持久内存的写带宽只有读带宽的三分之一。
[0003]索引结构是存储系统的关键技术之一。不同于基于树的索引,哈希索引通过哈希函数可以直接定位数据的备选位置,相关操作具有常数级别的时间复杂度,因此广泛应用于存储系统中。现有的服务器平台往往是多核,例如支持傲腾持久内存的一个至强CPU一般有数十个线程,丰富的硬件并行资源可以支撑并发存储系统性能。因此,建立合适的哈希索引结构,对于持久内存中的数据管理而言具有十分重要的意义。
[0004]现有持久内存下的哈希表构建方法及系统主要关注写优化以及崩溃一致性,在高并发以及正确性保证方面有局限性:一方面,很多现有的构建方案通过锁进行并发控制,然而锁在高并发场景下限制了哈希表的并发可扩展性,导致高访问延迟,其中基于粗粒度锁的哈希表扩容操作严重阻塞其他并发线程,导致低吞吐率;另一方面,现有针对持久内存的无锁哈希表构建方案缺乏正确性保障机制,而一个满足强一致性的持久内存索引需要保证已完成的操作在崩溃重启之后依然存在并且数据一致,即实现持久内存下可线性化;此外,在持久内存管理方面,现有的哈希表构建方案采用通用的分配器方案,其为了保证崩溃一致性而采用的写前日志等校验技术导致并发环境下高昂的持久内存管理开销。

技术实现思路

[0005]针对现有技术的缺陷和改进需求,本专利技术提供了一种面向持久内存的数据管理方法及持久内存控制器,其目的在于,实现高吞吐低延迟的哈希表访问和可线性化的强一致性保障。
[0006]为实现上述目的,按照本专利技术的一个方面,提供了一种面向持久内存的数据管理方法,数据为键值对元素,包括:
[0007]初始化步骤:在持久内存中构建动态多层哈希表,其包括多层哈希表,每层哈希表由多个用于存储指定数量元素指针的哈希桶组成,每个指针在每层哈希表中有X个备选桶,层次越高的哈希表中的哈希桶的数量越多,可访问的哈希表为可见层;在易失内存中构建公告数组,数组元素为哈希桶;X为正整数;
[0008]指针插入步骤:判断动态多层哈希表中是否存在与待插入的元素指针对应的键相同的元素指针,若是,则退出指针插入步骤;否则,自顶向下地遍历所有可见层,为待插入的元素指针查找匹配的备选桶,若所匹配的备选桶中存在空闲槽位,则将该指针原子地插入所匹配的备选桶中;若所匹配的备选桶中均无空闲槽位,则为动态多层哈希表分配一层新的顶层哈希表后,重新执行指针插入步骤;
[0009]同步步骤:在将需要存储的元素存储到持久内存之后,在公告数组中为该元素的指针p
n
查找哈希桶,若所匹配的哈希桶H中已存在旧的元素指针p
o
,则通过指针插入步骤将指针p
o
插入动态多层哈希表之后,将哈希桶H中的元素指针原子地替换为指针p
n
,通过指针插入步骤将指针p
n
插入动态多层哈希表,之后清空哈希桶H;若哈希桶H为空,则通过指针插入步骤将指针p
n
插入动态多层哈希表,之后清空哈希桶H。
[0010]本专利技术创建可动态扩展的多层哈希表结构对元素指针进行索引,能够以无锁的方式实现元素指针的管理,实现高并发性;同时,通过公告数组实现了协调并发插入操作,具体来说,元素指针插入动态多层哈希表之前,会先尝试将其插入到公告数组中,若所匹配的哈希桶中已经存在旧的元素指针,则先将该元素指针插入到动态多层哈希表之后,再通过原子替换操作将新的元素指针插入到公告数组中,之后再将新的指针插入,由此保证了各操作能够按照以严格的先后顺序执行,实现持久内存下的可线性化,保证强一致性。总的来说,本专利技术在使持久内存实现高并发的同时,实现了持久内存下的可线性化。
[0011]进一步地,本专利技术提供的面向持久内存的数据管理方法,还包括:
[0012]指针迁移步骤:自顶向下地遍历底层之外的所有可见层,为待迁移的元素指针查找匹配的备选桶,若所匹配的备选桶中存在空闲槽位,则将该指针原子地插入所匹配的备选桶中;若所匹配的备选桶中均无空闲槽位,则为动态多层哈希表分配一层新的顶层哈希表后,重新执行指针迁移步骤;
[0013]在后台执行的重哈希步骤:当可见层的层数超过两层时,通过指针迁移步骤将底层哈希表中的元素指针全部迁移到其他可见层中,迁移完成后,释放底层哈希表所占用的存储空间;
[0014]并且,指针插入步骤中,若可见层的层数大于2,则查找与待插入的元素指针匹配的备选桶时,不遍历底层;若插入元素指针之前,可见层的层数为2,而插入元素指针之后,出现了新的可见层,则重新执行指针插入步骤。
[0015]本专利技术通过后台执行的重哈希操作,能够有效控制动态多层哈希表的层数,保证查询效率。
[0016]由于重哈希操作会使得底层元素指针发生迁移,本专利技术在指针插入操作中,当可见层的层数大于2时,不允许将该指针插入底层,能够有效避免指针被插入底层后因重哈希操作而发生迁移,最终导致插入失效;当可见层数为2时,指针有可能被插入底层,本专利技术在插入元素指针之前,可见层层数为2,而插入之后,出现新的可见层,则所插入的元素指针有可能在插入底层之后,因重哈希操作而发生迁移,而导致插入失效,本专利技术在此时重新执行指针插入操作,能够有效避免这种情况。
[0017]进一步地,初始化步骤还包括:在持久内存还建立环形缓冲区,用于按照层次由低到高的顺序存储各层哈希表的首地址。
[0018]本专利技术利用环形缓冲区管理动态多层哈希表中的各层哈希表,相比于现有的无锁
哈希表构建方案通过链表来管理各层哈希表,能够有效减小管理的时间和空间开销。
[0019]进一步地,本专利技术提供的面向持久内存的数据管理方法,还包括:在后台执行的预分配步骤;
[0020]初始化步骤还包括:为动态多层哈希表预分配M层哈希表作为不可访问的层次,并将各层哈希表的首地址按顺序存储到环形缓冲区中;
[0021]并且,指针插入步骤中,通过将预分配的层次最低的哈希表分配给动态多层哈希表作为可见层的方式,为动态多层哈希表增加一层新的哈希表作为顶层哈希表;
[0022]预分配步骤包括:当预分配的不可访问的哈希表层数少于M时,为动态多层哈希表预分配哈希表作为不可访问的哈希表,并将各层哈希表的首地址按顺序存储到环形缓冲区中,使预分配的不可本文档来自技高网
...

【技术保护点】

【技术特征摘要】
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时,为所述动态多层哈希表预分配哈希表作为不可访问的哈希表,并将各层哈希表的首地址按顺序存储到所...

【专利技术属性】
技术研发人员:华宇陈章玉
申请(专利权)人:华中科技大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1