持久性数据结构的制作方法

文档序号:15729788发布日期:2018-10-23 17:02阅读:230来源:国知局
持久性数据结构的制作方法

本公开涉及数据结构并且更具体地涉及持久性数据结构。



背景技术:

当应用执行时,应用经常使用数据结构以便组织和跟踪数据。数据结构通常是易失性的,并且每次应用操作时都简单地重新声明(re-declare)。由于传统上的易失特性,很少关注确保数据结构被保护并且不会在无意间被重写。

例如,使用错误指针的误写入可能重写在易失存储器中的数据结构或者数据结构的一部分。然而,由于数据结构无论如何都是易失的,应用可能很少地或者不会保护数据结构的完整性。

此外,应用在随后的执行期间可能从数据结构的数据中受益。如果易失性数据结构丢失、尤其是由于电源故障或不恰当的关闭而导致丢失,应用的执行状态或其他数据也可能丢失。



技术实现要素:

提出了用于持久性数据结构的方法。在一个实施例中,方法包含将逻辑标识符与数据结构相关联。在另一实施例中,方法包含将数据结构的数据写入至易失性存储器模块的第一区域。在一些实施例中,易失性存储器模块被配置以便确保保存数据响应于触发进行。在另一实施例中,方法包含将数据结构的数据从易失性存储器模块复制至非易失性贮存介质,使得数据结构的数据保持与逻辑标识符相关联。在一个实施例中,方法包含,使用逻辑标识符,提供对保留在易失性存储器模块中的数据结构的数据和存储在非易失性贮存介质中数据结构的数据的访问。

提供另一用于持久性数据结构的方法。在一个实施例中,方法包含将逻辑标识符与数据结构相关联的方法。在另一实施例中,方法包含在易失性数据装置中存储数据结构,所述易失性数据装置被配置以便确保保存数据结构以响应于状态改变。在一些实施例中,方法包括将数据结构从易失性存储器装置复制至非易失性贮存介质,以便数据结构保持与逻辑标识符相关联。

提供用于持久性数据结构的设备。在一个实施例中,分配模块被配置以便初始化持久性的事务日志响应于请求。在一些实施例中,写入模块被配置,以便通过将附加数据写入至被配置以便确保数据可持久性的易失性存储器中,从而将数据附加至持久性事务日志。在另一实施例中,实施模块被配置,以便实施一个或多个规则,所述规则避免数据在持久性事务日志中被重写。

提供用于持久性数据结构的另一设备。在一个实施例中,设备包含用于满足一个或多个对持久性数据结构的请求。在一些实施例中,持久性数据结构包含被存储在易失性缓冲器中的数据和被存储在非易失性记录介质中的数据。在另一实施例中,设备包含这样的装置,其用于将在易失性缓冲器内存储的数据提交至非易失性记录介质。在另一实施例中,设备包含这样的装置,其用于使用与持久性数据结构相关联的逻辑标识符在重启事件之后提供从非易失性记录介质中对持久性数据结构的访问。

提供用于持久性数据结构的另一设备。在一个实施例中,自动提交存储器模块被配置,以便将数据从一个或多个存储器缓冲器提交至非易失性贮存装置,响应于提交事件。在一些实施例中,持久性数据结构模块被配置,以便将用于持久性数据结构的数据提供至用于向一个或多个存储器缓冲器写入的自动提交存储器模块,从而使持久性数据结构被提交至非易失性贮存装置。

此外,提供包含计算机可读贮存介质的计算机程序产品,所述计算机可读贮存介质保存有可被执行以便使用于持久性数据结构的操作被执行的计算机可用程序代码。在一个实施例中,操作包含:使用逻辑标识符提供对持久性日志的访问。在另一实施例中,操作包含:在易失性存储器中缓冲被附加至持久性日志的数据。在一些实施例中,易失性存储器可以被配置将所缓冲的数据自动提交至非易失性贮存介质,响应于提交触发。在另一实施例中,操作包含:将所缓冲的数据从易失性存储器复制至非易失性贮存介质,使得持久性日志的数据保持与逻辑标识符相关联。

附图说明

为了将容易理解本公开的优点,将参考在附图中示出的具体实施例来呈现上文中简要描述的本公开的更具体的描述。要理解的是,这些附图仅仅描绘本公开的典型实施例,因此不被认为是对其范围的限制,将通过使用附图以额外的特性和细节来描述和解释本公开,附图中:

图1是例示用于持久性数据结构的系统的一个实施例的示意性方块图;

图2是用于持久性数据结构的系统的另一实施例的方块图;

图3是用于持久性数据结构的系统的又一实施例的方块图;

图4是包含多个自动提交存储器的系统的方块图;

图5是伴随自动提交存储器实现的提交管理设备的方块图;

图6是用于持久性数据结构的系统的另一实施例的方块图;

图7是用于自动提交存储器的方法的一个实施例的流程图;

图8是用于自动提交存储器的方法的另一实施例的流程图;

图9是用于自动提交存储器的方法的另一实施例的流程图;

图10A是例示持久性数据结构模块的一个实施例的示意性方块图;

图10B是例示持久性数据结构模块的另一实施例的示意性方块图;

图11是例示映射模块、稀疏逻辑地址空间和基于日志的写入结构的一个实施例的示意性方块图;

图12是例示用于持久性数据结构的方法的一个实施例的示意性流程图;和

图13是例示用于持久性数据结构的方法的另一实施例的示意性流程图。

具体实施方式

在本说明书全文中对于特性、优点或类似语言的提及并不暗示通过本公开可以实现的所有特性和优点应当在或者在本公开的任何单个实施例中。而是,提及特性和优点的语言要被理解为意味着结合一个实施例描述的具体特性、优点或特征被包含在本公开的至少一个实施例中。因此,在本说明书全文中,对特性和优点的讨论以及类似的语言可以、但不是必须涉及相同的实施例。

本公开的所描述的特性、优点和特征可以在一个或多个实施例中以任何合适的方式组合。本领域技术人员将意识到,可以没有特定实施例的具体特性或优点中的一个或多个而实施本公开。在一些实例中,可以在一些实施例中认识到可能没有出现在本公开的所有实施例中的附加的特性和特征。本发明的这些特性和优点将从下文的描述和所附的权利要求书变得更加充分地显而易见,或者可以通过如下文中所阐明的那样实践本公开来学习。

在本说明书中描述的许多功能单元已经被标记为模块,以便更加特别强调它们的实现独立性。例如,模块可以被实现为硬件电路,该硬件电路包括定制VLSI电路或门阵列、诸如逻辑芯片、晶体管的现成半导体、或者其他分立的部件。模块也可以实现在诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑器件等的可编程硬件装置中。

模块也可以以软件实现,该软件用于通过各种类型的处理器来执行。可执行代码的识别的模块可以包含例如计算机指令的一个或多个物理块或逻辑块,计算机指令可以被组织为例如对象、过程或函数。不过,识别的模块的可执行并不需要物理上定位在一起,而是可以包含在不同位置处存储的不同指令,这些指令当在逻辑上联合在一起时包含模块并且实现该模块的所陈述的目的。

事实上,可执行代码的模块可以是单个指令或许多指令,并且甚至可以分布在几个不同的代码段上、在不同的程序中、以及跨越几个存储器装置。类似地,操作数据在此可以在模块内被识别和描述,并且可以以任何合适的形式体现并且被组织在任何合适的数据结构类型中。操作数据可以被收集为单个数据集,或者可以分布在不同的位置上,包括在不同的贮存装置上,并且可以至少部分地仅仅作为在系统或网络上的电子信号而存在。在以软件实现模块或模块的部分的情况下,软件部分存储在一个或多个计算机可读媒介(media)上。

在本说明书全文中提及的“一个实施例”、“实施例”或类似的语言意味着结合该实施例描述的具体特性、结构或特征被包含在本公开的至少一个实施例中。因此,短语“在一个实施例中”、“在实施例中”和类似的语言的出现在本说明书全文中可以、但不是必须全部涉及相同的实施例。

提及的计算机可读介质(medium)可以采取能够在数据处理设备上存储机器可读指令的任何形式。可以通过紧凑盘、数字视频盘、磁带、伯努利驱动、磁盘、穿孔卡(punch card)、闪存、集成电路或者其他数字处理设备存储器装置来具体化计算机可读介质。

此外,本公开的所描述的特性、结构或特征可以以任何合适的方式在一个或多个实施例中组合。在下面的描述中,提供众多具体的细节,比如编程的示例、软件模型、用户选择、网络业务、数据库询问、数据库结构、硬件模块、硬件电路、硬件芯片等,以便提供对本公开的实施例的透彻理解。然而,相关领域技术人员将会认识到,可以没有这些具体细节中的一个或多个、或者使用其他方法、部件或材料等来实践本公开。在其他实例中,公知的结构、材料或操作并没有详细地示出或描述,以避免模糊本公开的方面。

在此包含的示意性流程图一般化地被阐述为逻辑流程图。这样,所描述的顺序和标记的步骤指示所呈现的方法的一个实施例。可以构想在功能上、逻辑上或效果上与所描述的方法的一个或多个步骤或其部分等效的其他步骤和方法。此外,提供所使用的格式和符号以解释方法的逻辑步骤,并且被理解为并不限制该方法的范围。尽管在流程图中可以使用各种箭头类型和线型,但是将其理解为并不限制相应方法的范围。事实上,一些箭头或其他连接符可以用于仅仅指示方法的逻辑流。例如,箭头可以指示在描述方法的所列举的步骤之间的未指定的持续时间的等待或监控时段。此外,特定方法发生的顺序可以或可以不严格遵守示出的相应步骤的顺序。

图1描绘用于保存数据结构的系统100的一个实施例。在一些实施例中,即使如果发生电力故障、电力减少、或者其他电力缺失,系统100也保存数据和/或提供电力管理。在所描述的实施例中,系统100包含主机计算装置114和贮存装置102。主机114可以是诸如服务器、膝上型计算机、桌面型计算机、或者其他计算装置的计算机。主机114可以包含诸如存储器、处理器、总线和其他部件的部件。

主机114在贮存装置102中贮存数据,并且经由(未示出的)通信连接与贮存装置102传送数据。贮存装置102可以在主机114内部或者在主机114外部。通信连接可以是总线、网络或者其他方式的允许在主机114和贮存装置102之间转移数据的连接。在一个实施例中,贮存装置102通过诸如PCI快速(PCI-e)的PCI连接而连接至主机114。贮存装置102可以是插入到主机114上的PCI-e连接中的卡。

贮存装置102还具有将贮存装置102连接至主电源的主电源连接130,该主电源向贮存装置102提供其进行诸如读取、写入、擦除等的数据贮存操作所需要的电力。在正常操作条件下,贮存装置102通过主电源连接130来从主电源接收需要的电力。在诸如图1示出的实施例的一些实施例中,主电源连接130将贮存装置102连接至主机114,并且主机114用作向贮存装置102供电的主电源。在一些实施例中,主电源连接130和上文中提到的通信连接是在主机114和贮存装置102之间的相同物理连接的部分。例如,贮存装置102可以通过PCI连接接收电力。

在其他实施例中,贮存装置102可以经由主电源连接130连接至外部电源。例如,主电源连接130可以将贮存装置102与作为电源转换器(通常称为移动电源(power brick))的主电源相连接。本领域技术人员将理解,存在贮存装置102可以接收电力的各种方式,并且存在可以用作用于贮存装置102的主电源的各种装置。

贮存装置102通过用于主机114的非易失性贮存器、存储器和/或记录媒介110。图1绘出贮存装置102,其包含写入数据管线(pipeline)106、读取数据管线108、非易失性存储器110、贮存控制器104、持久性数据结构模块1009、自动提交(auto-commit)存储器1011、和次级电源124。贮存装置102可以包含附加的部件,附加的部件未被示出以提供贮存装置102的简化视图。此外,尽管所描述的部件是贮存装置102的部分,但是在其他实施例中,贮存控制器104、持久性数据结构模块1009、自动提交存储器1011等中的一个或多个的至少一部分可以位于主机114上作为计算机可读代码、设备驱动、操作系统等。

非易失性存储器110存储数据,使得即使当不向贮存装置102供电时,数据也被保留。非易失性存储器110的示例包含闪存、纳米随机存取存储器(nano RAM或NRAM)、基于纳米晶体线的存储器、基于氧化硅的10纳米以下工艺存储器、石墨烯存储器、硅-氧化物-氮化物-氧化物-硅(SONOS)、电阻式随机存取存储器(RRAM)、可编程金属化单元(PMC)、导电桥式RAM(CBRAM)、磁阻式RMA(MRAM)、动态RAM(DRAM)、相变RAM(PCM或PRAM)或者其他非易失性的固态贮存媒介。在其他实施例中,非易失性存储器110可以包含磁媒介、光媒介、或者其他类型的非易失性贮存媒介。例如,在那些实施例中,非易失性贮存装置102可以包括硬盘驱动、光贮存驱动等。

尽管非易失性存储器110在此被称为“存储器媒介”,但是在很多实施例中,非易失性存储器110可以更一般地包含能够记录数据的非易失性记录媒介,非易失性记录媒介可以被称为非易失性存储器媒介、非易失性贮存媒介等。此外,非易失性贮存装置102在很多实施例中可以包含非易失性记录装置、非易失性存储器装置、非易失性贮存装置等。

贮存装置102还包含贮存控制器104,贮存控制器104协调数据在非易失性存储器110中的存储和取回。贮存控制器104可以使用一个或多个索引以定位和取回数据,并且对在存储于贮存装置102中的数据进行其他操作。例如,贮存控制器104可以包含整理器(groomer),用于进行诸如垃圾收集的数据整理操作。

如所示出的那样,在一些实施例中,贮存装置102实现写入数据管线106和读取数据管线108,其示例在下文中参考图3更详细地描述。在数据从主机114被转移至非易失性存储器110中时,写入数据管线106可以对该数据进行一些操作。这些操作可以包括例如纠错码(ECC)生成、加密、压缩等。读取数据管线108可以对正从非易失性存储器110中读出并且发送至主机114的数据进行类似的并且可能相反的操作。

贮存装置102还包含次级电源124,其在完全或部分电力中断导致贮存装置102不能通过主电源连接130接收足够的电力的情况下提供电力。电力中断是所不期望地使得贮存装置102停止通过主电源连接130接收电力、或者使得由贮存装置102通过主电源连接130接收的电力显著下降的任何事件。在一个实施例中,电力的显著下降包括电力下降到低于预定阈值。在进一步的实施例中,选择预定阈值以允许来自主电源连接130的电力水平的正常波动。例如,对于主机114和贮存装置102所在的建筑物的电力可能停断(go out)。(诸如不恰当地关闭向贮存装置102供电的主机114的)用户动作、主电源连接130中的故障、或者主电源中的故障可能使得贮存装置102停止接收电力。众多的各种电力中断可能使得贮存装置102的所不期望的电力丢失。

次级电源124可以包括一个或多个电池、一个或多个电容器、一排电容器、与电源的单独连接等。在一个实施例中,次级电源124在电源中断或者来自主电源连接130的其他的电力降低期间向贮存装置102提供电力达至少电力支撑(hold-up)时间。在进一步的实施例中,次级电源124提供足够长以使得贮存装置102能够将不在非易失性存储器110中的数据转储(flush)至非易失性存储器110中的电力支撑时间。因此,在电力缺失导致贮存装置102停止运作之前,贮存装置102可以保存未被永久存储在贮存装置102中的数据。在一些实现方式中,次级电源124可以包含能够提供预定电力支撑时间的可能的最小电容器,以保留空间、降低开销并且简化贮存装置102。在一个实施例中,使用一排或多排电容器来实现次级电源124,因为与用于提供次级电源的其他选择相比较,电容器一般更为可靠、需要较少的维护并且具有更长的寿命。

在一个实施例中,次级电源124是在来自主电源连接102的电力部分或完全地缺失时自动地向贮存装置102供电的电路的部分。类似地,系统100可以被配置为在部分或完全的电力缺失期间自动地从次级电源124接受或接收电力。例如,在一个实施例中,次级电源124可以与主电源连接130并联地电耦合至贮存装置102,使得在正常操作期间主电源连接130对次级电源124充电,并且响应于电力缺失,次级电源124自动地向贮存装置102供电。在一个实施例中,系统100还包括在次级电源124和主电源连接130之间的二极管或者其他反向电流保护,以放置来自次级电源124的电流到达主电源连接130。在另一实施例中,自动提交存储器1011可以响应于来自主电源连接130的降低的电力,使用开关等使能次级电源124或将次级电源124连接到贮存装置102。

尚未在非易失性存储器110中的数据示例可以包含这样的数据,在该数据移动经过写入数据管线106时该数据可以被保持在易失性存储器中。如果在电力输出期间在写入数据管线106中的数据丢失(例如未被写入非易失性存储器110或者没有通过其他方式永久地存储),则可能导致损坏或数据丢失。

在一些实施例中,在贮存装置102接收到要存储在非易失性存储器110中的数据之后的某个时间点,贮存装置102发送确认至主机114。写入数据管线106或者其子部件可以生成该确认。贮存装置102在接收到数据之后尽快发送确认是有利的。

在一些实施例中,写入数据管线106在数据实际上被存储在非易失性存储器110中之前发送确认。例如,在数据仍然在通过写入数据管线106向非易失性存储器110传输的同时,写入数据管线106可以发送确认。在这样的实施例中,非常希望在次级电源124缺少足够的电力之前存储贮存装置102将已由贮存控制器104针对其发送了确认的所有数据转储至非易失性存储器110,以防止数据损坏并且维持所发送的确认的完整性。

此外,在一些实施例中,在写入数据管线106内的一些数据可能由于电力中断而被损坏。电力中断可能包含电力故障以及所供应的电力水平的所不期望的改变。电力水平的所不期望的改变可能将在贮存装置102中但是尚未在非易失性存储器110中的数据置于风险之中。数据损坏可能在自动提交存储器1011甚至意识到(或者被通知)已存在电力的中断之前开始发生。

例如,PCI-e规范表明,在被用信号通知电力中断的情况下,数据应当被认为是损坏的并且在一些情形下不应存储。对于使用诸如PCI、串行高级技术附件(串行ATA或SATA)、并行ATA(PATA)、小型计算机系统接口(SCSI)、IEEE 1394(FireWire)、光纤通道、通用串行总线(USB)、PCIe-AS等的其他连接类型连接至主机114的贮存装置102可能发生类似的潜在损坏。当发生电力中断(意味着从那个时刻起到当前时间为止所接收的数据可以被假定为损坏)时可能出现复杂化,经过一段时间,感测到并且用信号通知中断,并且自动提交存储器1011接收信号并且获悉电力中断。在发生电力中断和自动提交存储器1011发现电力中断之间的滞后可能允许损坏的数据进入写入数据管线106。在一些实施例中,该损坏的数据应当被识别并且不应存储至非易失性存储器110中。可替换地,该损坏的数据可以存储在非易失性存储器110中并且被标记为损坏,如下文中所述。为了描述简洁,识别损坏数据并且不将数据存储至非易失性存储器110将主要用于描述在此的功能和特性。此外,主机114应当获悉该数据并未被存储,或者可替换地,对其完整性有疑问的数据直到可以验证数据完整性才被确认。因此,损坏的数据不应被确认。

贮存装置102还包含自动提交存储器1011。在一些实施例中,自动提交存储器1011与贮存控制器104通信、由贮存控制器管理、或者至少部分地与贮存控制器集成在一起。自动提交存储器1011可以例如与用于贮存装置102的软件驱动器和/或固件协作。在一个实施例中,自动提交存储器1011的至少一部分被实现在贮存装置102上,使得即使主机不再起作用,自动提交存储器1011也使用来自次级电源124的电力在部分或完全功率缺失期间继续起作用。

在一个实施例中,自动提交存储器1011响应于来自主电源连接130的电力的降低而开始贮存装置102中的电力缺失模式。在电力缺失模式期间,在一个实施例中,自动提交存储器1011将在贮存装置102中、尚未存储在非易失性存储器110中的数据转储至非易失性存储器110中。在特定的实施例中,自动提交存储器1011将已经被确认过的、在贮存装置102中尚未存储在非易失性存储器110中的数据转储至非易失性存储器110中。在下文中描述的一些实施例中,自动提交存储器1011可以调节在贮存装置102上的数据操作的执行,以确保在次级电源124缺少用于完成必要操作的足够电力之前、即在次级电源124提供的电力支撑时间期间完成必要操作。

在一些实施例中,必要操作包括用于已被确认为已存储的数据的那些操作,例如确认的写入操作。在另外的实施例中,必要操作包括用于已被确认为已存储并且擦除的数据的那些操作。在另外的实施例中,必要操作包括用于已被确认为已存储、读取并且擦除的数据的那些操作。自动提交存储器1011也可以终止非必要操作,以便确保那些非必要操作不多余地消耗电力和/或不妨碍执行必要操作;例如,自动提交存储器1011可以终止擦除操作、读取操作、未确认的(unacknowledged)写入操作等。

在一个实施例中,终止非必要操作保存来自次级电源124的电力,允许次级电源124提供电源支撑时间。在另一实施例中,自动提交存储器1011在电力缺失模式期间静默或者否则关断贮存装置102的一个或多个子部件的操作,以便保存来自次级电源124的电力。例如,在多种实施例中,自动提交存储器1011可以静默(quiesce)读取数据管线108、读取直接存储器存取(DAM)引擎和/或贮存装置102的其他与非必要操作相关的子部件的操作。

自动提交存储器1011也可以负责:确定电力中断损坏了什么数据,避免损坏的数据被存储至非易失性存储器110中,并且确保主机114意识到损坏的数据从未被实际上在贮存装置102上存储过。这避免了由电力中断使得的在贮存装置102中的数据的损坏。

在一实施例中,系统100包含多个贮存装置102。在一实施例中,自动提交存储器1011管理用于多个贮存装置102中的每个贮存装置102的电力缺失模块,为多个贮存装置102提供系统范围上的电力缺失模式。在另一实施例中,多个贮存装置102中的每个贮存装置102包含独立的自动提交存储器1011,所述自动提交存储器为每个单独的贮存装置102管理独立的功率缺失模式。在一实施例中,自动提交存储器1011可以静默或者否则关断多个贮存装置102的一个或多个贮存装置102,以便保存来自次级电源124的电力用于执行在一个或多个其他贮存装置102上的必要操作。

在一实施例中,系统100包含一个或多个适配器,其用于提供在主机114和多个贮存装置102之间的电连接。在多种实施例中,适配器可以包含容纳单个贮存装置102的槽或端口、容纳两个或多个贮存装置102的扩展卡或子卡(daughter card)等。例如,在一实施例中,多个贮存装置102可以分别被耦合至主机114的独立的端口或槽。在另一示例性实施例中,诸如子卡的一个或多个适配器可以电耦合至主机114(也就是连接至主机114的一个或多个槽或端口),并且一个或多个适配器可以分别提供用于两个或多个贮存装置102的连接。

在一个实施例中,系统100包含诸如母板(motherboard)等的电路板,所述电路板容纳诸如子卡等的两个或多个适配器,并且每个适配器容纳两个或多个贮存装置102。在另一实施例中,使用电路板的PCI-e槽,适配器被耦合至电路板,并且使用适配器的PCI-e槽,贮存装置102被耦合至适配器。在另一实施例中,贮存装置102分别包含诸如闪存等的非易失性固态贮存器的双列直插存储器模块(DIMM)。在一个实施例中,电路板、适配器、和贮存装置102可以位于主机114之外,并且可以包含独立的主电源连接130。例如,电路板、适配器和贮存装置102可以被装在具有电源单元(PSU)的外部壳体内,并且使用诸如eSATA、eSATAp、SCSI、FireWire、光纤通道、USB、PCIe-AS等的外部总线,它们可以与主机114进行通信。在另一实施例中,电路可以是主机114的母板,并且适配器和贮存装置102可以是主机114的内部贮存器。

