持久性内存键值系统及其操作方法

文档序号:26840747发布日期:2021-10-08 22:33阅读:55来源:国知局
持久性内存键值系统及其操作方法

1.本发明实施例涉及持久性内存存储技术领域,具体而言,涉及一种持久性内存键值系统及其操作方法。


背景技术:

2.持久性内存(persistent memory)具有与动态随机存取存储器(dram)相近的性能,并且支持字节粒度寻址;同时,持久性内存和磁盘一样,能够持久化存储数据。例如,现有的持久性内存产品具有亚微秒的延迟以及单条最高512gb的容量,其为新型内存存储系统带来了诸多机遇。现有的持久性内存支持两种模式:应用直访模式和内存模式。应用直访模式将持久性内存抽象为特殊的、可通过load、store指令直接读写的存储设备。在内存模式下,dram作为持久性内存的缓存,向应用程序提供了一个大容量内存的抽象,但没有存储能力。
3.现代服务器多为多核架构,即一块处理器中包含几十甚至上百个cpu核心,用于提高整个系统的并发性能。然而,多核架构带来了并发控制的问题,即不同cpu核心上的线程如何高效且正确地并发访问数据。
4.现有持久性内存键值系统未针对多核架构进行设计,导致了诸多问题。首先,保证多线程正确执行的并发原语(如读写锁)导致数据在不同cpu核心的缓存之间来回抖动,频繁触发低效的缓存一致性协议,严重影响cpu的性能。其次,持久性内存的写带宽很低,单条写带宽仅有2.3gb/s左右,约为dram的1/6,而键值系统为保证崩溃一致性而采用的各种一致性机制(如日志)会消耗额外的持久性内存写带宽;同时,读写锁通常被嵌入到数据结构内部,其带来的缓存抖动也会导致大量持久性内存的写回。最后,由于持久性内存较高的读延迟和持久化延迟,临界区的时间被拉长,导致不同线程间相互冲突的操作被严重阻塞。


技术实现要素:

