远程直接存储器访问的制作方法

文档序号:13080230阅读:201来源:国知局
远程直接存储器访问的制作方法与工艺



背景技术:

数据存储要求和速度要求都在增加。因此,可增加数据访问的速度的新的存储技术已被投入使用。这些存储技术经常基于采用固态驱动器(ssd)的形式的非易失性存储器(nvm)。ssd可通过称为矩阵(fabric)的连接技术彼此互连以及与主机(例如,服务器系统)互连。

附图说明

在下面的详细描述中并且参照附图描述某些示例性实施例,其中:

图1是使用固态驱动器的示例性计算系统的方框图;

图2是直接从服务器向固态驱动器的阵列存储数据的能够实现远程直接存储器访问的网络接口卡(rnic)的示意性示例;

图3是使用乐观存储分配的从服务器向固态驱动器的阵列直接存储数据的rnic的示意性示例;

图4a是使用ssd的示例性乐观存储器具的方框图;

图4b是使用ssd的示例性乐观存储器具的方框图;

图5a和5b是用于数据的乐观存储的示例性方法的过程流程图;

图5c是用于数据的乐观存储的示例性方法的过程流程图;

图6是用于从乐观ssd存储器具进行读取的示例性方法600的过程流程图;

图7a是具有强健冗余的示例性乐观存储器具的方框图;

图7b是具有强健冗余的示例性乐观存储器具的方框图;

图8a和8b是在强健冗余情况下用于数据的乐观存储的示例性方法的过程流程图;

图8c是在强健冗余情况下用于数据的乐观存储的示例性方法的过程流程图;

图9是用于从多状态ssd恢复数据的示例性方法900的过程流程图;

图10a是具有动态布局的示例性乐观存储器具的方框图;

图10b是具有动态布局的示例性乐观存储器具的方框图;

图11a和11b是在动态布局的情况下用于数据的乐观存储的示例性方法的过程流程图;

图11c是在动态布局的情况下用于数据的乐观存储的示例性方法的过程流程图;

图12是包括可由处理器经总线访问的代码的示例性非易失性计算机可读介质的方框图;

图13是包括可由处理器经总线访问的代码的示例性非易失性计算机可读介质的方框图;和

图14是包括可由处理器经总线访问的代码的示例性非易失性计算机可读介质的方框图。

具体实施方式

图1是使用固态驱动器102的示例性计算系统100的方框图。对于高性能计算应用,固态驱动器(ssd)102已变得更加常见。ssd使用非易失性存储器(nvm)作为存储装置104(诸如,闪存、非易失性ram(nvram)、电池支持动态ram等)以存储数据并且在没有电力的情况下保留数据。存储装置104被用于数据缓冲器、日志文件、高速缓存和这里描述的其它存储库。因此,可保护这些存储库中的数据免受电力故障和可导致数据丢失的其它故障的影响。

因为ssd技术已发展,所以用于硬盘驱动器的接口技术(诸如,串行at附件(sata)、串行附接scsi(sas)和光纤信道)已变为对ssd性能(诸如,数据传送速率、延时和软件开销)的限制因素。因此,已使用其它接口技术(诸如pcie和以太网)开发新的接口协议。例如,已发布用于经快速外围部件互连(pcie)总线或网络106访问ssd102的快速nvm(nvme)协议。另外,已发布用于使用远程直接存储器访问(rdma)经以太网108传播nvme协议的经矩阵的nvm(nvmf)协议。

在用于访问连接到pcie总线106或以太网108的ssd102的高速协议可用的情况下,使用能够实现远程直接存储器访问的网络接口卡(rnic)112和经pcie总线106互连的多个ssd102构造简单的全闪存存储器具110变得可行。迄今为止,这种子系统已严重依赖于用于命令处理的例如存储控制器116或维护单元中的cpu114。

存储控制器116可例如是网络环境中的刀片服务器、个人计算机、工作站等。cpu114可包括任何处理资源,诸如单核处理器、双核处理器、多核处理器、多个处理器、计算群集、云服务器等。cpu114可通过总线被耦合到存储装置118,其中所述总线可以是在存储控制器116的各种部件之间传送数据的通信系统。在示例中,所述总线可包括外围部件互连(pci)总线、工业标准架构(isa)总线、快速pci(pcie)总线、高性能链路(诸如,intel®直接媒体接口(dmi)系统)等。

存储装置118可包括:随机存取存储器(ram),例如静态ram(sram)、动态ram(dram)、零电容器ram、嵌入式dram(edram)、扩展数据输出ram(edoram)、双倍数据速率ram(ddrram)、电阻性ram(rram)和参数ram(pram);只读存储器(rom),例如掩模rom、可编程rom(prom)、可擦除可编程rom(eprom)和电可擦除可编程rom(eeprom);闪存;或任何其它合适的存储器系统。另外,存储装置118可包括较长期存储装置,例如非易失性存储装置,诸如固态驱动器、硬盘驱动器、磁带驱动器、光盘驱动器、闪存驱动器、驱动器阵列或其任何组合。在一些示例中,存储装置118可包括非易失性存储器装置,诸如非易失性ram(nvram)、电池支持dram等。

在示例中,ssd102可与存储控制器116一起位于插入到机架中的刀片上以形成存储器具110。在另一示例中,存储器具110可包括安装在pcie卡上的ssd模块,pcie卡被插入到存储控制器116的母板上的槽中。

已提出改进或优化以允许数据从rnic112直接流动至pcie连接的ssd102,而不访问由cpu114控制的存储器(存储装置)118。然而,对于除最简单的存储器具110之外的所有器具,这种技术可能产生虚拟化功能的问题,所述虚拟化功能需要在cpu114上运行的软件处理命令。

虽然这里描述的示例涉及固态驱动器,但可以理解,可使用其它结构。例如,替代于ssd,经pcie总线106通信的一组硬盘驱动器或阵列可被用于形成存储器具。

概述

如这里描述的示例中详细讨论的,rnic112和ssd102具有增加的功能:使数据、命令和响应能够在rnic112和ssd102之间直接流动,同时软件密集虚拟化功能归于例如存储控制器116中的cpu114。cpu114保持控制数据布局、地址转换、奇偶性(parity)一致性和故障恢复。这帮助实现加速的正常处理与不能由cpu120(诸如,驻留于rnic112上的专用集成电路(asic))容纳的复杂虚拟化的组合。

