会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 电脑零配件 / 硬件 / 硬件支持的存储日志记录

硬件支持的存储日志记录

阅读:803发布:2021-03-02

IPRDB可以提供硬件支持的存储日志记录专利检索,专利查询,专利分析的服务。并且本发明涉及硬件支持的存储日志记录。在日志记录时间间隔期间对向物理存储区的改变进行日志记录包括:检测向所述物理存储区的写入操作,其中,所述写入操作修改与所述物理存储区中的物理数据行相对应的间接表示;以及记录与所述写入操作相关联的日志信息。,下面是硬件支持的存储日志记录专利的具体信息内容。

1.一种系统,包括:

存储器,包括要日志记录的物理存储区;

第一处理器,被配置为执行指令和访问所述存储器;

第二处理器,被配置为:

检测由所述第一处理器向所述物理存储区进行的写入操作,其中,所述写入操作修改与所述物理存储区中的物理数据行相对应的间接表示;以及记录与所述写入操作相关联的日志信息,其中,所述日志信息包括与所述间接表示的修改相关联的标识信息和与所述物理数据行相关联的标识信息。

2.根据权利要求1所述的系统,其中,所述与所述间接表示的修改相关联的标识信息包括物理行标识符PLID。

3.根据权利要求1所述的系统,其中:

所述与所述间接表示的修改相关联的标识信息包括PLID;

所述PLID与被修改的所述物理数据行的间接表示相对应;以及被记录的日志信息包括撤销日志信息。

4.根据权利要求1所述的系统,其中:

所述与所述间接表示的修改相关联的标识信息包括PLID;

所述间接表示是原始间接表示;

所述PLID与所述原始间接表示的修改后的间接表示相对应;以及被记录的日志信息包括重作日志信息。

5.根据权利要求1所述的系统,其中,所述与所述物理数据行相关联的标识信息包括子页面更新记录SPUR,所述子页面更新记录SPUR包括数据行所位于的子页面的地址以及行掩码。

6.根据权利要求1所述的系统,其中,所述日志信息是在检测到所述写入操作时被记录的。

7.根据权利要求1所述的系统,其中,所述日志信息是在要提交与所述写入操作相关联的事务时被记录的。

8.根据权利要求1所述的系统,其中,日志进一步包括时间戳信息。

9.根据权利要求1所述的系统,其中,所述第二处理器进一步被配置为至少部分地基于所述物理存储区的至少一部分的快照来确定所述日志信息。

10.根据权利要求1所述的系统,其中,所述第二处理器进一步被配置为:创建所述物理存储区的快照;以及

基于所述快照和所述物理存储区的当前状态来确定对所述物理存储区的修改。

11.根据权利要求1所述的系统,其中,所述第二处理器被配置为通过拷贝用于间接表示所述物理存储区的PLID来创建所述物理存储区的快照。

12.根据权利要求1所述的系统,其中,所述第二处理器被配置为在日志记录时间间隔的开始处创建所述物理存储区的快照。

13.根据权利要求1所述的系统,其中,所述第二处理器被配置为在检测到向对应子区的第一次写入操作时创建所述物理存储区中的子区的快照。

14.根据权利要求1所述的系统,其中:

所述日志信息包括撤销日志信息;

所述第二处理器被配置为至少部分地通过在对应于所述间接表示的前一状态与对应于所述间接表示的当前状态之间比较差异来生成撤销日志信息。

15.根据权利要求1所述的系统,其中:

所述日志信息包括撤销日志信息;

所述第二处理器被配置为至少部分地通过在对应于所述间接表示的前一状态与对应于所述间接表示的当前状态之间比较差异来生成撤销日志信息;以及所述前一状态基于较早的快照。

16.根据权利要求1所述的系统,其中:

所述日志信息包括撤销日志信息;

所述第二处理器被配置为基于所述间接表示中的位置的重作日志记录和较早的快照中的该位置处的值来在所述间接表示中生成撤销日志记录。

17.一种用于在日志记录时间间隔期间对向物理存储区的改变进行日志记录的方法,包括:检测向所述物理存储区的写入操作,其中,所述写入操作修改与所述物理存储区中的物理数据行相对应的间接表示;以及记录与所述写入操作相关联的日志信息,其中,所述日志信息包括与所述间接表示的修改相关联的标识信息和与所述物理数据行相关联的标识信息。

18.根据权利要求17所述的方法,其中,所述与所述间接表示的修改相关联的标识信息包括物理行标识符PLID。

19.根据权利要求17所述的方法,其中,所述与所述物理数据行相关联的标识信息包括子页面更新记录SPUR,所述子页面更新记录SPUR包括数据行所位于的子页面的地址以及行掩码。

20.根据权利要求17所述的方法,进一步包括:至少部分地基于所述物理存储区的至少一部分的快照来确定日志信息。

说明书全文

硬件支持的存储日志记录

[0001] 其他申请的交叉引用
[0002] 本申请要求2013年3月8日提交的名称为HARDWARE-SUPPORTED MEMORY TEMPORAL COPY AND LOGGING的美国临时专利申请No. 61/775,041的优先权,该美国临时专利申请出于所有目的通过引用并入于此。

技术领域

[0003] 本发明涉及硬件支持的存储日志记录(logging)。

背景技术

[0004] 数据库系统的普通需求是在指定时间点处提供数据库的快照(即,拷贝)的能力。特别地,许多数据库的“一致性读取”能力需要提供在指定时间点处运行针对特定数据(例如,数据库)的所提交的状态的查询的能力。普通情况是在与该查询处理的开始相对应的时间时。其他时间是可能的并一般需要被支持。例如,查询可以选择截至昨日停业具有多于
100万美元订单的黄金客户。附加需求包括恢复处于故障中的数据库的所提交的状态以及提供与数据集有关的时间序列数据(即,其在价值上随时间的改变)的能力。
[0005] 典型地,以软件实现一致性读取和恢复功能。现有实施方式通常导致存储密集型操作,其对处理器高速缓存的性能有负面影响,这是由于这些操作将额外数据(例如,日志数据和/或元数据)带到处理器高速缓存中。特别地,该处理通常被搁置,等待来自主存储器的数据,并且,可以从处理器高速缓存驱逐与进行中的处理相关的其他数据,以提供额外数据的空间。
[0006] 此外,在增加的负载下,事务通常需要对自查询开始已修改的数据块的一致性读取,从而带来使当前状态回退到开始查询的时间的成本。这些成本往往随系统上的负载的增加而增加,导致不好的降级。
[0007] 一致性读取和恢复功能的典型软件实施方式进一步遭受与在相同系统上运行的其他处理器核心的同步开销,这是由于有必要与系统中的其他处理器核心同时地访问日志和缓存池的数据结构。该同步实际上是附加的核心间高速缓存业务,进一步减弱每个核心的性能以及总体系统性能。
[0008] 一致性读取和恢复功能的典型软件实施方式依赖于撤销和重作日志。上面提到的相同问题发生于在数据库更新时写入到撤销和重作日志的软件实施方式,这是由于处理器核心需要频繁地访问元数据和数据和同步。特别地,为了作为记录事务中的更新的一部分而将撤销记录添加至撤销日志并将重作记录添加至重作日志,处理器需要访问与撤销日志的结尾相对应的数据以及与重作日志的结尾相对应的数据,并且然后执行向这两者的写入。该更新过程还必须访问与这些日志相关联的任何附属/管理数据结构以及存储用于执行这些动作的指令的代码段。其还需要与其他处理器核心进行同步以对这些日志执行更新。因此,对性能有负面影响。