考虑到本公开,本领域技术人员可以意识到,用于在系统100中使用的适配器和贮存装置102的很多配置。例如,每个适配器可以容纳两个贮存装置102、四个贮存装置102、或者任意数量的贮存装置。类似地,系统100可以包含一个适配器、两个适配器、三个适配器、四个适配器或者任意受支持的数量的适配器。在一个示例性实施例中,系统100包含两个适配器并且每个适配器容纳四个贮存装置102,一共有八个贮存装置102。

在一个实施例中,次级电源124向多个贮存装置102中的每一个提供电力。例如,次级电源124可以被布置在主电路板或母板上的电路中,并且向几个适配器提供电力。在另一实施例中,系统100包含多个次级电源,所述多个次级电源中的每一个向多个贮存装置102中的子集提供电力。例如,在一个实施例中,每个适配器可以包含用于适配器的贮存装置102的次级电源124。在又一实施例中,每个贮存装置102可以包含用于贮存装置102的次级电源124。考虑到本公开,本领域技术人员会意识到用于向多个贮存装置102提供电力的次级电源124的不同布置。

上文中描述的系统、方法和设备可以被调整以便实现自动提交存储器,所述自动提交存储器能够以CPU存储器写入粒度(granularity)和速度来实现存储器语义写入操作(例如持久性写入)。在一些实施例中,通过保证即使在电源故障或其他重启事件的情况下也会发生用于写入操作的特定提交动作,诸如DRAM、SRAM、BRAM等的易失性存储器可以被用作、考虑作为、或表达为非易失的。

在此描述的自动提交存储器可以被配置以便确保或保证即使在数据存储在易失性自动提交存储器缓冲器内的情况下数据也被保存或保持。在此描述的易失性自动提交存储器缓冲器、元件、模块或者装置可以被配备或被关联有自动提交元数据,所述自动提交元数据定义用于自动提交存储器模块1011的提交动作以便对触发进行响应。在此使用的用于自动提交存储器1011的触发、提交触发、触发事件、提交事件等可以包含这样的偶发事件(occurrence)、系统装置、条件等,响应于其,自动提交存储器模块1011被配置以便进行一个或多个提交动作,例如将数据从易失性存储器转储(flush)至或保存至非易失性存储器介质110。在一些实施例中,自动提交存储器模块1011可以在不涉及任何单个特定触发事件的情况下对来自自动提交存储器缓冲器的数据进行转储、流处理(stream)、复制、传输或者迁移。例如,下文中,参考图10的迁移模块1908来描述从自动提交存储器缓冲器至非易失性存储器介质110中迁移数据。

在一些实施例中,用于自动提交模块1011的触发可以包含在系统100的常规操作事件期间的非故障、非电力缺失、和/或非重启事件,例如自动提交存储器缓冲器变满、接收到迁移请求等。在其他实施例中,触发可以包含故障条件、电力缺失条件、或者其他的重启事件。在此使用的重启事件包括向主机计算装置和/或非易失性贮存装置供应的电力的有意的或无意的缺失。重启事件可以包括系统重启、复位或者关机事件;电源错误、电力缺失、或电源故障事件;或者电力的其他中断或减少。通过保证特定的提交动作,自动提交存储器即使在重启事件之后也可以允许贮存客户机恢复执行状态,可以允许贮存客户机保持不同的单独的数据集,等等。

如在此使用的用语“存储器语义操作”或者更一般地“存储器操作”是指这样的操作,所述操作使用可操纵存储器指针等,具有易失性存储器存取的粒度、同步性、和存取语义。存储器语义操作可以包含但并不局限于:加载、存储、直接内存地址读取(peek)、存储到存储单元(poke)、写入、读取、设置、清除等。存储器语义操作可以以CPU级的粒度(例如单个字节、字、缓存线(cache line)等)操作,并且可以是同步的(例如,CPU等待操作完成)。在一些实施例中,相对于较小尺寸粒度存取而言,以诸如缓存线的较大尺寸的粒度来提供存取可以增加存取速率,提供更高效的写入组合,等等。

ACM 1011可以适用(本地的和远程的)计算装置和/或应用,其使用多中存储器映射技术中的一个或多个,包括但不局限于存储器映射I/O(MMIO)、端口I/O、端口映射IO(PMIO)、存储器映射文件I/O等。例如,ACM 1011可以适用(本地和远程的)计算装置和/或应用,其使用PCI-e基地址寄存器(BAR)或者其他合适的机制。使用诸如双数据速率(DDR)存储器接口、HyperTransport、QuickPath Interconnect(QPI)等的接口,可以通过CPU的存储器总线来直接存取ACM 1011。相应地,使用诸如CPU加载/存储、直接内存存取(DMA)、第三方DMA、远程DMA(RDMA)、原子检测和设置等的存储器存取语义,可以存取ACM 1011。在此公开的对ACM 1011的直接存储器语义存取允许很多系统的和/或虚拟层调用,所述调用典型地要求实现要被绕过(bypass)的提交(commit)操作(例如通过异步输入/输出接口进行的回调(call back)可以被绕过)。在一些实施例中,ACM 1011可以被映射至一个或多个虚拟范围(例如BAR范围、虚拟存储器地址等)。虚拟映射可以允许多个计算装置和/或应用共享单个ACM地址范围1021(例如,在不同的虚拟地址范围内,同时存取相同的ACM)。ACM 1011可以被映射至由CPU寻址的物理存储器地址空间的地址范围内,使得CPU可以使用加载/存储指令以便使用存储器语义存取,直接向ACM 1011进行读取和写入数据。在另一实施例中,CPU可以将物理上被映射的ACM 1011映射至虚拟存储器地址空间,这使得ACM 1011可以作为虚拟存储器用于用户空间处理等。

ACM 1011可以被预先配置,以便在检测到重启条件(或者其他预定义的触发事件)的情况下提交其内容,并且就其本身而论,在ACM 1011上进行的操作可以被视作被“瞬间提交”。例如,通过使用以CPU存储器粒度和速度操作的存储器语义写入,而无需可以对受写入-提交等待时间影响的应用的性能进行显著提升的独立的相应的“提交”指令,应用就可以在ACM 1011上进行“写入-提交”操作。就像在此所使用的那样,写入-提交命令是这样的操作,其中应用(例如使用存储器语义存取)向存储器位置写入数据并且然后发出随后的提交命令以便提交该操作(例如到可持久贮存或者其他提交机制)。

其性能以写入-提交等待时间和在初始存储器写入和随后的持久提交操作之间的时间延迟为基础的应用,典型地试图通过(例如使用存储器后备(backing)文件)调整虚拟存储器系统来减少该等待时间。在这种情况下,应用进行在系统RAM中的高性能的存储器语义写入操作,但是为了提交该操作,必须执行随后的“提交”命令以便保持对后备文件(或其他持久贮存)的每次写入操作。相应地,每个写入命令操作可以包含其自身的独立的提交命令。例如,在数据库记录日志应用中,在下一次事务被记录日志之前,每次日志事务必须被写入和提交。相似地,在消息的接收可以被确认之前,消息传递系统(例如存储和转送系统)必须写入并且提交每个进来的消息。写入-提交等待时间因此包括相对快的存储器语义写入,在存储器语义写入之后是用于将数据提交至持久贮存器的慢得多的操作。写入-提交等待时间可能包含多个多种要素,所述多种要素包括:对持久贮存器的存取次数、系统调用开销(例如在RAM地址之间的变换、后备存储LBA等)等。可能从降低的写入-提交等待时间中受益的应用的示例包括、但不局限于:数据库日志记录应用、文件系统日志记录、消息传递应用(例如存储和转送)、信号量原语(semaphore primitive)等。

在此公开的使用自动提交存储器的情况下用于持久数据结构的系统、设备和方法可以被用于通过以任何合适的寻址粒度级别来提供对存储器区域的直接存取来显著地提升受写入-提交等待时间约束的应用的性能,所述寻址粒度级别包括字节级别、页级别、缓存线级别或者其他存储器区域级别,该直接存取能够在系统故障或其他重启事件的情况下保证被提交、而无需应用发起提交命令。因此,应用的写入-提交等待时间(latency)可以被减少到存储器语义存取(在系统总线上的单个写入)的等待时间。

在一些实施例中,就像在此所描述的那样,持久数据结构模块1009可以使用自动提交存储器1011或者与之协作,以便向客户机(例如操作系统、虚拟操作平台、访客操作系统、应用、数据库系统、过程、线程、实体、实用程序、用户等)提供持久数据结构,其具有众多益处、和易失性存储器的速度、和非易失性存储器介质110的可持久性。

在此使用的数据结构包括有组织的数据排列、数据组或数据集合。数据结构可以根据预定义的样式或者模式来被组织,可以包括用于对所包含的数据的组织或访问有益的元数据,所述元数据例如指针、序号、标签、标识符等。数据结构可以包含但是并不局限于:日志(例如顺序日志、事务日志、应用日志)、队列(例如先进先出或FIFO队列、缓冲器)、栈(例如后进先出或LIFO堆栈)、树(例如二叉树、B树、B+树、B*树、三叉树、K分树、空间分割树、决策树)、链表(例如单链表、双链表、自组织列表、双链接边列表)、哈希(例如哈希列表、哈希表格、哈希树、哈希数组)、数组(例如表格、关联数组、位数组、位域、位图、矩阵、稀疏数组)、堆(例如二叉堆、二项堆、斐波那契堆、三叉堆、D分堆)、图(例如有向图、有向非循环图、二元决策图、图结构栈、多重图、超图、临接表)或者其他数据结构。

数据结构的示例是事务日志或TLOG。在一些实施例中,事务日志(例如事务记录、数据库日志、二进制日志、审计跟踪、顺序日志、应用日志)包括顺序的、历史的或按时间顺序的条目,所述条目例如对数据库或数据库表格所做的更新的历史或列表、由数据库或其他应用所执行的事务等。事务日志可以包括关于每次事务的足够的信息,以便退回或撤消事务、或者重做或重施该事务。除了或者替代顺序地或者按时间顺序地存储,事务日志可以包含用于每个条目或事务的顺序信息,例如时间戳、顺序号、对前一个或下一个条目的链接等。事务日志也可以包含其他类型的元数据,例如事务标识符(例如引用生成日志记录的数据库事务)、类型(例如对数据库日志记录的类型进行描述的标签)等。尽管在此主要涉及持久数据结构模块1009来描述持久事务日志,但是该描述同样适用于诸如上文中列出的示例数据结构的其他类型的数据结构。

持久数据结构模块1009可以提供接口,所述接口例如应用程序接口(API)、共享库、硬件接口、通信总线、一个或多个IO控制(IOCTL)命令等,客户机通过所述接口可以创建、更新、删除或者访问一种或多种类型的持久数据结构。如果数据结构在重启事件之后仍以某一形式对客户机保持可访问,则此处使用的数据结构是持久的,这可以通过在此描述的自动提交存储器1011来确保或者保证。持久数据结构模块1009可以将持久逻辑标识符与持久数据结构相关联,所述持久逻辑标识符可以被用户使用以便在重启事件之前或者之后访问持久数据结构。例如,持久数据结构模块1009可以与下文中参考图6描述的文件系统模块1558协作,以便借助文件名、文件名和偏移量等来提供对作为文件系统文件的持久数据结构进行的访问。在其他一些实施例中,持久逻辑标识符可以包括来自LUN命名空间、LUN ID和偏移量中的逻辑单元号(LUN)标识符(ID)、用于下文描述的ACM 1011的持久存储器命名空间的逻辑标识符、用于非易失性存储器装置102的命名空间的逻辑块地址(LBA)或LBA范围、或者其他的持久逻辑标识符。

为了有效地使用可能具有比非易失性存储器介质110更小的贮存容量的ACM 1011,并且为了提供易失性存储器的存取速度和非易失性存储器介质110的可持久性,当客户机以输入速率(例如在前台)向数据结构写入数据时,当客户机以输入速率(例如在前台)向数据结构写入数据时,持久数据结构模块1009可以与ACM 1011协作,以便持续地以与输入速率相匹配地或超过输入速率的传输速率(例如在后台)将数据从ACM 1011的ACM缓冲器中降级、复制、传输、迁移和/或移动至非易失性存储器介质110,使得数据并不溢出被分配给数据结构的一个或多个ACM缓冲器。在一个实施例中,持久数据结构模块1009可以对客户机向数据结构中写入数据的输入速率进行阻止、延迟、节制、支配或限制。以这种方式,持久数据结构模块1009可以向客户机遮掩或隐藏ACM 1011和/或非易失性存储器介质110,使得客户机察觉到ACM 1011的存取速度和益处以及非易失性存储器介质110的可持久性,而不会意识到持久数据结构模块用以提供这些益处的分层架构的复杂性。

在一些实施例中,持久数据结构模块1009可以实施用于数据结构的一个或多个规则。例如,可以通过一个或多个规则、限制、定义等的集合来对每种不同类型的数据结构进行定义或结构化。所述规则可以定义一个或多个允许的或可接受的用于数据结构的数据操作。对于事务日志而言,规则可以包括:条目必须是顺序的,数据条目一旦写入就不能被重写或更新,等等。不同类型的数据结构可以具有不同的规则。例如,队列可以具有严格的FIFO规则,栈可以具有严格的LIFO规则,树可以具有对数据条目或节点的严格顺序或层次结构进行定义的规则,等等。在一些实施例中,通过提供实施用于数据结构的一个或多个规则的接口,持久数据结构模块1009可以避免应用或者其他客户机无意间或偶然地重写或者破坏持久数据结构的完整性,确保持久数据结构满足数据结构的严格定义等。由于持久数据结构模块1009提供非易失性的或持久的数据结构,在数据结构完整性中的错误(例如重写数据结构、在数据结构中的不恰当的条目等)将在重启事件或再起动之后仍然保持,并且不会像在易失性数据结构中的错误那样被清除或复位。

在一些实施例中,持久数据结构模块1009可以提供接口或库,所述接口或库以基本上透明的方式与ACM 1011的硬件能力和/或非易失性存储器介质110相结合、和/或以基本上透明的方式向操作系统、文件系统、一个或多个应用或其他客户机等提供对ACM 1011的硬件能力和/或非易失性存储器介质110的存取,因此提供可以通过库、文件名或其他持久逻辑标识符进行存取的持久数据结构。在一个实施例中,由于持久数据结构模块1009管理ACM 1011的分层层次结构、非易失性存储器介质110(例如下文中描述的贮存管理层)、文件系统(例如下文描述的文件系统),所以持久数据结构1009即使借助相对非易失性存储器介质110而言少量的用于ACM 1011的易失性存储器(例如ACM缓冲器)也能够为持久数据结构提供ACM 1011的益处。

在一些实施例中,持久数据结构模块1009可以提供持久数据结构与文件系统的基本上透明的结合。例如,客户机可以使用文件系统语义来存取持久数据结构,对于具有文件名的文件而言使用文件名和偏移量等,同时,持久数据结构模块1009管理在ACM 1011的ACM缓冲器(例如易失性存储器、易失性存储器缓冲器、易失性存储器模块、易失性存储器元件、易失性存储器页)和非易失性存储器介质110之间的数据结构的数据传输,实施用于数据结构的一个或多个规则(例如,避免重写用于数据结构的文件,确保用于数据结构的文件仅附加(append-only),确保用于数据结构的文件的条目是顺序的等等),使得为客户机减轻这些负担。以这种方式,尽管使用标准库、文件系统I/O或者其他接口,应用或其他客户机也可以获得持久数据结构模块1009和/或用于持久数据结构的ACM 1011的益处。

图2是包含持久数据结构模块1009和自动提交存储器(ACM)1011的一个实施例的系统1000的方块图。如此处所使用的,自动提交存储器包括短等待时间、高可靠性的存储器媒介,所述存储器媒介被呈现给持久数据结构模块1009和/或其他ACM用户,以便在与被配置以便在重启事件之后对重启事件之前存在的在ACM 1011中存储的数据的相同状态进行复原并且对在自动提交存储器中存储的数据的存储器语义访问的相同级别进行复原的逻辑和部件一起相组合的情况下,以至少字节级别的存储器语义存取和寻址粒度级别来进行直接存储器语义存取。在一些实施例中,ACM 1011保证在ACM 1011中存储的数据在重启事件之后将可以存取。在一个实施例中,ACM 1011包括易失性存储器媒介,所述易失性存储器媒介被耦合至当需要时或当由ACM用户指示时向非易失性贮存介质提交数据的控制器、逻辑和其他部件。在另一实施例中,ACM 1011可以包括诸如相变存储器(PCM或PRAM)的原生非易失性贮存介质(natively non-volatile storage medium),并且触发提交动作可以响应于重启事件来对非易失性贮存介质上的数据进行处理,从而使得在重启事件之后数据对数据所有者而言保持可存取。

相应地,当数据被写入至ACM 1011时,可以一开始并不“提交”数据自身(不是必须被存储在持久存储器介质上和/或状态),而是如果在ACM数据存储至ACM 1011内的同时发生重启事件,就建立预配置处理以便保存ACM数据和其状态。该重启存活(restart survival)处理的预配置在此被称作“装备(arming)”。尽管系统1000经历故障条件或其他重启事件,但是ACM 1011可以能够自治地并且以高度的确信来进行预配置的提交动作。因此,将数据存储在ACM 1011上的实体可以认为数据被“瞬间提交”或没有遭受缺失或损坏,至少是就像数据存储在诸如硬件驱动、磁带贮存媒介等的非易失性贮存装置中一样安全。

在其中ACM 1011具有易失性存储器媒介的实施例中,由于ACM 1011跨越系统重启事件地保持诸如ACM数据和/或ACM元数据1015的数据,所以,ACM 1011可以使得易失性存储器媒介看起来是非易失性存储器,可以将易失性存储器呈现为非易失性介质,等等。通过确定诸如重启或故障条件已经发生,在触发事件之后的支撑时间期间将易失性存储器媒介的内容复制至非易失性存储器介质中,并且在触发事件结束、已经复原电源、已完成重启事件等之后,将内容从非易失性存储器媒介中复制回至易失性存储器媒介,使得ACM 1011可以允许易失性存储器介质被用作非易失性存储器媒介。

在一个实施例中,ACM 1011至少是字节可寻址的。在一些实施例中,ACM 1011的存储器媒介可以是原生地字节可寻址的,直接向ACM 1011提供字节可寻址性。在另一实施例中,ACM 1011的存储器媒介不是原生地字节可寻址的,但是ACM 1011的易失性存储器媒介是原生地自己可寻址的,并且ACM 1011响应于触发事件来将字节可寻址的易失性存储器媒介的内容写入或提交至ACM 1011的非字节可寻址的存储器媒介,因此易失性存储器媒介致使ACM 1011字节可寻址。

对于诸如主机1014的一个或多个计算装置而言,ACM 1011可以是可存取的。如这里所使用的,(诸如主机1014的)计算装置实质可以存取ACM的计算装置。主机1014可以是将ACM 1011安装作为外围设备的计算装置;ACM可以被附接于主机1014的系统总线1040;ACM 1011可以通过数据网络来与主机1014进行通信;和/或ACM 1011可以否则与主机1014通信。在一些实施例中,主机1014可以对由另一计算装置托管(host)的ACM 1011进行存取。可以使用任何合适的通信机制,实现访问,所述通信机制包括、但不局限于:CPU编程IO(CPIO)、端口映射IO(PMIO)、存储器映射IO(MMIO)、快接口、PCI-e总线、Infiniband、RDMA等。主机1014可以包括一个或多个ACM用户1016。如这里使用的,ACM用户1016指示被配置以便对ACM 1011进行存取的任何操作系统(OS)、虚拟操作系统(例如具有管理程序的OS)、客户机OS、应用、处理、线程、实体、实用程序、用户等。

ACM 1011可以在物理上位于主机1014的一级或多级处。在一个实施例中,ACM 1011可以连接至PCI-e总线,并且可以由主机1014通过MMIO进行存取。在另一实施例中,ACM 1011可以由主机1014的CPU通过存储器控制器直接存取。例如,ACM 1011可以直接附接于主机1014的CPU等和/或直接例如与主机1014的CPU等通信(例如快速通道互联)。在一些实施例中,ACM 1011的易失性媒介和ACM 1011的非易失性后备媒介可以在物理上并不共同位于相同的设备内,而是可以通过通信总线、数据网络等进行通信。在如下文中描述的其他实施例中,ACM 1011的硬件部件可以紧密地耦合,并且集成在单个物理硬件设备内。在一实施例中,ACM 1011的易失性存储器媒介和/或非易失性存储器媒介可以与主机1014的CPU缓存层次结构进行集成或可以与之协作,以便利用诸如写合并(write combining)等的CPU缓存技术。

在一些实施例中,一个或多个ACM缓冲器1013可以被映射至可由主机装置1014的CPU、核等寻址的物理存储器地址空间的地址范围内,例如下文中描述的存储器系统1018。例如,一个或多个ACM缓冲器1013可以被映射为直接附接的物理存储器、通过PCI-e总线的MMIO可寻址的物理存储器、或者被映射为物理存储器的一个或多个页。在另一实施例中,物理映射的ACM缓冲器1013的至少一部分可以被映射至可由用户空间处理等存取的虚拟存储器地址空间,作为虚拟存储器。

在一些实施例中,允许ACM用户1016直接寻址ACM缓冲器1013,这绕过主机装置1014的惯例操作系统存储器栈的一层或多层,提供对核空间和/或用户空间应用的直接加载/存储操作存取。在一实施例中,使用核模块的操作系统、应用编程接口、下文中描述的贮存管理层(SML)1050等将ACM缓冲器1013映射至用于一个或多个ACM用户1016的存储器系统并且将ACM缓冲器1013从用于一个或多个ACM用户1016的存储器系统中取消映射,并且一旦操作系统将ACM缓冲器1013映射至存储器系统1018,则ACM用户1016可以直接对ACM缓冲器1013进行存取。在又一实施例中,操作系统也可以服务用于ACM缓冲器1013的系统转储调用等。

在一些实施例中,贮存管理模块1050和/或下文中描述的SML API 1019提供用于ACM用户1016的接口、操作系统和/或用于请求特定ACM功能的其他实体,所述ACM功能例如映射功能、取消映射功能、转储功能和/或ACM功能。为了进行转储操作以响应转储请求,ACM 1011可以进行用于与转储请求相关联的每个ACM缓冲器1013的提交动作。按照所关联的ACM缓冲器1013的ACM元数据1015所表明的那样来提交每个ACM缓冲器1013。在多种实施例中,转储功能可以对一个或多个ACM缓冲器而言是特定的、对于所有ACM缓冲器1013而言是全系统的、等等。在一实施例中,主机1014的CPU、操作系统等可以请求ACM转储操作,响应于CPU缓存转储、用于主机1014的系统数据转储、或者其他通用转储操作,或者作为CPU缓存转储、用于主机1014的系统数据转储、或者其他通用转储操作的一部分。

ACM用户1016、操作系统等可以请求转储操作,以便在进行诸如数据快照或备份的维护操作之前保持数据一致性,以便为计划的重启事件或其他情形做准备,在所述其他情形中转储来自ACM缓冲器1013的数据可能是有益的。在一些实施例中,ACM用户1016、操作系统等可以请求映射和/或取消映射一个或多个ACM缓冲器1013,以便进行对ACM缓冲器1013的存储器管理;以便在应用或处理之间重新分配ACM缓冲器1013;以便为新的数据、应用或处理分配ACM缓冲器1013;以便(在共享ACM 1011的实施例中)将ACM缓冲器1013的使用转移至不同的主机1014;或者以便操作ACM缓冲器1013的存储器映射。在另一实施例中,使用如下文所述的资源管理主体,贮存管理模块1050可以动态地分配、映射或取消映射ACM缓冲器1013。