另外,通过避免针对直接在主机122中的rnic124和例如仅盘簇(jbod)的阵列126之间流动的数据的存储器跳跃,ssd102和rnic112之间的直接数据传送可提高性能。即使大多数正常操作在涉及虚拟化功能之前完成,cpu114也可保持负责所有虚拟化功能。

在示例中,为了促进直接通信,rnic112在存储装置128中包括一组布局模板和布局选择器,如参照图4进一步讨论的。布局选择器从在来自主机122的事务中提供的逻辑块地址(lba)选择布局模板。例如,选择器可计算主机lba的字段相关散列值以获得与布局模板对应的编号。

当选择了所述布局时,每个布局模板列出一组ssd102,并且指示lba的每个部分的数据的哪个部分去往每个ssd102。每个ssd也可具有一作用,诸如奇偶性与数据(如这里所使用的“主”与“从”)。这可根据布局模板而不同,一些ssd针对一些lba用作奇偶性盘或主盘,而针对其它lba用作数据盘或从盘。

当事务(io)(例如,写入事务)到达时,它们根据选择的布局模板而被划分或分解,并且各部分被直接发送给ssd。每个数据部分伴随有具有唯一标识符的意图记录,使得关联的部分能够由中央控制器处理器跟踪。意图记录包括原始主机lba的属于正被写入到所述ssd102或从所述ssd102读取的数据的部分,但不包括ssd102上的物理地址。每个ssd102将它接收的事务的部分以及意图记录放置在ssd102内的存储装置104中。ssd102还对lba部分进行高速缓存,从而读取命中能够由ssd102处理,并且冲突能够被标记以便由cpu114解决。

当事务的所有部分成功完成时,rnic112对主机122做出响应以指示成功。此时,不管发送给个体ssd102的事务的各部分是成功还是失败,意图记录被传递给例如存储控制器116中的cpu114,其中虚拟化引擎确定数据应该驻留于的每个ssd102上的物理地址。

为了管理布局模板选择器已知的布局模板的数量,虚拟化计算受到限制,以使得当lba驱动的计算产生给定数字结果时,总是选择同一组的ssd102。换句话说,这意味着通过lba计算的参数来预设子存储区。当系统100增长时,这些参数可能变化,然而这意味着布局变化和数据重新组织。在没有这些限制的情况下,布局模板选择将会需要与由存储控制器116中的cpu114管理的元数据相等的大量元数据。

存储控制器116随后联系每个ssd102以将物理地址分派给ssd102已在最近接收的数据,并且处理错误或解决由ssd102标记的写入冲突。可在控制器处理器或ssd102内(例如,在存储奇偶性带的主ssd102中)计算冗余(例如,奇偶性)。ssd102一被存储控制器116告知正确的物理地址,ssd102就被允许冲刷数据并且停止跟踪新的数据。

在一些示例中,如参照图5进一步所讨论的,通过将另外的状态添加到由每个布局模板指定的主ssd102和从ssd102中的意图记录,具有奇偶性一致性的形式的另外的冗余考虑因素可被添加到上述示例。利用所述另外的冗余,来自分派物理地址的cpu114的通信将从ssd102放置在多版本状态中,所述多版本状态指示将保持最近写入的数据的旧版本和新版本直至能够提交一致的奇偶性。因此,如果电力在所述过程期间发生故障,则可计算奇偶性。

由布局模板仲裁的主ssd102还可具有另外的状态,以使得主ssd102上的单个状态转变表示新的奇偶性的提交点。从cpu114到主ssd102和从ssd102的消息以这种方式对它们的状态进行排序:数据的旧版本不被破坏,直至提交一致的奇偶性。在冗余盘组前面,在冗余高速缓存之后,可建模从故障的恢复。高速缓存类似于跨ssd102的数据的初始镜像拷贝,而盘组类似于跨相同ssd102的raid数据。

在一些示例中,通过将实时修改布局的能力添加到上述示例,可缓解管理布局模板的复杂性。可在每个事务完成之前在没有强加过多cpu114干预的情况下执行这一点。例如,事务由rnic112分派布局,但当cpu114对事务进行后处理时,它可以发现针对所述lba存在新的或优选的布局,所述新的或优选的布局不是由rnic112选择的布局。在这种情况下,cpu114将由rnic112提供的布局中的ssd102视为高速缓存,并且在奇偶性的计算之前或在奇偶性的计算期间将数据复制到所述新的布局。

给定用于管理新的布局的这个方案,布局模板选择器能够在任何点被以原子级更新,只要给定事务仅服从一个选择器或例如由接收到事务的时间所确定的另一个选择器。rnic102中的模板变化不需要等待运行中的事务结束,因为它们将会被cpu114校正。这可提高数据流的性能,因为数据不需要在完成之前被保留在存储控制器116的存储装置118中或涉及cpu114。

图2是从主机122向固态驱动器102的阵列126直接存储数据的rnic112的示意性示例200。相同编号的项如参照图1所描述。主机(启动器)122使用rnic124连接到以太网网络108。同样地,固态盘(ssd)器具110(目标)包含rnic112,rnic112可具有直接访问能力以便例如经pcie总线106到达ssd102。在ssd器具110内,rnic112、ssd102和例如存储控制器或本地维护系统中的cpu114全都连接到pcie总线106(示出为云以简化附图)。所述另外的能力可允许rnic112通过分析来自主机122的读取或写入命令来确定哪些ssd102保存正在由所述命令操纵的数据。rnic112能够随后使用pcie总线106将关联的数据发送给ssd102或从ssd102接收关联的数据,直接使用pcie总线106而不中断cpu114。可通过使用卷路由器来执行这一点,所述卷路由器将数据的特定卷与特定ssd102关联。通常,来自主机122的命令包括可被定位和解释的卷号。当快速nvm(nvme)协议被用在rnic112和pcie总线106上时,它尤其方便,因为需要即使有也很少的转换。

参照附图中编号的线,rnic112可如下那样执行直接访问。如线202所指示的,位于ssd器具110本地的cpu114对卷路由器204进行初始化以表示卷到ssd102的映射。使用诸如连结或条带化的技术,给定卷可跨越多个ssd102。如线206所指示的,来自主机122的命令由rnic112检查以对通过卷路由器索引的卷进行定位从而找到ssd102并且计算物理ssd地址。

如线208所指示的,基于卷路由器中的信息与特定ssd102交换数据。对于写入事务,根据需要跨ssd102划分数据。对于读取事务,数据由rnic112合并以识别正确地到主机122的每个字节。数据210可随后被正常读取或写入。如线212所指示的,当所有ssd102已完成它们的事务的各部分时,rnic112产生对主机122的响应,所述响应表示整个操作的成功或失败。