5.本发明实施例提供了一种持久性内存键值系统及其操作方法,以至少解决相关技术中现有持久性内存键值系统未针对多核架构进行设计,导致操作性能较低的问题。
6.根据本发明的一个实施例,提供了一种持久性内存键值系统的操作方法,该方法包括:查找持久性内存键值系统的索引以定位待插入的键值对元数据;获取动态随机存取存储器中与所述键值对元数据对应的写锁资源;为所述键值对元数据分配持久性内存,并持久化所述键值对元数据;在所述持久性内存键值系统中原子地插入所述键值对元数据,其中,所述键值对元数据插入的提交过程包括两个阶段,在第一阶段中,将所述键值对元数据中持久性标志位清空,并调用cpu持久化指令将其从cpu缓存刷写至持久性内存;在第二阶段中,设置所述持久性标志位,并通知读操作所述键值对元数据已经被成功持久化。
7.在一个示例性实施例中,在获取动态随机存取存储器中与所述键值对元数据对应的写锁资源之前,还包括;将所述写锁资源从持久性内存键值系统的索引中分离,并在所述动态随机存取存储器中维护所述写锁资源。
8.在一个示例性实施例中,所述写锁资源在所述动态随机存取存储器中以表结构被维护,其中,所述表结构的输入为索引的节点地址,所述表结构的输出为对应的所述写锁资源。
9.在一个示例性实施例中,在所述持久性内存键值系统中原子地插入所述键值对元数据之前,还包括:将所述键值对元数据存储为可原子修改的格式。
10.在一个示例性实施例中,所述可原子修改的格式指所述键值对元数据被包装到连续的持久性内存空间,并支持被cpu原子地修改。
11.在一个示例性实施例中,当相冲突的第一插入操作和第二插入操作同时发生时,不对所述第一插入操作进行持久性内存的分配和写入,将所述第一插入操作返回。
12.在一个示例性实施例中,所述键值对元数据至少包括以下之一:键值对指纹、键值对地址以及持久化标志位;其中,所述键值对指纹为键的哈希值的其中若干位,所述键值对地址指向持久性内存中的键值对,所述持久性标志位指示所述键值对元数据的持久化状态。
13.在一个示例性实施例中,在将所述键值对元数据原子地插入所述持久性内存键值系统之后,还包括:在所述持久性内存键值系统中无锁地查询所述键值对元数据。
14.在一个示例性实施例中,无锁地查询所述键值对元数据包括:检查所述键值对元数据中的持久性标志位,若所述持久性标志位为清空状态,则调用cpu持久化指令持久化所述目标键值对元数据;调用原子指令设置所述持久性标志位,并读取元数据指向的键值对。
15.在一个示例性实施例中,该方法还包括:基于时间周期的内存回收方式,通过后台线程周期性回收持久性内存垃圾。
16.根据本发明的另一个实施例,提供了一种持久性内存键值系统,该系统包括:查找模块,用于查找持久性内存键值系统的索引以定位待插入的键值对元数据;获取模块,用于获取动态随机存取存储器中与所述键值对元数据对应的写锁资源;分配模块,用于为所述键值对元数据分配持久性内存,并持久化所述键值对元数据;插入模块,用于在所述持久性内存键值系统中原子地插入所述键值对元数据,其中,所述键值对元数据插入的提交过程包括两个阶段,在第一阶段中,将所述键值对元数据中持久性标志位清空,并调用cpu持久化指令将其从cpu缓存刷写至持久性内存;在第二阶段中,设置所述持久性标志位,并通知读操作所述键值对元数据已经被成功持久化。
17.在一个示例性实施例中,该系统还包括:维护模块,用于将所述写锁资源从持久性内存键值系统的索引中分离,并在所述动态随机存取存储器中维护所述写锁资源。
18.在一个示例性实施例中,该系统还包括:存储模块,用于将所述键值对元数据存储为可原子修改的格式。
19.在一个示例性实施例中,该系统还包括:查询模块,用于在所述持久性内存键值系统中无锁地查询所述键值对元数据。
20.在一个示例性实施例中,该系统还包括:回收模块,用于基于时间周期的内存回收方式,通过后台线程周期性回收持久性内存垃圾。
21.根据本发明的又一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
22.根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
23.通过本发明的上述实施例,在键值对的插入操作过程中,对写锁资源的操作不会引入任何对持久性内存的写,并且无需任何日志操作,提高了插入操作性能,并提高多核架构下的扩展性。
附图说明
24.图1是根据本发明实施例的持久性内存键值系统的操作方法的流程图;
25.图2是根据本发明实施例的持久性内存键值系统的结构框图;
26.图3是根据本发明另一实施例的持久性内存键值系统的结构框图;
27.图4是根据本发明一个实施例的多核架构友好的持久性内存键值系统的示意图;
28.图5是根据本发明实施例的键值对元数据的结构示意图;
29.图6是根据本发明实施例的多核架构友好的持久性内存键值系统的插入操作流程图;
30.图7是根据本发明实施例的多核架构友好的持久性内存键值系统的查询操作流程图;
31.图8是根据本发明实施例的两个并发冲突插入操作的消除示意图。
具体实施方式
32.下文中将参考附图并结合实施例来详细说明本发明的实施例。
33.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
34.实施例1
35.在本实施例中提供了一种持久性内存键值系统的操作方法,图1是根据本发明实施例的的流程图,如图1所示,该流程包括如下步骤:
36.步骤s102,查找持久性内存键值系统的索引以定位待插入的键值对元数据;
37.步骤s104,获取动态随机存取存储器中与所述键值对元数据对应的写锁资源;
38.步骤s106,为所述键值对元数据分配持久性内存,并持久化所述键值对元数据;
39.步骤s108,在所述持久性内存键值系统中原子地插入所述键值对元数据,其中,所述键值对元数据插入的提交过程包括两个阶段,在第一阶段中,将所述键值对元数据中持久性标志位清空,并调用cpu持久化指令将其从cpu缓存刷写至持久性内存;在第二阶段中,设置所述持久性标志位,并通知读操作所述键值对元数据已经被成功持久化。
40.在本实施例的步骤s104之前,还可包括;将所述写锁资源从持久性内存键值系统的索引中分离,并在所述动态随机存取存储器中维护所述写锁资源。
41.在本实施例中,所述写锁资源可在所述动态随机存取存储器中以表结构被维护,其中,所述表结构的输入为索引的节点地址,所述表结构的输出为对应的所述写锁资源。
42.在本实施例的步骤s108之前,还可包括:将所述键值对元数据存储为可原子修改的格式。
43.在本实施例中,所述可原子修改的格式指所述键值对元数据被包装到连续的持久性内存空间,并支持被cpu原子地修改。
44.在本实施例中,当相冲突的第一插入操作和第二插入操作同时发生时,不对所述第一插入操作进行持久性内存的分配和写入,将所述第一插入操作返回。
45.在本实施例中,所述键值对元数据至少包括以下之一:键值对指纹、键值对地址以及持久化标志位;其中,所述键值对指纹为键的哈希值的其中若干位,所述键值对地址指向持久性内存中的键值对,所述持久性标志位指示所述键值对元数据的持久化状态。
46.在本实施例的步骤s108之后,还可包括:在所述持久性内存键值系统中无锁地查询所述键值对元数据。
47.在本实施例中,无锁地查询所述键值对元数据可包括:检查所述键值对元数据中的持久性标志位,若所述持久性标志位为清空状态,则调用cpu持久化指令持久化所述目标键值对元数据;调用原子指令设置所述持久性标志位,并读取元数据指向的键值对。
48.在本实施例中,该方法还可包括:基于时间周期的内存回收方式,通过后台线程周期性回收持久性内存垃圾。
49.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
50.实施例2
51.在本实施例中还提供了一种持久性内存键值系统,该系统用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
52.图2是根据本发明实施例的持久性内存键值系统的结构框图,如图2所示,该系统包括查找模块10、获取模块20、分配模块30和插入模块40。
53.查找模块10,用于查找持久性内存键值系统的索引以定位待插入的键值对元数据。
54.获取模块20,用于获取动态随机存取存储器中与所述键值对元数据对应的写锁资源。
55.分配模块30,用于为所述键值对元数据分配持久性内存,并持久化所述键值对元数据。
56.插入模块40,用于在所述持久性内存键值系统中原子地插入所述键值对元数据,其中,所述键值对元数据插入的提交过程包括两个阶段,在第一阶段中,将所述键值对元数据中持久性标志位清空,并调用cpu持久化指令将其从cpu缓存刷写至持久性内存;在第二阶段中,设置所述持久性标志位,并通知读操作所述键值对元数据已经被成功持久化。
57.图3是根据本发明另一实施例的持久性内存键值系统的结构框图,如图3所示,该系统除包括图2所示的所有模块外,还包括维护模块50、存储模块60、查询模块70和回收模
块80。
58.维护模块50,用于将所述写锁资源从持久性内存键值系统的索引中分离,并在所述动态随机存取存储器中维护所述写锁资源。
59.存储模块60,用于将所述键值对元数据存储为可原子修改的格式。
60.查询模块70,用于在所述持久性内存键值系统中无锁地查询所述键值对元数据。
61.回收模块80,用于基于时间周期的内存回收方式,通过后台线程周期性回收持久性内存垃圾。
62.需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
63.为了便于对本发明所提供的技术方案的理解,下面将结合具体场景的实施例进行详细描述。
64.实施例3
65.图4是根据本发明实施例的多核架构友好的持久性内存键值系统的示意图。如图4所示,基于本实施例的多核架构友好的持久性内存键值系统,可执行如下插入和查询操作:
66.s1,将写锁资源从持久性内存键值系统的索引中分离,在动态随机存取存储器中单独维护;
67.s2,将键值对元数据存储为可原子修改的格式,当发生插入操作时利用cpu的原子指令将系统从一个一致性状态原子地切换到另一个一致性状态(两阶段原子插入);
68.s3,当两个冲突的插入操作同时发生时,让其中一个操作直接返回,不做任何持久性内存的分配与写入(消除并发插入);
69.s4,当发生查询操作时,无锁地进行键值数据的读取。
70.在本实施例中,写锁资源用于控制多个并发的插入操作。
71.进一步地,在本发明的一个实施例中,在动态随机存取存储器中写锁资源以表结构被维护,表结构输入是索引的节点地址,输出是对应的锁资源。
72.具体地,例如,写锁资源的表结构为4096个64位锁字段的数组;由于锁表只占有32kb的空间,它能够缓存在高速的cpu第二级缓存中,且几乎不引入tlb缺失。值得注意的是,该表结构会引入伪冲突,即不同的索引节点竞争同一个锁字段。但由于真实负载多是查询密集的,且查询操作是无锁的,所以伪冲突的概率极低。
73.需要说明的是,传统的持久性内存键值系统将写锁嵌入至持久性索引中,这会导致多种问题:首先,锁操作会带来额外的持久性内存的写,消耗持久性内存有限的带宽;其次,当键值系统崩溃重启时,需要扫描整个索引,清空锁字段的内容。而本发明将锁资源维护在dram中,减少持久性内存带宽消耗的同时提高了恢复性能。
74.进一步地,在本发明的一个实施例中,键值对的元数据包括键值对指纹、键值对地址以及持久化标志位,其中键值对指纹为键的哈希值的其中若干位,键值对地址指向持久性内存中的键值对,持久性标志位指示所述键值对元数据的持久化状态。
75.具体地,键值对指纹用于加速对键值对的定位。当指纹不匹配时,查询操作可直接跳过对应的键值对元数据,避免了额外一次对持久性内存中的键值对的读取。持久性标志位为0时,代表该键值对元数据未被持久化;否则,代表其被成功持久化。键值元数据一般被
存储在索引中,索引包括哈希表、b+树、字典树等。
76.进一步地,在本发明的一个实施例中,可原子修改的格式指所述键值对元数据被包装到连续的持久性内存空间,并支持被cpu原子地修改。
77.具体地,图5为根据本发明一个实施例的键值对元数据的结构示意图。如图5所示,键值对元数据为64位,其中最高16位存储键值对指纹,中间47位存储键值对地址,最低1位存储持久化标志位。最高16位和最低位能够存储额外信息的原因在于:首先,英特尔处理器的虚拟地址空间只有低48位,其次,键值系统分配的持久性内存地址8字节对齐(即地址最低3位为0)。cpu可以原子地操作64位的键值对元数据。
78.进一步地,在本发明的一个实施例中,一致性状态指键值系统的元数据和插入的键值对可以一一对应,并永久地存储在持久性内存中。
79.进一步地,在本发明的一个实施例中,插入操作的提交过程包括两个阶段,其中第一阶段将所述键值对元数据中持久性标志位清空,并调用cpu持久化指令将其从cpu缓存刷写至持久性内存;在第二阶段中,设置持久性标志位,用于通知读操作所述键值对元数据已经被成功持久化。
80.图6为根据本发明实施例的多核架构友好的持久性内存键值系统的插入操作流程图,如图6所述,该插入操作可包括如下步骤:
81.步骤s601,查找索引,定位键值对元数据;
82.步骤s602,获取dram中的对应锁资源;
83.步骤s603,分配持久性内存,并持久化键值对;
84.步骤s604,所述键值对元数据插入的提交过程包括两个阶段,其中,第一阶段将所述键值对元数据中持久性标志位清空,并调用cpu持久化指令将其从cpu缓存刷写至持久性内存;
85.步骤s605,在插入操作的提交的第二阶段,设置所述持久性标志位,并通知读操作所述键值对元数据已经被成功持久化。
86.如图6所示,在提交过程之前,插入操作成功获取dram中对应的锁资源,并分配了持久性内存,且持久化了插入的键值对。例如,在英特尔cpu上,持久化指令包括clflush、clwb和clflushopt。提交的两个阶段中对键值对元数据的赋值都是原子的;第一个阶段中,整个新的键值对元数据的值被写入并持久化。依赖于cpu提供的原子写,插入操作无需日志等机制保护一致性。
87.进一步地,在本发明的一个实施例中,在查询操作的无锁查询过程中,检查目标键值对元数据中的持久性标志位,若持久性标志位为清空状态,则调用cpu持久化指令持久化键值对元数据,然后调用原子指令设置持久性标志位。
88.图7为根据本发明实施例的多核架构友好的持久性内存键值系统的查询操作流程图,如图7所示,该查询操作可包括如下步骤:
89.步骤s701,查找索引,定位目标键值对元数据;
90.步骤s702,判断目标键值对元数据的持久性标志位是否为清空状态,如果是,则执行步骤s703,如果否,则执行步骤s705;
91.步骤s703,调用cpu持久化指令持久化目标键值对元数据;
92.步骤s704,调用原子指令cas(compare-and-swap)去设置持久性标志位;
93.步骤s705,读取元数据指向的目标键值对。
94.如图7所示,在查询操作的过程中,当目标键值对元数据的持久性标志位为清空状态时,代表该元数据还未被成功持久化,为了保证查询操作不会读到未提交的数据,查询操作主动持久化元数据,并调用原子指令去设置持久性标志位。这种主动持久化的机制保证了系统崩溃重启后无需遍历所有的键值对元数据以设置持久性标志。
95.图8为根据本发明实施例的两个并发冲突插入操作的消除示意图。如图8所示,在本实施例中,当出现两个并发冲突的插入操作时,其中一个操作直接返回,不做任何持久性内存的分配与修改。这种消除操作的机制并未违背正确的并发语义,这是因为在线性化(linearizability)的定义中,两个在时间上重叠的操作的执行结果,等价于某一种串行顺序的执行结果。
96.进一步地,在本发明的一个实施例中,针对查询操作的无锁读取问题,使用基于epoch(时间周期)的内存回收方法,利用后台线程周期性回收内存垃圾。
97.具体地,键值系统维护一个全局的计数器,同时每个线程维护一个本地计数器。每个键值操作开始时,将本地计数器更新为全局计数器。当需要释放持久性内存空间时,将<本地计数器的值,释放的内存地址>记录到回收链表中。同时,一个后台线程周期性地将全局计数器加1,并收集所有线程的本地计数器值,并计算出其中最小值,记做safe-epoch;此时,回收链表中所有小于safe-epoch的内存可以被安全地释放。
98.在本发明的上述实施例的插入操作过程中,对写锁资源的操作不会引入任何对持久性内存的写,并且无需任何日志操作,提高了插入操作性能。另外,当多个并发冲突的插入操作发生时,进一步地减少了持久性内存的分配和写入。针对查询操作,其无锁的过程在保证正确语义的同时极大地提升了键值系统的在多核架构下的并发查询性能。
99.本发明的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
100.在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:u盘、只读存储器(read-only memory,简称为rom)、随机存取存储器(random access memory,简称为ram)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
101.本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
102.在一个示例性实施例中,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
103.本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
104.显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作
成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
105.以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1