由于保证ACM 1011在触发事件的情况下自动提交其上存储的数据,所以,当主机1014或ACM用户1016在触发事件之前和在触发事件之后可以存取数据时,主机1014(或ACM用户1016)可以将被写入至ACM 1011的数据视作瞬间“提交”或非易失的。有利地,尽管重启事件可能使得ACM用户1016被重启或重新初始化,但是在ACM 1011中存储的数据在重启事件之后处于与在重启事件之前相同的状态/条件。因此,主机1014可以使用存储器写入语义,(并且以CPU速度和粒度)向ACM 1011写入,而不需要明确的提交命令,所述提交命令依赖于ACM 1011的预配置的触发以便在重启(或其他触发事件)的情况下提交数据。

ACM 1011可以包括多个自动提交缓冲器1013,每个自动提交缓冲器具有各自的ACM元数据1015。如下文所描述的,ACM元数据1015可以包括这样的数据,其用于响应于自动提交缓冲器1013的触发事件来便于提交ACM数据,所述数据例如用于在ACM缓冲器1013中的数据的逻辑标识符、提交代理1020的标识符、用于提交处理或其他处理过程的指令、安全数据等。自动提交缓冲器1013可以具有任何合适的尺寸,从单个扇区、页、字节等到虚拟或逻辑页尺寸(例如80至400kb)。根据底层非易失性贮存媒介的贮存容量和从副电源1024中提供的支撑时间,可以对自动提交缓冲器1013的尺寸进行调节。

在一个实施例中,ACM 1011可以向主机1014、ACM用户1016等公告或者呈现ACM缓冲器1013的贮存容量,所述贮存容量大于ACM缓冲器1013的实际贮存容量。为了提供更大的贮存容量,ACM 1011可以动态将ACM缓冲器1013映射至存储器系统1018并且映射至ACM 1011的诸如上文中描述的非易失性存储器110的非易失性后备存储器,并且可以动态地取消上述映射。例如,当需要ACM缓冲器1013存取时,ACM 1011可以向非易失性存储器110提供用于ACM缓冲器1013的虚拟地址范围、和需求页数据和/或ACM缓冲器1013。在另一实施例中,对于被装备以便向非易失性存储器110的一个或多个预定义的LBA进行提交的ACM缓冲器,ACM 1011可以动态地将ACM数据和ACM元数据1015从ACM缓冲器1013移动至非易失性存储器110的相关联LBA,以便释放ACM缓冲器1013的贮存容量以便提供较大的贮存容量。当ACM缓冲器变得可用或者在当前加载的ACM缓冲器1013的数据之外的特定地址被请求等等时,ACM 1011还可以将ACM数据和ACM元数据1015返回至一个或多个ACM缓冲器1013,从而管理ACM缓冲器1013的贮存容量。

ACM 1011被预配置或“装备”以便实施一个或多个“触发的提交动作”,响应于重启条件(或者其他的预先确定的条件)。如这里使用的,重启条件或事件可以包括、但不局限于:主机1014的软件或硬件关机/重启、在主机1014计算装置中的故障、主机1014的部件的故障(例如总线1040的故障),软件错误(例如在主机1014或其他计算装置上操作的软件的错误)、主电源连接1030的缺失、无效关机、或者可以使得在易失性存储器中存储的数据的缺失的其他事件。

在一个实施例中,重启事件包括这样的行为:在能够使得在主机1014的易失性存储器内或在主机1014内的部件内所存储的数据的缺失的事件之后,主机1014开始处理。一旦已经完成了重启条件或事件、主电源可用等等,主机1014就可以开始/恢复处理。

ACM 1011被配置以便检测重启事件/条件已经发生,和/或以便通过初始化恢复阶段来对重启事件进行响应。在恢复阶段期间,ACM 1011可以将ACM 1011的数据复原至在重启事件之前的状态。替换地或者此外,在恢复阶段期间,ACM 1011可以完成ACM数据或ACM元数据1015的处理,所述处理是为了满足保证在重启事件之后在ACM 1011中的数据对ACM用户而言可用所需要的。替换地或者此外,在恢复阶段期间,ACM 1011可以完成ACM数据或ACM元数据1015的处理,所述处理是为了满足保证在重启事件之后提交在ACM 1011中的数据所需要的。如此处使用的,“提交”意味着:在ACM 1011中的数据即使在重启事件之后也被保护以防止缺失或损坏,并且按照与数据相关联的装备信息所要求的那样被保持。在一些实施例中,恢复阶段包括:处理ACM数据和ACM元数据1015,使得即使发生了重启事件,ACM数据也被保持。

如此处使用的,受触发的提交动作是预配置的提交动作,所述提交动作被装备以便响应于触发事件(例如重启事件、转储命令、或者其他预先确定的事件)而由ACM 1011执行。在一些实施例中,受触发的提交动作维持至少足够的ACM数据和/或ACM元数据1015,以便使ACM 1011的数据在系统重启之后可用,从而满足ACM 1011的在重启事件之后ACM用户还可以存取数据的保证,在一些实施例中,至少部分地通过将ACM 1011的数据提交和/或保持至非易失性存储器媒介来满足该保证。可以在重启事件之前、期间和/或之后完成受触发的提交动作。例如,ACM 1011可以在重启事件之后的支撑时间期间将ACM数据和ACM元数据1015写入至在非易失性存储器110内的预定义的临时位置,并且一旦完成重启事件,可以将ACM数据复制回至ACM缓冲器1013、复制至非易失性存储器110中的预期位置、或者进行其他的处理。

当ACM 1011被请求时和/或当特定的ACM缓冲器1013被分配以便主机1014使用时,受触发的提交动作可以被“装备”。在一些实施例中,ACM 1011可以被配置以便实现受触发的提交动作,响应于其他的、非重启条件。例如,指向特定逻辑地址的操作(例如存储到存储单元(poke))可以触发ACM 1011,转储操作可以触发ACM 1011等。这种类型的触发可以用于在正常操作(例如非重启或非故障条件)期间提交ACM 1011的数据。

当自动提交缓冲器1013被映射至主机1014的存储器系统1018时,装备可能发生。替换地,装备可以作为单独的操作发生。如此处使用的,装备自动提交缓冲器1013包括:当动作被触发时,进行用于完成触发动作所需的必需配置步骤。装备可以包括例如向ACM 1011提供ACM元数据1015等。在一些实施例中,在一些实施例中,装备还包括进行必需的配置步骤,所述必需的配置步骤是被需要用于完成受触发动作的最小集合的步骤,使得在触发事件之后能够完成受触发的动作。在一些实施例中,装备还包括:验证装备数据(例如验证自动提交缓冲器1013的内容或其部分能够如在ACM元数据1015中所指定的那样被提交),并且验证ACM 1011能够并且被配置以便正确地在没有错误和中断的情况下进行受触发的动作。所述验证能够确保:一旦被装备,当需要时ACM 1011可以实现受触发的提交动作。如果ACM元数据1015不能被验证(例如其他ACM元数据1015的逻辑标识符是无效的、损坏的、不可用等等),那么装备操作可能失败;直到自动提交缓冲器1013被成功地装备了有效ACM元数据1015,才可以允许在自动提交缓冲器1013上的存储器语义操作。例如,如果被提供用于装备操作的LBA并未映射至盘上的有效的(并且可操作的)物理地址,那么由具有在LBA和物理之间的一对一映射的硬盘所后备的自动提交缓冲器1013可能不能被装备。在这种情况下,验证可以包括:对盘进行询问以便确定LBA是否具有有效的、相应的物理地址,和/或使用物理地址作为自动提交缓冲器1013的ACM元数据1015。

响应于检测和/或接收到诸如重启条件的触发事件的ACM 1011(或者其他实体),实施装备的受触发的提交动作。在一些实施例中,装备的提交动作是这样的提交动作,其可以由ACM 1011进行,并且其不需要与主机1014或者在ACM 1011的“隔离区(isolation zone)”之外的其他设备进行进一步通信。相应地,ACM 1011可以被配置以便自治地实现主机1014的和/或其其他部件的受触发的提交动作。ACM 1011可以保证,在没有差错的情况下和/或即使存在外部差错条件,受触发的提交动作可以被提交。相应地,在一些实施例中,ACM 1011的受触发的提交动作并不包含和/或需要引入潜在差错的逻辑、计算和/或运算。在一些实施例中,受触发的提交动作包括:将在易失性ACM 1011上存储的数据提交至持久贮存位置。在其他实施例中,受触发的提交动作可以包括如下文所述那样的在触发事件之前、期间和/或之后对所提交的数据进行的额外处理。ACM 1011可以自治地实现预配置的受触发的提交动作;即使在主机1014中的故障或重启条件、主电能缺失等的情况下,ACM 1011也可以能够实现受触发的提交动作。由于如上文所述地装备ACM 1011,所以ACM 1011可以独立地实现受触发的提交动作。

在一些实施例中,用于ACM缓冲器1013的ACM元数据1015标识ACM缓冲器1013的数据。例如,ACM元数据1015可以标识数据的所有者,可以描述数据自身,等等。在一个实施例中,ACM缓冲器1013可以具有多种级别的ACM元数据1015,用于被多个实体处理等。ACM元数据1015可以包括多个嵌套的(nested)头部,所述嵌套的头部可以在重启时被解包(unpackage)并且由提交代理1020的各种实体使用来确定如何处理相关联的ACM数据以便完成如上所述的受触发的提交动作。例如,ACM元数据1015可以包括块元数据、文件元数据、应用级别元数据、处理执行点或回调元数据、和/或其他级别的元数据。每个级别的元数据可以被关联至不同的提交代理1020等。在一些实施例中,ACM元数据1015可以包括诸如相关联的ACM数据的所有者的签名、预共享的密钥、随机数的安全数据,所述安全数据可以在恢复期间被ACM 1011使用以便验证提交代理1020、ACM用户1016等被授权存取所提交的ACM元数据1015和/或相关联的ACM数据。以这种方式,ACM 1011可以避免所有权欺骗或其他未授权的存取。在一个实施例中,直到请求提交代理1020、ACM用户1016等提供诸如匹配的签名等的有效授权,ACM 1011才释放ACM元数据1015和/或相关联的ACM数据。

在一些实施例中,诸如下文中参考图3描述的提交管理设备1122的一个或多个提交代理1020基于相关联的ACM元数据1015来处理ACM数据以便执行受触发的提交动作。在多个实施例中,提交代理1020可以包括诸如装置驱动器、核模块、贮存管理模块1050、线程、用户空间应用等的软件和/或诸如下文中描述的控制器1004的硬件,所述硬件被配置以便解释ACM元数据1015,并且根据ACM元数据1015来处理相关联的ACM数据。在具有多个提交代理1020的实施例中,ACM元数据1015可以标识一个或多个提交代理1020,以便处理相关联的ACM数据。在多个实施例中,ACM元数据1015可以标识提交代理1020,途径是:标识要调用(invoke)的提交代理1020的程序/函数(例如程序的文件路径);包含(include)独特的标识符,所述标识符指明要使用所注册的提交代理120的哪一个;和/或指明与所提交的ACM元数据1015相关联的提交代理1020。在一些实施例中,ACM元数据1015可以是函子(functor)或包络(envelope),其包含诸如用于提交代理1020的函数指针和绑定参数(bound parameter)的信息,以便在重启恢复的情况下提交ACM数据。

在一个实施例中,主提交代理1020处理ACM元数据1015,并且将ACM元数据1015和/或ACM数据传递或传输至由ACM元数据1015标识的一个或多个副提交代理1020。在一个实施例中,主提交代理1020可以与ACM 1011、控制器1004等相集成。在一些实施例中,ACM用户1016或者其他第三方可以提供副提交代理1020,所述副提交代理用于由ACM用户1016或其他第三方所有的ACM数据,并且主提交代理1020可以与所提供的副提交代理1020协作以便处理ACM数据。在一个实施例中,用于ACM数据的一个或多个提交代理1020确保和/或保证在重启事件之后ACM数据保持对于ACM数据所有者而言可存取。如上文中参考受触发的提交动作所描述的那样,提交代理1020可以处理ACM元数据1015和相关联的ACM数据,以便在诸如故障或其他重启事件的触发事件之前、期间、和/或之后进行一个或多个受触发的提交动作。

在一个实施例中,响应于重启或其他触发事件,与ACM 1011等协作的提交代理1020可以将ACM元数据1015存储至持久的或非易失性的位置。提交代理1020可以在已知的位置上存储ACM元数据1015,可以在已知的位置上存储对ACM元数据1015的指针,可以向外部主体或数据存储(data store)提供ACM元数据1015等等,使得一旦结束了重启或其他触发事件,提交代理1020就可以处理ACM元数据1015和相关联的ACM数据。已知的位置可以包括非易失性存储器110的一个或多个预先定义的逻辑块地址或物理地址、预先定义的文件等等。在一些实施例中,ACM 1011的硬件被配置,以便在已知的位置处将ACM元数据1015和/或指针写入至ACM元数据1015。在一个实施例中,已知位置可以是临时位置,所述临时位置存储ACM数据和ACM元数据1015,直到主机1014从重启事件中恢复并且提交代理1020可以继续处理ACM数据和ACM元数据1015为止。在另一实施例中,所述位置可以是与ACM元数据1015相关联的持久位置。

在一个实施例中,在恢复期间,响应于重启事件或其他触发事件,提交代理1020可以从非易失性存储器110中、从预定义位置处等定位(locate)并且提取ACM元数据1015。提交代理1020定位与所提取的ACM元数据1015相关联的ACM数据,响应于定位和提取ACM元数据1015。在一些实施例中,提交代理1020可以以与提交代理1020定位ACM元数据1015基本上相同的方式来定位ACM数据,从预定义的位置提取ACM数据,从预定义的位置提取ACM数据的指针,从外部主体或数据存储中提取ACM数据等等。在一个实施例中,ACM元数据1015标识相关联的ACM数据,并且提交代理1020使用ACM元数据1015以便定位并且提取相关联的ACM数据。例如,提交代理1020可以使用预定义的映射,以便将ACM数据与ACM元数据1015相关联(例如,ACM数据的第N片可以被关联至ACM元数据1015的第N片,等等),ACM元数据1015可以包括用于相关联的ACM数据的指针或索引,或者在所提交的ACM元数据1015和相关联的ACM数据之间存在另一预定义的关系。在另一实施例中,外部主体可以向提交代理1020指明相关联的ACM数据位于哪里。

响应于定位和提取ACM元数据1015和相关联的ACM数据,提交代理1020解译ACM元数据1015并且基于ACM元数据1015来处理相关联的ACM数据。例如,在一个实施例中,ACM元数据1015可以标识块贮存量(volume)和LBA,在该处提交代理1020要在恢复时写入ACM数据。在另一实施例中,ACM元数据1015可以标识在文件系统中的文件内的偏移量,在该处提交代理1020要在恢复时写入ACM数据。在另一实施例中,ACM元数据1015可以标识应用特定的持久对象,在该处提交代理1020要在恢复时放置ACM数据,例如数据库记录等。在附加的实施例中,ACM元数据1015可以指明用于提交代理1020要调用以便处理ACM数据的进程,例如延迟进程调用等。在一个实施例中,其中ACM 1011公告或者呈现易失性ACM缓冲器1013作为非易失性存储器,ACM元数据1013可以标识ACM缓冲器1013,在该处,提交代理1020要在恢复时写入ACM数据。

在一些实施例中,ACM元数据1015可以标识用于对ACM元数据1015和/或相关联的ACM数据进行进一步处理的一个或多个副提交代理1020。副提交代理1020可以以与上文中描述的提交代理1020基本上相似的方式来处理ACM元数据1015和相关联的ACM数据。与ACM元数据1015的不同级别或子集等,每个提交代理1020可以处理ACM数据。在多种实施例中,ACM元数据1015可以标识副提交代理1020,途径是:标识要调用(invoke)的副提交代理1020的程序/函数(例如程序的文件路径);包含(include)副提交代理1020的计算机可执行代码;包含(include)唯一标识符,所述标识符指明要使用所注册的副提交代理1020的集合中的哪一个;和/或指明与所提交的ACM元数据1015相关联的副提交代理1020。

在一个实施例中,在先前提交代理1020已经处理了ACM元数据1015和/或ACM数据之后,副提交代理1020处理ACM元数据1015和/或ACM数据的剩余部分。在另一实施例中,ACM元数据1015可以标识与ACM 1011相独立的用于副提交代理1020的另一非易失性介质,用于即使在主机经历重启事件之后也保持ACM数据。通过响应于诸如故障或其他重启条件的触发事件而提交来自于ACM缓冲器1013中的ACM元数据1015和相关联的ACM数据,并且通过一旦触发事件已经完成或恢复就对ACM元数据1015和相关联的ACM数据进行处理,ACM 1011可以保证ACM数据的可持久性和/或由ACM元数据1015定义的受触发的提交动作的性能。

ACM 1011可通信地耦合至主机1014,所述主机1014就像上文描述的主机114那样可以包括操作系统、虚拟机、应用、复合处理机1012、中央处理单元1012(CPU)等。在图2的示例中,这些实体被一般地称作ACM用户1016。相应地,如此处使用的,ACM用户可以指代操作系统、虚拟机操作系统(例如管理程序)、应用、库、CPU抓取-执行(fetch-execute算法)、或者其他程序或处理。ACM 1011可以经由总线1040通信地耦合至主机1014(以及ACM用户1016),所述总线例如系统总线、处理的存储器交换总线等等(例如HyperTransport、QuickPath Interconnect(QPI)、PCI总线、PCI-e总线等)。在一些实施例中,总线1040包括主电源连接1030(例如可以通过总线1040来向非易失性贮存装置1102供电)。尽管此处描述的一些实施例包括诸如非易失性贮存装置1102的一些实施例的固态贮存装置,但是本公开在这一点上并不是局限性的,而是可以被调节以便使用任何合适的记录/存储器/贮存装置1102和/或记录/存储器/贮存媒介1110。

ACM 1101可以紧密耦合至被用于进行受触发的提交动作的装置。例如,ACM 1011可以被实现在和控制器1004和/或副电源1024一样的装置、外围设备、卡上或者在相同的“隔离区”内。ACM 1011与被用于实现受触发的提交动作的部件之间的紧密耦合限定“隔离区”,所述隔离区能够提供(基于工业标准或者其他度量的)可接受级别的保证:ACM 1011可以在重启条件的情况下实现受触发的自动提交动作。在图2的示例中,通过ACM 1011与自治控制器1004和副电源1024之间的紧密耦合来提供ACM 1011的隔离区(在下文中描述)。

控制器1004可以包括I/O控制器、例如网络控制器(例如网络接口控制器)、贮存控制器、专用重启条件控制等。控制器1004可以包括固件、硬件、固件和硬件的组合、等等。在图2的示例中,控制器1004包括贮存控制器,例如贮存控制器104和/或如上文所描述的非易失性贮存装置控制器。控制器1004可以被配置、以便独立于主机1014地操作。就其本身而论,即使在诸如在主机1014(和/或ACM用户1016)中的故障和/或主电源连接1030的缺失的情况下,控制器1004也可以被用于实现ACM 1011的受触发的提交动作。

可以通过主电源连接1030来对ACM 1011供电,就像上文描述的主电源连接130那样的,可以通过系统总线(总线1040)、外部电源、主机1014等来提供所述主电源连接。在一些实施例中,ACM 1011也包括和/或耦合至副电源1024。在主电源连接1030故障的情况下,副电源1024可以为ACM 1011供电。副电源1024可以能够提供至少足够的电能,用于当主电源连接1030出现了故障时,使得ACM 1011和/或控制器1004自治地实施预配置的受触发的提交动作的至少一部分。在一个实施例中,在从副电源1024中接收电能的同时,ACM 1011提交或保持至少足够的数据(例如ACM数据和ACM元数据1015),以便一旦主电源连接1030已经复原,就允许存取数据。在一些实施例中,如上文中描述的,在主电源连接1030已经复原之后,使用一个或多个提交代理1020等,ACM 1011可以进行预配置的受触发的提交动作的至少一部分。

ACM 1011可以包括易失性存储器贮存器。在图2的示例中,ACM 1011包括一个或多个自动提交缓冲器1013。使用易失性随机存取存储器(RAM),可以实现自动提交缓冲器1013。在一些实施例中,自动提交缓冲器1013可以被实施为ACM 1011的单独部件(例如在独立的RAM模块内)。替换地,可以在控制器1004内可用的嵌入式易失性存储器(例如BRAM)、复合处理机1012、FPGA、或者ACM 1011的其他部件上实现自动提交缓冲器1013。

每个自动提交缓冲器1013可以被预配置(装备)有相应的触发的提交动作。在一些实施例中,每个自动提交缓冲器1013可以包括其自身的、相应的ACM元数据1015。在一些实施例中,ACM元数据1015标识如何和/或在哪里提交在自动提交缓冲器1013上存储的数据。在一些示例中,ACM元数据1015可以包括与在自动提交缓冲器1013中的数据相关联的逻辑标识符(例如,对象标识符、逻辑块地址(LBA)、文件名称、等)。逻辑标识符可以被预定义。在一实施例中,当自动提交缓冲器1013被提交时,其中的数据可以与ACM元数据1015一起被提交(例如,所述数据可以存储在与逻辑标识符相对应的和/或与逻辑标识符相关联的物理贮存位置处)。为了便于在重启事件之后的支撑(hold-up)时间期间提交ACM数据,ACM 1011可以在诸如单页写入等的单个原子操作中写入ACM数据和ACM元数据1015。为了允许在单个原子操作中写入ACM和ACM元数据1015,ACM缓冲器1013可以被调整大小以与ACM 100所使用的非易失性贮存媒介的单个写入单元相对应。在一些实施例中,ACM元数据1015可以包括网络地址、LBA、或者用于数据的提交位置的其他标识符。

在另一实施例中,逻辑标识符可以将自动提交缓冲器1013的数据与数据的所有者进行关联,使得数据和所有者在重启事件之后维持所有者关系。例如,逻辑标识符可以标识应用、应用类型、处理ID、ACM用户1016、或者主机装置1014的其他实体,使得ACM数据被持久地关联至所标识的实体。在一个实施例中,逻辑标识符可以是现有的命名空间的成员,该现有的命名空间例如文件系统命名空间、用户命名空间、处理命名空间等。在其他实施例中,逻辑标识符可以是新的或独立的命名空间、例如ACM命名空间的成员。例如,就像典型地用在分布式系统中用于对通信实体进行标识的全局唯一标识符命名空间可以被用作用于逻辑标识符的ACM命名空间。一旦已经完成重启事件,ACM 1011可以根据用于数据的逻辑标识符来处理所提交的ACM数据。例如,ACM 1011响应于重启事件可以将ACM数据提交给与临时位置相关联的逻辑标识符,并且在重启事件之后的恢复期间可以将ACM数据写入至由另一逻辑标识符所标识的持久位置。

如上文所描述的,ACM 1011可以紧密地耦合至被用于实现受触发的提交动作的部件(例如在“隔离区”内实现ACM 1011),这确保在ACM 1011上的数据在重启条件的情况下被提交。如此处使用的那样,“紧密耦合”是指这样的配置,其中被用于实现ACM 1011的受触发的提交动作的部件位于相同的“隔离区”内,或者两个或多个不同的信任的“隔离区”内,并且被配置以便即使在诸如电能缺失、无效关机、主机1014故障等的外部故障或重启条件的情况下也进行操作。图2示出在ACM 1011、自动提交缓冲器1013、控制器1004和副电源1024之间的紧密耦合,所述控制器被配置以便独立于主机1014地操作,所述副电源被配置以便在所触发的提交动作被完成的同时向控制器1004和(包括自动提交缓冲器1013的)ACM 1011供电。紧密耦合的示例包括但不局限于:在单个印刷电路板(PCB)上、在与主机1014电通信的独立的外围设备中等包括控制器1004、副电源1024、和自动提交缓冲器1013。在其他实施例中,ACM 1011可以紧密地耦合至部件的其他的不同集合(例如冗余主机装置、冗余通信总线、冗余控制器、备选电源等)。