尽管这种类型的直接访问可以实现数据跨ssd102的分布,但它不适应需要目标中的cpu114进行干预的更复杂的虚拟化功能和服务。这种干预可被用于在线配置变化、多个rnic112的协调或计算密集数据管理自动化。另外,许多虚拟阵列提供数据的细粒度映射和移动。这需要可能未与rnic112的硬件资源(存储器或处理)调准的大量元数据。

乐观ssd存储器具

图3是使用乐观存储分配从主机122向固态驱动器102的阵列126直接存储数据的rnic112的示意性示例。如这里所使用的,乐观分配指示:做出存储决定,并且在最后将数据提交给阵列126中的存储位置之前,向主机122确认所述事务完成。用于阵列126中的数据存储的物理地址由cpu114确定。相同编号的项如参照图1描述。

图3示出与图2相同的总体硬件架构,具有用于提供直接通信的多项增强。卷路由器被更复杂的布局模板选择器302替换,布局模板选择器302能够与来自由cpu114确定的虚拟化的物理布局策略调准。所选择的布局模板确定数据至正确ssd102的路由,但它不确定任何ssd102上数据放置的物理地址。作为cpu114干预的结果,稍后确定物理地址。当逻辑块地址(lba)出现在主机122的地址空间中时,ssd102具有用于对逻辑块地址(lba)进行高速缓存的增加功能。这是ssd102中示出的lba高速缓存304的目的之一。虽然cpu114在这里被单独示出,但在一些示例中,cpu114可被包括在rnic112中。在其它示例中,多个cpu114可共享ssd器具110内的工作。

参照带有标记的线描述数据流。如线306所指示的,从主机122接收的读取或写入命令被路由至布局模板选择器302,并且被安排传送给cpu114。布局模板选择器302对命令中的卷和lba执行函数。所述函数可以是散列函数或掩蔽和移位函数以将卷和地址转换成布局编号。函数的结果提供布局编号,布局编号可被用于为命令中的数据308选择布局模板。与布局编号关联的布局模板指示在数据传送的每个部分中应该涉及哪些ssd102。

对于数据传送的每个部分,创建描述该部分的具有唯一标识符的意图记录310。意图记录310包括原始主机地址、数据的该部分的长度和由布局指定的ssd102在数据传送中起到的作用(例如,主或从)。意图记录310也被安排传送给cpu114。

对于写入事务,意图记录310和数据308被合并312以形成数据流314。数据流314随后基于由布局模板选择器302提供的布局模板(如线318所指示的)被发送给相应的ssd102(如线316所指示的)。因此,对于写入事务,针对每个ssd102的数据传送的每个部分既包括数据308又包括意图记录310。对于读取事务,仅针对每个部分的意图记录310被发送给相应ssd302。

ssd102接收意图记录310,对于写入事务,还接收数据308。对于写入事务,ssd102将数据的主机地址添加到它的lba高速缓存304,并且将数据存储在非易失性数据缓冲器320中。它随后将意图记录310放置在意图日志322中以指示哪个数据316正在执行,并且将意图记录310链接到数据316。如果在意图日志322中已经存在针对重叠主机地址的意图记录310,则新记录被链接到在先记录,并且写入事务被标记为未完成。

对于读取事务,每个ssd102针对主机lba的记录检查它的lba高速缓存304。如果找到主机lba的记录,则主机lba的记录可能指代数据缓冲器320或闪存324的区域。如果找到所述地址,则响应于满足读取请求而返回所述数据,并且作为响应326的一部分,所述数据由rnic112传送给主机122。否则,在所述读取可以完成之前,ssd102将会需要等待cpu114的干预。在所述后者情况下,或在未完成写入事务的情况下,ssd102对rnic112做出响应,指示事务尚未能被完成。

所有ssd102的响应326由rnic112收集。在此时,命令306、来自所有ssd102的组合意图记录310和指示结果的状态信息被传送给cpu114,如线328所指示的。另外,如果所有部分都成功,例如未发生错误或未完成的事务,则rnic112针对主机122产生肯定响应,指示事务的完成。在错误或未完成事务的情况下,在对主机122做出响应之前,rnic112等待cpu114干预。

在功能方面由cpu114执行的虚拟化计算模块330接收命令306、意图记录310和状态信息,并且在所有ssd102上为数据的所有部分确定正确的物理地址。这可涉及将ssd102上的以前未分配的空间指定用于写入事务中的数据308。已分派物理地址的情况下,虚拟化计算模块330将控制传递给冗余引擎332。

通过将事务的每个部分的物理地址的指示传送给负责该部分的ssd102,冗余引擎332向ssd102确认事务,如线334所指示的。如果写入事务由于存储在用于ssd102的意图日志322中的意图记录中的冲突而未被完成并且对应数据被递送给超过一个ssd102,则冗余引擎332可在确认过程期间颠倒一些ssd102中的意图日志322中的写入事务的次序,从而全部反映相同的最终结果。

如果奇偶性ssd102中的raid计算需要来自数据ssd102的旧数据以便完成奇偶性计算,则在确认事务之前,冗余引擎332可使用专用通读命令将该数据从数据ssd102复制到奇偶性ssd102。通读命令忽略与还未被冗余引擎332确认的向ssd102的写入事务关联的数据。冗余引擎332可在向ssd102的单次通信中确认多个事务。

对于写入事务,所述确认允许ssd102将例如最近仲裁的正确数据从它的数据缓冲器320传递到与闪存324中的物理地址对应的物理位置,如线333所指示的。ssd102随后被允许从意图日志322去除意图记录。在读取时,物理地址允许不能完成所述读取的任何ssd102对它们的数据进行定位。在此时,ssd102可从lba高速缓存304去除主机lba。例如,只要存在存储空间,高速缓存的lba就可被保留在lba高速缓存304中,因为如果保留高速缓存的lba,则随后的读取事务能够更快速地完成。对照意图日志322中的意图记录检查所有读取事务并且保存所有读取事务,直至相关写入事务在它们能够被完成之前被冗余引擎332确认。

