一种基于数据双版本的非易失内存更新方法技术

技术编号:31085322 阅读:13 留言:0更新日期:2021-12-01 12:37
本发明专利技术公开了一种基于数据双版本的非易失内存更新方法,包括:在非易失内存的一个数据单元中维护持久性事务内存中的数据的新旧两个版本;更新事务执行时使用DRAM中更新后的数据副本轮流更新这两个版本;本发明专利技术消除了冗余的NVM写操作,降低了缓存逐出指令和内存屏障指令调用的次数,从而缩短了单个更新事务的执行时间;本发明专利技术提出了基于数据双版本的只读事务读取数据的流程和更新事务读取数据的流程,从而避免了多线程环境下的读写冲突,减少了更新事务对只读事务的阻塞;本发明专利技术使用锁的方式解决多线程环境下的写写冲突;本发明专利技术还提供了两种基于数据双版本的数据一致性恢复机制,分别是基于全局扫描的数据恢复和基于更新地址写回的数据恢复。地址写回的数据恢复。地址写回的数据恢复。

【技术实现步骤摘要】
一种基于数据双版本的非易失内存更新方法


[0001]本专利技术属于计算机数据存储领域,更具体地,涉及一种基于数据双版本的非易失内存更新方法。

技术介绍

[0002]在目前的计算机系统中,大多使用DRAM(动态随机存取存储器,Dynamic Random Access Memory)作为计算机系统的内存,DRAM访问延迟低,但是容量小,并且在系统掉电后数据会丢失。近年来,内存技术快速发展,非易失内存(non

volatile memory,NVM)技术取得了长足的进步。NVM不仅具备硬盘级别的容量和掉电后的非易失性,同时具备和DRAM在同一数量级的访问延迟,且支持字节寻址。此外,NVM也有一些缺陷,比如其读写延迟仍然比DRAM要高,并且读写不对称,读比写快,以及有限的写次数等。
[0003]和传统磁盘相比,NVM上的原子写粒度仅有8字节,因此当写入到NVM的数据大于8字节时,就有可能由于系统的意外崩溃,导致NVM中的数据只有部分更新,从而破坏数据的一致性。除此之外,为了保证数据按照特定的顺序写到NVM上,还需要调用缓存写回指令和内存屏障指令。
[0004]持久性事务内存是基于传统的事务内存针对NVM做出的扩展,即在事务内存的基础上考虑了NVM的非易失性。持久性事务内存涉及两种事务:一种是只读事务,其不会写任何数据;另一种是更新事务,其会写某些数据。
[0005]在持久性事务内存中更新NVM上的数据时,不能够对数据直接进行修改。这是因为如果在修改过程中发生系统崩溃或者机器掉电,那么将会产生部分更新。通常的做法是采用undo或者redo日志协议来更新数据并保障数据的一致性。采用undo日志的更新事务写数据的流程包括如下步骤:
[0006]D0:将数据A写入到日志中,得到数据A的副本数据A

;日志存储在NVM上;
[0007]D1:调用缓存逐出指令和内存屏障指令确保数据A

被持久化;持久化操作完成之后,如果系统掉电或崩溃,数据A

不会丢失;如果该更新事务执行了对多个数据的写操作,则需要对多个数据单独调用缓存逐出指令和内存屏障指令。
[0008]D2:对数据A执行写操作:将数据A的值更新为D。
[0009]提交更新事务时,需要调用缓存逐出指令和内存屏障指令确保对数据A的写操作被持久化;持久化操作完成之后,如果系统掉电或崩溃,数据A更新后的值D不会丢失;如果该更新事务执行了对多个数据的写操作,则需要对多个数据单独调用缓存逐出指令。
[0010]如果在修改数据A时发生系统崩溃,便可以使用日志中的数据A

将数据A恢复到被执行写操作之前的状态,从而保障数据的一致性。
[0011]基于undo日志的更新事务在执行多个数据的写操作时需要对多个数据单独调用缓存逐出指令和内存屏障指令,这是因为undo日志在对数据执行写操作时,必须等待该数据的副本持久化到日志之后才可以执行写操作,每执行一个数据的写操作,都需要调用缓存逐出指令和内存屏障指令保证副本数据被持久化。
[0012]采用redo日志的更新事务修改数据的流程包括如下步骤:
[0013]T0:将数据B写入到日志中,得到数据B的副本数据B

;日志存储在NVM上;
[0014]T1:对数据B

执行写操作。
[0015]提交更新事务的流程包括如下步骤
[0016]S0:调用缓存逐出指令和内存屏障指令确保步骤T1的操作被持久化,如果该更新事务执行了对多个数据的写操作,则需要对多个数据单独调用缓存逐出指令;
[0017]S1:使用数据B

更新数据B;
[0018]S2:调用缓存逐出指令和内存屏障指令确保步骤S1的操作被持久化,如果该更新事务执行了对多个数据的写操作,则需要对多个数据单独调用缓存逐出指令。
[0019]如果在执行步骤S1时发生系统崩溃,便可以使用日志中的数据B

重新执行步骤S1,将数据B恢复到被执行写操作之后的状态,从而保障数据的一致性。
[0020]基于undo日志的更新事务在步骤D0存在一次冗余的NVM写操作,基于redo日志的更新事务在步骤T0和S1存在两次冗余的NVM写操作;且不管是基于undo日志还是基于redo日志的更新事务,都需要多次调用缓存逐出指令和内存屏障指令;冗余的NVM写操作和多次指令调用会增加了单个更新事务的执行时间。