ACM 1011可以被主机1014和其上操作的ACM用户1016存取。使用诸如CPU加载/存储命令、DMA命令、第三方DMA命令、RMDA命令、原子检测和设置命令、可操纵的存储器指针等的存储器存取语义,可以提供对ACM 1011的存取。在一些实施例中,通过总线1040(例如使用如下文所述的PCI-e BAR)来实现对ACM 1011的存储器语义存取。

在存储器语义范例中,在主机1016上操作的ACM用户1016可以通过主机1014的存储器系统1018来存取ACM 1011。存储器系统1018可以包括存储器管理单元、虚拟存储器系统、虚拟存储器管理器、由操作系统实现的虚拟存储器子系统(或者相似的存储器地址空间)、虚拟化系统(例如管理程序)、应用等。ACM 1011的部分(例如一个或多个自动提交缓冲器1013)可以被映射至存储器系统1018,使得在所映射的存储器地址范围(ACM地址范围1021)内实现的存储器语义操作在ACM 1011上被执行。

在一些实施例中,使用资源管理主体等,贮存管理模块1050在多个ACM用户1016之间分配和/或仲裁ACM 1011的贮存容量。贮存管理模块1050的资源管理主体可以包括被提供给主机装置1014的操作系统的核模块、装置驱动、线程、用户空间应用等。在一个实施例中,资源管理主体确定ACM缓冲器1013的多少贮存容量用于分配ACM用户1016以及该分配持续多长时间。在一些实施例中,由于ACM 1011跨越重启事件地提交或保持数据,所以资源管理主体可以跨越重启事件地分配ACM缓冲器1013的贮存容量。

资源管理主体可以将不同的ACM缓冲器1013指派给诸如不同的核和/或用户控件应用的不同的ACM用户1016。资源管理主体可以将ACM缓冲器1013分配至不同的使用类型,可以将ACM缓冲器1013映射至用于降级的不同的非易失性存储器110位置等。在一个实施例中,资源管理主体可以基于通过ACM元数据1015等与ACM缓冲器1013相关联的提交代理1020来分配ACM缓冲器1013。例如,主提交代理1020可以在ACM元数据1015中维持分配映射,所述ACM元数据标识用于ACM 1011的ACM缓冲器1013的分配信息并且在一实施例中标识一个或多个副提交代理1020,并且主提交代理1020可以将ACM缓冲器1013的部分分配至副提交代理1020中的每一个。在另一实施例中,提交代理1020可以向资源管理主体登记,可以从资源管理主体中请求诸如ACM缓冲器1013的资源,等等。资源管理主体可以使用诸如存储器压力策略等的预定义的存储器管理策略,以便在ACM用户1016之间分配并且仲裁ACM缓冲器1013。

在一些实施例中,建立在存储器系统1018内的ACM地址范围1021和ACM 1011之间的关联,这可以包括预配置(装备)自动提交缓冲器1013与受触发的提交动作之间的对应。如上文中所描述的,该预配置可以包括将自动提交缓冲器1013与逻辑标识符或可以存储在缓冲器1013的ACM元数据1015内的其他的元数据进行关联。如上文中所描述的,ACM 1011可以被配置以便在重启条件的情况下将缓冲器数据提交至指定的逻辑标识符,或者进行与ACM元数据1015相一致的其他处理。

使用任何合适的地址和/或装置关联机制,可以实现对ACM 1011的存储器语义存取。在一些实施例中,通过将ACM 1011的一个或多个自动提交缓冲器1013映射至主机1014的存储器系统1018,来实现存储器语义存取。在一些实施例中,可以通过使用总线1040来实现该映射。例如,总线1040可以包括PCI-e(或者相似的)通信总线,并且所述映射可以包括将在总线1040上的ACM 1011的自动提交缓冲器1013的基地址寄存器(BAR)与在存储器系统1018内的ACM地址范围进行关联(例如主机1014将BAR映射至存储器系统1018内)。

可以由ACM用户1016(例如由操作系统的虚拟存储器系统等)通过诸如贮存管理层(SML)1050的贮存层的API来实现该关联。贮存管理模块1050可以被配置以便向ACM用户1016提供对自动提交存储器1011的存取。贮存管理层1050可以包括驱动、核级别的应用、用户级别的应用、库等等。SML的一个示例是美国犹他州盐湖城的Fusion-io公司的Virtual Storage贮存管理模块1050可以提供SML API 1019,其尤其包括这样的API,该API用于:将自动提交存储器1011的部分映射至主机1014的存储器系统1018,将自动提交存储器1011的部分从主机1014的存储器系统1018中取消映射,转储ACM缓冲器1013,使用持久数据结构模块1009,存取并且管理持久数据结构,等等。贮存管理模块1050可以被配置以便维持元数据1051,所述元数据可以包含转送索引(forward index)1053,所述转送索引包括在逻辑地址空间的逻辑标识符和在自动提交存储器1011和/或持久贮存媒介上的物理贮存位置之间的关联。在一些实施例中,ACM 1011可以与一个或多个虚拟范围相关联,所述虚拟范围映射至BAR(或者其他寻址机制)的不同地址范围。虚拟范围可以被不同的ACM用户1016存取(例如映射)。一旦通过SML API 1019调用的方式请求,可以允许将PCI-e ACM BAR映射或显露至主机存储器1018。

SML API 1019可以包括用于将自动提交缓冲器1013映射至存储器系统1018中的接口。在一些实施例中,SML API 1019可以扩展诸如malloc、calloc等的现有的存储器管理接口,以便将自动提交缓冲器1013映射至ACM用户应用1016的虚拟存储器范围(例如,通过SML API 1019的malloc调用可以将一个或多个自动提交缓冲器1013映射至存储器系统1018)。替换地或者此外,SML API 1019可以包括诸如“ACM_alloc”、“ACM_free”等的一个或多个明确的(explicit)自动提交映射函数。映射自动提交缓冲器1013还可以包括:配置主机的存储器系统1018,以便确保直接在自动提交缓冲器1013上实现存储器操作(例如,避免在所映射的ACM地址范围1021内的缓存存储器操作)。

在主机存储器系统1018内的ACM地址范围1021和ACM 1011之间的关联可以是这样的,使得直接地在ACM 1011上实现在所映射的ACM地址范围1021内进行的存储器语义操作(而不会在典型的写入提交操作、附加层的系统调用等中干扰系统RAM或者其他的中间存储器)。例如,在ACM地址范围1021内实现的存储器语义写入操作可以使得数据被写入至(在一个或多个自动提交缓冲器1013上的)ACM 1011。相应地,在一些实施例中,映射ACM地址范围1021可以包括:禁止在ACM地址范围1021内的存储器操作的缓存,使得在ACM 1011上进行存储器操作,但是并不被主机缓存(例如缓存在CPU缓存器中、主机易失性存储器中、等等)。禁止在ACM地址范围1021内的缓存可以包括:当ACM范围1021被定义时,设置与ACM范围1021相关联的“不可缓存”标志属性。

如上所描述的,建立在主机存储器系统1018和ACM 1011之间的关联可以包括:“装备”ACM 1011以便实现预先确定的受触发的提交动作。这种装备可以包括:为ACM 1011提供逻辑标识符(例如逻辑块地址、文件名称、网络地址、条带(stripe)或镜像样式等)。ACM 1011可以使用逻辑标识符以便装备受触发的提交动作。例如,使用逻辑标识符,ACM 1011可以被触发以便将数据提交至持久贮存介质(例如数据可以被存储在与逻辑标识符相对应的物理地址处、和/或在基于日志的数据结构中,逻辑标识符可以与数据一起被保存)。装备ACM 1011允许主机1014将随后在ACM地址范围1021内(和在ACM 1011上)进行的操作视作被“瞬间提交”,这使能具有瞬间提交语义的存储器语义写入粒度(例如字节级别的操作)和速度。

诸如用于CPU的“存储”操作的存储器语义写入典型地是同步的操作,使得CPU在处理随后的操作之前完成该操作。相应地,在ACM存储器范围1021内进行的存储器语义写入操作可以被视作“瞬时提交”,不再需要在写入-提交操作中的相应的“提交”操作,可以显著地提升ACM用户1016的被写入-提交等待时间所影响的性能。在ACM存储器范围1021内进行的存储器语义操作可以是同步的。相应地,ACM 1011可以被配置以便避免阻止存储器语义操作(例如等待来自诸如总线1040等的其他层的确认等等)。此外,在ACM地址范围1021和ACM 1011之间的关联允许存储器语义操作绕过包含在写入-提交操作中的典型的系统调用(例如,独立的写入和提交命令、以及其相应的系统调用)。

可以通过使用任何合适的数据传输机制来实现在主机1014和ACM 1011之间的数据传输,所述数据传输机制包括但不局限于:主机1014通过总线1040来进行与ACM 1011的处理器IO操作(PIO);ACM 1011(或者其他装置)提供一个或多个DMA引擎或主体(数据搬运器)以便在主机1014和ACM 1011之间传输数据;主机1014进行处理器缓存写入/转储操作;等等。

如上文所描述的,ACM可以被配置以便响应于检测到特定条件(例如重启或故障条件)、自动地进行预配置的受触发的提交动作。在一些实施例中,受触发的提交动作可以包括将ACM 1014上所存储的数据提交至持久贮存媒介。相应地,在一些实施例中,诸如上文描述的ACM 1011的ACM可以包括持久贮存媒介。图3是系统1100的方块图,其描述持久数据结构模块1009和被配置以便实施受触发的提交模块的ACM 1111的实施例,所述受触发的提交动作可以包括提交数据结构至持久的、固态的和/或非易失性的贮存器。

图3示例的ACM 1111可以紧密地耦合至非易失性贮存装置1102,所述非易失性贮存装置包括控制器1104。控制器1104可以包括可如上文描述的那样操作的写入数据管线(pipeline)1106和读取数据管线1108。非易失性贮存装置1102能够可以在诸如固态贮存媒介的非易失性存储器1110上保持数据。

提交管理设备1122被用于响应于诸如主电源连接缺失或者其他预先确定的触发事件的触发事件、来提交数据至非易失性存储器1110。相应地,提交管理设备1122可以包括和/或被配置以便执行如上描述的自动提交存储器1011的功能。响应于重启条件(或者来自主机1014和/或ACM用户1016的开启(on)请求)并且根据ACM元数据1015,提交管理设备1122还可以被配置以便将ACM 1111上的数据(例如自动提交缓冲器1013上的内容)提交至非易失性存储器1110。提交管理设备1122是提交代理(agent)1020的一个实施例。

ACM 1111上的数据可以被提交至与诸如逻辑标识符的ACM元数据1015相一致的持久贮存器1110。ACM 1111可以将数据提交至用于在重启事件之后的进一步处理的临时位置,可以将数据提交至最终的预期位置等等,如上文中描述的那样。如果非易失性存储器1110是顺序贮存装置,那么,提交数据可以包括与自动提交缓冲器1013的内容一起存储逻辑标识符或其他ACM元数据1015(例如在包(packet)或容器头部(container header)中)。如果非易失性存储器1110包括硬盘,所述硬盘具有在逻辑标识符和物理地址之间的1:1映射,那么,自动提交缓冲器1013的内容可以被提交至通过逻辑标识符所映射至的贮存位置。由于与数据相关联的逻辑标识符或其他ACM元数据1015被预配置(例如装备),所以ACM 1111独立于主机1014地实现受触发的提交动作。副电源1024向ACM 111的易失性自动提交缓冲器1013供电,直到完成(和/或确定完成)受触发的提交动作为止,或者直到受触发的提交动作被进行至一点处,在该点处ACM 1111可以在重启事件之后的恢复期间完成受触发的提交动作。

在一些实施例中,ACM 111以保持在(每个ACM元数据1015的)数据和其相应的逻辑标识符之间的关联的方式来提交数据。如果非易失性存储器1110包括硬盘,那么,(例如使用逻辑标识符用于物理地址转换)数据可以被提交至与逻辑标识符相对应的、可能位于隔离区1301之外的贮存位置。在其中非易失性存储器1110包括诸如固态贮存媒介的顺序媒介的其他实施例中,数据可以顺序地和/或以基于日志的格式保存,就像上文中描述的和/或在公开号No.61/373271、题目为“APPARATUS,SYSTEM,AND METHOD FOR CACHING DATA”并且在2010年8月12日提交的、在此通过引用整体合并于此的美国临时专利申请中所描述的那样。顺序贮存操作可以包括:与(如通过ACM元数据1015指示的)相应的逻辑标识符一起存储自动提交缓冲器1013的内容。在一个实施例中,根据预先确定的样式,自动提交缓冲器1013的数据和相应的逻辑标识符被一起存储在媒介上。在一些实施例中,逻辑标识符被存储在自动提交缓冲器1013的内容之前。逻辑标识符可以被包含在具有数据的包的头部中,或者以其他的顺序和/或基于日志的格式。在数据和逻辑标识符之间的关联可以允许如上所述地重建数据索引。

如上文所描述的,ACM 1011的自动提交缓冲器1013可以被映射至主机1014的存储器系统1018,这使得ACM用户1016可以使用存储器存取语义,来存取这些缓冲器1013。在一些实施例中,在逻辑标识符和自动提交缓冲器1013之间的映射可以调整(leverage)主机1014的虚拟存储器系统。

例如,在存储器系统1018内的地址范围可以与“存储器映射文件”相关联。如上文所描述的,存储器映射文件是虚拟的存储器抽象,其中文件、文件的部分、或块装置被映射至存储器系统1018地址空间,用于在非易失性贮存设备1102的数据上的更有效率的存储器语义操作。使用相似的抽象,自动提交缓冲器1013可以被映射至主机存储器系统1018内。因此,可以通过存储器映射文件来表达ACM存储器范围1021。后备文件必须被存储在隔离区1301(参见下文中图5)内的或在也由隔离区1301保护的另一个网络附接的非易失性贮存装置1102内的非易失性存储器1110上。自动提交缓冲器1013可以对应于文件的仅仅一部分(文件自身可以非常大,超过自动提交缓冲器1013和/或非易失性存储器1110的容量)。当文件的一部分被映射至自动提交缓冲器1013时,ACM用户1016(或者其他实体)可以标识所需的在文件内的偏移量和在文件内的将以ACM特性操作的(例如具有ACM语义)块的范围。该偏移量将具有预定义的逻辑标识符,并且逻辑标识符和范围可以被用于触发提交在文件内所映射的自动提交缓冲器。替换地,块(或块的范围)在文件内的独立的偏移量可以用作用于提交被映射至文件的自动提交缓冲器1013的触发。例如,任何时候在独立的偏移量或块范围中的数据上进行的存储器操作(加载、存储、存储到存储单元(poke)等)都可以带来触发事件,所述触发事件导致提交被映射至文件的自动提交缓冲器1013。

但是,(例如由于文件部分的改变、尺寸改变等,)底层的逻辑标识符可以改变。当改变发生时,贮存管理模块1050(通过SML API 1019、ACM用户1016、持久数据结构模块1009或者其他实体)可以更新相应的自动提交缓冲器1013的ACM元数据1015。在一些实施例中,贮存管理模块1050可以被配置以便询问(query)主机1014(操作系统,管理程序或者其他应用)有关与自动提交缓冲器1013相关联的文件的逻辑标识符的更新。所述询问可以由SML API 1019初始化,和/或被提供作为到主机1014内的钩子(hook)(回调机制)。当ACM用户1010不在需要自动提交缓冲器1013,贮存管理模块1050可以如上文所述地取消分配缓冲器1013。取消分配还可以包括告知主机1014不再需要对逻辑标识符的更新。

在一些实施例中,可以跨越多个贮存装置地映射文件(例如,贮存装置可以被形成为RAID组,可以包括虚拟贮存装置,或者等等)。在自动提交缓冲器1013和文件之间的关联可以被更新,以便反映文件映射。这允许自动提交缓冲器1013将数据提交至合适的贮存装置。如上所描述的那样,响应于底层文件映射和/或分割的改变,可以更新自动提交缓冲器1013的ACM元数据1015。替换地,在自动提交缓冲器1013使用中时,该文件可以被“锁定”至特定的映射或分割。例如,如果需要文件的再映射/再分割,那么相应的自动提交缓冲器1013可以将数据提交至文件,并且然后在新的映射/分割方案的情况下与文件进行再关联。SML API 1019可以包括接口和/或命令,用于根据文件的改变来使用贮存管理模块1050以便锁定文件、释放文件和/或更新ACM元数据1015。

提交数据至固态的、非易失性贮存器1110可以包括:贮存控制器1104存取来自于ACM 1111的自动提交缓冲器1013的数据,将数据与相应的逻辑标识符进行关联(例如对数据进行标记),并且将标记的数据注入到写入数据管线1106中,如上文所述的那样。在一些实施例中,为了确保存在能够保持ACM数据的页编程命令,贮存控制器1104在操作期间维持两个或多个未决的页编程。在如上文那样,在写入功率缺失标识符(断电填入样式)之前,ACM数据可以被提交至非易失性存储器1110。

图4描述系统1200的一个实施例,所述系统1200包括持久数据结构模块1009和多个自动提交存储器1011。在图4的示例中,通过主机1014实现的存储器语义存取可以被存储在包括1011A和1011B内的多个ACM上。在一些实施例中,主机数据可以在ACM 1011A和1011B之间被镜像。可以使用多播总线1040,实现所述镜像。替换地或者此外,ACM中的一个(ACM 1011A)可以被配置以便向ACM 1011B转播数据。ACM 1011A和ACM 1011B可以彼此互为局部(例如位于相同的局部总线上)。替换地,ACM 1011A和1011B可以位于不同的系统上,并且可以通过支持移除数据存取的诸如Infiniband、远程PCI总线、RDMA等的总线来通信地耦合。

在一些实施例中,ACM 1011A和1011B可以实现条带化方案(striping scheme)(例如RAID方案)。在这种情况下,主机数据的不同部分可以被发送至不同的ACM 1011A和/或ACM 1011B。诸如由贮存管理模块1050和/或操作系统1018实现的量管理器的驱动器级别的软件可以按照条带样式将主机数据映射至合适的ACM。

在一些实施例中,可以根据特定的贮存条带样式来调节由ACM提供的存储器存取语义。例如,如果数据被从ACM 1011A映射至ACM 1011B,那么直到ACM 1011A验证数据已发送至ACM 1011B,才可以完成存储器语义写入(和/或才可以返回确认)(在“瞬间提交”语义的情况下)。当以条带样式使用ACM时,可以进行相似的调节(例如,直到完成用于特定操作的条带样式,存储器语义写入才可以被返回和/或确认)。例如,在写入操作上的复制中,ACM 1011A可以存储自动提交缓冲器的数据,并且然后使得数据被复制至ACM 1011B。直到数据被复制到ACM 1011B,ACM 1011A才可以返回对写入操作的确认(或者允许数据被读取)。

可以在高利用率配置中使用镜像的ACM装置1011A和1011B的使用。例如,可以在独立的主机计算装置中实现ACM装置1011A和1011B。如上所述(例如使用PCI-e存取)对装置1011A和1011B的存储器语义存取在装置之间被镜像。所述装置可以被配置以便以高利用率模式操作,使得可以不需要装置代理(proxing)。相应地,触发操作(以及其他存储器语义存取)可以跨越装置1011A和1011B两者地被镜像,但是装置1011A和1011B可以不必在继续之前等待来自另一方的“确认”,这从写入-提交等待时间路径中移除该另一装置。

图5是提交管理设备1122的一个实施例1300的方块图。提交管理设备1122可以紧密耦合至(例如在隔离区1301内)自动提交存储器1011、非易失性贮存控制器1304、非易失性贮存媒介1310和/或副电源1324,其中的一个或多个可以与持久数据结构模块1009进行通信和/或进行协作以便提供持久数据结构。紧密耦合可以包括将这些部件132、1011、1304、1310和/或1324实现在相同的内核上、在相同的外围装置上、在相同的卡(例如相同的PCB)上、在预定义的隔离区内等等。紧密耦合可以确保ACM缓冲器1013的受触发的提交动作在重启条件的情况下被提交。

提交管理设备1122包括监视模块1310,其可以被配置以便检测诸如电能缺失等的重启条件。监视模块1310可以被配置以便感知诸如重启条件(例如关机、重启、电源故障、通信故障、主机或应用故障等)的触发事件,并且作为响应地启动提交模块1320以便启动装置1122的提交缺失模式(故障缺失模式),和/或触发诸如模块1312、1314、1316、1317和/或1318的其他模块的操作。提交模块1320包括标识模块1312、终止模块1314、损坏模块1316、和完成模块1318,它们可以如上文所描述的那样操作。

标识模块1312还可以被配置以便对针对ACM 1011的每个ACM缓冲器1013要进行的受触发的提交动作进行标识。如上文所描述的,标识模块1312可以基于相对重要性来对操作进行优先级排序(prioritize),与未确认的操作相比较,确认的操作被给予更高的优先级。由于受支持的“瞬间提交”语义,所以,被装备以便提交的自动提交缓冲器1013的内容被指派高优先级。在一些实施例中,与写入数据管线1306的确认内容相比较,ACM受触发的提交动作可以被给予较高的优先级。替换地,受装备的自动提交缓冲器1013的内容可以被指派“次最高”优先级。优先级指派可以是用户(通过API、IO控制(IOCTL)等)可配置的。

终止模块1314终止非必要(non-essential)操作以便允许“必要的”继续进行,如上文所描述的那样。终止模块1314可以被配置以便支撑ACM 1011的被“装备”以便被提交的部分(例如,被装备的自动提交缓冲器),并且可以终止对自动提交存储器1011的未装备(未使用)的部分的供电。终止模块1314还可以被配置以便当这些缓冲器的内容被提交时终止对ACM 1011的部分的供电。

如上文所述,损坏模块1316标识在写入数据管线1306中的损坏的(或潜在损坏的)数据。模块1316还可以被配置以便标识损坏的ACM数据1011(在电能干扰或其他重启条件期间被写入至ACM 1011的数据)。损坏模块1316被配置以便避免在ACM 1011上的数据被提交至受触发的提交动作。

ACM模块1317被配置以便存取在自动提交存储器1011中的被装备的自动提交缓冲器,标识与其相关联的ACM元数据1015(例如,通过ACM元数据1015来为数据标记相应的逻辑标识符),并且将数据(和元数据)注入非易失性贮存控制器1304的写入数据管线中。在一些实施例中,自动提交缓冲器1013的逻辑标识符(或其他ACM元数据1015)可以被存储在缓冲器1013自身中。在这种情况下,自动提交缓冲器1013的内容可以被直接流处理至顺序的和/或基于日志的贮存装置,而无需首先对数据进行标识和/或标记。ACM模块1317可以在当前在写入数据管线1306中的数据之前或之后注入数据。在一些实施例中,从ACM 1011中提交的数据被用于(在移除潜在的损坏数据之后)“填写”写入数据管线1306的写入缓冲器的剩余部分。如果写入缓冲器的剩余容量是不足的,那么写入缓冲器被写入至非易失性贮存器1310,并且用剩余的ACM数据填入下一个写入缓冲器。

如上所描述的,在一些实施例中,非易失性贮存控制器1304可以维持被装备的写入操作(逻辑页写入),以便在电能缺失的情况下存储写入数据管线1306的内容。当与ACM 1011一起被使用时,可以维持两个(或多个)被装备的写入操作以便确保两个写入数据管线1306的内容,并且ACM 1011的所有的被装备的缓冲器1013可以在重启条件的情况下被提交。由于当发生触发事件时在写入缓冲器内的逻辑页可能被部分地填充,所以写入缓冲器可以被调整大小以便比保持在ACM 1011的所有ACM缓冲器1013内存储的所有数据的全部并且保持已被确认为被保持的在写入数据管线中的数据的容量、保持至少再一逻辑页的数据。以这种方式,在写入缓冲器中将存在足够的容量,以便响应于触发事件来完成ACM 1011的持久性。相应地,根据ACM 1011可以提交的数据的数量,可以对自动提交缓冲器1013调整大小。一旦满足该阈值,贮存管理模块1050可以拒绝使用ACM缓冲器1013的请求,直到更多的变得可用为止。