一个ssd102被示出为在数据路径中具有变换模块336,变换模块336将ssd102识别为主或奇偶性ssd338。变换模块336可被包括以执行另外的数据操纵,诸如raid奇偶性计算。ssd存储器具110中的任何或所有ssd102可包括变换模块336,因为不同ssd102可在不同布局模板中用作数据或奇偶性存储库。除了其它ssd102之外,数据传送的多个部分可被发送给奇偶性ssd338以便实现完整的变换。冗余引擎332可通过将物理地址发送给各种ssd102来选择确认事务的次序,以确保运行中的数据的正确跟踪。例如,冗余引擎332可选择在所有其它ssd102已被允许把数据从数据缓冲器320冲刷到闪存324之后确认奇偶性ssd338上的事务。这帮助确保:至少一个ssd102将会具有运行中的数据的记录,直至奇偶性跨在事务中所涉及的所有ssd102是一致的。

在一些示例中,一个或多个ssd102可能由于故障而无法对请求做出响应。在这种情况下,冗余引擎332检查每个ssd102的状态和它的意图日志322的内容。如果数据丢失,则可使用raid技术恢复数据。如果故障是失去电力,则可能需要重新计算由所有ssd102中的意图日志322所指示的运行中的数据的奇偶性。

在故障或配置变化的情况下,可由rnic112或主机122部分地或完全重试正在由rnic112跟踪的未完成的命令。冗余引擎332(经响应326)对ssd102、rnic112和主机122中的恢复操作进行排序,以基于故障的性质实现尽可能完整的恢复。

强健冗余

这个部分描述这样的示例:当使用具有布局模板选择器112的rnic112和在ssd102的数据缓冲器320中进行高速缓存的进行中的工作时实现企业级高可用性。这可提供容许硬件故障同时失去电力的能力。前一示例可能未执行这种操作,因为在失去电力期间进行中的工作可能导致奇偶性不一致,意味着所述系统处于将不会实现从另一故障完全恢复的状态。在前一示例中,所述状态可持续,直至从数据的内容恢复受到在失去电力期间进行中的写入事务影响的奇偶性。

通过在意图日志322中添加意图日志条目状态,可增强冗余。意图日志条目状态指示:保持数据的旧版本和新版本,直至从冗余引擎332接收到指示数据可被从数据缓冲器320冲刷到闪存324从而覆盖旧数据的信号。

根据ssd102是主还是从(例如,存储奇偶性带的驱动器与存储数据带的驱动器),使用各种状态指示。对于用作从的驱动器,“运行中”状态指示处于正被写入的过程中但可能跨所有ssd102不一致的数据。来自主机122的数据读取命令不返回处于运行中模式的数据。从驱动器的第二状态可被称为“多版本”,并且指示应该保留闪存324中的数据的旧版本和数据缓冲器320中的新版本。利用通读命令访问较旧版本,并且可利用正常读取命令访问新版本。将会从数据缓冲器320中的数据的新版本完成来自主机122的读取命令。

主ssd102的新状态包括也用于从ssd102的运行中状态。主ssd102具有称为“镜像”的另外的状态。在镜像状态中,跨所有ssd102的数据是一致的并且冗余的,但冗余(奇偶性)计算仍然在进行中。一旦冗余计算完成,主ssd102(例如,奇偶性ssd338)的意图状态能够被改变为“提交”。提交状态表示冗余的提交形式,并且是所有其它ssd102可被释放以将新数据从数据缓冲器320冲刷到闪存324从而替换闪存324中的旧数据(如线333所指示的)的点。所有状态可随后被改变为“未跟踪”,因为没有数据处于运行中,并且奇偶性计算完成。

在这个示例中,如针对前一示例所述的,由布局模板选择器302选择的布局模板可被用于为来自主机122的写入命令的每个部分创建具有唯一标识符的意图记录。意图记录包括哪些ssd102是主ssd102的指示。各数据部分和意图记录被传送给在布局模板中指示的ssd102。所述数据由ssd102存储在其数据缓冲器320中。另外,在这个示例中,主机lba被高速缓存并且与放置在ssd102的意图日志322中的意图记录以及在“运行中”状态中被记录的意图日志条目状态关联。意图日志322中的冲突引起对智能rnic112的响应,以指示未完成的请求。向“运行中”的转变发生在主ssd102和从ssd102二者上。

对于来自ssd102的响应指示成功的事务的任何部分,rnic112向布局模板中所定义的所有主ssd102通知所述部分成功。这可使主ssd102中的意图记录状态转变为“镜像”,直到两个或更多个ssd102上的相同部分成功。如果所有ssd102上的事务的所有部分成功,则rnic112对主机122做出响应,指示事务的成功。不管是否成功,当所有ssd102已作出响应时,rnic112将意图记录和ssd响应发送给虚拟化计算模块330。

如上所述,虚拟化计算模块330分派物理地址,然后将事务的控制转交给冗余引擎332。冗余引擎332解决写入次序冲突,然后将物理地址递送给所有ssd102。同时,从ssd102的意图日志322中的意图日志转变为多版本状态,并且主ssd102转变为镜像状态(如果未在以前转变的话)。因此,在多版本状态下与意图日志条目关联的数据将不会覆盖未跟踪的数据版本。

如果未检测到未解决的错误并且主机122未被通知事务的成功完成,则冗余引擎332此时经rnic112提供这种通知。如果错误仍然存在,则冗余引擎332中的故障恢复算法可使用用于raid或由镜像回写高速缓存面对的擦除编码介质的技术重新产生丢失的数据。

冗余引擎332可使用保留在ssd102中的数据的旧版本和新版本计算raid或擦除代码奇偶性块。可使用用于获得旧数据的通读命令和用于获得新数据的读取命令来获得这些数据的旧版本和新版本。旧的奇偶性块此时不被覆盖。替代地,新的奇偶性块被保留在数据缓冲器308中,例如保留在主或奇偶性ssd338中。一旦所有奇偶性修改被完成并且放置在数据缓冲器308中,冗余引擎332就把主ssd102中的所有意图日志条目状态转变为事务的提交状态。在所有主ssd102已转变之后,冗余引擎332把从ssd102的所有意图日志条目状态中的状态转变为未跟踪状态。在从ssd记录未被跟踪之后,冗余引擎332也把主记录转变为未跟踪。由于事务中涉及的所有数据现在未被跟踪,所以数据缓冲器320中的对应数据现在替换ssd中的数据的旧版本并且能够被冲刷到闪存,如线333所指示的。

动态布局变化

在上述示例中,布局变化可在事务能够完成之前引起可能延长的cpu114干预的时段。在这个示例中,使用在虚拟化计算模块330中用于在从主机122的角度事务已完成之后校正数据放置的方法,动态数据放置可被用于解决该问题。这允许乐观分配的事务完成正常进行,而不管任何布局变化,只要最初用于所述事务的布局模板没有遇到硬件错误即可。