技术实现思路

[0021]针对现有技术的缺陷,本专利技术的目的在于提供一种基于数据双版本的非易失内存更新方法,旨在解决更新事务执行时的时间延迟问题。
[0022]为实现上述目的,本专利技术在非易失内存的一个数据单元中维护持久性事务内存中的数据的新旧两个版本,一个数据单元的起始地址是非易失内存的缓存行大小的倍数,所述两个版本包括一个新版本和一个旧版本;每个版本有一个对应的更新时间戳,值较大的更新时间戳对应的版本是新版本,值较小的更新时间戳对应的版本是旧版本,当两个更新时间戳的值相等时,任选一个版本作为新版本;
[0023]更新事务对数据执行写操作时,直接对所述数据副本执行写操作;所述数据副本为更新事务第一次读或写数据时拷贝到DRAM中的数据的新版本的副本;
[0024]更新事务提交时,将当前的全局逻辑时钟加1并更新,将更新后的全局逻辑时钟赋值给旧版本的更新时间戳;使用所述数据副本更新数据的旧版本并持久化。
[0025]本专利技术通过将数据的新旧两个版本存储在同一个缓存行中并使用DRAM中更新后的数据副本轮流更新这两个版本的方法,消除了现有技术中冗余的NVM写操作,虽然NVM上的写操作延迟已经和DRAM上的写操作延迟在同一数量级,但是仍有数倍的差距,因此本专利技术提供的数据更新方法降低了更新事务的执行时间。同时,本专利技术的更新事务在执行写操作时不需要调用缓存逐出指令和内存屏障指令,在提交对单个数据的写操作时,需要调用缓存逐出指令和内存屏障指令确保写操作被持久化,如果更新事务执行了写多个数据的操作,则提交时需要对多个数据单独调用缓存逐出指令。相比现有技术,本专利技术降低了调用指令的次数,从而缩短了更新事务的执行时间。
[0026]优选地,所述数据单元包括五个字段:lock、v0、v1、ts0、ts1;lock为锁,锁为0表示未加锁,锁为1表示锁定v0,锁为2表示锁定v1;v0和v1为所述数据的两个版本;ts0为v0的更新时间戳,ts1为v1的更新时间戳。
[0027]优选地,更新事务对数据进行第一次写操作时,先锁定数据的旧版本;更新事务提交时,将所述数据的锁更新为0。
[0028]优选地,只读事务读取数据的流程包括以下步骤:
[0029]A0:检查数据的锁和新版本的更新时间戳,如果新版本被锁定或者时间戳检查失败,则执行步骤A3;否则,执行步骤A1;
[0030]A1:读取数据的新版本;
[0031本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于数据双版本的非易失内存更新方法,其特征在于,包括下列步骤:在非易失内存的一个数据单元中维护持久性事务内存中的数据的新旧两个版本,一个数据单元的起始地址是非易失内存的缓存行大小的倍数,所述两个版本包括一个新版本和一个旧版本;每个版本有一个对应的更新时间戳,值较大的更新时间戳对应的版本是新版本,值较小的更新时间戳对应的版本是旧版本,当两个更新时间戳的值相等时,任选一个版本作为新版本;更新事务对数据执行写操作时,直接对所述数据副本执行写操作;所述数据副本为更新事务第一次读或写数据时拷贝到DRAM中的数据的新版本的副本;更新事务提交时,将当前的全局逻辑时钟加1并更新,将更新后的全局逻辑时钟赋值给旧版本的更新时间戳;使用所述数据副本更新数据的旧版本并持久化。2.根据权利要求1所述的基于数据双版本的非易失内存更新方法,其特征在于,所述数据单元包括五个字段:lock、v0、v1、ts0、ts1;lock为锁,锁为0表示未加锁,锁为1表示锁定v0,锁为2表示锁定v1;v0和v1为所述数据的两个版本;ts0为v0的更新时间戳,ts1为v1的更新时间戳。3.根据权利要求2所述的基于数据双版本的非易失内存更新方法,其特征在于,更新事务对数据进行第一次写操作时,先锁定数据的旧版本;更新事务提交时,将所述数据的锁更新为0。4.根据权利要求2所述的基于数据双版本的非易失内存更新方法,其特征在于,只读事务读取数据的流程包括:A0:检查数据的锁和新版本的更新时间戳,如果新版本被锁定或者时间戳检查失败,则执行步骤A3;否则,执行步骤A1;A1:读取数据的新版本;A2:再次检查数据的锁和新版本的更新时间戳,如果新版本被锁定或者时间戳检查失败,步骤A1的读取操作失败,执行步骤A3;否则,数据读取成功;A3:检查数据的锁和旧版本的更新时间戳,如果旧版本被锁定或者时间戳检查失败,则数据读取失败;否则,执行步骤A4;A4:读取数据的旧版本;A5:再次检查数据的锁和旧版本的更新时间戳,如果旧版本被锁定或者时间戳检查失败,则数据读取失败;否则,数据读取成功;所述时间戳检查失败是指更新时间戳大于事务开始执行时记录的...

【专利技术属性】
技术研发人员:王芳冯丹刘超杰关天锦邹晓敏
申请(专利权)人:华中科技大学
类型:发明
国别省市:

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

1