完成模块1318被配置,以便不管特定的缓冲器、包和/或页是否完全填入,都对写入数据管线进行转储(flush)。完成模块1318被配置以便在ACM 1011上的数据(如果有的话)已经被注入至写入数据管线1306中之后进行转储(并且插入相关的填补(padding)数据)。完成模块1318还可以被配置以便将完成指示符诸如至写入数据管线中,所述完成指示符可以被用于表明发生了重启条件(例如重启条件填入样式)。在注入来自ACM 1011的触发数据之后,该填充样式可以被包含在写入数据管线1306中。

如上描述的,副电源1324可以被配置以便提供足够的电能,用于将ACM 1011的内容以及数据存储在写入数据管线1306中。存储该数据可以包括一个或多个写入操作(例如页编程操作),在所述操作中数据被持久地存储在非易失性贮存媒介1310上。在写入操作失败的情况下,可以在另一贮存位置处尝试另一写入操作。该尝试可以继续进行,直到数据被成功地保持在非易失性贮存媒介1310上为止。副电源1324可以被配置以便提供足够的电能,用于完成多个这样的页编程操作中的每一个。相应地,副电源1324可以被配置以便提供足够的电能,以便完成如存储ACM 1011的数据和/或写入数据管线1306所需的双重(或多个)页编程写入操作。

图6是描述主机计算装置1014的方块图1500,所述主机计算装置具有持久数据结构模块1009,所述持久数据结构模块1009使用存储器存取语义来存取ACM 1011,提供与文件系统模块1558和/或贮存管理模块1050(例如,如上文描述的贮存管理模块1050)协作的持久数据结构。主机计算装置1014可以包括复合处理机/CPU 1012,所述复合处理机/CPU可以包括、但不局限于:一个或多个通用处理器、专用处理器、可配置处理器(FPGA)、处理器核心、处理器的组合、处理器缓存、处理器缓存层次结构等。在一个实施例中,复合处理机1012包括处理器缓存,并且处理器缓存可以包括写入组合缓冲器、L1处理器缓存、L2处理器缓存、L3处理器缓存、处理器缓存层次结构、和其他类型处理器缓存中的一个或多个。一个或多个ACM用户1016(例如操作系统、应用等)在主机1014上操作。

主机1014可以通过总线1040通信地耦合至ACM 1011,所述总线可以包括PCI-e等。通过将自动提交缓冲器1013映射至主机1014,ACM 1011的部分对于主机1014而言变得可存取。在一些实施例中,映射包括:将在主机存储器系统1018内的地址范围与ACM 1011的自动提交缓冲器1013进行关联。使用SML API 1019和/或在主机1014上可用的贮存管理模块1050,实现这些关联。

贮存管理模块1050可以包括库且/或提供接口(例如SML API 1019),以便实现如上文所描述的存储器存取语义。API 1019可以被用于使用存储器存取语义,通过存储器语义存取模块1522来对ACM 1011进行存取。可以通过块装置接口1520来提供诸如对非易失性贮存器1502的存取的其他类型的存取。

贮存管理模块1050可以被配置以便(通过SML API 1019)将ACM 1011的自动提交缓冲器1013存储器映射至存储器系统1018。存储器映射可以使用存储器系统1018的虚拟存储器抽象。例如,可以使用存储器映射文件抽象,实现存储器映射。在该示例中,操作系统(或应用)1016指明要被映射至存储器系统1018中的文件。该文件与逻辑标识符(LID)1025(例如逻辑块地址)相关联,所述逻辑标识符可以由文件系统、操作系统1016等来维护。

存储器映射文件可以与ACM 1013的自动提交缓冲器1013相关联。该关联可以由贮存管理模块1050使用总线1040被实现。贮存管理模块1050将(在存储器系统1018中的)存储器映射文件的地址范围与在ACM 1011上的自动提交缓冲器1013的装置地址相关联。该关联可以包括将PCI-e BAR映射至存储器系统1018中。在图6的示例中,在存储器系统1018中的ACM地址范围1021被关联至自动提交缓冲器1013。

如上文描述的,提供对ACM 1011存储器的存储器存取语义可以包括:“装备”ACM 1011以便在故障或者其他重启的事件中提交其上所存储的数据。预配置的装备确保在重启的事件中在ACM 1011上存储的数据将被提交至合适的逻辑标识符。触发条件的预配置使得应用能够使用“瞬间提交”存储器存取语义,对自动提交缓冲器1013进行存取。可以从操作系统、存储器系统1018(例如虚拟存储其系统)等之中获取被用于装备自动提交缓冲器的逻辑标识符。

贮存管理模块1050可以被配置以便为自动提交缓冲器1013(例如自动地、通过回调、和/或通过SML API 1019)装备逻辑标识符。每个自动提交缓冲器1013可以被装备以便将数据提交至不同的逻辑标识符(不同的LBA、持久标识符等),这可以允许ACM 1011提供对多个不同的、并发的ACM用户1016的存储器语义存取。在一些实施例中,装备自动提交缓冲器1013包括:使用逻辑标识符来设置ACM元数据1015。在图6的示例中,ACM地址范围1021与逻辑标识符1025相关联,并且相关联的自动提交缓冲器的ACM元数据1015被装备有相应的逻辑标识符1025。

贮存管理模块1050可以使用I/O控制(IOCTL)命令,对自动提交缓冲器进行装备,所述I/O控制命令包括ACM地址范围1021、逻辑标识符1025和/或和哪个自动提交缓冲器1015要被装备有关的指示符。贮存管理模块1050(通过SML API 1019)可以提供用于对自动提交缓冲器1013取消装备(disarm)或“取消附接(detach)”的接口。取消装备命令可以使得自动提交缓冲器1013的内容如上文所述那样地被提交(例如提交至非易失性贮存装置1502)。取消附接还可以包括“取消装备”自动提交缓冲器1013(例如清除ACM元数据1015)。贮存管理模块1050可以被配置以便跟踪在存储器系统1018内的地址范围和自动提交缓冲器1013之间的映射,使得自动地进行取消附接命令。

替换地或此外,贮存管理模块1050可以被集成至主机1014的操作系统(或虚拟操作系统,例如管理程序)内。这可以允许自动提交缓冲器1013被虚拟存储器需求分页系统使用。操作系统可以(通过SML API 1019或其他集成技术)映射/装备自动提交缓冲器以便ACM用户1016使用。当被ACM用户1016和/或其内部需求分页(paging)系统请求时,操作系统可以发起提交命令。相应地,操作系统可以使用ACM 1011作为另一个、一般可用的虚拟存储器资源。

一旦ACM用户1016已经将ACM地址范围1021映射至自动提交缓冲器1013并且已经装备了缓冲器1013,ACM用户1016就可以使用存储器存取语义,对资源进行存取,并且一旦存储器存取已经完成,就可以将存储器存取视为“逻辑上”被提交。ACM用户1016可以将对ACM地址范围1021的存储器语义存取看做被“瞬间”提交,原因在于,ACM 1011被配置以便即使经历重启条件也提交自动提交缓冲器的内容(至逻辑标识符1025)。相应地,ACM用户1016可以不必进行独立的写入和提交命令(例如单个存储器语义写入足以实施写入-提交)。此外,在自动提交缓冲器1013和此处公开的ACM 1011之间的映射消除了由典型地向写入-提交路径内引入等待时间的函数调用、系统调用、和(如果ACM用户1016操作在虚拟机内)甚至管理程序所使得的开销。因此,ACM用户1016的写入-提交延迟时间可以被减少至存取ACM 1011自身所需的时间。

如上文所描述的,在一些实施例中,主机1014可以将一个或多个ACM缓冲器1013映射至由主机装置1014的CPU、核等可寻址的物理存储器地址空间的地址范围,例如作为直接附加的物理存储器的存储器系统1018,作为通过PCI-e总线的MMIO可寻址物理存储器,或者被映射作为物理存储器的一页或多页。主机1014还可以将物理上映射的ACM缓冲器的至少一部分映射至虚拟存储器地址空间,所述虚拟存储器地址空间作为虚拟存储器对用户控件处理等而言是可存取的。主机1014可以将物理上映射的ACM缓冲器1013的整体容量映射至虚拟存储器地址空间,将物理上映射的ACM缓冲器1013的一部分映射至虚拟存储器地址空间,等等。

以相似的方式,主机1014可以包括虚拟机管理程序、主机操作系统等,所述虚拟机管理程序、主机操作系统等将物理上映射的ACM缓冲器1013映射至用于虚拟机或客户机操作系统的地址空间。通过虚拟机管理程序或主机操作系统使用ACM缓冲器1013,欺骗物理存储器,物理上映射的ACM缓冲器1013可以对于虚拟机或客户机操作系统而言看起来是物理上映射的存储器页。如上所述,资源管理代理可以在多个虚拟机、客户机操作系统等之间分配/仲裁ACM缓冲器1013的存储容量。

在一些实施例中,因为虚拟机、客户机操作系统等检测物理上映射的ACM缓冲器1013,仿佛他们只不过是物理上映射的存储器,所以,虚拟机可以将ACM缓冲器1013子分配(sub-allocate)/仲裁至用于客户机处理等的一个或多个虚拟地址。这在一个实施例中允许在客户机操作系统内的处理直接地改变ACM数据和/或ACM元数据1015,而无需进行客户机操作系统调用,无需向管理程序或主机操作系统等进行请求。

在另一实施例中,替代用于虚拟机和/或客户机操作系统的欺骗物理存储器,主机装置1014的虚拟机管理程序、主机操作系统等可以使用半虚拟化技术。例如,虚拟机和/或客户机操作系统可以意识到虚拟机管理程序或主机操作系统,并且可以直接与其一起工作以分配/仲裁ACM缓冲器1013等。当在其中一个或多个ACM用户1016在由管理程序维持的虚拟机内部操作的虚拟机环境中使用ACM 1011时,管理程序可以被配置以便向在虚拟机内部操作的ACM用户1016提供对SML API 1019和/或贮存管理模块1050的存取。

如上文所述,管理程序可以存取SML API 1019,以便将逻辑标识符与ACM 1011的自动提交缓冲器1013进行关联。然后,管理程序可以向ACM用户1016提供一个或多个被装备的自动提交缓冲器1013(例如,通过将在虚拟机存储器系统内的ACM地址范围1021映射至一个或多个自动提交缓冲器1013)。然后ACM用户1016可以使用存储器存取语义(例如高效的写入-提交操作),对ACM 1011进行存取,而不会招致尤其由于管理程序或其他系统调用产生的开销。管理程序还可以被配置以便维持ACM地址范围1021与自动提交缓冲器1013相关联,直到明确地被ACM用户1016释放为止(例如使用期间,保持映射不变)。在一些实施例中,半(para-)虚拟化和协作可以在虚拟机环境中提升ACM 1011的效率。

在一些实施例中,ACM用户1016可以被调节以便借助由ACM 1013提供的“瞬间提交”存储器存取语义来操作。例如,既然被装备的自动提交缓冲器1013被触发以便在重启的事件中提交(无需明确的提交命令),那么,ACM用户1016对ACM 1011进行存储器存取的顺序可能成为要考虑的事。ACM用户1016可以利用存储器屏障、编译器标志等以便确保存储器存取操作的合适排序。

例如,可能发生在写入之前读取的危险,其中ACM用户1016尝试通过块装置接口1520(经由存储器语义接口1522)读取在ACM 1011上存储的数据。在一些实施例中,贮存管理模块1050可以维持元数据跟踪在存储器系统1018内的逻辑标识符和/或地址范围和自动提交缓冲器1013之间的关联。当ACM用户1016(或者其他实体)尝试对被映射至自动提交缓冲器1013的逻辑标识符(例如通过块装置接口1520)进行存取时,贮存管理模块1050将请求(通过存储器语义接口1522)导引至ACM 1011,避免在写入之前读取的危险。

贮存管理模块1050可以被配置以便提供用于获取ACM 1011的一致性状态(例如屏障(barrier)、快照(snapshot)或逻辑复制)的“一致性”机制。使用由贮存管理模块1050维持的元数据,可以实现一致性机制,所述贮存管理模块如上文所述的那样可以跟踪在ACM 1011内的受触发的自动提交缓冲器1013。一致性机制可以包括:贮存管理模块1050提交所有受触发的自动提交缓冲器1013的内容,使得持久贮存器的状态被维持(例如将自动提交缓冲器1013的内容存储在非易失性贮存器1502、或者其他持久贮存器上)。

如上文所描述的那样,ACM用户1016可以使用存储器存取语义、(在重启、故障、电能缺失等的事件中)如果需要就提交这些操作的保证下、以RAM粒度、对ACM 1011进行存取。这尤其通过在主机1014的存储器系统1018和相应的自动提交缓冲器1013之间的映射来实现;在被映射至自动提交缓冲器1013的ACM存储器范围1021内实现的存储器语义操作被直接在缓冲器1013上实现。如上文所描述的那样,在主机1041和ACM 1011之间的数据传输可以使用任何数据传输机制被实现,所述数据传输机制包括但是不局限于:主机1014借助ACM 1011通过总线1040(例如MMIO、PMIO等)进行处理器IO操作(PIO);ACM 1011(或者其他装置)提供一个或多个DMA引擎或主体(数据搬运器(mover)),以便在主机1014和ACM 1011之间传输数据;主机1014进行处理器缓存写入/转储操作等。在总线1040上传输数据可以包括:发起总线“写入”操作,其后是“读取”操作。在总线1040(例如PCI总线)并不提供明确的写入确认的情况下,可能要求随后的“读取”。

在一些实施例中,相比于大量的小事务,ACM用户可能希望批量地将数据传输至ACM 1011。可以使用任何合适的批量传输机制,实现批量传输。可以根据总线1040的特性来判定批量传输机制。例如,在包括PCI-e总线1040的实施例中,可以使用批量注册存储CPU指令(bulk register store CPU instructions),实现批量传输操作。

相似地,计划用于ACM 1011的特定数据可以被缓存在复合处理机1012的处理器缓存器内。使用诸如下文描述的串行化指令的CPU缓存转储指令等,被缓存在处理器缓存器内的数据可以被明确地转储至ACM 1011(至特定的自动提交缓冲器1013)。

上文描述的DMA引擎也可以用于执行在ACM用户1016和ACM 1011之间的数据传输。在一些实施例中,ACM 1011可以实现一个或多个DMA引擎,所述一个或多个DMA引擎可以由ACM用户1016使用贮存管理模块1050(通过SML API 1019)分配和/或存取。DMA引擎可以包括用于在局部的、系统总线上传输数据的局部DMA传输引擎以及用于使用网络总线、网络接口等传输数据的RDMA传输引擎。

在一些实施例中,ACM 1011可以被用在缓存应用中。例如,非易失性贮存装置1502可以被用作缓存,用于诸如硬盘、网络附接的贮存器(未示出)等的其他后备存储。通过配置ACM 1011的一个或多个自动提交缓冲器1013以便将数据提交至在非易失性贮存器1502内的合适的逻辑标识符,一个或多个ACM 1011自动提交缓冲器1013可以被用作非易失性贮存器1502缓存(回写缓存)的前端。(例如通过将缓冲器1013映射至主机1014的存储器系统1018)受触发的缓冲器1013对于ACM用户1016而言是可存取的,如上文描述的那样。重启条件使得缓冲器1013的内容被提交至非易失性贮存器1502缓存。当重启条件被消除时,(由自动提交缓冲器1013在重启条件下提交的)在非易失性贮存器1502中的缓存数据将被视作在写入缓存中“肮脏”、并且可用于使用和/或迁移至后备存储。ACM 1011用作缓存前端,可以提升性能和/或降低在缓存装置上的耗损。

在一些实施例中,通过主机1011的操作系统、虚拟存储器系统、和/或一个或多个CPU,ACM 1011的自动提交缓冲器1013可以被调整为存储器回写(write-back)缓存。在作为CPU回写缓存的一部分的自动提交缓冲器1013中所缓存的数据可以被装备以便作为组进行提交。当提交时,自动提交缓冲器1013可以提交数据和相关联的缓存标志二者。在一些实施例中,回写缓存自动提交缓冲器1013可以被装备有ACM地址(或者被装备有预先确定的回写缓存地址)。当数据被复原时,可以从日志或其他数据中确定诸如LBA等的逻辑标识符信息。

在一些实施例中,贮存管理模块1050可以包括库和/或发布与特定组的ACM用户1016相适应的API。例如,贮存管理模块1050可以提供持久数据结构模块1009或者与持久数据结构模块协作,所述持久数据结构模块可以被适应用于其性能与写入-提交等待时间、诸如事务日志(数据库、文件系统和其他事务日志)、存储和转送消息传递系统、持久对象缓存、贮存装置元数据等相联系的应用,持久数据结构模块1009可以提供瞬间提交日志库等用于持久事务日志,或者提供其他接口用于不同的持久数据结构。

持久数据结构模块1009提供用于将ACM 1011的自动提交缓冲器1013映射至ACM用户1016的存储器系统1018的机制,如上文所描述的那样。ACM用户1016(或持久数据结构模块1009自身)可以实现高效的“供应者/消费者”范例,用于自动提交缓冲器1013分配、装备和存取。例如,(在ACM用户1016的应用空间内的)“供应者”线程或处理可以被用于分配和/或装备用于ACM用户1016的自动提交缓冲器1013(例如,将自动提交缓冲器1013映射至在主机1014的存储器系统1018内的地址范围,为自动提交缓冲器1013装备逻辑标识符,等等)。ACM用户1016的“消费者”线程或处理然后可以存取预分配的自动提交缓冲器1013。在该方法中,从消费者线程的写入-提交等待时间路径中取出分配和/或装备步骤。ACM用户1016的消费者线程可以将对被映射至受触发的自动提交缓冲器的存储器范围(ACM存储器范围1021)所进行的存储器语义存取看做被“瞬间提交”,如上文所述的那样。

通过配置持久数据结构模块1009(或ACM用户1016)的供应者线程以便事先对自动提交缓冲器进行分配和/或装备,可以提升ACM用户1016的消费者线程的性能。当需要下一个自动提交缓冲器1013时,ACM用户1016从由供应者维持的池(pool)中对预分配的/装备的缓冲器进行存取。当需要时,供应者也可以进行清除和/或提交操作。例如,如果被写入自动提交缓冲器的数据要被写入至持久贮存器中,供应者线程(或者在写入-提交路径之外的另一线程)可以使得数据被提交(使用SML API 1019)。如上文所描述的那样,提交数据可以包括为ACM用户1016的消费者线程重新分配和/或重新装备自动提交缓冲器1013。

上文中描述的“供应者/消费者”方法可以被用于实现“滚动缓冲器(rolling buffer)”。ACM用户1016可以实现应用,所述应用使用预先确定的数量的“滚动”数据。例如,ACM用户1016可以实现存储“最后20个进来的消息”的消息队列,和/或ACM用户1016可以管理用于非易失性贮存装置的指令(directive)(例如持久修正指令(directive)等)。供应者线程可以分配自动提交缓冲器1013,所述自动提交缓冲器具有至少足够的容量以便保留ACM用户1016所需要的“滚动数据”(例如足够的容量以便保留最后20个进来的消息)。消费者线程可以使用存储器存取语义(加载和保存调用)对缓冲器进行存取,如上文中所描述的那样。SML API 1019(或者ACM用户1016的供应者线程)可以监视自动提交缓冲器1013的使用。当消费者线程接近自动提交缓冲器1013的末端时,供应者线程可以通过(如果需要)使得数据被提交,将数据映射至在存储器系统1018内的另一范围,和用相应的逻辑标识符装备自动提交缓冲器1013,来重新初始化缓冲器1013的“头部”。当消费者继续存取缓冲器1013时,消费者在“翻滚(roll over)”至由供应者线程重新初始化的自动提交缓冲器1013的新位置处存储新数据,并且继续操作。在一些情况下,如上所述被写入滚动缓冲器的数据可以从不被提交至持久贮存器(除非发生重启条件或者其他触发条件)。此外,如果自动提交缓冲器1013的容量足以保留ACM用户的滚动数据,那么,供应者线程可以不必进行如上所述的重新初始化/重新装备。取而代之的是,供应者线程可以仅仅对包括已经“翻滚”过的数据的自动提交缓冲器1013进行再映射(和/或丢弃其中“翻滚”的数据)。

在其最简单的形式中,滚动缓冲器可以包括两个ACM缓冲器1013,并且,在将先前写入的数据从其他ACM缓冲器1013中降级至诸如非易失性存储器1110等的贮存位置的同时,贮存管理模块1050可以写入至用于ACM用户1016的一个ACM缓冲器1013。响应于一个ACM缓冲器1013的填充和另一ACM缓冲器1013的降级(destage)处理的完成,贮存管理模块1050可以透明地切换两个ACM缓冲器,使得ACM用户1016在一个ACM缓冲器1013的降级期间以乒乓方式写入至另一ACM缓冲器1013。贮存管理模块1050可以通过多于两个的ACM缓冲器1013来实现相似的滚动处理。在一些实施例中,持久数据结构模块1009包括和/或支持一个或多个事务日志API函数。在这些实施例中,ACM用户1016可以使用持久数据结构模块1009,以便声明或初始化事务日志数据结构。

在一个实施例中,作为用于创建事务日志数据结构的事务日志API命令的参数,持久数据结构模块1009接收诸如在非易失性贮存器1502的命名空间和/或地址空间中的位置等的贮存位置,对于该位置,如上文所描述的那样,贮存管理模块1050可以以滚动或循环的方式对来自两个或多个ACM缓冲器1013的事务日志的数据进行提交、清空、和/或降级。在一个实施例中,一旦ACM用户1016已经初始化或声明了事务日志数据结构,那么,在ACM 1011的性能和益处方面,使用两个或多个ACM缓冲器1013以便实现事务日志数据结构对于ACM用户1016而言是基本上透明的。在一些实施例中,当用于两个或多个ACM缓冲器1013的降级速率大于或等于ACM用户1016写入至两个或多个ACM缓冲器1013的速率时,两个或多个ACM缓冲器1013的使用是透明的。在一个实施例中,持久数据结构模块1009使用两个或多个ACM缓冲器1013提供对事务日志数据结构的字节级别的写入。

在另一示例中,供应者线程可以维持四个或更多个ACM缓冲器1013。第一ACM缓冲器1013可以被装备并且准备好从消费者处接受数据,如上文所描述的那样。第二ACM缓冲器1013可以被消费者线程活跃地存取(例如填入),如上文所描述的那样。第三ACM缓冲器1013可以在预装备处理中(例如重新初始化,如上文所述),并且第四ACM缓冲器1013可以被“清空”或“降级”(例如提交至持久贮存器,如上文所述)。

在一些实施例中,持久数据结构模块1009和/或上文中描述的滚动日志机制可以被用于实现用于文件系统(例如ZFS文件系统)的同步写入的Intent Log(意图日志)。日志数据(ZIL)可以是相当的小(1至4前兆字节)并且典型地是“只写入的”。只进行读取用于文件系统恢复。一个或多个自动提交缓冲器1013可以被用于使用滚动日志和/或如上所述的需求分页机制来存储文件系统数据。

如上文中结合图4所描述的那样,持久数据结构模块1009可以被配置以便以高利用率模式操作。在高利用率模式中,贮存管理模块1050和/或总线1040发送与对两个或多个ACM 1011的存储器语义存取有关的命令,其中每个ACM 1011可以实现所请求的操作和/或被触发以便在重启条件的事件中提交数据。

在一些实施例中,持久数据结构模块1009可以提供对作为在诸如所描述的文件系统模块1558的文件系统中的文件的持久数据结构的存取。在一个实施例中,文件系统模块1558可以包括主机装置1014的文件系统,并且可以被操作系统、贮存子系统等来提供。在另一实施例中,文件系统模块1558可以包括用于ACM 1011和/或非易失性存储器介质110、1110、1502的直接文件系统(DFS),这绕过一个或多个操作系统或贮存子系统层等从而直接提供对持久数据结构的高效的、流线型的存取。