附图说明

[0009] 在下面的具体实施方式和附图中公开了本发明的各个实施例。
[0010] 图1A是图示了被配置成提供存储器的硬件支持的临时拷贝的系统的实施例的框图。
[0011] 图1B是图示了间接存储表示的示例的图。
[0012] 图1C是图示了间接存储表示的另一示例的图。
[0013] 图2是图示了在诸如图1A的100之类的系统上实现的一致性读取过程的实施例的流程图。
[0014] 图3是图示了临时拷贝过程的实施例的流程图。
[0015] 图4A-4C是图示了在示例一致性读取过程中使用的数据和日志的示例数据图。
[0016] 图5是图示了合并-更新拷贝过程的实施例的示例数据图。
[0017] 图6A是图示了存储器中的物理数据行的实施例的图。
[0018] 图6B是图示了基于图6A的数据行表示的日志表示的实施例的图。
[0019] 图7是图示了用于生成日志信息的过程的实施例的流程图。

具体实施方式

[0020] 本发明可以以许多方式实现,包括被实现为:过程;设备;系统;物质组成;体现在计算机可读存储介质上的计算机程序产品;和/或处理器,诸如下述处理器:其被配置成执行存储在耦合到该处理器的存储器上和/或由耦合到该处理器的存储器提供的指令。在本说明书中,这些实施方式或本发明可采用的任何其他形式可以被称为技术。一般来说,所公开过程的步骤的顺序可以在本发明的范围内变更。除非另外声明,诸如被描述为被配置成执行任务的处理器或存储器之类的部件可以被实现为被临时配置成在给定时间处执行任务的一般部件或被制造成执行任务的具体部件。如在本文中使用的那样,术语“处理器”涉及一个或多个装置、电路、和/或被配置成处理数据(诸如计算机程序指令)的处理核心。
[0021] 下面与图示本发明原理的附图一起提供了本发明的一个或多个实施例的详细描述。结合这些实施例描述了本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求限定,并且本发明包含许多替换、修改和等同物。在下面的描述中阐述了许多特定细节以提供对本发明的透彻理解。出于示例的目的提供了这些细节,并且在不具有一些或所有这些特定细节的情况下可以根据权利要求来实施本发明。为了清楚的目的,没有详细描述与本发明有关的技术领域中已知的技术材料,以便不会不必要地使本发明模糊。
[0022] 描述了存储器的硬件支持的临时拷贝和日志记录。在一些实施例中,使用与中央处理单元分离的硬件部件来提供硬件支持。在各个实施例中,为了支持临时拷贝,基于已知的存储状态和日志信息来生成快照。在各个实施例中,至少部分地基于间接存储表示来确定日志信息。
[0023] 图1A是图示了被配置成提供存储器的硬件支持的临时拷贝的系统的实施例的框图。
[0024] 系统100包括被配置成执行程序指令的一个或多个中央处理单元(CPU,也被称为应用处理器或处理器)102、被配置成给CPU 102提供临时低等待时间存储的一个或多个高速缓存104、以及被配置成给CPU 102提供指令和数据的主存储器108。主存储器108典型地具有比高速缓存104更大的容量和更高的等待时间。在一些实施例中,高速缓存是使用静态随机存取存储器(SRAM)实现的,并且主存储器是使用动态随机存取存储器(DRAM)实现的。其他实施方式是可能的。此外,该系统可以具有辅助存储器,诸如盘。
[0025] 频繁使用的数据的拷贝被存储在高速缓存104中。当CPU 102需要数据时(例如,当应用从数据库请求特定段的数据时),首先检验高速缓存104。如果未在高速缓存104中找到数据,则发生高速缓存遗漏,并且检验主存储器108以定位数据。
[0026] 在该示例中,存储控制器106被配置成管理去往和来自主存储器108的数据流(包括指令),从而便于由CPU 102对主存储器108的访问。存储控制器106被实现为与CPU 102分离的模块,并且这两个部件不必直接彼此通信(换言之,它们不必具有直接接口或连接)。存储控制器106和CPU 102可以经由高速缓存104来交换数据。
[0027] 拷贝协处理器(CCP)110被配置成与CPU协作以支持一致性读取和日志记录功能。如下面将更加详细地描述的那样,CCP 110被配置成执行诸如拷贝数据和提供快照之类的动作。CCP 110被视为与CPU 102分离的硬件部件。CCP不必具有与CPU的直接连接(例如,接口、总线)。在一些实施例中,CCP和CPU被实现在分离的芯片或电路上。在各个实施例中,CCP通过向和从存储控制器106和/或高速缓存104发送数据来与CPU 102对接。在一些实施例中,CCP 110被实现为与存储控制器分离的部件,并且这两个部件经由通信接口来彼此通信。在一些实施例中,CCP 110与存储控制器106集成,作为存储控制器的电路的一部分。
[0028] 数据(诸如数据库或数据的其他收集)被存储在主存储器108中。在一些实施例中,特定存储区被指定为被日志记录。例如,操作系统可以将一个或多个配置寄存器设置成指定被日志记录的存储区的地址和大小。对向存储区的写入进行日志记录。在该示例中,撤销日志112和重作日志114被CCP 110维持在主存储器108中。对于特定存储区(例如,特定地址处的存储页面),重作日志包括已执行的更新,即,自上一个检验点起的新值。撤销日志包括自上一个检验点起已通过这些更新而盖写的值(即,旧值)。
[0029] 在一些系统中,频繁地提交数据,但是在特定检验点处较不频繁地将数据保存到后备存储器(例如,写入到持久数据存储器,诸如盘)。重作日志允许通过下述操作来在故障后恢复所提交的状态:在与较早时间相对应的检验点处从后备存储器读取数据状态的快照,并且然后将重作日志中的所提交的状态应用于检验点状态,以使数据状态在时间上提前到最后提交和日志记录的状态。因此,重作日志允许系统避免必须在每次提交时将原地更新写出到持久存储器的成本同时仍允许从存储状态的损失的恢复。
[0030] 撤销日志用于通过按倒序将撤销日志的条目应用于状态的较晚时间拷贝直到状态已被“撤销”回到其在指定时间处的状态来提供较早时间处的数据状态。该“较晚时间”的普通情况是当前时间,在这种情况下,已知的状态与数据库的当前状态相对应。撤销日志便于原子事务的实现(原子事务包括必须一起提交的写入操作的集合或根本不包括写入操作的集合),这是由于由写入到相同数据的不同事务引起的冲突可能被撤销。
[0031] 例如,存储区最初存储值“1”,并随后被修改成存储值“2”,然后,“1”被存储在撤销日志中并且“2”被存储在重作日志中。给定初始状态“1”并基于重作日志,可以确定较晚提交的状态是“2”。给定较晚状态“2”和撤销日志,可以确定较早提交的状态是“1”。
[0032] 在一些实施例中,使用间接存储表示将诸如108之类的物理存储器表示给处理器,在间接存储表示中,在处理器发布的物理地址与物理存储器中的实际数据行(也被称作高速缓存行)位置之间存在一定级别的间接性。这种间接存储表示的详细示例可见于出于所有目的以其整体通过引用并入于此的代理人案号为HICAP001的美国专利No. 8,407,428和出于所有目的以其整体通过引用并入于此的代理人案号为HICAP003的美国专利No. 7,650,460中。
[0033] 图1B是图示了间接存储表示的示例的图。在该示例中,主存储器中的页面被划分为段或行。这些行中的一些用于存储实际数据内容并被称为数据行。这些行中的一些存储引用数据行的物理行标识符(PLID),并被称为转换行或间接行。如所示,数据行152-156存储实际数据,并且物理行标识符(PLID)P1-P4引用用于形成与适当数据相对应的存储器的数据行。处理器(例如,CPU)将从处理器发布的地址计算出的PLID地址用作用于间接地访问由PLID引用的数据行的处理器发布的物理地址。例如,PLID P1和P2集合(间接行)引用数据行152和154集合,其与数据内容“ABCD”相对应。另一PLID P3和P4集合引用数据行156和154集合,其与数据内容“EFCD”相对应。为了访问数据内容“ABCD”,处理器访问包括PLID P1和P2的间接行的物理地址,并且然后使用这些PLID来定位包含该数据的数据行,即,与PLID1和PLID2相对应的数据行。在一些实施例中,存储控制器通过提供PLID到数据行的映射来便于数据访问。包括PLID集合(其引用包括实际数据内容的物理数据行的对应集合)的数据结构被称作间接行。写入操作等效于将与写入地址相对应的转换行条目中的位置处存储的PLID改变为不同PLID以使得不同数据行被引用。
[0034] 在一些实施例中,将用于存储数据的存储器组织为固定大小的数据行的阵列,每个数据行是通过PLID寻址的。对数据行进行引用计数,并可以共享该数据行。换言之,可以存在引用单个数据行的多个PLID。数据行的大小取决于实施方式,并可以在不同实施例中不同。在一些实施例中,对数据行进行去重复(deduplicate)(换言之,每个数据行具有唯一内容,并且引用相同数据内容的PLID通过引用相同数据行来这样做)。例如,数据内容“CD”由多个PLID使用,但仅被存储在单个数据行中。
[0035] 在一些实施例中,每个数据行是不可变的。换言之,一旦数据行被指派有特定值,其就在应用的持续时间内不改变。如果需要写入数据,则将存储引用旧数据的PLID的间接行条目改变成存储引用新数据的不同PLID。例如,间接行条目最初存储PLID P1,其引用数据内容AB。如果数据内容需要被代之以改变为EF,则将条目改变为PLID P3。
[0036] 本文描述的技术一般适用于使用间接存储表示而表示的存储器。尽管下面全面地讨论了与图1B中所示的内容类似的间接存储表示,但是可以使用其他间接存储表示。图1C是图示了间接存储表示的另一示例的图,其中,PLID被组织成有向非循环图(DAG)。
[0037] 一致性读取
[0038] 图2是图示了在诸如图1A的100之类的系统上实现的一致性读取过程的实施例的流程图。在该示例中,过程200由CCP响应于由CPU请求的一致性读取请求来调用。
[0039] 在202处,接收针对存储区截至特定时间的快照的一致性读取请求。一致性读取请求包括与感兴趣的存储区的位置以及存储区的快照(即,拷贝)被请求的特定时间点有关的信息。在一些实施例中,一致性读取请求是由CPU经由存储控制器向CCP发送的指令。
[0040] 在204处,执行临时拷贝操作。
[0041] 在一些实施例中,撤销日志和重作日志二者均由临时拷贝使用。在一些实施例中,临时拷贝操作包括根据上下文来选择撤销或重作日志。在一些实施例中,在调用临时拷贝操作之前选择日志,并且所选择的日志由临时拷贝操作使用。该选择可以由CPU、存储控制器、CCP自身等进行。如将更加详细地描述的那样,日志选择取决于一致性读取过程是被用于执行撤销操作以获得处于较早提交的状态的数据的快照,还是被用于执行重作操作以获得处于较晚提交的状态的数据的快照。在一些实施例中,根据调用者的规范来选择日志;在一些实施例中,基于所请求的时间来选择日志。
[0042] 临时拷贝操作包括基于所选择的日志、存储区的已知状态(例如,处于所提交的状态的存储区的现有快照)和与快照相关联的时间戳来生成快照。临时拷贝在指定时间处生成存储区的快照。物理存储器的所生成的快照被提供给第一处理器以由在第一处理器中执行的应用使用。
[0043] 图3是图示了临时拷贝过程的实施例的流程图。过程300可以用于实现204过程200。在该示例中,临时拷贝操作被指定为具有下述函数接口:
[0044] temporalCopy(src, dest, timestamp);
[0045] 其中,src和dest分别对应于源存储位置(例如,源缓存位置)和目的地存储位置(例如,目的地缓存位置)。截至指定时间戳处的时间(例如:2014年1月12日上午11:00;201401121100等),该函数产生包括位置src(例如,0x10001111)处的缓存状态的位置dest(例如,物理地址0x1000000)处的缓存。Src的存储状态是已知的,并且dest的存储状态是待定的。在该函数接口中,已知的状态对应于当前时间处src的状态。在一些实施例中,该函数接口可以提供用于指定除当前时间外的时间(诸如,src被设检验点(checkpointed)和存留至盘的时间)处的src状态的附加参数。在一些实施例中,临时拷贝函数被CPU调用以指示CCP执行临时拷贝函数。
[0046] 在一些实施例中,对包括一个或多个页面的存储区执行临时拷贝。在一些实施例中,存储区独立于页面子结构。例如,存储区可以包括间接存储结构的多个间接行(例如,PLID的阵列)。例如,大小为4千字节(传统页面的大小)的存储区可以被划分为每个有64字节的64个行。如果PLID的大小为32比特,则每页面使用每个存储16个PLID的4个转换行来引用该区中的数据行。在其他实施例中,可以使用其他存储区/数据行/PLID大小。
[0047] 在一些实施例中,src和dest指定每个均指示单独的数据结构,其提供与源和目的地存储区自身有关的附加信息。例如,在一些实施例中,该应用将src指定为虚拟地址而不是物理地址。在这种实施例中,单独的数据结构包括操作系统的虚拟存储映射,这可以将与源区相关联的文件、用于撤销和重作对该区的改变的日志以及其他属性(诸如事务行为)指定为附加信息。Dest可以被类似地指定。操作系统软件将该虚拟地址转换至物理存储位置,确保该物理存储位置包含与该逻辑内容相关联的内容并进一步确定日志要从该附加信息由临时拷贝使用。在另一实施例中,src被指定为逻辑数据集内的区。即,其标识了可能已位于另一物理地址处或未位于指定时间处的任何物理地址处的逻辑数据单元。在这种情况下,实现该数据集的软件维持指示逻辑数据的拷贝被存储于何处(例如,在什么检验点和高速缓存中)、与src相关联的日志以及控制如何对存储器中的数据进行实例化的其他配置参数的附加信息。在一些实施例中,dest参数被省略,并且临时拷贝返回对作为临时拷贝的结果的数据被存储于其中的位置的指示。
[0048] 在该示例中,在302处,将源存储位置中的数据拷贝至目的地存储位置。在使用间接存储表示(诸如,图1B-1C中所示的那些间接存储表示)来表示存储器的实施例中,拷贝操作包括拷贝在转换行中的PLID。由于由PLID引用的实际数据行未被拷贝,则所拷贝的数据的量可以显著地小于源存储区中的所有数据内容,使拷贝操作非常高效。
[0049] 在304处,将与源存储位置的已知状态相关联的已知时间戳(例如,在已知状态是当前状态的情况下的当前时间)和与要生成的状态相关联的指定时间戳进行比较。比较的结果被用于选择适当日志。在一些实施例中,在临时拷贝操作之前向CCP指定已知时间戳(或日志中的条目的对应位置)。在一些实施例中,temporalCopy函数包括指定该信息的一个或多个附加参数。
[0050] 如果时间戳相同(例如,已知状态和指定时间戳二者均对应于当前时间),则已知状态与指定状态相同,并且不存在改变。因此,在318处创建处于其已知状态的存储区的未修改拷贝,并且该过程在320处终止。
[0051] 比指定时间戳晚的已知时间戳指示要通过撤销导致源存储区中的数据的改变来生成数据的较早状态,并且因此,选择撤销日志。相应地,在306处,对撤销日志进行扫描,以识别在指定时间与已知时间之间可应用于源存储区的所提交的改变。在一些实施例中,该扫描从撤销日志中的比已知时间戳早的最晚点(或在当前时间被用作已知时间的情况下日志的结尾)开始,并且,当在日志中达到比指定时间早的时间戳时或者当整个日志已经被扫描时,该扫描终止。在308处,按下述这种顺序将改变应用于目的地缓存:首先应用最晚的改变,从而撤销在指定时间与已知时间之间对源缓存进行的改变。目的地缓存中的所得到的数据是截至指定时间的期望数据。如果未识别出改变,则不应用改变。该过程随后在320处终止。
[0052] 比指定时间戳早的已知时间戳指示要通过重新应用在源存储区中提交了已知状态之后发生的改变来生成数据的较晚状态,并且因此,选择重作日志。相应地,在310处,对重作日志进行扫描,以识别在已知时间与指定时间之间可应用于源存储区的所提交的改变。在一些实施例中,该扫描从重作日志中的比已知时间戳晚的最早点开始,并且,当在日志中达到比指定时间晚的时间戳时或者当整个日志已经被扫描时,该扫描终止。在312处,按下述这种顺序将改变应用于目的地缓存:首先应用最早的改变,从而重新应用在已知时间与指定时间之间对源缓存进行的改变。如果未识别出改变,则不应用改变。该过程随后在320处终止。
[0053] 在一些实施例中,该过程可选地确定在指定时间处是否存在存储区的拷贝。例如,保持存储区被设检验点的时间的单独日志,并使用该单独日志来确定在该时间处是否存在拷贝,并且对撤销/重作日志进行检验以确定是否存在对设检验点的快照的进一步改变。如果存在设检验点的快照并且不存在改变,则提供快照的逻辑拷贝,并且不调用如上阐述的重新创建快照的过程。
[0054] 在一些实施例中,给CCP提供虚拟至物理地址转换信息,并且CCP从而支持使用虚拟地址的临时拷贝。其可以进一步使用虚拟地址而不是物理地址来存储日志信息。
[0055] 图4A-4C是图示了在示例一致性读取过程中使用的数据和日志的示例数据图。图4A图示了经历事务内的改变的数据集。在该示例中,数据被存储在结构化存储器中。具体地,存储区存储间接行,该间接行存储引用数据行的对应集合的PLID集合。注意,PLID的值可以是任意的,并被选择成引用第一、第二、第三和第四数据行。
[0056] 在t0=11:00处,间接行存储PLID P0、P1、P2和P3,其分别引用存储A、E、C和F的数据行。这是在事务开始时存储区的初始提交的状态。在撤销或重作日志中不存在条目。
[0057] 在t1=11:05处,存储PLID P3的转换行条目被修改为PLID P9,PLID P9引用D而不是F。因此,撤销日志记录了:在时间t1处,从行的开始处偏移3处的条目存储PLID P3;并且重作日志记录了:在时间t1处,从行的开始处偏移3处的条目存储PLID P9。
[0058] 在t2=11:10处,存储PLID P1的转换行条目被修改为PLID P10,PLID P10引用B而不是E。因此,撤销日志添加指定下述内容的条目:在时间t2处,从行的开始处偏移2处的条目存储PLID P1;并且重作日志记录了:在时间t2处,从行的开始处偏移2处的条目存储PLID 10。在该点处,事务准备好被提交。
[0059] 在一些实施例中,改变需要被回退(可能由于与其他事务的冲突)。因此,在图4B中,使用较晚的快照来恢复较早的快照。已知时间是11:10并且指定时间是11:00。对目的地进行源状态的拷贝(即,对包含A、B、C和D的相同数据行的引用进行源PLID P0、P10、P2和P9的拷贝)。对撤销日志进行扫描以确定如何复原目的地数据行A、B、C和D集合。根据图4A中所示的撤销日志,将第二条目从P 10复原至P1(使得下层的数据内容B被复原至E),并且将第四条目从P9复原至P3(使得数据内容D被复原至F)。该复原是通过从撤销日志得到旧值的PLID并将其写入到指定转换条目来执行的。生成引用数据行A、E、C和F的目的地缓存。
[0060] 在一些实施例中,使用较早设检验点的快照来生成较晚状态。这在图4C中图示。已知时间是11:00并且指定时间是11:10。在目的地处进行源PLID P0、P1、P2和P3的拷贝。对重作日志进行扫描以将改变重新应用于目的地数据行A、E、C、F集合,其中,第四条目从P3改变为P9(并且数据内容从F改变为D),并且第二数据行从P1改变为P10(并且数据内容从E改变为B)。生成引用A、B、C和D的PLID P0、P10、P2、P9的目的地缓存。
[0061] 在一些实施例中,日志的扫描(过程300的306或310)在源中的数据被拷贝至目的地之前进行。对于每个页面(或子页面),维持与数据行相对应的比特集,其中,每个比特对应于行。在存储区的状态已知时的已知时间(诸如,事务的开始)处重置比特集。如果日志记录指示了间接行中的特定条目被改变,则对对应比特进行标记。仅未被标记的源PLID被拷贝至目的地。仍应用改变以导出目的地中的期望数据行。为了使用图4B和4C来图示,使用比特掩码0000来表示事务开始处的条目0-3。在事务结尾处,所得到的比特掩码是0101,这是由于引用第二和第四数据行的PLID改变了。源缓存的第一和第三数据行(PLID P0和P2)不变,并且因此,对应的比特未被标记。这些PLID被拷贝至目的地缓存中的对应位置。第二和第四条目由于在日志中记录的改变而被标记,并且未被拷贝至目的地缓存的第二和第四数据行。取而代之,仅根据日志的改变被拷贝至目的地缓存中的对应位置。在该示例中,根据哪个日志被使用,将引用数据行E和F的P1和P3(图4B)或引用数据行B和D的P10和P9(图4C)拷贝至行中的第二和第四位置。
[0062] CCP可以实现其他操作作为临时拷贝的退化或变型。在一些实施例中,CCP实现了源到目的地的“同时”拷贝(即,在指定时间与已知时间相同的情况下的临时拷贝),在利用PLID拷贝作为相对于实际拷贝数据的优化的同时进行精确拷贝。在一些实施例中,CCP实现了存储区上的“清除”,作为拷贝全零源段的优化版本。在一些实施例中,CCP可以实现清除源区中的每个PLID的存储区上的移动,作为将其移动至目的地区的一部分,从而避免了引用计数改变的开销并同时提供了源区上的“清除”。
[0063] 合并-更新拷贝
[0064] 在一些实施例中,CCP被配置成执行原子合并-更新拷贝操作(也被称作合并-更新操作)。在出于所有目的以其整体通过引用而并入的代理人案号为HICAP004的美国专利申请12/804,901中讨论了该操作及其实现的细节。合并-更新操作允许即使当存在与由不同线程或进程进行的修改的冲突时也合并同时更新,只要该冲突在逻辑上一致且可以被解决以达到可预测存储状态即可。
[0065] 在一些实施例中,更新进程或线程在更新操作或逻辑事务的开始处维持原始数据结构的拷贝,并执行对拷贝的更新。在完成更新时,将与原始数据结构相关联的信息(诸如指针)同与数据结构的当前版本相关联的信息进行比较。如果其指向相同结构,则不存在冲突的更新,并且执行比较和交换(CAS)操作以利用数据结构的新的修改后的版本替换原始版本。然而,如果原始数据结构与当前数据结构不同,则可以将当前数据结构的更新合并到新的修改后的版本中,只要区别在逻辑上一致即可。逻辑上一致的区别是由不同线程或进程进行的、可被解决以达到与应用语义一致的存储状态的同时修改。当由多个线程对存储结构进行的逻辑上一致的修改被合并时,好像每个线程或进程已经以原子方式且独立地对存储结构进行其修改。如下面更详细地解释的那样,对于不同类型的数据,存在确定修改是否在逻辑上一致的不同方式。在一些实施例中,使用从潜在约束的集合当中选择的逻辑一致性约束来确定逻辑一致性。一旦区别被合并,就重试CAS操作。如果区别在逻辑上不一致,诸如当两个当前进程每个均试图将条目添加至与相同键的映射时,合并-更新操作失败,并且重试一些操作。
[0066] 在一些实施例中,撤销/重作日志中的条目与由当前事务的开始与目前时间之间的单独提交的事务对存储区的更新相对应。CCP被配置成拷贝存储区中已被同时的事务改变成指定存储区的行,只要这些改变不与由当前事务进行的更新相冲突。在一些实施例中,CCP进一步被配置成解决特定的逻辑上一致的冲突。
[0067] 图5是图示了合并-更新拷贝过程的实施例的示例数据图。下面示出并结合图5来解释对合并-更新拷贝进行图示的伪代码。
[0068] 如图5中所示,在t0(初始状态)处,存储区中的间接行包括分别引用数据行A、B和C的PLID P1、P2和P3。两个同时的事务具有间接行的快照的拷贝,每个事务对其拷贝进行其自身的一组改变。在修改期间,每个事务拍摄初始状态的快照,其涉及创建引用相同数据行A、B和C的间接行拷贝。相应地,由一个事务进行的改变对另一事务来说不可见。
[0069] 第一过程通过将PLID P1改变至PLID P4从而将从A引用的数据改变至A’,并将PLID P3改变至P5从而将从C引用的数据改变至D,来改变间接行中的第一位置。在时间t1处提交改变,并且将由P4、P2和P5形成的间接行称为状态的当前提交的拷贝。
[0070] 同时,第二过程通过将PLID P2改变至PLID P8(以及将从B引用的数据行改变至B’)来改变间接行中的第二位置,并通过将PLID P3改变至PLID 9(以及将从C引用的数据行改变至E)来改变第三位置。尚未提交由第二事务进行的改变(并且因此,引用由虚线指示),并且将由P1、P8和P9形成的间接行称为状态的当前事务拷贝。在时间t2(其晚于t1)处,第二事务需要提交其改变。由于改变由两个同时的事务进行,因此该改变经历合并-更新过程。
[0071] 下面讨论C样式的伪代码。在该伪代码中,最初指定了下述指针:scp最初指向快照拷贝的第一位置,因此,*scp最初引用与数据行A相对应的PLID;ccp最初指向状态的当前提交的拷贝的第一位置,因此*ccp最初引用与数据行A’相对应的PLID;以及ctp最初指向状态的当前事务拷贝的第一位置,因此*ctp最初引用与数据行A相对应的PLID。每个指针的递增将该指针提前以引用下一行的PLID。该伪代码指定:
[0072] 对于与该存储区中的数据行相对应的每个位置,
[0073] if *ccp被相对于*scp修改
[0074] if *ctp等于*scp // 因此未被当前事务所修改
[0075] 将*ccp写入到*ctp;
[0076] else
[0077] //处理写入-写入冲突
[0078] mergedLine=
[0079] lineMergeUpdate(*scp, *ccp, *ctp, mergeCategory);
[0080] if 合并失败, 返回失败;
[0081] 将mergedLine写入到*ctp;
[0082] ++scp; ++ccp; ++ctp。
[0083] 参照图5,对于第一数据行,*ccp(PLID P4)被相对于*scp(PLID P1)修改,但*ctp(PLID P1)等于*scp(PLID P1)。因此,该行仅被一个事务修改,并且*ccp被写入到*ctp(PLID P1被改变至PLID P4)。
[0084] 对于第二数据行,*ccp(PLID P2)未被相对于*scp(PLID P2)修改,因此,该行再次被至多一个事务修改,并且*ctp(PLID P8)不变。
[0085] 对于第三数据行,*ccp(PLID P5)被相对于*scp(PLID P3)修改,并且*ctp(PLID P9)不与*scp(PLID P3)相同。这被称作写入-写入冲突,由于两个事务均试图对相同数据进行改变。因此,lineMergeUpdate函数被调用以确定写入-写入冲突是否在逻辑上一致,并在一致的情况下合并该冲突。参数mergeCategory指示要使用的合并的形式。lineMergeUpdate的缺省结果是失败(诸如,图5中所示的情况,其中两个不同字母D和E的数据内容导致逻辑上不一致且不能被解决的写入-写入冲突)。当lineMergeUpdate失败时,中止当前未提交的事务。然而,特定其他类型的合并是可允许的(即,写入-写入冲突在逻辑上一致)。例如,如果mergeCategory指示该数据行中的值被视为计数器,则lineMergeUpdate函数将确定快照拷贝与当前事务值之间的差值,并将该差值加到该行中的计数器,以提供mergedLine,mergedLine提供用于解决冲突的语义。mergeCategory还可以指定特定约束。
例如,在单调递增计数器的情况下,如果合并后的值违反计数器值必须单调递增这一约束(诸如当计数器被事务之一重置时),则合并-更新操作失败。
[0086] 在该示例中,当前事务的存储区状态实际上是在时间t0处创建、利用要在时间t2(当前事务的结束时间)处执行的各种更新而修改的状态的快照。合并-更新拷贝实际上并入有已由其他同时的事务在时间t0与时间t2之间提交到存储区的更新。具体地,如果更新可以被合并(即,如果不存在冲突或者如果冲突在逻辑上一致),则对这些更新进行合并。因此,合并-更新拷贝操作可以被实现为具有已知开始时间t0的针对给定区的临时拷贝操作并结束于指定时间t2处。该临时拷贝操作附加地检测写入-写入冲突(例如,通过跟踪是否来自不同事务的多个日志修改相同PLID位置),并在可能时执行合并操作。
[0087] 在一些实施例中,每个重作日志条目包括与进行了改变的对应事务有关的信息,使得合并-更新拷贝操作可以使用重作日志来确定所提交的修改并执行合并-更新拷贝操作。
[0088] 在一些实施例中,在针对事务的每个修改后的存储区的事务提交时调用合并-更新拷贝。重作日志用于检测任何提交冲突,在可能时解决它们并在不可能时中止事务。相比之下,在现有系统中,需要事务来针对是否存在由另一事务向相同位置的写入进行显式检验,以检测写入-写入冲突,该冲突引发大量开销。在实现硬件支持的临时拷贝的系统中,重作日志可以用于在事务要提交其改变时检测写入-写入冲突。在一些实施例中,重作日志条目包括与哪个事务进行了改变有关的信息,并且在事务要提交其改变时,对重作日志中的可应用条目进行定位和检查以确定是否存在冲突。在可能时解决所识别的冲突。如果冲突不可能解决,则中止该事务。
[0089] 在一些实施例中,仅当相同页面被当前事务和另一所提交的同时事务二者所修改时,才调用合并-更新操作。这是由于如果页面仅被单个事务修改,则将不存在冲突并且不需要合并。在一些实施例中,每个物理页面包括指示其已被多个事务修改的元数据,并且该元数据信息被操作系统使用以确定是否针对该物理页面调用合并-更新操作。
[0090] 日志表示
[0091] 图6A是图示了存储器中的物理数据行的实施例的图。如所示的那样,物理存储器被划分为子页面。每个子页面包括预置数目的数据行(在该示例中为32个,但在其他实施例中可以使用其他数目)。子页面的开始地址被表示为subpageAddr。可以使用行掩码来表示行,其中,行中的每个比特对应于特定行。
[0092] 在该示例中,行掩码是具有子页面单元中的比特每行的32比特值,其中,掩码中的第i个比特对应于子页面的第i行。最初,行掩码被设置为缺省值,诸如0。如果行被修改,则其对应的行掩码比特值被设置为1。因此,可以使用具有下述字段的子页面更新记录(SPUR)来表示与特定数据行的位置有关的信息以及引用该数据行的PLID是否已被修改:
[0093] [subpageAddr,lineMask],
[0094] 其中,subpageAddr是子页面中该行定位于其上的地址,并且lineMask是行掩码,其包括用于指示对应行的修改状态的比特集合。
[0095] 子页面的大小由lineMask的大小乘以行的大小来确定。在使用64字节行和32比特lineMask的实施例中,子页面大小是2千字节。
[0096] 图6B是图示了基于图6A的数据行表示的日志表示的实施例的图。在该示例中,撤销日志602被表示为与已被盖写的数据行相对应的PLID值的序列。类似地,重作日志604被表示为与已被写入的修改后或新的数据行相对应的PLID值的序列。
[0097] 每个PLID映射到对应的物理数据行位置。在该示例中,物理信息被存储在元数据日志606中以节约日志条目所需的存储器。参照图6A,在每个子页面上,元数据日志被表示为SPUR的序列。在每个SPUR中,与该子页面上的第i行相对应的第i个比特被设置为指定值(例如,1),指示该行被切换。如果行被切换,则新PLID处于重作日志中并且前一PLID处于撤销日志中。因此,相同的元数据日志可以用于生成撤销日志和重作日志二者。
[0098] 在一些实施例中,子页面地址和行掩码字段的大小可以被进一步优化,尤其是在SPUR大小被允许在大小上不为2的幂次个比特的情况下。优化的目的在于:最小化需要被扫描以执行撤销处理作为一致性读取块生成的一部分的数据的量。例如,在8比特掩码的情况下,每个记录覆盖0.5千字节,因此在34比特页面地址字段的情况下,每个SPUR是42个比特,而寻址能够处理8太字节的存储器。对参数的这种选择将所需要的用于日志访问的存储带宽是在几乎所有更新都是每页面单行的情况下使用64比特SPUR所需要的大致百分之70。可以基于对在操作期间每页面更新的期望行数的统计来进行优化。
[0099] 可以通过预留指示SPUR存储元数据信息而不是实际页面数据更新的特殊地址的集合,将附加元数据信息存储在日志中。例如,可以通过利用被预留以指明时间戳且不与子页面地址(例如,在其中每个单个比特被设置为1的地址)相对应的地址写入SPUR,来存储时间戳。这种特殊地址也被称作标志。可以类似地处理元数据信息,诸如事务的开始、事务的结尾等。通过针对每个这种值预留2的幂次个地址块,可以使用页面地址字段的低位比特来增强掩码字段中的低位比特以存储大值。例如,通过针对时间地址使用256个地址的块,页面地址的低位8个比特可以用于增强掩码字段以在使用16比特行掩码的配置中针对该时间戳提供24个比特。
[0100] 可以通过将该至存储为相对于某基础值的偏移而不是存储绝对值,来降低这些参数的大小需求。例如,可以将时间戳存储为相对于某时期基础值的偏移。然后,绝对时间戳可以是偏移的24个比特加上时期基础的24个比特,用于有效时间戳的总共48个比特。通过利用与时期寄存器相对应的特殊页面地址将SPUR写入到日志来更新时期基础值。
[0101] 使用该表示,CCP维持向撤销和重作PLID日志中的指针,在读取SPUR时将这些指针调整在SPUR中指示的PLID数目。因此,不需要显式地将该对应关系存储在日志中。
[0102] 固定大小的SPUR表示还允许向后以及向前读取元数据日志。该表示还便于由CCP容易地生成撤销/重作日志。
[0103] 日志记录
[0104] 在一些实施例中,应用的物理存储器的一个或多个区被指明为被日志记录。这可以由设置特定配置寄存器的操作系统或存储控制器进行,以指示这种存储区的位置和大小。随后,向日志记录的存储区的每个写入操作使所写入的PLID连同元数据日志中存储的SPUR一起拷贝到日志区。
[0105] 图7是图示了用于生成日志信息的过程的实施例的流程图。过程700可以由CCP和/或存储控制器执行。
[0106] 在702处,检测由CPU向日志记录的物理存储区的写入操作。在一些实施例中,向高速缓存或实际基础存储系统(例如,主存储器)的写入操作由存储控制器和/或CCP中的逻辑通过对照日志记录的存储区检验与写入操作相关联的标识地址来检测。对于使用如上所讨论的间接存储表示而表示的存储区,写入操作修改物理数据行的间接表示(例如,PLID的内容,或者PLID引用到哪个数据),但不改变数据行自身的数据内容。
[0107] 在704处,记录与写入操作相关联的一个或多个日志记录。具体地,在撤销日志中记录得到改变的内容的旧值,在重作日志中记录新值,或者在相应日志中记录这两个值。在一些实施例中,与存储区相关联的配置信息指定是更新撤销日志、重作日志、还是这两者。对所修改的内容的间接表示相关联的标识信息和与物理数据行相关联的标识信息进行记录。在一些实施例中,将已被修改成引用不同数据行的PLID插入到PLID队列中的当前(尾部)位置处适当日志中的下一条目中。此外,基于引用的与该改变相对应的数据行来生成SPUR,并将该SPUR写入到元数据日志。
[0108] 在一些实施例中,每当写入操作发生时,都创建撤销、重作和SPUR记录的集合。然而,每次写入时的日志记录可能是低效的,这是由于相同存储片段可能被写入许多次。例如,如果间接行中的PLID首先引用A,然后B,然后C,均在事务被提交之前,则出于跟踪所提交的存储状态的目的,仅值C是相关的。因此,在一些实施例中,日志记录不是一发生写入操作就创建的,而是在涉及一个或多个写入操作的事务准备好要提交时创建的。拍摄如使用间接存储结构而表示的存储区的快照来完成这一点。
[0109] 在一些实施例中,拍摄快照(拷贝)包括对间接表示感兴趣的存储区中的存储行的PLID进行拷贝。在一些实施例中,存储访问中的间接性意味着:可以通过拷贝与存储区相关联的PLID而不是拷贝由PLID引用的实际数据行来创建快照。在一些实施例中,作为在指定时间与当前时间相同的情况下的临时拷贝的退化形式,CCP应请求而执行对PLID的这种拷贝,并且,不存在撤销或重作,这是由于没有内容将被改变。行的引用计数和这些共享行的不变性意味着所拷贝的PLID构成存储区状态的快照,即便实际数据尚未被拷贝。
[0110] 在一些实施例中,在初始状态处(即,在存储区被改变并经历日志记录之前日志记录时间间隔的开始处)拍摄存储区的快照。然而,拍摄整个区的快照可能在计算上昂贵。因此,在一些实施例中,当检测到第一次写入操作时,应需求而拍摄快照。在一些实施例中,当针对整个存储区检测到第一写入操作时,应需求而生成快照,并且如果自将不存在日志条目起,存储区未被修改,则不需要快照。在一些实施例中,以子区的粒度(诸如页面)拍摄快照。仅有实际上写入的页面使其快照在日志记录时间间隔期间拍摄。具体地,检测向页面的第一次写入并通知操作系统以创建页面的快照。操作系统可以调用CCP以辅助创建该快照。通过将引用页面的数据行的PLID拷贝到页面的阴影间接结构来创建页面的快照。在感兴趣的时间间隔期间针对向页面的每个首次写入而重复该过程,其中,与每次写入有关的信息被记录在快照数据结构中。如果每个PLID是32个比特并对应于64个字节(512个比特)的行大小,则被拷贝以创建页面的快照的数据的量可以是该页面的大小的仅1/16。
[0111] 相应地,存储区的当前状态的完整快照由如上所述的显式拍快照的页面和来自当前状态的尚未被修改的页面组成。
[0112] 在支持上面讨论的快照技术的实施例中,对于已被修改的页面,CCP可以通过将存储区的当前状态中的PLID与初始状态快照中的对应偏移处的那些PLID进行比较并将与日志不同的当前PLID连同标识信息一起传送,来在日志记录时间间隔期间创建被切换的数据行的重作日志(换言之,改变了哪些数据行正被引用的PLID)。其可以类似地通过相同的比较来创建撤销日志,从而取而代之仅保存来自初始状态快照的对应PLID。在一些实施例中,执行该操作的时间是提交事务的时间。
[0113] 举图4A-4C为例,可以使用该技术来生成撤销日志和重作日志。假定PLID P0-P3引用相同页面上的数据行。当第一次写入操作发生在该页面上时,拍摄原始页面的快照,从而复制PLID值。当要生成日志时,将存储区的当前状态中的PLID与快照中的PLID进行比较,并且识别与初始状态快照中的PLID不同的当前PLID并将信息保存到日志。此外,一旦生成了重作日志,就可以通过在重作日志中记录对应的条目并在快照中记录其对应值来导出撤销日志。例如,参照图4A,在11:10处,假定重作日志包括从行的开始偏移3处的条目(P9)并且在初始状态快照中该偏移处的条目具有P3的值,可以确定撤销日志还包括存储值P3的相同位置处的条目。因此,可以基于重作日志记录(其包括与被日志记录的改变的位置有关的信息)以及初始状态快照中的对应位置处的旧值来确定间接行中的撤销日志记录。
[0114] 用于在提交时间处将日志信息附加到撤销和重作日志的示例伪代码的集合如下:
[0115] for 快照中的每个子页面
[0116] for 子页面中的每行i
[0117] if 快照中的第i个PLID与当前子页面中的第i个PLID不同
[0118] if 重作日志记录,将该当前PLID排队到重作日志;
[0119] if 撤销日志记录,将该第i个快照PLID排队到撤销日志;
[0120] 将如在lineMask中设置的该第i个比特记录在该页面的SPUR中;
[0121] 将该子页面的SPUR排队到元数据日志;
[0122] end。
[0123] 在一些实施例中,在间接存储结构中存在针对每PLID条目维持的“修改”标志。该标志是在对应条目被修改时设置的,并可以在软件/硬件控制之下被清除。例如,“修改”标志可以在感兴趣的事务或时段的结尾处被重置。在出于所有目的以其整体通过引用并入于此的代理人案号为HICAP010的美国专利申请No. 13/712,878中描述修改标志的示例。在这些实施例中,CCP可以通过扫描定义存储区的PLID条目并仅将被标示为被修改的那些PLID拷贝到日志来创建被修改的行的重作日志。
[0124] 在事务的开始处进行快照的一些实施例中,在接收到事务的结束的指示(诸如,传统的准备提交指示)时,向CCP给出生成重作和非日志记录信息并将其附加到重作和撤销日志的指示。在完成该日志记录时,向元数据日志写入结束事务指示,该结束事务指示包括事务id和时间戳。在一些实施例中,可以中止事务。因此,根据该事务是被提交还是被中止,提供提交或中止的指示。在后一种情况下,还提供了该事务的日志记录的开始的指示(例如,时间戳、日志条目号码)。
[0125] 在一些实施例中,不是所有数据行都被引用计数。例如,实际上可以在遇到复制存储系统中的溢出区域中的数据行时将这种行拷贝到新行位置。然后,将与所拷贝的行相关联的PLID存储在日志中。
[0126] 在各个实施例中,可以在对性能造成最小影响的情况下用软件完成维持其初始生成之外的日志和由CCP支持的临时拷贝。下面描述可用软件支持的这些特征中的一些。
[0127] 在一些实施例中,用软件实现将顶级高速缓存冲刷到事务提交时的高速缓存或存储器,使得以相对于事务的完成适时的方式对作为事务的一部分的向行的写入进行日志记录。在一些实施例中,作为提交指令的一部分,处理器可以执行该动作。
[0128] 在一些实施例中,在更新(诸如事务)的开始处,在CPU中运行的软件传送开始事务并在结束处传送结束事务操作到CCP,以分别指示事务的开始和结束。在开始事务的指示时,分配事务标识符并记录当前时间戳。
[0129] 在一些实施例中,CCP直接将所生成的日志记录串行化到外部输入/输出(I/O)设备(诸如网络),而不是将这些记录存储在存储器中。类似地,CCP还可以直接将从I/O设备接收和解串行化的重作日志记录应用于存储区,以有效地使存储区的存储状态在时间上提前到与重作日志记录相关联的存储状态。例如,第一计算节点(例如,计算设备)可以有效地将其存储状态设检验点到第二计算节点。具体地,第一计算节点通过拍摄其存储状态的完整快照来对其存储状态设检验点,并将设检验点的存储状态发送至第二计算节点。第一计算节点还使用其CCP来生成重作日志记录,并通过网络连接将该记录传输至第二节点,第二节点将这些重作日志记录应用于从第一计算节点接收的设检验点的状态,从而在引发最小网络和应用处理开销的同时维持第一节点的存储状态的最近拷贝。
[0130] 在一些情况下,使用该高效网络拷贝技术来将运行的应用从一个网络主机移动至另一个,同时通过拷贝该应用的设检验点的存储状态并且此后仅拷贝该应用的自前一设检验点的状态起已改变的行来最小化对该运行的应用的中断。在一些实施例中,日志记录、设检验点和更新由CCP在向传输缓存器中的网络传输之前执行,以确保CCP操作不是流控制的,以便匹配网络的限制,尤其是当网络拥塞时。
[0131] 周期性地,软件可以将撤销、重作和/或元数据日志的CCP生成的部分拷贝-转换成其自身的日志格式,将面向行/页面的记录转换成传统数据库形式,典型地然后将结果拷贝到持久性储存器,诸如数据库、盘等。示例日志格式具有下述字段:
[0132] 记录标识符 | 事务id | 偏移 | 旧数据值 | 新数据值
[0133] 其中,字段对应于记录的标识符、执行了该更新的事务、记录中的更新字段的偏移、该字段的旧数据值和被写入到该字段的新数据值。该日志表示不使用PLID,这是由于数据可以被存储在不具有对相同物理级间接结构的访问的辅储存器上
[0134] 在一些实施例中,软件被用于在指定时间内维持从页面到缓存的映射,因此其可以确定截至修改时间的给定页面到虚拟存储地址的绑定。例如,如果物理页面P需要被记录为在ti到tj之间的时间段内存储块B,则软件可以将CCP生成的日志记录信息转换成与物理存储地址无关的形式或至少适于由数据库管理系统进行的长期持久日志记录的形式。在一些实施例中,上级软件将物理存储器映射到较高级数据结构,并在日志记录中记录映射信息,使得上级应用可以使用日志记录来更容易地恢复或重构适当数据。例如,软件确定被改变的PLID对应于公司的雇员数据库中的雇员的记录,特别地,雇员记录中的工作年限字段(years of service field)。因此,日志记录由软件生成和转换,以包括指示改变发生于雇员的工作年限字段的信息。使用日志的应用可以基于日志记录和雇员数据库的快照,通过根据日志记录的值改变雇员的工作年限字段,来高效地恢复或重构雇员数据库。
[0135] 在一些实施例中,CCP被提供有与给定物理页面或子页面相对应的逻辑块指明(LB),并且CCP自动地将该信息记录在日志中。
[0136] 在实施例中,软件管理处于存储器中的日志的部分,并周期性地将这些日志的部分冲刷到非易失性储存器(诸如盘或FLASH存储器),以提供持久拷贝。管理这些日志的软件被配置成在接收到针对快照的请求时确定存储器中日志缓存是否具有将缓存撤销回到所需时间或提前到期望时间所需的数据。如果否,则从其持久储存位置访问所需的附加日志数据并将所需的附加日志数据传送至主存储器以允许执行操作。
[0137] 日志记录及其对快照的支持的硬件实现避免了用于执行这些动作的应用开销,包括在搅动处理器高速缓存以访问与该日志记录实现相关联的代码和数据时的成本。
[0138] 硬件实现还减少了作为日志处理的一部分而与其他应用过程进行同步(即,应对针对日志记录数据结构的竞争)的开销。CCP可以通过允许在先前发布的操作已完成之前发起新的拷贝操作、充分利用存储系统来支持多个同时操作,从而避免成为存储系统自身的性能限制之外的性能瓶颈。
[0139] 公开了存储器的硬件支持的临时拷贝和日志记录。间接存储表示允许以与保存指针相当的空间和时间成本将整个行保存到日志,这是由于对该行的引用被存储在日志中,而不是数据自身。间接存储表示允许通过拷贝对行的引用而不是数据自身、使用空间和时间高效的方式来创建存储快照。该快照在比必须将撤销应用于修改后的状态以提供所提交的状态更高效的在当前时间处读取的普通情况期间进行“一致性读取”。其还允许以较低空间成本保存来自早先时间的快照,从而降低重复一致性读取事务的成本。
[0140] 该技术还避免了必须关于向存储器的应用写入进行调解,该应用写入原本将在L1/L2高速缓存中被吸收。换言之,其仅依赖于在从处理器高速缓存写回该行的点处检测到修改,例如,该修改可以是在回合或事务的结尾处强制的。
[0141] 该技术还提供了一种方式,用于确定要在缺少修改后的标签时对行进行日志记录,同时避免将行写入到日志直到日志记录间隔的结尾为止。推迟行向日志的写入直到日志记录间隔的结尾避免了作为向相同行或相同(子)页面的多次写入的结果的多个日志条目,并避免了迫使从处理器高速缓存写出。
[0142] 该技术还允许在事务的情况下简化日志,这是由于与事务相关联的日志记录仅在事务的结尾处写入,因而,在假定的提交的情况下,日志不必包含与所中止的事务相关联的日志信息。换言之,日志仅当事务非常有可能(如果不是肯定的话)将要提交时才被写入。(如果不是分布式事务,则其可以是肯定的。)这是可行的,原因在于状态的快照在没有日志支持的情况下使撤销可行。
[0143] 快照还允许导出撤销日志信息作为快照与重作日志之间的差异。
[0144] 硬件日志记录技术还意味着:即使改变是由相对不可信的应用代码执行的,也确保对该改变进行日志记录。这是由于CCP与CPU的执行无关地进行操作,并且因此,即使应用代码不正确地执行,CCP也可以对信息进行日志记录而不影响CPU的操作。
[0145] 尽管已经出于理解清楚的目的而相当详细地描述了前述实施例,但是本发明不限于所提供的细节。存在实现本发明的许多可替换方式。所公开的实施例是说明性的而非限制性的。
高效检索全球专利

IPRDB是专利检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,专利查询、专利分析

电话:13651749426

侵权分析

IPRDB的侵权分析产品是IPRDB结合多位一线专利维权律师和专利侵权分析师的智慧,开发出来的一款特色产品,也是市面上唯一一款帮助企业研发人员、科研工作者、专利律师、专利分析师快速定位侵权分析的产品,极大的减少了用户重复工作量,提升工作效率,降低无效或侵权分析的准入门槛。

立即试用