当发生布局异常时,这可提供改进。布局异常可由硬件故障、数据局部性的优化、数据移动的最小化、有效增值服务(诸如,快照)中数据的暂时参与或数据的长期再定位等等引起。动态数据方式可针对相同数据使用多个布局,布局之一由rnic112实时地用于给定事务。初始布局可被暂时保持为正被移动到不同布局的数据的高速缓存。

根据这个示例,事务的初始发展使用由rnic112在事务到达时选择的模板正常地进行,如针对乐观ssd器具所述的。事务进行至虚拟化计算模块330被给予控制的点。在此时,cpu114可继续分配数据,直至从主机122的视角事务完成的点。在此时,虚拟化计算模块330确定用于事务的布局模板是否与数据的期望布局匹配。如果它匹配,则工作流程以与在没有动态数据放置的情况下它本来的相同方式继续进行。

否则,对于写入事务,ssd102中的事务数据被视为好像它被存储在非易失性镜像高速缓存中。对于写入事务,当虚拟化计算模块330已在rnic112中创建替代布局模板时,它继续将镜像数据复制到新布局中的镜像位置。随后它根据新布局完成原始分配。在某个时间段期间,数据可位于由两个布局模板指示的ssd102中的数据缓冲器320中。

对于读取事务,cpu114完全执行事务,就好像它已使用新布局模板发生,因为旧布局中的ssd102被以这种方式管理,即它们不能解析已被重新定位到新布局的数据的物理地址。通过强行使针对该数据在新布局中未涉及的lba高速缓存304中的lba无效来管理在布局变化期间的读取事务。在每个重新引导的事务完成之后,但在它被复制到新布局中的ssd102之前,发生无效。即使那些数据的lba不在ssd102的lba高速缓存304中,数据也可保持在ssd102的意图日志322和数据缓冲器320中,直至它们被成功地镜像到新布局中。读取和最近的写入之间的冲突可能需要在冲突的读取能够完成之前由cpu114将使用旧布局的写入转变到新布局。

这允许布局信息在任何时间被添加到由rnic112的布局模板选择器302使用的布局模板或在由rnic112的布局模板选择器302使用的布局模板中被修改,只要任何事务从存储在选择器表中的一致版本的布局模板选择布局模板即可。这可通过例如使用摆动缓冲器(swingbuffer)或类似物使布局模板的更新原子化来实现。

根据实现方式,可对这里讨论的所有示例实现各种变化。例如,如果多个rnic112全都将它们的通知发送给同一cpu114或发送到在逻辑上作用像单个cpu一样的cpu群集中,则所述多个rnic112能够访问相同的ssd102。在大系统中,可能希望在每个rnic112中具有多个布局模板选择器302,rnic112的通知能够由cpu114独立地处理。在这种情况下,卷号可被用于选择布局模板选择器302和cpu114。

如果多个rnic112能够访问相同的ssd102,则需要在它们之间协调布局变化。这能够通过暂停新事务流动到所有rnic112中并且在全部暂停之后改变布局模板选择器302来实现。在一个示例中,rnic102可能不需要在经协调的布局变化期间等待进行中的事务完成。

图4a是使用ssd102的示例性乐观存储器具400的方框图。相同编号的项如参照图1和3描述。在这个示例中,rnic112的cpu120被示出为专用集成电路(asic)。在这个示例中,每个ssd102可用作主或从,例如用作针对特定布局模板404的数据存储库或奇偶性存储库。因此,每个ssd102包括变换模块336以执行针对存储的数据的奇偶性计算。

rniccpu(asic)120操作布局模板选择器302,布局模板选择器302保持包括布局模板404的布局模板表402。可由布局模板选择器302使用的方案的一个示例包括选择器表,选择器表包括lbamask,lbamask是指示用于布局编号计算的lba的子集的位掩模。这与lbashift一起计及布局的条带化或连结参数。所述表包括lbashift,lbashift是将掩蔽的lba右移的位数。另外,选择器表包括掩蔽的lba模数,所述掩蔽的lba模数是应用于与卷号连结的掩蔽的移位的lba以计及奇偶性旋转的模数。

来自事务的lba被掩蔽,移位并且连结到卷号。所述模数被应用于结果以产生布局模板编号。虽然这个示例被简化,但可使用更复杂的计算,例如涉及多个掩模或更复杂的散列函数等。这些可被以这种方式组合:在与布局模板表402关联的逻辑中被编码。

布局编号被用于从布局模板表402选择布局模板404,例如t1-t4。布局模板表402包括多个参数,所述多个参数能够确定哪些ssd102保存数据和奇偶性的各部分。在这个示例中,所述参数可包括pcie总线106上的ssd102的地址的列表。所述参数还可包括每个ssd102的作用,诸如,数据(从)或奇偶性(主)。

第二lba掩模、移位和模数可被以类似于得出布局编号的方式被应用以基于布局的细节选择个体ssd102。所述两个掩模、移位和模数集合可以是不同的。在选择的第二布局模板404中指示的ssd102的作用可触发用于冗余目的的向另外的ssd的数据传送。

在一些示例中,布局编号可不指代任何ssd地址。这是如下指示:具有该编号的布局必须由cpu114处置。使用传统方法(诸如通过可由pcie总线106访问的存储器406缓冲数据)处理这种命令。

在又其它示例中,布局模板404中的ssd地址可具有专用值,所述专用值指代pcie总线106可访问的存储器406。遇到这种地址的写入命令可在向cpu114通知已接收到该命令之前将数据放置在从存储器406中的自由存储区域的存储区取出的缓冲器408中。在这种情况下,利用该命令将数据缓冲器408的地址递送给cpu114。当存储区域在从主机的读取事务、向ssd102的写入事务或消耗存储器的其它操作完成时变为自由时,自由存储区域的存储区可由cpu114或rnic112恢复。在这个示例中,遇到指代存储器的ssd地址的事务可能并不完全由rnic112完成。

在其它示例中,可经另一网络(可能是事务到达的同一网络,例如以太网网络108)访问ssd102。在这些情况下,cpu114可管理附接到在物理上与第一控制器分开的另一控制器的ssd102。这种配置可被用于增加故障耐受性。

图4b是使用ssd102的示例性乐观存储器具400的方框图。相同编号的项如参照图1和3描述。所述系统不限于具有图4a中示出的全部块,而是可具有更少的块,如参照图4b所示。