例如,在一个实施例中,文件系统模块1558可以直接在由贮存管理模块1050提供的稀疏逻辑地址空间内安排文件,所述贮存管理模块1050、文件系统模块1558、下文描述的元数据模块1912等可以直接映射至在ACM缓冲器1013和/或非易失性存储器介质110、1110、1502上的物理位置。在另一实施例中,文件系统模块1558可以使用贮存管理模块1050和/或ACM 1011或者与之协作以便进行块分配、ACM缓冲器1013分配、和/或原子数据更新,分别用于持久数据结构模块1009或其他贮存客户机。文件系统模块1558可以支持一个或多个文件系统接口或API,所述API例如打开、关闭、读取、写入、pread、pwite、Iseek、mmap或者其他请求或命令。文件系统模块1558可以包括在核(kernel)空间内的核模块、在用户空间内的用户模块、或者在核空间和用户空间二者内的模块的组合。在一些实施例中,文件系统模块1538可以与贮存管理模块1050、贮存控制器104、1004、1104等进行集成,或者可以是计算机可执行程序代码和/或逻辑硬件的独立模块。

如上文中描述的那样,自动提交存储器模块1011、相关联的提交代理1020等可以被配置以便响应于诸如提交事件、重启事件、同步或降级请求、状态改变、条件改变、要素改变、属性改变、自动提交缓冲器1013的范围变满等等的触发,基于ACM元数据1015将来自于易失性ACM缓冲器1013的数据提交、复制、传输、同步、降级、保持或保存至非易失性存储器介质110、1110、1502。在一个实施例中,提交数据可以包括将数据从ACM缓冲器1013复制或传输至在非易失性存储器介质110、1110、1502内的位置。在另一实施例中,由于自动提交存储器模块1011对可持久性的保证,所以,只要ACM缓冲器1013已经被装备或配置有对用于数据的提交动作进行定义或表明的ACM元数据1015,数据就被视为提交。

在一个实施例中,持久数据结构模块1009可以被配置以便将用于持久数据结构的数据(例如来自客户机的用于数据结构的输入数据)提供给自动提交存储器模块1011用于向一个或多个ACM缓冲器1013写入,使得持久数据结构被提交和/或被确保保持在非易失性贮存装置102、1102的非易失性存储器介质110、1110、1502中。持久数据结构模块1009可以使用一个或多个ACM原语操作以便使用自动提交存储器模块1011,对持久数据结构进行管理。例如,在多种实施例中,持久数据结构模块1009可以使用ACM填充操作以便将持久数据结构的数据加载至ACM缓冲器1013内,可以使用ACM降级操作以便将持久数据结构的数据从ACM缓冲器1013中降级、复制、传输和/或移动至非易失性存储器介质110、110、1502,可以使用ACM屏障或ACM检查点操作一般确保在ACM缓冲器1013中存储的持久数据结构的数据的一致性,等等。在另一实施例中,一个或多个ACM缓冲器1013可以被映射至主机装置1014等的虚拟存储器内,并且如上文所述,持久数据结构模块1009可以使用存储器语义操作,将数据写入、存储或加载至ACM缓冲器1013。

如上文所述,贮存管理模块1050(例如贮存管理模块1050)可以被配置以便顺序地、以如下文参考图11描述的顺序的或按照时间顺序的基于日志的写入结构2140来将数据保存在非易失性存储器介质110、1110、1502内。贮存管理模块1050(例如贮存管理模块1050)可以使用如下文参考图11描述的逻辑至物理的地址映射结构2000,将数据的逻辑地址映射至在非易失性存储器介质110、1110、1502中存储数据的物理位置。在一些实施例中,持久数据结构模块1009的持久数据结构可以使用文件名称而作为文件系统模块1558的文件是可存取的。持久数据结构、文件系统模块1558的文件等可以与在由贮存管理模块1050(例如贮存管理模块1050)提供的逻辑地址空间内的逻辑标识符(例如LBA)相关联,所述贮存管理模块可以包括与非易失性贮存装置102、1102的物理贮存容量相比较更大的稀疏逻辑地址空间。持久数据结构模块1009、文件系统模块1559、贮存管理模块1050(例如贮存管理模块1050)、和/或下文中参考图10B描述的元数据模块1912可以跟踪可持久数据结构、文件等的哪些部分被保存在ACM缓冲器1013内以及哪些部分被保存在非易失性存储器介质110、1110、1502内,维持在用于文件系统模块1558等的文件系统元数据中的这样的映射。

以这种方式,在一些实施例中,文件系统模块1558可以使用文件名称、偏移量等,提供对多个文件的存取,并且文件(例如持久数据结构或者其他文件)可以被存储在ACM缓冲器1013内、非易失性存储器介质110、1110、1502内、和/或在ACM缓冲器1013和非易失性存储器介质110、1110、1502二者内。可以向应用或者其他客户机隐藏(hidden)或遮掩(masked)在持久数据结构模块1009、文件系统模块1558、贮存管理模块1050和/或自动提交存储器模块1011之间的这样协作,所述应用或客户机可以察觉到ACM缓冲器1013的存取速度、非易失性存储器介质110、1110、1502的可持久性、和对持久数据结构的文件系统存取的便利性,而无需管理或意识到底层的复杂性。

在一些实施例中,由于文件系统模块1559被配置以便向物理上位于ACM缓冲器1013和/或非易失性存储器介质110、1110、1502内的文件提供存取,与文件名称相关联的并且作为文件通过文件系统模块1558可存取的持久数据结构在一个实施例中使用块装置接口1520、存储器语义接口1522、和/或由文件系统模块1558提供的文件系统操作,可以被存取(例如写入和/或从中读取)。在一个实施例中,文件系统模块1558打开文件作为ACM容器,每个数据块被映射至在ACM缓冲器1013内或在非易失性存储器介质110、1110、1502内的位置处,并且当文件的新数据被写入时、当文件的数据被从ACM缓冲器1013降级至非易失性存储器介质110、1110、1502等等时,映射被更新。

在此公开的ACM 1011可以被用于实施其他类型的应用,例如耐久同步原语。同步原语可以包括但并不局限于:信号量(semaphore)、互斥(mutex)、原子计数器、测试和设置等。

同步原语可以被实现在自动提交缓冲器1013上。期望对同步原语进行存取的ACM用户1016(或者其他实体)可以将自动提交缓冲器1013映射至存储器系统1018中。在一些实施例中,每个ACM用户1016可以将同步原语自动提交缓冲器1013映射至在存储器系统1018内的其自身的、对应的地址范围。既然不同的地址范围被所有地映射至相同的自动提交缓冲器1013,所以,所有都将显示同步原语的相同状态。在远程计算装置上的ACM用户1016可以使用RDMA网络或其他远程存取机制(例如Infiniband、远程PCI等),将同步原语自动提交缓冲器1013映射至其存储器系统。

在一些实施例中,贮存管理模块1050可以包括耐久同步原语库(DSL)1554以便辅助在ACM 1011上的同步原语的生成和/或辅助对在ACM 1011上的同步原语的存取。DSL 1554可以被配置,以便如上所描述的那样辅助一对多映射(一个自动提交缓冲器1030对应在存储器系统1018中的多个地址范围)。

由于如果使用同步原语的同时发生重启条件,则将如上所述地保持同步原语的状态(同步原语的自动提交缓冲器1013将被提交至非易失性贮存器1502、或者其他持久贮存器),所以,对信号量原语进行存取的ACM用户1016可以将其存取视为“耐久的”。

如上文所描述的,贮存管理模块1050可以被用于将文件映射至主机1014的存储器系统1018(虚拟地址空间)。可以以“瞬间提交存储器”(ICM)模式来映射文件。在这种模式下,即使发生重启条件,所有对存储器映射文件所做的改动也被保证反映在文件中。通过配置需求分页系统以便将ACM 1011的自动提交缓冲器1013用于ICM文件的所有“肮脏”页,来实现该保障。相应地,当发生重启条件时,肮脏页将被提交给文件,并且没有数据会被丢失。

在一些实施例中,贮存管理模块1050可以包括用于实现这些特征的ICM库(ICML)1556。ICML 1556可以与主机1014的操作系统和/或虚拟存储器系统进行集成。当ICM存储器映射文件的页要变肮脏时,ICML 1556准备自动提交缓冲器1013以便保留肮脏页。自动提交缓冲器1013被映射至主机1014的存储器系统1018中,并且被触发以便提交与存储器映射文件相关联的逻辑标识符。如上所描述,在自动提交缓冲器1013上(通过存储器语义存取模块1522)实现对在存储器系统1018内的页的改变。

ICML 1556可以被配置,以便当发生重启条件时和/或当主机1014的需求分页系统为另一目的而需要使用自动提交缓冲器1013时,提交存储器映射文件的自动提交缓冲器1013。通过需求分页系统、(例如使用进气最少使用(LRU)度量等)通过贮存管理模块1050、或者通过某个另一实体(例如ACM用户1016),可以确定是否从肮脏页中“取消附接”自动提交缓冲器1013。当自动提交缓冲器被取消附接时,贮存管理模块1050可以使得内容被提交。替换地,自动提交缓冲器1013的内容可以被传输至系统RAM,在此点处文件的虚拟存储器映射可以转变为使用RAM映射机制。

在一些实施例中,贮存管理模块1050(或ICML 1556)可以被配置以便提供机制,所述机制用于向操作系统(虚拟存储器系统等)通知:在ACM用户1016写入数据之前,存储器映射文件的页要变得肮脏。该通知可以允许操作系统事先准备用于肮脏页的自动提交缓冲器1013,并且当写入实际上发生时避免停转(stalling)(同时自动提交缓冲器被映射并且被装备)。可以在独立的线程(例如,如上所述的供应者线程)中实现自动提交缓冲器1013的通知和准备。

贮存管理模块1050和/或ICML 1556可以提供API,以便向操作系统通知要被写入的特定页没有有用的内容并且应当被填入零。该通知可以帮助操作系统避免不必要的读取操作。

用于将文件存储器映射至ACM 1011的机制应当被用在日志类型的应用中,或者被用于由持久数据结构模块1009提供的其他持久数据结构。例如,如上文所述,持久数据结构模块1009可以被配置以便将日志文件存储器映射至一个或多个自动提交缓冲器1013。供应者线程可以向操作系统提供关于哪些页要变肮脏的通知,和/或以便标识并不包含有效数据的页。

替换地或者此外,ICML 1556可以被实现,而无需集成至主机1014的操作系统中。在这些实施例中,ICML 1556可以被配置以便监视和/或俘获系统信号,所述系统信号例如mprotect、mmap、和用于对典型地由操作系统进行的需求分页操作进行模仿的手动分割错误信号。

图7是用于提供自动提交存储器的方法1600的一个实施例的流程图。在步骤1610处,方法1600可以开始并且被初始化。步骤1610可以包括:方法1600启动与ACM之间的通过总线的通信(例如启动与ACM 1011之间的通过总线1040的通信)。

在步骤1620处,ACM的自动提交缓冲器可以被映射至计算装置(例如主机1014)的存储器系统中。该映射可以包括将自动提交缓冲器的BAR地址与在存储器系统中的地址范围进行关联。

在步骤1630处,自动提交缓冲器可以被装备有ACM元数据,所述ACM元数据被配置以便在重启条件的情况下使得自动提交缓冲器被提交至特定的持久贮存装置和/或在持久贮存器内的特定位置。在一些实施例中,ACM元数据可以包括诸如LBA、对象标识符等的逻辑标识符。步骤1630可以包括验证ACM元数据是有效的和/或可以被用于提交自动提交缓冲器的内容。

在步骤1640处,诸如操作系统、应用等的ACM用户可以使用存储器存取语义,对被装备的自动提交缓冲器进行存取。由于步骤1630的装备,ACM用户可以认为存取被“瞬间提交”。相应地,ACM用户可以实现“瞬间提交”的写入,所述写入省略单独的和/或明确的提交命令。此外,因为存储器语义存取(通过步骤1620的映射)被直接地映射至自动提交缓冲器,所以,存储器语义存取可以绕过在虚拟存储器系统中典型地需要的系统调用。

在步骤1650处,方法1600结束,直到下一个自动提交缓冲器被映射和/或被装备。

图8是用于提供自动提交存储器的方法1700的另一实施例的流程图。在步骤1710处,方法1700开始并且如上文所述地被初始化。

在步骤1720处,ACM的自动提交缓冲器被映射至计算装置(例如主机1014)的存储器系统,并且如上文所述地被装备。

在步骤1730处,(例如通过在步骤1720处被映射至自动提交缓冲器的存储器范围内实现存储器语义操作)ACM用户使用存储器存取语义,对自动提交缓冲器进行存取。

在步骤1740处,检测重启条件。如上文所描述的那样,重启条件可以是系统关机、系统重启、电能缺失、在ACM和主机计算装置之间的通信的缺失、软件故障、或者妨碍ACM和/或主机计算装置的继续操作的任何其他重启条件。

在步骤1750处,ACM实现在自动提交缓冲器上的被装备的受触发的提交动作。受触发的提交动作可以包括:将自动提交缓冲器的内容提交至诸如固态的或者其他非易失性贮存器等的持久贮存器。

在步骤1760处,方法1700结束,直到下一个自动提交缓冲器被映射和/或装备、或者检测到重启条件为止。

图9是用于提供自动提交存储器的另一实施例的流程图。在步骤1810处,方法1800开始并且如上所述地被初始化。在步骤1820处,检测重启条件。

在步骤1830处,方法1800存取(如果存在)在ACM上的被装备的自动提交缓冲器。存取被装备的自动提交缓冲器可以包括:方法1800通过观察其受触发的ACM元数据,来确定自动提交缓冲器是否已经被装备。如果不存在受触发的ACM元数据,或者ACM元数据无效,那么,方法1800可以确定自动提交缓冲器没有被装备。如果对于特定的自动提交缓冲器而言的确存在有效的受触发的ACM元数据,那么,方法1800将自动提交缓冲器标识为被装备的缓冲器并且继续至步骤1840。

在步骤1840处,执行用于被装备的自动提交缓冲器的受触发的提交状态。进行受触发的提交动作可以包括将自动提交缓冲器的内容保持至顺序的和/或基于日志的贮存媒介,例如固态的或其他的非易失性的贮存媒介。相应地,受触发的提交动作可以包括:存取自动提交缓冲器的逻辑标识符,使用逻辑标识符来标记数据,和将标记的数据注入至写入数据管线内。替换地,受触发的提交动作可以包括:在逻辑标识符和物理贮存地址之间具有一对一映射的持久贮存器(例如硬盘)上存储数据。受触发的提交动作可以包括:将被装备的自动提交缓冲器的内容存储至特定的物理地址。

在步骤1840处执行受触发的提交动作可以包括:使用副电源以便向ACM、固态贮存介质、和/或其他持久的非易失性贮存介质供电,直到受触发的提交动作被完成为止。

在一些实施例中,替代或除了使用诸如物理存储器命名空间、虚拟存储器命名空间等的易失性存储器命名空间,和/或替代或除了使用诸如文件系统命名空间、逻辑单元号(LUN)命名空间等的贮存器命名空间,如上所描述的,一个或多个提交代理1020可以实现用于ACM 1011的独立的持久存储器命名空间。例如,在诸如重新启动、故障时间等的重启事件之后,典型地使用在物理和/或虚拟存储器中的偏移量,被存取的易失性存储器命名空间不是持久性的或可用的,并且在重启事件之前在物理和/或虚拟存储器中拥有过数据的处理在重启事件之后不再存在。替换地,典型地,使用文件名称和偏移量、LUN ID和偏移量等,来对贮存命名空间进行存取。尽管在重启事件之后贮存命名空间可以是可用的,但是贮存命名空间可能具有太多的开销以便与ACM 1011一起使用。例如,使用文件系统贮存命名空间,为每次执行处理保存状态可以产生用于每次执行处理的单独的文件,其可能不是ACM 1011的高效使用。

在一些实施例中,一个或多个提交代理1020和/或控制器1004为ACM用户1016提供用于ACM 1011的新类型的持久存储器命名空间,其贯穿重启事件都是持久的,而无需贮存器命名空间的开销。在一个实施例中,诸如ACM用户1016的一个或多个处理可以使用诸如全局唯一标识符(GUID)、通用唯一标识符(UUID)等的唯一标识符,对持久存储器命名空间进行存取,使得使用唯一标识符,由用于ACM用户1016在重启事件之前存储的数据在重启事件之后对于用于ACM用户1016的第二处理而言是可存取的,而无需贮存器命名空间、文件系统等的开销。

在一个实施例中,可以通过提交代理1020、控制器1004等将唯一标识符指派给ACM用户1016。在另一实施例中,ACM用户1016可以确定其自身的唯一标识符。在一些实施例中,持久存储器命名空间是足够大的,和/或ACM用户1016以预定义的、已知的方式(例如基于足够唯一的种子值、随机数等)确定唯一标识符以便减小、限制和/或消除在唯一标识符之间的碰撞。在一个实施例中,ACM元数据1015包括与ACM缓冲器1013的所有者、ACM缓冲器1013的一个或多个页的所有者等相关联的持久存储器命名空间唯一标识符。

在一个实施例中,一个或多个提交代理1020和/或控制器1004向ACM用户1016提供持久的存储器命名空间API,ACM用户1016通过所述API使用持久存储器命名空间,存取ACM 1011。在各种实施例中,一个或多个提交代理1020和/或控制器1004可以提供持久存储器命名空间API函数,用于将数据从诸如易失性存储器命名空间或贮存器命名空间的现存的命名空间中转变、转换、映射和/或复制至持久存储器命名空间;提供持久存储器命名空间API函数,用于将数据从持久存储器命名空间转变、转换、映射和/或复制至从诸如易失性存储器命名空间或贮存器命名空间的现存的命名空间;提供用于指派诸如GUID、UUID等的唯一标识符的持久存储器命名空间API函数;提供持久存储器命名空间API函数,用于对与唯一标识符相关联的ACM缓冲器1013进行列表或列举;提供持久存储器命名空间API函数,用于输出或迁移与唯一标识符相关联的数据,使得诸如应用和/或处理的ACM用户1016可以将其ACM数据带至不同的主机1014、带至不同的ACM 1011等;和/或提供用于ACM 1011的其他持久存储器命名空间API。

例如,在一个实施例中,ACM用户1016可以使用持久存储器命名空间API函数,以便将持久存储器命名空间的一个或多个ACM缓冲器1013映射至主机1014等的操作系统的虚拟存储器,并且到虚拟存储器的映射可以响应于重启事件而结束,但是在重启事件之后使用持久存储器命名空间,ACM用户1016可以继续对一个或多个ACM缓冲器1013进行存取。在一些实施例中,贮存管理模块1050可以提供与一个或多个提交代理1020和/或控制器1004协作的持久存储器命名空间API。

在一些实施例中,持久存储器空间是ACM缓冲器1013(和/或相关联的ACM页)的扁平的、非层次结构的命名空间,其通过ACM元数据而被索引。在一个实施例中,一个或多个提交代理1020和/或控制器1004允许通过ACM元数据1015询问ACM缓冲器1013。在其中ACM元数据1015包括唯一标识符的实施例中,在一些实施例中,ACM用户1016可以通过唯一标识符询问或搜索ACM缓冲器1013,以便定位与唯一标识符相关联的ACM缓冲器1013(和/或所存储的数据)。在另一实施例中,一个或多个提交代理1020和/或控制器1004可以在ACM元数据1015中提供一个或多个泛型(generic)元数据字段,使得ACM用户1016可以在泛型元数据字段中定义其自身的ACM元数据1015,等等。在一个实施例中,一个或多个提交代理1020和/或控制器1004可以基于唯一标识符等来提供对ACM 1011的存取控制。

在一个实施例中,ACM缓冲器1013可以是持久存储器命名空间和一个或多个诸如易失性命名空间、贮存器命名空间等的附加的命名空间之中的成员。在另一实施例中,一个或多个提交代理1020和/或控制器1004可以向多个ACM用户1016提供对相同ACM缓冲器103的同时存取。例如,相同类型的和/或具有相同唯一标识符的多个ACM用户1016、相同类型的ACM用户1016的多个实例、单个ACM用户1016的多个处理等可以共享一个或多个ACM缓冲器1013。在一个实施例中,对相同ACM缓冲器1013进行存取的多个ACM用户1016可以提供它们自己的对共享ACM缓冲器1013的存取控制,例如锁定控制、基于回合制的控制、基于缓和器的(moderator-based)控制等等。在另一实施例中,使用唯一标识符,在主机1014上的新ACM用户1016、更新的ACM用户1016等可以存取。

在一些实施例中,ACM 1011可以包括多个单独的存取通道、总线和/或端口,并且可以至少是双端口的(例如双端口、三端口、四端口)。在其中ACM 1011至少是双端口的实施例中,通过多个单独的总线1040可以对ACM 1011进行存取。例如,ACM 1011可以通过与单个主机1014的冗余总线1040连接来被存取,并且通过与不同主机1014等的独立总线104可以而被多个主机1014存取。在其中ACM 1011至少是双端口的实施例中,如果一个节点和/或存取通道(例如主机1014、总线1040)发生故障,一个或多个附加节点和/或对ACM 1011的访问通道保持有效,不再需要在多个主机1014之间的冗余、设置副本等。

在一个实施例中,ACM 1011包括PCI-e附接的多端口装置,并且ACM 1011可以通过单独的PCI-e总线1040连接至两个主机1014并且与两个主机1014通信。例如,ACM 1011可以包括多个PCI-e边缘(PCI-e edge)连接器,用于连接至多个PCI-e槽连接器等。在另一实施例中,电源连接1030也可以是冗余的,每个总线1040具有一个总线连接1030等等。在一些实施例中,多个连接器中的至少一个可以包括诸如NIC等的数据网络连接。例如,ACM 1011可以包括一个或多个PCI-e连接和一个或多个数据网络连接。

在一个实施例中,控制器1004可以在多个主机1014之间仲裁ACM 1011耦合至哪一个,使得每次一个主机1014可以存取ACM缓冲器1013。在另一实施例中,控制器1004可以从主机1014接受预定请求,并且可以对接收到预定请求进行响应而向请求主体1014提供对ACM缓冲器1013的存取。ACM 1011可以原生地(natively)支持预定请求,作为ACM 1011的原子操作。在其他实施例中,ACM 1011可以在主机1014之间划分ACM缓冲器1013,可以在主机之间划分ACM缓冲器1013但是在主机之间共享后备的非易失性存储器,或者可以在主机1014之间划分ACM缓冲器1013、非易失性存储器1110、和/或相关联的地址空间。

在一个实施例中,控制器1004、一个或多个提交代理1020、和/或ACM 1011的其他元件可以是双头的(dual-headed)、裂脑的(split-brained)等等每个头部或大脑被配置以便与主机1014通信并且彼此间通信以便提供用于ACM 1011的冗余功能。在一些实施例中,由于至少是双端口的,ACM 1011可以是冗余地可存取的,而无需设置副本、重复等的开销,尤其如果通过数据网络等进行这样的设置副本、重复,其会降低ACM 1011的I/O速率。

图10A示出持久数据结构模块1009的一个实施例。在一些实施例中,持久数据结构模块1009可以基本上类似于上文描述的持久数据结构模块1009的各种实施例。在其他实施例中,持久数据结构模块1009可以包括贮存管理模块、贮存控制器1004、1104、1304和/或其他提交代理1020,可以与之集成、和/或与之进行通信。

一般地,与诸如文件系统模块1558等相协作地,持久数据结构模块1009服务于来自ACM用户1016或者其他用于ACM 1011的客户机中的持久数据结构请求。如上文关于ACM用户1016所描述的,如此处使用的,客户机可以包括应用、操作系统(OS)、虚拟操作系统(例如具有管理程序的OS)、客户机OS、数据库系统、处理、线程、实体、实用程序、用户等之中的一个或多个,其被配置以便存取或使用持久数据结构模块1009和/或ACM 1011。在所示出的实施例中,持久数据结构模块1009包括请求模块1902、分配模块1904、写入模块1906和降级模块1908。

