持久性内存事务处理缓存管理方法与装置的制造方法_3

文档序号:8905181阅读:来源:国知局
,由缓存窃取写回技术将事务执行过程中的未提交数据写回非易失性内存。
[0050]在本发明的一个实施例中,还包括:当多个事务并发执行时,如果多个事务对同一数据块进行更新,则将数据的多版本持久化至非易失性内存中的顺序按照事务提交顺序进行。
[0051 ] 在本发明的一个实施例中,当系统发生故障时,对事务数据进行故障恢复处理,进一步包括:从非易失性内存中按所设定格式分离记录的数据块与元数据块,以获取每个数据块的状态信息,从而判定数据块的提交与未提交状态,并丢弃未提交数据块;对提交的数据块,根据所对应元数据块所记录的信息判定对应事务的提交顺序,并进行排序;对提交事务,按照提交顺序排序进行重放操作。
[0052]图2示例了本发明实施例的持久性内存的事务处理缓存管理方法的数据流程与处理方法,其中,该方法包括以下步骤:
[0053]事务开始后,事务从持久性数据区域读取原有版本数据至易失性数据区域;
[0054]在事务执行过程中,事务数据产生的新版本数据在日志区域中分配空间;
[0055]事务执行过程中,事务产生的数据包括临时数据以及事务数据的新版本:对于产生的临时数据,事务将其写入执行区域;对于产生的事务数据的新版本,事务将其写入日志区域;
[0056]对于写入日志区域的事务数据新版本,由于CPU缓存管理为硬件管理,程序软件无法阻止该部分数据被持久化至持久性日志区域;针对该问题,本发明方法提出缓存窃取写回技术保证其正确性,该技术将于下文详述;
[0057]在事务提交或中止时,事务数据或状态被强制持久化至持久性日志区域;
[0058]若事务为提交状态,则事务将其产生的数据新版本强制持久化至持久性日志区域,并且在持久性日志区域中记录事务提交记录;
[0059]若事务为中止状态,则事务将其产生的数据新版本丢弃,且在持久性日志区域记录事务中止记录;
[0060]在事务数据或状态已持久化至持久性日志区域之后,事务数据被写回至数据区域;
[0061]对于提交的事务,事务数据的新版本被从日志区域复制至数据区域;数据区域更新为新版本数据;
[0062]对于中止的事务,事务数据的新版本已丢弃;数据区域维护旧版本数据;
[0063]事务数据被持久化至持久性数据区域;
[0064]本发明方法提出缓存非强制写回技术,在事务通知程序事务完成之前不强制易失性数据区域持久化至持久化区域,而是通过累积多个事务后,通过大块持久化方式对数据区域进行持久化,该技术将于下文详述。
[0065]至此,事务处理在系统正常工作情形下执行完毕。
[0066]持久性内存的事务处理缓存管理装置为采用了本发明所述持久性内存事务处理缓存管理方法的持久性内存。
[0067]本发明方法所述缓存窃取写回技术,允许数据在未提交之前写入日志区域,同时允许未提交数据被持久化写入持久性日志中。该技术所此采用的方法包括但不限于采用固定格式的日志组织方式。图3示例了固定格式的日志组织方式。在程序中,每个线程维护自己的日志区域,这保证了在每个日志区域中仅有一个事务正在更新;但每个日志区域的起始地址全局可见,这保证在事务恢复时可查找所有日志数据。在每个日志中,所有数据依次顺序写入。由于每个日志在同一时刻仅有一个事务正在执行,因而同一事务数据可保证依次顺序写入。在每个事务所记录的日志末尾,事务根据其提交或中止状态,分别记录一个提交或终止记录。
[0068]对于提交的事务,事务在提交记录中仅需正确填写事务状态即可。日志记录包括日志数据记录、提交和中止记录。这些记录的每个记录由一个日志数据块和一个日志元数据块组成,其内部具体格式在图4和图5中示例,并在下文详述。
[0069]对于中止的事务,事务除了需要在中止记录中正确填写事务状态外,还需要在中止记录的日志数据块中增加指向上一提交事务的提交记录的地址。图3的示例示意了该指针的用法。在中止事务中,持久性日志区域中包含两种数据记录,一种是已经持久化的中止事务数据记录,另一种是已分配空间但实际未写入的中止事务数据记录。第二种数据记录也被称为空洞(Hole)。在中止记录中采用指针指向上一提交事务提交记录地址的指针做法也可以在故障恢复时检查出空洞记录,以便正确处理。
[0070]每个日志记录包含一个日志数据块和一个日志元数据块。日志数据块记录了事务数据的内容,日志元数据块记录了相应数据块的描述信息。
[0071]图4示例了日志数据块的格式。本示例为每个日志数据块分配64比特大小的空间。在这64比特中,除最后一比特(TornBit)用作是否写入标记外,其余均用于记录事务数据。
[0072]图5示例了日志元数据块的格式。本示例为每个日志元数据块分配64比特大小的空间。在这64比特中:
[0073]第I个比特位(TornBit)用于是否写入标记,即标记该元数据块是否成功写入;
[0074]第2个比特位(TailBit)用于记录数据块中最后一位数据,即用于存储日志数据块中因TornBit占用溢出的一个比特位;
[0075]第3-10个比特位(MASK)用于记录数据块中每个字节是否有效的位图,即每个比特位置位后标记日志数据块中对应字节为有效字节;
[0076]第11个比特位(FLG_DC)用于标记所在记录是否为数据记录或提交/中止记录;
[0077]第12个比特位(FLG_CA)用于,如果所在记录为提交/中止记录,进一步标记所在记录为提交记录或中止记录;
[0078]第13-16个比特位(RESV)为保留字段,暂未使用;
[0079]第17-64个比特位(ADDR)记录了该记录中日志数据块在数据区域的地址。
[0080]通过上述方式,以固定格式组织日志区域,对每个数据块进行元数据标记,可允许未提交数据被持久化写入持久性日志区域。在系统故障恢复时,利用日志元数据块对日志数据块进行检查,可检测出未提交的数据,以进行数据恢复。采用该方式,本发明所述缓存窃取写回技术可在持久性内存中正确使用,减少了新产生的版本数据在数据区域、执行区域和日志区域之间的拷贝,降低了为防止未提交数据持久化的缓存管理开销,提高了持久性内存事务处理的性能。
[0081]本发明方法所述的缓存非强制写回技术,将已提交数据写回数据区域,允许该部分数据缓存于CPU缓存中,不强制刷回持久性数据区域。该技术周期性刷回大块数据,如强制刷回整个CPU缓存,以周期性保证数据持久性,并告知程序软件进行后续处理。本发明方法所述该技术利用了数据在持久性内存的其他持久性版本提供数据持久性;同时控制CPU缓存数据多个版本的写回顺序,以保证数据的版本正确更新。
[0082]在事务执行中,已提交数据写回数据区域后,其中部分数据因缓存替换等原因已被写入持久性数据区域,另外数据缓存于CPU缓存中。若系统故障发生后,CPU缓存中数据丢失,持久性数据区域可由持久性日志区域中的持久性数据版本恢复。
[0083]在周期性刷回大块数据过程中,包括未提交数据在内的CPU缓存数据被强制写回非易失性内存。对于未提交数据:(1)若该数据位于执行区域,由于执行数据无持久性数据,因而不破坏持久性数据;(2)若该数据位于日志区域,可根据本发明所述的缓存窃取写回技术利用日志格式进行判定;(3)若该数据位于数据区域,由于该数据已提交,因而持久性数据应当更新至数据新版本,即被刷回数据。
[0084]本发明所述缓存非强制写回技术在多事务竞争时,需要保证同一数据的不同版本之间的持久化顺序。图6示例了所述非强制写回技术在数据多版本的写回顺序保证。在所述例子中,事务I包含两个数据记录A和B,事务2包含两个数据记录B和C。事务I先于事务2提交。在所述缓存非强制写回技术中,数据记录B在CPU缓存中存在两个数据版本,分别属于事务I和事务2。在所述缓存非强制写回技术中,为防止持久化版本写回错乱造成数据不一致,数据记录持久化顺序按照事务提交顺序进行。在图6所示例子中,事务2中的B记录必须在事务I中的B记录之后持久化。
[0085]通过上述方式,利用数据记录在持久性内存中其余持久性版本提供数据持
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1