图5a和5b是用于数据的乐观存储的示例性方法500的过程流程图。方法500可由图4的系统执行。方法500开始于块502,其中从主机启动器接收的写入命令被路由至布局模板选择器并且被安排传送给控制器cpu。

在块504,布局模板选择器对命令中的卷和lba执行函数以便为命令中的数据选择布局模板。所述函数可以是散列函数或掩蔽和移位函数以将卷和地址转换成布局编号。与布局编号关联的布局模板指示在数据传送的每个部分中应该涉及哪些ssd。数据基于布局模板而被划分为多个部分以传送给ssd。

在块506,对于数据传送的每个部分,创建描述该部分的具有唯一标识符的意图记录。意图记录包括原始主机地址和该部分的长度以及由布局模板所指定的ssd在数据传送中起到的作用。意图记录也被安排传送给控制器cpu。在块508,意图记录和数据被合并并且发送给相应ssd,从而针对每个ssd的数据传送的每个部分既包括数据又包括意图记录。在一些示例中,在数据的传送之前,意图日志可被作为命令的一部分传送给ssd。

在块510,ssd接收意图记录和数据,并且进行检查以查看是否在意图日志中已经存在针对重叠主机地址的意图记录。如果是,则在块512,新记录被链接到在先记录,并且写入事务被标记为未完成。另外,在块514,或在未完成的写入事务的情况下,ssd对rnic做出响应,指示事务尚未能被完成。

如果不存在重叠,则在块516,ssd将数据的主机地址添加到它的lba高速缓存并且将数据添加到它的数据缓冲器。它还将意图记录放置在意图日志中以指示哪个数据在运行中,并且将意图记录链接到数据。

在块518,所有ssd的响应由rnic搜集。此时,命令、意图记录和指示结果的状态信息被传送给控制器cpu。在块520,如果所有部分成功,例如未发生错误或未完成的事务,则在块522,rnic对主机产生肯定响应,以指示事务的完成。在错误或未完成的事务的情况下,在对主机做出响应之前,rnic等待控制器cpu干预。

在块524,控制器中的虚拟化计算模块接收命令、意图记录和状态信息,并且在所有ssd上为数据的所有部分确定正确的物理地址。这可涉及将ssd上的以前未分配的空间指定用于数据。

在块526,在已分派物理地址的情况下,虚拟化计算将控制传递给冗余引擎。如果在块528,冗余引擎确定写入事务由于ssd的意图日志中的冲突而未被完成并且对应数据被递送给超过一个ssd,则在块530,冗余引擎可在确认过程期间颠倒一些ssd中的意图日志中的写入事务的次序,以便全部反映相同的最终结果。

在块532,如果奇偶性ssd中的raid计算需要来自数据ssd的旧数据以便完成奇偶性计算,则冗余引擎使用专用通读命令将该数据从数据ssd复制到奇偶性驱动器。通读命令忽略与尚未被冗余引擎确认的向ssd的写入事务关联的数据。ssd中的变换模块可随后执行另外的数据操纵。如这里所述,任何或所有ssd可包含这种模块。数据传送的多个部分可被发送给奇偶性ssd以及其它ssd以便实现完整的变换。

在块534,通过将针对事务的每个部分的物理地址的指示传送给负责该部分的ssd,冗余引擎向ssd确认事务。冗余引擎可在向ssd的单次通信中确认多个事务。

冗余引擎可针对各种ssd选择执行块532和534的次序以确保运行中的数据的正确跟踪。例如,在其它ssd上完成块532和534之后,冗余引擎可选择在奇偶性ssd上执行块532。这确保:至少一个ssd将会具有运行中的数据的记录,直至奇偶性跨在事务中所涉及的所有ssd是一致的。

在块536,冗余引擎确定是否一个或多个ssd由于故障而无法对请求做出响应。这可能发生在冗余引擎与ssd之一通信的过程中的任何点。如果一个或多个ssd由于故障而无法对请求做出响应,则在块538,控制器cpu中的冗余引擎模块检查每个ssd的状态和它的意图日志的内容。如果数据丢失,则可使用raid技术恢复数据。如果故障是失去电力,则可能需要重新计算由所有ssd中的意图日志所指示的运行中的数据的奇偶性。

在块540,可由rnic或主机部分或完全地重试正在由rnic跟踪的未完成的命令。冗余引擎对ssd、rnic中的恢复操作进行排序,并且基于故障的性质实现尽可能完整的恢复。在块542,确定恢复是否成功。如果冗余引擎未成功进行恢复,则在块544,报告错误状况的响应被返回给主机。

在块546,所述确认允许ssd将正确的数据从它的数据缓冲器传递给闪存中的指示的物理位置,并且从意图日志去除所述意图记录。ssd可从它的高速缓存去除主机lba,例如,另外的事务需要空间。需要注意的是,保留高速缓存的lba存在益处,因为如果保留高速缓存的lba,则随后的读取事务能够更快速地完成。

图5c是用于数据的乐观存储的示例性方法的过程流程图。相同编号的项如参照图5a和5b所描述。所述系统不限于具有图5a和5b中示出的全部块,而是可具有更少的块,如参照图4c所示。

图6是用于从乐观ssd存储器具进行读取的示例性方法600的过程流程图。在块602,从主机启动器接收的读取被路由至布局模板选择器并且被安排传送给控制器cpu。在块604,布局选择器对命令中的卷和lba执行函数以便为命令选择用于对数据进行定位的布局。所述函数可以是散列函数或掩蔽和移位函数以将卷和地址转换成布局编号。与布局编号关联的布局指示哪些ssd可与数据存储的每个部分关联。

在块606,对于数据传送的每个部分,创建描述该部分的具有唯一标识符的意图记录。意图记录包括原始主机地址和该部分的长度以及布局所指定的ssd在数据传送中起到的作用。意图记录也被安排传送给控制器cpu。

在块608,针对每个部分的意图记录被发送给相应ssd。在一些示例中,这可以是向ssd的读取命令的一部分。在块610,ssd接收意图记录,并且每个ssd针对主机lba的记录检查它的lba高速缓存。在块612,ssd确定是否意图记录指代数据缓冲器或闪存的区域。如果在块614找到地址,则在块616,数据响应于读取而被返回并且被传送给rnic。如果未找到地址,则在块618,ssd对rnic做出响应,指示事务尚未能被完成。