在一些实施例中,持久数据结构模块1009提供接口,不管ACM缓冲器1013是原生地易失性还是非易失性的,不管用于ACM缓冲器1013的媒介的类型,不管数据结构被存储在ACM缓冲器1013中、非易失性存储器介质110中、还是在ACM缓冲器1013和非易失性存储区介质110两者的组合中,应用或其他客户机通过所述接口都可以对在字节可寻址的ACM缓冲器1013和/或非易失性存储器介质110中存储的可持久性数据结构进行存取。如上文所描述的,ACM 1011的易失性存储器模块(例如ACM缓冲器1013)可以是字节可寻址的、就地写入的(write-in-place)、易失性的存储器模块或装置,而非易失性存储器介质110、1110、1502使用如上所述的块装置接口1520可以是块可寻址的。

替代或者除了存取ACM 1011的诸如使用存储器映射(例如mmap)接口的上述方法,在一些实施例中,在如上文所述地使用API、共享库、文件系统命名空间或者其他持久逻辑标识符等,持久数据结构模块1008可以使用ACM 1011以便将持久数据结构显露给应用或其他客户机。在一些实施例中,持久数据结构模块1009可以绕过一个多个操作系统和/或核层次,所述操作系统和/或核层次否则会降低ACM 1011的性能、使存取持久数据结构复杂化等、增加存取次数、引入延迟等。使用现存I/O接口或诸如标准读/写API、文件系统命名空间、LUN命名空间或者可以提供定制持久数据结构接口的命名空间的其他命名空间,持久数据结构模块1009可以提供对持久数据结构的存取。

如上文所述,在一些实施例中,持久数据结构模块1009和/或ACM 1011使得诸如ACM用户1016的客户机能够使用快速的、字节可寻址的持久存储器并且结合易失性存储器和用于持久数据结构的非易失性贮存器的益处对持久数据结构进行存取。在一些实施例中,在贮存装置102的硬件内的诸如结合图1描述的自动提交存储器1011的自动提交逻辑提供对被写入ACM 1011的自动提交缓冲器1013中的数据结构的断电保护。在多种实施例中,持久数据结构模块1009和/或其子模块可以至少部分地与在主机计算装置1014的处理器1012上操作的诸如贮存管理模块1050的装置驱动器相集成,可以至少部分地作为微代码、固件、逻辑电路等来与ACM 1011的硬件控制器1004、1104和/或非易失性贮存装置1102相集成,或者可以在装置驱动器和硬件控制器1004、1104等之间被划分。

在一个实施例中,请求模块1902被被配置以便监视、检测、拦截、或接收对来自于应用或其他客户机中的持久数据结构的请求,所述其他客户机例如上文中描述的ACM用户1016、另一模块、主机计算装置1014等。如此处所使用的,数据请求可以包括用于存取数据结构的贮存器请求、存储器请求、文件请求、持久数据结构请求、自动提交请求等,例如打开、写入/附加、同步、关闭、映射和分配持久数据结构请求,如下文所述。

请求模块1902可以使用现存的或标准的I/O接口,接收数据请求,诸如通过块装置接口1520接收的读取和写入请求、通过存储器语义接口1522接收的加载和存储命令、来自于文件系统模块1558的文件系统请求、定制的持久数据结构接口等。在一些实施例中,通过使用自动提交缓冲器1013以便支持持久数据结构请求或命令,请求模块1902可以允许应用或其他客户机透明地存取用于持久数据结构的ACM 1011,知晓很少或者不知晓ACM 1011、非易失性存储器介质110等的底层层次。例如,应用或其他客户机可以发送持久数据结构请求至请求模块1902,知晓很少或不知晓持久数据结构模块1009是使用自动提交缓冲器1013还是非易失性存储器媒介1110服务于请求或满足请求,同时获得两者的益处。通过使用现存或标准的接口、使用过滤器驱动器、使接口过载、使用LD_PRELOAD、拦截或俘获分割错误、使用IOCTL命令、使用定制的持久数据结构接口等,请求模块1902可以拦截或接收数据请求。

如下文关于分配模块1904所描述的,在一些实施例中,持久数据接口可以与持久逻辑标识符相关联。相应地,持久数据结构请求可以包括相关联的持久数据结构的持久逻辑标识符。在一个实施例中,逻辑标识符是命名空间的成员。如此处使用的,命名空间的示例可以包括文件系统命名空间、LUN命名空间、逻辑地址空间、贮存器命名空间、虚拟存储器命名空间、持久ACM命名空间、易失性存储器命名空间、对象命名空间、网络命名空间、全局或通用命名空间、BAR命名空间等。

逻辑标识符可以表明数据结构所属的命名空间。在一个实施例中,逻辑标识符可以包括:文件名称或其他文件标识符和/或从文件系统命名空间中的偏移量,LUN ID和从LUN命名空间中的偏移量,LBA或来自贮存器命名空间中的LBA范围,来自虚拟存储器命名空间的一个或多个虚拟存储器地址,来自持久ACM命名空间的ACM地址,来自主机装置1014、对象标识符、网络地址、GUID、UUID等的易失性存储器命名空间之中的易失性存储地址,BAR地址或来自BAR命名空间中的地址范围,或者其他逻辑标识符。在另一实施例中,逻辑标识符可以包括用于命名空间的标记或名称,例如文件夹、文件路径、装置识别符、等等。在另一实施例中,逻辑标识符可以包括用于数据结构的物理地址或位置。如上文所描述的,一些命名空间和因此其命名空间标识符可以是临时的或易失的,并且在重启事件之后可能对于ACM用户1016或其他客户机而言是不可用的。其他命名空间和向关联的逻辑标识符可以是持久性的,例如文件系统命名空间、LUN命名空间、持久ACM命名空间等,并且在重启事件之后使用可持续性逻辑标识符,与持久命名空间相关联的数据结构可以对于ACM用户1016或者其他客户机而言是可存取的。

在一个实施例中,请求模块1902可以从客户机中接收打开请求,以便打开或初始化持久数据结构。在另一实施例中,使用ACM缓冲器1013等,请求模块1902可以从客户机中接收写入请求(例如对于事务日志数据结构而言,附加请求)以便向持久数据结构写入和/或附加数据。在另一实施例中,请求模块1902可以接收同步请求、降级请求等,用于触发数据结构从ACM缓冲器1013复制、降级、传输、迁移或同步至非易失性存储器介质110。在一个实施例中,请求模块1902可以从客户机中接收关闭请求,用于关闭、锁定、删除、清除或结束数据结构。在另一实施例中,请求模块1902可以接收映射请求,用于将ACM 1011的区域(例如,一个或多个ACM缓冲器1013、页、缓存线、存储器位置、存储器位置的范围等等)映射至在主机装置1014上的客户机的虚拟存储器中。在一个实施例中,请求模块1902可以接收分配请求,用于分配ACM 1011的一个或多个区域以便存储数据结构、一部分数据结构等等。

在一些实施例中,请求模块1902可以在用户空间内接收持久数据结构请求。如此处使用的,核空间可以包括:主机计算装置1014的存储器(例如易失性存储器、虚拟存储器、主存储器)的区域;特权、库或函数的集合;执行的级别;或者其他的被保留用于核、操作系统、或者其他特权的或可信的处理或应用的。如此处使用的,用户空间可以包括:主机计算装置1014的存储器(例如,易失性存储器、虚拟存储器、主存储器)的区域:特权、库或函数的集合;执行的级别;或者对于不可信的、没有特权的处理或应用而言可用的其它。

由于对于核空间的存取控制限制、特权要求等,在核空间中提供用于ACM 1011的装置驱动、库、API等会比在用户空间内具有更大的延迟。此外,在一些实施例中,使用核或操作系统的贮存栈可能引入附加的延迟。如此处使用的,操作系统或核贮存栈可以包括一层或多层的装置驱动、转换层、文件系统、缓存和/或在核空间中提供的用于对数据贮存装置进行存取的接口。在一些实施例中,持久数据结构模块1009可以通过绕过和/或更换操作系统或核贮存栈的一层或多层来提供对持久数据结构和/或对ACM 1011的直接存取,在ACM缓冲器1013和/或非易失性存储器介质110和用户空间等之间直接读取和写入数据结构。在另一实施例中,请求模块1902可以在用户空间内从用户空间应用或其他客户机中接收持久数据结构请求,并且在核空间内从核空间应用或者其他客户机中接收持久数据结构请求。

在一个实施例中,分配模块1904被配置以便初始化或打开新的持久数据结构(例如持久事务日志)。例如,分配模块1904可以响应于通过请求模块1902所接收的诸如打开请求等的请求,初始化或打开可持久数据结构。在一些实施例中,分配模块1904可以将逻辑标识符与被打开的或被初始化的持久数据结构相关联。例如,分配模块1904可以与文件系统模块1558协作以便向持久数据结构指派文件名称,可以与贮存管理模块1050协作以便将诸如LBA的逻辑标识符的范围指派给持久数据结构,可以与自动提交存储器模块1011协作以便将持久ACM标识符指派给持久数据结构,等等。在一些实施例中,请求模块1902可以接收用于持久数据结构的诸如文件名称、LBA范围、LUN ID等的逻辑标识符,作为打开请求等的参数。在另一实施例中,分配模块1904、文件系统模块1558、贮存管理模块1050、自动提交存储器模块1011等可以将下一个可用的逻辑标识符指派给持久数据结构,或者可以使用另一预先确定的或抑制的方法以便指派逻辑标识符。

在一个实施例中,分配模块1904可以分配自动提交存储器模块1011的存储器区域,用于存储持久数据结构。如此处使用的,存储器区域可以包括存储器页、存储器缓冲器、存储器地址范围、存储器元件、存储器模块和/或对于自动提交存储器模块1011而言可用的一个或多个ACM缓冲器1013中的另一子集。在一个实施例中,分配模块1904可以为每个被请求的持久数据结构分配ACM缓冲器1013的存储器的区域。在另一实施例中,分配模块1904可以与自动提交存储器模块1011协作以便动态地分配ACM缓冲器1013的可用存储器,基于用于不同持久数据结构的存取频率、最近存取、存取历史、输入速率或写入熟虑等,按照其被访问的情况来向持久数据结构分配存储器。

在一个实施例中,写入模块1906被配置以便对来自于客户机的输入数据进行接收、提取、传输或处理,用于写入、更新、或附加至持久数据结构。例如,请求模块1902所接收的写入请求或附加请求可以包括要被写入或附加至由请求所标记的持久数据结构的参照数据,所述参照数据可以被写入模块1906使用以便向ACM缓冲器1013写入数据。在一个实施例中,写入模块1906可以将写入请求的数据写入至ACM缓冲器1013自身。在另一实施例中,在另一实施例中,写入模块1906可以监视ACM缓冲器1013的一个或多个区域,或者可以接收这样的警告/通知,即客户机已经向ACM缓冲器1013的一个或多个区域写入数据,等等。

根据持久数据结构的类型,不同的数据操作可以是可接受的或者可以被支持。例如,在一些实施例中,持久事务日志可以是严格地仅附加,而在持久链表中的条目可以被重写。在一个实施例中,写入请求可以表明在持久数据结构中要将相关联的数据写入到哪里(例如,那么节点、字段、行、列、条目等)。在另一实施例中,可以通过用于诸如仅附加的事务日志等的持久数据结构类型的规则、定义或模式来定义用于数据的位置。在一个实施例中,写入请求、附加请求等可以包括要与相关联的写入数据一起被写入的数据结构元数据(例如时间戳、顺序号、标记、标识符、指针等)。在另一实施例中,写入模块1906可以基于持久数据结构的状态、基于来自元数据模块1912的用于可持久数据结构的元数据、通过递增用于持久数据结构的指针、顺序号或标识符等等,来确定要与数据相关联地被写入的数据结构元数据。

在一些实施例中,写入模块1906可以通过将数据写入或存储至ACM缓冲器1013的区域内来将数据写入至数据结构、将数据存储在数据结构内、将数据附加于数据结构等,这在即使发生故障提交或重启事件的情况下也可以保证或者确保数据的可持久性。在一些实施例中,如果持久数据结构并未被分配在ACM缓冲器1013等内的存储器区域,那么写入模块1906可以将持久数据结构的数据写入至非易失性存储器介质110、1110、1502。在另一实施例中,写入模块1906可以与分配模块1904和/或自动提交存储器模块1011协作,以便响应于用于持久数据结构的写入请求、附加请求等,将ACM缓冲器1013的存储器区域分配给持久数据结构。

写入模块1906可以与元数据模块1912、文件系统模块1558、贮存管理模块1050、和/或自动提交存储器模块1011协作,以便更新逻辑-至-物理映射、系统元数据等用于被更新的持久数据结构的一个或多个逻辑标识符,就像下文参考元数据模块1912所描述的那样。例如,响应于对于持久事务日志的附加请求,写入模块1906和/或元数据模块1912可以延长通过文件系统模块1558与持久事务日志的文件相关联的文件长度,在将用于更新数据的LBA的范围映射至ACM缓冲器1013中存储数据的位置的逻辑-至-物理映射结构中增加条目,递增对持久事务日志的附加点进行标识的指针,等等。

在一个实施例中,为了将ACM缓冲器1013的快速写入(fast write)次数提供至向持久数据结构写入的应用或其他客户机,即使在ACM缓冲器1013的相对小的容量的情况下,写入模块1906也可以与下文描述的降级模块1908协作以便使用ACM缓冲器1013的存储器区域作为环形缓冲器、乒乓缓冲器、滚动缓冲器、滑动窗口等,在ACM缓冲器1013的不同存储器区域之间交替以便写入持久数据结构的数据,而降级模块1908对来自于未被写入的存储器区域中的数据进行降级、复制或传输。以这种方式,只有在降级模块1908已经对事先写入的数据进行了降级、复制、传输、提交或保持之后,写入模块1906才可以再次使用或者重写ACM缓冲器1013的存储器区域,这在仍然确保可持久性的同时提供了ACM缓冲器1013的高效利用。

在一些实施例中,写入模块1906可以从客户机中接收数据,和/或可以以与降级模块1908将数据降级、复制或传输至非易失性存储器媒介110、1110、1502相比不同的速率写入数据。如此处使用的,输入速率包括写入模块1906对用于一个或多个持久数据结构的数据进行接收和/或写入的速率。如此处使用的,传输速率包括降级模块1908将一个或多个持久数据结构传输、复制、清除、移动、同步或降级至非易失性存储器介质110、1110、1502的速率。在一个实施例中,写入模块1906可以与降级模块1908协作以便基于持久数据结构的传输速率来对持久数据结构的写入速率进行限制,使得写入模块1906并不使被分配给持久数据结构的存储器区域溢出。

在一些实施例中,由于输入速率和传输速率可能不是不变的,写入模块1906可以限制输入速率使得,在预定义的时间段上,用于持久数据结构的输入速率等于传输速率或者低于传输速率。然而,在一些实施例中,只要写入模块1906没有使被分配给持久数据结构的存储器区域溢出,输入速率可以在给定的时刻超过传输速率。此外,基于瞬间传输速率、采样的传输速率的移动平均值、在所分配的存储器区域内保留的存储器数量等,写入模块1906可以限制输入速率。在多种实施例中,通过对写入数据的客户机处理进行阻止、延迟、节制、支配、休眠或限制,写入模块1906可以限制输入速率。

在一个实施例中,降级模块1908被配置以便将数据从ACM缓冲器1013降级至非易失性存储器110、1110、1502,所述数据例如是写入模块1906如上文所述地已经向ACM缓冲器1013写入的持久数据结构数据。在一些实施例中,降级模块1908对ACM缓冲器1013的还未被非易失性存储器介质110、1110、1502存储的诸如新数据、更新数据等的数据进行清除或降级。如上文所述,可以通过ACM元数据1015或者其他受触发的提交元数据来表明数据在非易失性存储器介质110、1110、1502中的位置,例如LBA、物理地址等。在一些实施例中,基于ACM元数据1015、肮脏数据位图、来自于元数据模块1912中的持久数据结构元数据等等,降级模块1908将数据从ACM缓冲器1013复制、传输、降级、移动或写入至非易失性存储器介质110、1110、1502自身。

在另一实施例中,通过触发自动提交存储器模块1011、提交管理装置1122、提交代理1020等以便进行提交动作用于由用于数据的ACM元数据1015所标识或定义的数据,降级模块1908可以使得数据从ACM缓冲器1013复制、传输、降级、移动或写入至非易失性存储器介质110、1110、1502。例如,如上文所描述的,自动提交缓冲器1013可以被装备有ACM元数据1015,以便进行提交动作用于保存或保持所存储的数据。降级模块1908可以利用该预装备,以便将数据从自动提交缓冲器1013降级、提交或传输至非易失性存储器介质110、1110、1502。在一些实施例中,降级模块1908可以包括自动提交存储器模块1011、提交管理设备1122、提交代理1020等,或者与自动提交存储器模块1011、提交管理设备1122、提交代理1020等协作或者相集成。

尽管在特定实施例中写入模块1906可以作为前台处理操作,在前台将数据写入或者允许数据被写入至ACM缓冲器1013,但是在特定实施例中降级模块1908可以作为后台处理操作。例如,在一个实施例中,在系统故障停机期间、在低通信量时段期间等,降级模块1908可以对数据周期性地、迟钝地进行降级、复制、传输、移动或同步。在一个实施例中,降级模块1908可以响应于触发,对数据进行降级、复制、传输、移动或同步。所述触发与上文中结合ACM元数据1015描述的用于提交动作的触发相比较,可以是相同的或者基本上相似的。在另一实施例中,写入模块1906可以基于输入速率来触发降级模块1908,从而控制降级模块1908的传输速率。

在另一实施例中,响应于存储在ACM缓冲器1013的区域内的持久数据结构的数据量超过预定义的阈值,可以触发降级模块1908。例如,如果ACM缓冲器被组织成4KB的页,那么,响应于对4KB的页进行填入的写入模块1906,可以触发降级模块1908,以便将数据从4KB的页降级、复制、传输、或移动至非易失性存储器介质110、1110、1502。在另一实施例中,根据非易失性存储器介质1906等的架构,对写入模块1906写入与页大小或非易失性存储器介质1906的其他区域大小相等的数据量进行响应,可以激活降级模块1908。在另一实施例中,降级模块1908可以被周期性地触发,响应于从上一次触发起算经过的时间段等。在一个实施例中,可以通过监视装置或与ACM缓冲器1013的存储器相关联的诸如写入模块1906、自动提交存储器模块1011或者其他模块的监视模块,来触发降级模块1908。在另一实施例中,可以通过同步请求、降级请求、或者请求模块1902从客户机中接收的其他请求来触发降级模块1908。在另一些实施例中,可以通过另一个确定的在状态上的改变、在一个或多个ACM缓冲器1013的存储器的条件、要素或属性上的改变来触发降级模块1908。

在一个实施例中,降级模块1908将持久数据结构从ACM缓冲器1013中以这样的方式复制、传输、移动或降级,通过该方式,数据不再存储在ACM缓冲器1013内。例如,降级模块1908可以响应于将数据存储在非易失性存储器媒介110、1110、1502中,将数据从ACM缓冲器1013中擦除或删除。在另一实施例中,降级模块1908可以以这样的方式从ACM缓冲器1013中复制数据,借助该方式,数据的副本保留在ACM缓冲器1013内。例如,一旦降级模块1908已经将数据存储在非易失性存储器媒介110、1110、1502中,此后当需要ACM缓冲器1013的容量时,降级模块1908可以允许写入模块1906重写ACM缓冲器1013内的数据。

在一个实施例中,降级模块1908可以以保存数据与持久数据结构的逻辑标识符之间的关联的方式将数据从ACM缓冲器1013的存储器区域中写入至非易失性存储器媒介110、1110、1502。例如,降级模块1908可以将文件名称、逻辑地址的范围或者其他逻辑标识符随同数据一起写入至非易失性存储器介质110、1110、1502,可以利用数据的新物理位置来更新逻辑-至-物理映射结构,可以向元数据模块1912提供用于数据的新物理位置,可以用更新标示数据被保存在非易失性存储器介质110、1110、1502中的文件系统元数据,等等。在一些实施例中,通过确保数据保持与持久逻辑标识符相关联,降级模块1908确保使用持久逻辑标识符。持久数据结构对于客户机而言保持可存取。

在一些实施例中,不管数据的一部分是否可能已经被保存在非易失性存储器介质110、1110、1502内,降级模块1908都对整个范围或区域的数据进行传输或降级。在另一实施例中,降级模块1908仅仅可对尚未存储在非易失性存储器介质110、1110、1502内的肮脏数据进行传输或降级,而不对非易失性存储器介质110、1110、1502已经存储的干净数据进行传输或降级。在一些实施例中,降级模块1908将数据从一个或多个自动提交缓冲器1013传输、复制或降级至诸如非易失性存储器介质110、1110、1502等的,可以比一个或多个自动提交缓冲器1013具有更大容量、更短的反应时间等的另一个位置。

降级模块1908可以基于同步或降级请求、基于ACM元数据1015等来确定持久数据结构的数据的目的地是在非易失性贮存装置1102内还是在非易失性存储器介质110、1110、1502内等等,并且可以在非易失性贮存装置1102内内部地传输或降级数据。例如,基于同步或降级请求的数据的目的地逻辑标识符,降级模块1908可以确定同步或降级请求的数据的目的地命名空间或地址空间是否与诸如非易失性存储器介质110、1110、1520的非易失性贮存装置1102相关联,并且如果目的地命名空间或地址空间与非易失性贮存装置1102相关联,则可以将来自于ACM缓冲器1013中的数据在非易失性贮存装置1102内内部地传输或降级(例如,在非易失性贮存装置1102内传输、复制或移动数据,将数据传输、复制或移动至在ACM 1011、1111内的另一位置,将数据传输、复制或移动至非易失性存储器媒介110、1110、1502,等等)。

如果用于同步或降级请求的目的地、由ACM元数据10115指明的提交位置等不位于非易失性贮存装置1102内,那么,通过使用PIO操作、DAM操作、第三方DMA操作、RDMA操作、块装置接口、操作系统贮存栈等,通过在系统通信总线104上传输数据,通过使用主机装置1014的处理器1012等等,降级模块1908可以将数据从ACM 1011、1111中传输或降级至位于非易失性贮存装置1102之外的位置处。响应于对来自于ACM 1011、1111的一个或多个自动提交缓冲器1013的降级请求的数据进行传输或降级,降级模块1908可以从ACM 1011中将数据删除、移除、裁剪、变为无效、擦除或清除,并且再次使用在一个或多个自动提交缓冲器1013内的与数据相关联的贮存容量。

在一个实施例中,在将数据从ACM 1011中传输或降级之前,降级模块1908可以确保数据的一致性(例如,将数据从主机装置1014的复合处理机1012中转储至一个或多个自动提交缓冲器1013)。例如,降级模块1908可以发出将数据从复合处理机1012转储至一个或多个自动提交缓冲器1013的串行化指令,可以将降级标识符或其他标记放置在与非易失性贮存装置1102相关联的复合处理机1012内(例如,将降级标识符或其他标记存储至虚拟存储器地址,所述虚拟存储器地址被映射至非易失性贮存装置1102内的控制状态寄存器或其他预定义的位置),可以发出第二串行化指令以便转储来自于复合处理机1012的降级标识符或其他标记。在表明成功完成第一顺序化指令和要被降级的数据的一致性的情况下,降级模块1908可以将数据从ACM缓冲器1013传输、降级或写入至目的地位置,响应于在非易失性贮存装置1102中接收到降级标识符或其他标记。

就像上文中关于写入模块1906所描述的那样,在ACM缓冲器1013的不同存储器区域之间交替以便对持久数据结构的数据进行降级的情况下,降级模块1908和写入模块1906可以协作以便使用ACM缓冲器1013的两个或多个区域作为环形缓冲器、乒乓缓冲器、滚动缓冲器、滑动窗口等,而写入模块1906向降级模块1908当前并不从其中降级数据的存储器区域写入数据,这在仍然确保可持久性的同时高效地利用了ACM缓冲器1013。

如上文所描述的,降级模块1908可以与写入模块1906协作,以便确保用于ACM缓冲器1013等的持久数据结构的传输速率至少平均地或随时间地匹配或超过用于ACM缓冲器1013等的持久数据结构的输入速率。在多种实施例实施例中,写入模块1906可以如上文所述地限制输入速率。在一些实施例中,除了或替代对输入速率进行限制的写入模块1906,降级模块1908可以增大用于持久数据结构的传输速率,响应于持久数据结构的输入速率增大,等等。写入模块1906和/或降级模块1908可以针对单独的持久数据结构、针对持久数据结构的集合、针对ACM缓冲器1013的一个或多个区域、针对整个ACM 1011、或者以另一粒度管理输入速率和/或传输速率。

在一个实施例中,降级模块1908可以通过增大每次、在单个事务中等从ACM缓冲器1013中复制、传输或降级至非易失性存储器介质110、1110、1502的数据量或数据大小,来增大传输速率。例如,降级模块1908可以最初一次一页地复制、传输或降级数据,并且随时间响应于增大的输入速率可以将数据量或数据大小增大至两页、三页、四页等。在另一实施例中,降级模块1908可以通过增加每次操作以便复制、传输或降级数据的并行的经济处理或线程的数目,来增大传输速率。在一些实施例中,降级模块1908可以既增大传输规模又增加并行降级处理或线程的数目,以便增大传输速率。

在一些实施例中,降级模块1908增大传输速率的方式可以依赖于降级模块1908试图跟踪或匹配的输入速率的量值。例如,对于低于阈值输入速率、传输速率或降级规模的降级模块1908而言,增大每次传输操作中被复制至非易失性存储器介质110、1110、1502的数据规模量可以是更为有效的,但是对于高于阈值输入速率、传输速率、或降级规模的降级模块1908而言,增加复制数据的并行传输处理的数目可以是更有效的。

在一些实施例中,降级模块1908和/或写入模块1906可以管理输入速率和/或传输速率,使得至少预定义数量的额外或空闲存储器容量保留用于持久数据结构,所述额外或空闲存储器容量用作在写入模块1906和降级模块1908之间的填充区或缓冲器。例如,写入模块1906和/或降级模块1908可以管理输入速率和传输速率,使得大约三分之一的所分配的存储器容量保留作为填充区或缓冲器,同时所分配的存储器容量的大约三分之一被写入模块1906使用并且所分配的存储器容量的三分之一被降级模块1908使用,等等。根据ACM缓冲器1013的、非易失性存储器介质110、1110、1502等的架构和传输速率,其他比率可能或多或少是最优的,并且写入模块1906和/或降级模块1908可以相应地管理输入速率和/或传输速率。

在一些实施例中,替代管理用于持久数据结构的输入速率和/或传输速率,降级模块1908可以允许持久数据结构不同步或在事务上不一致,直到所有者或其他客户机向请求模块1902发出同步请求为止。在这样的实施例中,即使持久数据结构的所有者或客户机尚未发送同步请求,降级模块1908也可以降级、复制或传输数据以便管理用于ACM缓冲器1013的可用贮存容量。在一些实施例中,以这种方式,应用或其他客户机可以根据ACM缓冲器1018的架构或物理限制、在无需写入模块1906限制输入速率的情况下、如其所需要那么快地向持久数据结构写入数据,并且可以仅仅向请求模块1902发出同步请求以便按需要地同步或检验点(checkpoint)持久数据结构。

图10B示出持久数据结构模块1009的另一实施例。在一个实施例中,持久数据结构模块1009可以基本上类似于上面描述的一个或多个持久数据结构模块1009。在示出的实施例中,图10B的持久数据结构模块1009包括请求模块1902、写入模块1906、降级模块1908,并且还可以包括实施模块1910、元数据模块1912、读取模块1914、关闭模块1916和映射模块1918。

在一个实施例中,实施模块1910被配置以便实施用于持久数据结构和/或持久数据结构类型的一个或多个规则。例如,可以通过一个或多个规则、限制、定义等的集合来定义或结构化每种不同类型的数据结构。所述规则可以定义用于数据结构的一个或多个允许的或可接受的数据操作。对于事务日志,实施模块可以实施一个或多个规则,例如条目必须是顺序的,数据条目不能被重写或更新等等。实施模块1910可以为不同类型的数据结构实施不同的规则。例如,实施模块1910可以为持久队列数据结构实施严格的FIFO规则,可以为持久栈数据结构实施严格的LIFO规则,可以为持久树数据结构实施数据条目或节点的严格顺序或层次结构,可以为特定持久数据结构实施要求特定数据类型或需要的字段或条目的规则,等等。

在一个实施例中,实施模块1910与请求模块1902协作以便提供诸如API、共享库、通信协议等的接口,所述接口实施或要求满足用于持久数据结构的一个或多个规则。例如,替代支持具有用于逻辑标识符的参数和相对于逻辑标识符而言要写入数据的偏移量的写入请求,实施模块1910和请求模块1902可以支持用于持久事务日志的附加请求,所述持久事务日志具有逻辑标识符参数但是不具有偏移量或地址参数,这使得写入模块1906将数据附加至所标识的持久事务日志,并且可以不指定在持久事务日志内的偏移量或地址,实施持久事务日志的规则。以此方式,实施模块1910可以通过一个接口来被动地实施用于持久数据结构的一个或多个规则。

在一些实施例中,实施模块1910可以通过主动地阻止、拦截、或停止违反一个或多个规则的请求或操作的执行,来实施用于持久数据结构的一个或多个规则。例如,实施模块1910可以有效地监视被分配至持久事务日志的存储器区域,并且可以有效地阻止或避免写入至除了附加点位置之外的任何位置处,使得数据可以不被重写。在一个实施例中,实施模块1910可以使用被动的接口定义和主动的阻止二者的组合,实施用于持久数据结构的一个或多个规则或定义。例如,实施模块1910可以与请求模块1902协作以便提供用于持久事务日志的仅附加的接口,并且可以使用诸如块装置接口1520、存储器语义接口1522等的不同接口,主动地阻止或避免重写持久事务日志的数据。以这种方式,实施模块1910可以避免应用或其他客户机无意地或偶然地重写或破坏持久数据结构的一致性,确保持久数据结构满足数据结构的严格定义、规则等。

在一个实施例中,元数据模块1912维持和/或提供对这样的元数据的存取,所述元数据跟踪一个或多个持久数据结构的哪些数据被存储在或保留在ACM缓冲器1013的易失性存储器内并且哪些数据被存储在或保留在非易失性存储器介质110、1110、1520内。例如,元数据模块1912可以维持干净/肮脏位图、表或者其他数据结构,其使用表明相关联数据状态的标志或其他指示符,表明哪些数据被存储在ACM缓冲器1013内但是还未被非易失性存储器介质110、1110、1502存储。在另一实施例中,使用一个或多个逻辑-至-物理映射结构,通过将用于持久数据结构的逻辑标识符映射至在ACM缓冲器1013或非易失性存储器介质110、1110、1502内的物理位置,元数据模块1912可以跟踪哪些数据被存储在ACM缓冲器1013内并且哪些数据被存储在非易失性存储器介质110、1110、1502内。例如,元数据模块1912可以与文件系统模块1558协作以便维持对文件名称和相对于在一个或多个ACM缓冲器1013和非易失性存储器介质110、1110、1502中的位置而言的偏移量进行跟踪的文件系统元数据,可以与贮存管理模块1050协作以便维持将诸如LBA的逻辑地址跟踪或映射至在一个或多个ACM缓冲器1013和非易失性存储器介质110、1110、1502等中的物理位置的逻辑-至-物理映射结构。

响应于将数据写入ACM缓冲器1013的写入模块1906、客户机等,响应于将数据从ACM缓冲器1013降级、清除、复制、写入或存储至非易失性存储器介质110、1110、1502的降级模块1908等,元数据模块1912可以更新元数据。在一些实施例中,元数据模块1912可以在从重启事件、故障条件等中恢复期间可以对在非易失性存储器介质110、1110、1502中的数据进行扫描或处理以便重建丢失的元数据、修复受损的元数据等,使得逻辑-至-物理映射是准确的,并且使得请求模块1902、写入模块1906、读取模块1914、文件系统模块1559和/或贮存管理模块1050可以响应于检测到重启事件、错误条件或者其他触发,在重启事件之后使用通过ACM 1011提交或转储至非易失性存储器介质110、1110、1502中的数据,提供对持久数据结构的存取。

分配模块1904、写入模块1906、降级模块1908、读取模块1914、关闭模块1916、映射模块1918、文件系统模块1558和/或贮存管理模块1050可以被配置以便即使持久数据结构包括ACM缓冲器1013的易失性存储器内和非易失性存储器介质110、1110、1502中存储的数据,基于来自于元数据模块1912的指明用于持久数据结构的一个或多个位置的元数据,基于与数据相关联的逻辑标识符,也满足或实现用于持久数据结构的一个或多个请求。

在一个实施例中,读取模块1914向请求客户机提供持久数据结构的数据。读取模块1914可以将持久数据结构或持久数据结构的被请求的部分复制或加载至被映射至在主机装置1014上的客户机的虚拟存储器内、直接到主机装置1014自身的易失性存储器中,可以通过块装置接口1520、存储器语义接口1522、SML API 1019、持久数据接口接口等来提供持久数据结构或其部分。在一些实施例中,通过在来自于元数据模块1912中的元数据中查找用于持久数据结构的逻辑标识符,并且通过提取要提供给请求客户机的持久数据结构的不同部分,读取模块1914可以提供对保留在ACM缓冲器1013的易失性存储器内和在非易失性存储器介质110、1110、1502中的持久数据结构的存取。

在一个实施例中,关闭模块1916被配置以便响应于请求模块1902从客户机中接收到用于持久数据结构的关闭请求,来关闭持久数据结构。在一个实施例中,关闭持久数据结构包括锁定持久数据结构,使其仅可读。在另一实施例中,通过从在ACM缓冲器1013和/或非易失性存储器介质110、1110、1502中对持久数据结构的数据进行无效化、删除、擦除、裁剪、移除或清除,关闭模块1916可以关闭持久数据结构。使用来在于用于持久数据结构的关闭请求中的逻辑标识符,关闭模块1916可以核对由元数据模块1912维持的元数据,以便确定在ACM缓冲器1013和/或非易失性存储器介质110、1110、1502中关闭的持久数据结构的位置。在其中关闭模块1916无效化或者标记被关闭的持久数据结构用于删除的实施例中,独立的垃圾收集或贮存容量恢复处理可以在此后回收被关闭的持久数据结构的贮存容量。

在一个实施例中,映射模块1918被配置以便响应于请求模块1902从客户机接收到映射请求,将ACM缓冲器1013的一个或多个区域映射至在主机装置1014上的客户机的虚拟存储器内。在一些实施例中,映射模块1918可以将与持久数据结构相关联的ACM缓冲器1013的区域映射至虚拟存储器,以便提供对持久数据结构的存取。在一些实施例中,与文件系统模块1558等协作,使用存储器映射文件I/O,映射模块1918可以将持久数据结构的文件映射至虚拟存储器,响应于来自客户机的、具有文件名称或其他用于持久数据结构的逻辑标识符的映射请求所做。上文中描述了诸如MMIO、端口I/O、PMIO、存储器映射文件I/O等的多种存储器映射技术,借此可以对ACM 1011进行存取。映射模块1918可以使用这些或其他存储器映射技术中的一个或多个,以便提供对持久数据结构的存储器语义存取。

如上文所描述的,一旦数据已经被存储在自动提交缓冲器1013中,在从重启事件中恢复之后,ACM 1011保存或保持数据在非易失性存储器媒介110、1110、1502中,并且将数据从非易失性存储器媒介110、1110、1502提供至诸如ACM用户1016的客户机。持久数据结构模块1009和如上文所描述的各种子模块1902、1904、1906、1908、1910、1912、1914、1916、1918可以被布置在诸如贮存管理模块1050的用于在主机装置1014的处理器1012上执行的ACM 1011的装置驱动器内,可以被布置在用于ACM 1011的贮存控制器104、1004、1104、1304内,和/或可以包括在装置驱动和贮存控制器104、1004、1104、1304等之中的每一个中的部分。

图11示出地址映射结构2000、逻辑地址空间2120和顺序的、基于日志的、仅附加的写入结构2140的实施例。在一个实施例中,通过元数据模块1912、贮存控制器104、1004、1104、1304、贮存管理层1050、逻辑-至-物理转化层或者地址映射结构等来维持地址映射结构,以便在ACM 1011等中将LBA或其他逻辑地址映射至在非易失性贮存媒介1110上的物理位置。例如,在一个实施例中,元数据模块1912可以使用地址映射结构2000以便通过与逻辑地址的范围相关联的持久数据结构的每个分离的部分,确定并且跟踪持久数据结构的哪些部分被保存在易失性ACM缓冲器1013和持久数据结构的哪些部分被保存在非易失性贮存存储器1110。

尽管主要涉及非易失性贮存模块1110来描述所示出的实施例,但是在其他实施例中,地址映射结构2000可以将持久数据结构的其他逻辑标识符映射至在自动提交缓冲器1013和/或非易失性贮存媒介110等内的位置。在示出的实施例中,地址映射结构2000是具有多个条目的B树。在示出的实施例中,地址映射结构2000的节点包括对在非易失性贮存装置1102中的物理位置的直接引用。在其他实施例中,地址映射结构2000可以包括链接,所述链接映射至在反向映射(reverse map)中的条目,等等。在多种实施例中,在有或没有反向映射的情况下都可以使用地址映射结构2000。在其他实施例中,在地址映射结构2000中的引用可以包括字母数字字符、十六进制字符、指针、链接等。

在示出的实施例中,地址映射结构2000包括多个节点。在示出的实施例中,每个节点可以保存两个条目。在另一实施例中,每个节点可以能够存储大量的条目,使用过程中,随着地址映射结构2000增大或缩小,在每一级别上的条目的数量可以改变。

在示出的实施例中,每个条目将非易失性贮存装置1102的LBA的可变地址范围映射至在用于非易失性贮存装置1102的贮存模块1110中的物理位置。此外,尽管在示出的实施例中通过起始地址和结束地址来表达LBA的可变长度范围,但是在其他实施例中可以通过起始地址和长度等来表达LBA的可变长度范围。在一个实施例中,大写字母“A”至“M”表示在非易失性贮存装置1102的物理贮存媒介1110内的逻辑或物理擦除块,所述非易失性贮存装置1102存储有相应的LBA的范围的数据。在其他实施例中,大写字母可以表示非易失性贮存装置1102的其他物理地址或位置。在示出的实施例中,大写字母“A”至“M”也被示出在基于日志的写入结构2140中,其表示非易失性贮存装置1102的物理贮存媒介1110。

在示出的实施例中,在地址映射结构2000中的成员关系(membership)表示在非易失性贮存装置1102中的成员关系(或贮存)。在另一实施例中,条目还可以包括指示符,所述指示符指明非易失性贮存装置1102是否存储与在LBA的范围内的逻辑块相对应的数据、反向映射的数据和/或其他数据。

在示出的实施例中,根节点2008包括条目2102、2104,其具有非临接范围的LBA。在根节点的两个条目2102、2104之间存在LBA“208”处的“洞”。在一个实施例中,“洞”表明非易失性贮存装置1102未存储与对应于“洞”的一个或多个LBA对应的数据。在一个实施例中,非易失性贮存装置1102支持具有LBA的多个连续或非连续范围(例如,其中包括一个或多个“洞”的范围)的块I/O请求(读取、写入、裁剪(trim)等)。在一个实施例中,“洞”可以是单个块I/O请求的结构,所述请求具有两个或多个非临接范围的LBA。在另一实施例中,“洞”可以是几个不同的块I/O请求的结构,所述请求具有与“洞”毗邻的LBA范围。

在示出的实施例中,在节点2014的条目2106、2108之间、在节点2014的左侧子节点的条目2110、2112之间、在节点2018的条目2114、2116之间、以及在节点2118的条目之间存在相似的“洞”或非临接范围的LBA。在一个实施例中,在父节点和子节点中的条目之间也可能存在相似的“洞”。例如,在示出的实施例中,在节点2014的左侧条目2106和节点2014的左侧子节点的右侧条目2112之间,存在LBA“060-071”的“洞”。

在示出的实施例中,在逻辑地址“003”2130处的非易失性贮存装置1102的逻辑地址空间2120中,也可以看到在LBA“003”处的“洞”。在LBA“003”2140处的斜条表示空位置、或者非易失性贮存装置1102对其并不存储数据的位置。在逻辑地址空间2120中的LBA 2134处的“洞”归因于一个或多个具有非临接范围的块I/O请求、对非易失性贮存装置1102的裁剪或其他取消分配命令、等等。地址映射结构2000支持由于逻辑地址空间2120的稀疏和/或稀薄供应的特性而使得的“洞”、非临接范围的LBA等。

在示出的实施例中,非易失性贮存装置1102的逻辑地址空间2120被稀疏地和/或稀薄地供应,并且大于物理贮存容量和相应的非易失性贮存装置1102的贮存装置地址空间。在示出的实施例中,非易失性贮存装置1102具有64位逻辑地址空间2120,其开始在逻辑地址“0”2122处并且延伸至逻辑地址“264-1”2126。由于贮存装置地址空间仅仅对应于非易失性贮存装置1102的逻辑地址空间2120的子集,其余的逻辑地址空间2120可以被分配、映射和使用,用于非易失性贮存装置1102的其他功能。

在示出的实施例中,顺序的、基于日志的、仅附加的写入结构2140是非易失性贮存装置1102的物理贮存媒介1110的逻辑表达。在一些实施例中,在附加点2144处将数据附加于基于日志的写入结构2144的情况下,非易失性贮存装置1102顺序地存储数据。在另一实施中,非易失性贮存装置1102使用贮存空间恢复处理,例如垃圾收集模块或对存储有取消分配/未利用的逻辑块的非易失性贮存媒介1110进行重用的其他贮存空间恢复模块。在示出的实施例中,存储有取消分配/未利用的逻辑块的非易失性贮存媒介1110被添加至用于非易失性贮存装置1102的可用贮存器池2146。在一个实施例中,通过如上文所述地从非易失性贮存装置1102中清除无效数据并且将与所清除的数据相对应的物理贮存器容量添加回至可用贮存器池2146,基于日志的写入结构2140是循环的、类似环状的,并且具有理论上无限的容量。

在示出的实施例中,附加点2144以圆形样式2142围绕基于日志的、仅附加的写入结构2140前进。在一个实施例中,圆形样式2142的损耗(wear)对非易失贮存媒介122进行平衡,增加了非易失性贮存媒介1110的可用生命周期。在示出的实施例中,垃圾收集模块或其他贮存容量恢复处理已经将几个块2148、2150、2152、2154标记为无效,通过在块2148、2150、2152、2154上标记“X”来表达。在一个实施例中,垃圾收集模块将恢复有效块2148、2150、2152、2154的物理贮存容量并且将所恢复的容量添加至可用贮存器池2146。在示出的实施例中,更改版本的块2148、2150、2152、2154已经被附加基于日志的写入结构2140,作为在读写、修改、写入操作等中的新块2156、2158、2160、2162,允许原来的块2148、2150、2152、2154被恢复。

图12示出用于持久数据结构的方法2200的实施例。方法2200开始,并且分配模块1904将逻辑标识符与数据结构相关联2202。写入模块1906将数据结构的数据写入2204至易失性存储器模块1013的第一区域,其被配置以便确保如上文所述地响应于触发而保存数据。降级模块1908将数据结构的数据从易失性存储器模块1013复制2206至非易失性贮存介质110、1110、1502,使得数据结构的数据保持与逻辑标识符相关联2202,并且方法2200结束。

图13示出用于持久数据结构的方法2200的另一实施例。方法2200开始,并且请求模块1902确定2302持久数据结构请求是否已经被接收。如果没有接收到持久数据结构请求,那么请求模块1902继续监视2302请求。如果请求模块1902已经接收到2304打开请求,那么分配模块1904初始化和/或打开持久数据结构,将初始化的2308持久数据结构与逻辑标识符等相关联。如果请求模块1902已经接收到2306写入请求,那么写入模块1906将所接收到的写入请求2306的数据写入到ACM缓冲器1013的所分配的区域,其中降级模块1908可以将数据复制至非易失性存储器介质110、1110、1502。如果请求模块1902接收到了2302不同类型的请求,那么,相关联的模块满足2312所接收到的2302持久数据结构请求(例如降级模块1908对数据进行降级以便满足2312同步或降级请求,读取模块1914提供持久数据结构的数据以便满足2312读取请求,关闭模块1916关闭持久数据结构以便满足关闭请求,映射模块1918将ACM 1013的区域、持久数据结构映射至在主机装置1014上的客户机的虚拟存储器以便满足映射请求,等等),并且方法2300继续。

在各种实施例中,用于满足对包括存储在易失性缓冲器1013中的数据和存储在非易失性记录介质110、1110、1502中的数据的持久数据结构的一个或多个请求的装置可以包括持久数据结构1009、请求模块1902、分配模块1906、写入模块1906、降级模块1908、读取模块1914、关闭模块1916、映射模块1918、文件系统模块1558、贮存管理模块105、自动提交存储器模块1011、块装置接口1520、存储器语义接口1522、SML API 1019、装置驱动、贮存控制器104、1004、1104、1304、处理器1012、其他逻辑硬件、和/或在计算机可读贮存介质上存储的其他可执行代码。其他实施例可以包括相似的或等价的装置,所述装置用于满足对持久数据结构的一个或多个请求。

在多种实施例中,用于将存储在易失性缓冲器1013中的数据提交至非易失性记录介质110、1110、1502的装置可以包括降级模块1908、自动提交存储器模块1011、自动提交缓冲器1013、提交管理设备1122、提交代理1020、写入数据管线106、贮存管理器104、1004、1104、1304、处理器1012、其他逻辑硬件、和/或存储在计算机可读贮存介质上的其他可执行代码。其他实施例可以包括用于提交数据的相似或等价装置。

在各种实施例中,用于在重启事件之后使用与持久数据结构相关联的逻辑标识符,提供对来自于非易失性记录介质110、1110、1502中的持久数据结构的存取的装置可以包括持久数据结构模块1009、请求模块1902、读取模块1914、映射模块1918、文件系统模块1558、贮存管理模块1050、自动提交存储器模块1011、块装置接口1520、存储器语义接口1522、SML API1019、装置驱动、贮存控制器104、1004、1104、1304、处理器1012、其他逻辑硬件、和/或存储在计算机可读贮存介质上的其他可执行代码。其他实施例可以包括用于提供对持久数据结构的存取的相似或等价装置。

在各种实施例中,用于实现持久数据结构的仅附加的规则使得数据结构的数据不被重写的装置可以包括:持久数据结构模块1009、实现模块1910、请求模块1902、文件系统模块1558、贮存管理模块1050、自动提交存储器模块1011、块装置接口1520、存储器语义接口1522、SML API 1019、装置驱动、贮存控制器104、1004、1104、1304、处理器1012、其他逻辑硬件、和/或存储在计算机可读贮存介质上的其他可执行代码。其他实施例可以包括用于实现仅附加的规则的相似或等价装置。

可以以其他具体的形式实现本公开,而不脱离其主旨或基本特征。所描述的实施例在各个方面都应仅仅被看做描述性的,而不是限制性的。因此,本公开的范围应当由权利要求来表明,而不是通过前面的描述。在权利要求的等价的意义和范围内进行的所有改变都包含在其保护范围内。

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