在块620,所有ssd的响应由rnic搜集。此时,命令、意图记录和指示结果的状态信息被传送给控制器cpu。在块622,rnic确定是否所有部分都成功,例如,未发生错误或未完成的事务。如果是,则在块624,数据被发送给主机,并且在块626,rnic对主机产生肯定响应,指示事务的完成。当使用远程直接访问存储器(rdma)协议发送数据时,可在ssd对数据进行定位时以递增方式发送响应。当肯定响应被发送给主机时,响应随后被关闭,例如被指示为结尾。在错误或未完成的事务的情况下,在对主机做出响应之前,rnic等待控制器cpu干预。

在块628,控制器cpu中的虚拟化计算模块接收命令、意图记录和状态信息,并且为数据的所有部分在所有ssd上确定正确的物理地址。在为数据确定物理地址之后,在块630,虚拟化计算将控制传递给冗余引擎。

在块632,通过将事务的每个部分的物理地址的指示传送给负责该部分的ssd,冗余引擎向ssd确认事务。在块634,物理地址允许不能完成所述读取的任何ssd对它们的数据进行定位。在块636,数据随后被返回给主机。

关于读取事务的故障恢复以类似于写入事务的方式工作,例如,如参照图5b的块538-544所讨论的。例如,控制器cpu中的冗余引擎模块检查每个ssd的状态和它的意图日志的内容。如果数据丢失,则可使用raid技术恢复数据。

图7a是具有强健冗余的示例性乐观存储器具700的方框图。相同编号如参照图1、3和4所述。在这个示例中,对于强健冗余,意图日志存储添加意图状态,以给出组合的意图/状态日志702。如这里所述,意图状态可取决于ssd是主驱动器还是从驱动器。对于用作从的驱动器,“运行中”状态指示处于正被写入的过程中但可能在所有ssd之间不一致的数据。从驱动器的另一状态可被称为“多版本”,并且指示要保留数据的旧版本新版本二者。

主ssd102的状态也包括用于从ssd的运行中状态。主ssd102具有称为“镜像”的另外的状态。在镜像状态下,数据在所有ssd之间是一致的并且冗余的(镜像),但另外的冗余计算(例如奇偶性计算、擦除代码计算等)仍然在进行中。一旦冗余计算完成,主驱动器的意图状态能够被改变为“提交”。提交状态表示冗余的提交形式,并且是所有其它ssd可被释放以将新数据从数据缓冲器冲刷到闪存的点。所有状态可随后被改变为“未跟踪”,因为没有数据处于运行中,并且奇偶性计算完成。

图7b是具有强健冗余的示例性乐观存储器具的方框图。相同编号的项如参照图1、3、4和7a所述。所述系统不限于具有图7a中示出的全部块,而是可具有更少的块,如参照图7b所示。

图8a和8b是在强健冗余情况下用于数据的乐观存储的示例性方法800的过程流程图。方法800可由图7的系统执行。相同编号的项如参照图5所述。

与图5的方法相比,在块802,当数据由ssd存储在它的数据缓冲器中并且主机lba被高速缓存时,意图记录在“运行中”状态下被放置在ssd意图日志中。至“运行中”的转变发生在主ssd和从ssd二者上。

对于所有ssd响应指示成功的事务的任何部分,rnic向所有布局主驱动器通知所述部分成功。在块802,主驱动器中的意图记录状态转变为“镜像”。如果所有ssd上的事务的所有部分成功,则rnic对主机做出响应,指示事务的成功。不管是否成功,当所有ssd已作出响应时,智能rnic将意图记录和ssd响应发送给虚拟化计算模块。

如参照图5所述的,虚拟化计算模块分派物理地址,然后将事务的控制转交给冗余引擎。在块806,冗余引擎解决写入次序冲突,并且然后将物理地址递送给所有ssd。同时,从驱动器中的意图日志转变为多版本状态,并且主驱动器转变为镜像状态(如果它们尚未处于镜像状态的话)。如果未检测到未解决的错误并且主机未被通知事务的成功完成,则冗余引擎此时经rnic提供这种通知。

在块808,执行奇偶性计算,并且跟踪进展。多版本的状态指示防止与数据缓冲器中的意图日志条目关联的数据覆盖较旧的未跟踪的数据版本。如果错误仍然存在,则冗余引擎中的故障恢复算法使用诸如当由镜像回写高速缓存面对raid或擦除编码介质时的技术接管,如这里所述的。冗余引擎或主ssd中的变换模块使用保留在ssd中的数据的旧版本和新版本计算raid或擦除代码奇偶性块。旧的奇偶性块此时不被覆盖。替代地,新的奇偶性块被保留在数据缓冲器中。

一旦所有奇偶性修改完成并且放置在数据缓冲器中,则在块810,冗余引擎将事务中的所有主意图记录转变为提交状态。在所有主意图记录已转变之后,在块812,冗余引擎将事务中的所有从意图记录的状态转变为未跟踪状态。在从记录不被跟踪之后,在块814,冗余引擎也将主记录转变为未跟踪。

在块816,确定是否发生了任何继续存在的错误。例如,由于电力故障、ssd故障或二者,可能在所述过程期间在任何点进行所述确定。如果未发生错误并且事务中所涉及的所有数据现在未被跟踪,则在块546,数据缓冲器中的对应数据可被冲刷到闪存以替换ssd中的数据的旧版本。如果已发生任何错误,则在块818,过程流程可前进至图9中的过程以进行错误恢复。如果图9的恢复过程成功,则在块820,过程流程返回到块546。如果不成功,则过程流程前进至块822以向主机报告错误,并且实现降级的模式恢复(如果存在的话)。

图8c是在强健冗余情况下用于数据的乐观存储的示例性方法的过程流程图。方法800可由图7a和7b的系统执行。相同编号的项如参照图5和8a所述。所述系统不限于具有图8a和8b中示出的全部块,而是可具有更少的块,如参照图8c所示。

图9是用于从多状态ssd恢复数据的示例性方法900的过程流程图。多版本状态确保:在事务期间,在故障的情况下,能够恢复未被事务修改并且与被事务修改的数据共享奇偶性的ssd上的数据。如这里所述的,缓冲器和意图日志是非易失性的,使得即使在失去电力期间发生故障,也能够实现从数据的稳定版本恢复。在这个示例中,一旦所有非故障ssd都是可访问的,则如下面那样进行从失去电力的恢复。

方法900开始于块902,识别针对任何ssd中的每个意图日志条目的最高评级的非故障主状态。在块904,对于其在该主状态中的状态是“提交”的每个记录,过程流程前进至块910。

在块906,其最高评级非故障主状态是“镜像”的每个意图日志条目使关联的从意图记录转变为“多版本”状态。在块908,执行奇偶性的产生,如这里所述的。那些意图记录随后被转变为这里描述的“未跟踪”状态。

在块910,类似于来自主机的新事务,处理针对处于“镜像”状态的每个记录的事务。如上所述那样执行奇偶性产生和意图日志状态转变,不同之处在于:不发生与主机的交互。在块912,去除任何ssd的意图日志中的任何继续存在的记录以及数据缓冲器中的关联的数据和所有ssd中的高速缓存的lba。在块914,如果确定所有记录完成,则过程流程返回到图8b的块818。

所述系统的状态可被恢复并且准备好重新开始正常操作。如果在恢复过程期间或恢复过程之前的任何时间发生另外的故障,则与处于镜像和多版本状态中的意图记录关联的数据被用于影响降级的模式恢复。

参照图5-9描述的乐观ssd器具相对于从参照图6a和6b讨论的那些乐观ssd器具的读取函数具有最小变化。如果在状态为“运行中”的同时读取获得成功,则例如在“未跟踪”状态下的闪存上的旧数据被返回给主机。如果状态已在从驱动器上改变为“多版本”或在主驱动器上改变为“镜像”,则从数据缓冲器返回新数据。

图10a是具有动态布局的示例性乐观存储器具1000的方框图。相同编号的项如参照前面附图所讨论。在参照图4-6讨论的乐观直接访问的基础示例中,布局变化可在事务能够完成之前引起控制器cpu干预的可能延长的时段。在从主机的视角事务已乐观地完成之后,使用在虚拟化计算模块中用于校正数据放置的方法,动态数据放置示例可解决该问题。这允许乐观事务完成正常进行,而不管任何布局变化,只要最初用于该事务的布局不遇到任何硬件错误即可。

能够注意的是,图10中示出的示例包括参照图7-9描述的意图日志和状态702。然而,它可被实现在参照图4-6描述的基本器具上。

在这个示例中,多个布局模板(例如t3o1002和t3n1004)被用于相同数据。第一t3o1002是由rnic针对给定事务使用的初始或旧布局模板。第二t3n1004是最初在控制器116中的cpu114的控制下的新布局模板。虽然新布局模板t3n1004被示出为位于控制器116的存储装置118中,但新布局模板t3n1004可位于rnic112中。初始布局模板t3o1002被视为正在进入不同布局的数据的高速缓存。

图10b是具有动态布局的示例性乐观存储器具的方框图。相同编号的项如参照前面附图所讨论。所述系统不限于具有图10a中示出的全部块,而是可具有更少的块,如参照图10b所示。

图11a和b是在动态布局情况下用于数据的乐观存储的示例性方法1100的过程流程图。相同编号的块如参照图5所述。根据这个示例,事务的初始发展使用由rnic在事务到达时选择的模板(例如,图10的t3o1002)正常地进行。事务进行至虚拟化计算模块获得控制的点,例如遵循块502-522。在该点处,cpu114继续执行基础分配,直至从主机的视角事务完成(如果它尚未完成的话)的点。

在块1102,虚拟化计算模块确定用于事务的布局模板是否与用于数据的期望布局匹配。如果匹配,则过程流程前进至块526以便以它在没有动态布局的情况下本来具有的相同方式完成。

如果不匹配,则对于写入事务,在块1104,针对该事务的ssd中的数据被视为非易失性镜像高速缓存。因此,当虚拟化计算模块330具有用于数据集的替代布局模板t3n1004时,在块1106,它继续将镜像数据复制到新布局模板t3n1004中的镜像位置。在块1108,虚拟化计算模块330随后计算新布局模板中的数据的物理地址,在块106,根据新布局完成原始算法。在某个时间段期间,数据可位于由两个布局指示的ssd中的数据缓冲器中。

这个示例允许布局信息在任何时间被添加到布局模板选择器或在布局模板选择器中被修改,只要任何事务从一致版本的选择器表选择布局即可。这可通过使用诸如摆动缓冲器的技术使布局模板的更新原子化来实现。

另外,读取事务可被执行为就好像数据被完全保存在新布局中。这可通过管理旧布局中的ssd使得它们不能解析新布局的物理地址来执行。例如,通过强行使针对该数据的期望布局中未涉及的ssd数据高速缓存中的lba无效来管理在这种状态下的读取事务。在每个重新引导的事务完成之后,但在它被复制到新布局中的ssd之前,发生无效。即使那些数据的lba不在ssd的高速缓存中,数据也可保持在ssd的意图日志和数据缓冲器中,直至它们被成功地镜像到新布局中。

这里描述的技术可被实现在硬编码系统中,或者可被实现在非暂态计算机可读介质中。计算机可读介质可包括存储器(诸如ram、静态ram或nv存储器或硬盘驱动器)的任何组合。

图11c是在动态布局情况下用于数据的乐观存储的示例性方法的过程流程图。相同编号的块如参照图11b所述。所述系统不限于具有图8a和8b中示出的全部块,而是可具有更少的块,如参照图8c所示。

图12是包括可由处理器1202经总线1204访问的代码的示例性非易失性计算机可读介质1200的方框图。所述代码可包括代码块1206用于引导处理器1202至少部分地基于逻辑块地址(lba)从多个布局模板选择布局模板。另一代码块1208可引导处理器1202至少部分地基于布局模板识别与由主机发送的数据的一部分关联的多个存储驱动器中的每个存储驱动器。

图13是包括可由处理器1302经总线1304访问的代码的示例性非易失性计算机可读介质1300的方框图。所述代码可包括代码块1306用于引导处理器1302确定从驱动器、主驱动器或二者中的数据的物理地址。另一代码块1308可引导处理器1302确认事务并且改变从驱动器、主驱动器或二者的意图记录状态。

图14是包括可由处理器1402经总线1404访问的代码的示例性非易失性计算机可读介质1400的方框图。所述代码可包括代码块1406用于引导处理器1402确定用于事务的当前布局模板是否与用于数据的期望布局匹配。另一代码块1408可引导处理器1402将当前布局模板识别为旧布局模板。也可以包括代码块1410用于引导处理器1402创建新布局模板。

尽管本技术可能容许各种修改和替代形式,但仅作为示例示出以上讨论的示例性示例。应该理解,本技术并不意图局限于这里公开的特定示例。实际上,本技术包括落在本技术的范围内的所有替代物、修改和等同物。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1