用于存储和从闪存恢复数据的方法和系统与流程

文档序号:11807767阅读:193来源:国知局
用于存储和从闪存恢复数据的方法和系统与流程

本申请要求2015年5月19日提交的美国临时专利申请序号62/163,782的优先权。美国临时专利申请序号62/163,782被整体地通过引用结合到本文中。



背景技术:

系统可以向持久性储存器写入数据和从持久性储存器读取数据的速度常常是系统的总体性能中的关键因素。用以从持久性储存器读取数据和向其写入数据的传统方法要求在系统核中由多个层且在硬件中由多个实体进行处理。结果,从持久性储存器读取数据和向其写入数据在系统中引入显著的等待时间,并且因此降低了系统的总体性能。

附图说明

图1A—1E示出了根据本技术的一个或多个实施方式的系统。

图2A—2D示出了根据本技术的一个或多个实施方式的存储装置。

图3A和3B示出了根据本技术的一个或多个实施方式的存储模块。

图4A示出了根据本技术的一个或多个实施方式的存储模块。

图4B示出了根据本技术的一个或多个实施方式的块。

图4C示出了根据本技术的一个或多个实施方式的数据页

图4D示出了根据本技术的一个或多个实施方式的TOC页。

图4E示出了根据本技术的一个或多个实施方式的块。

图4F示出了根据本技术的一个或多个实施方式的内容表(TOC)条目。

图4G示出了根据本技术的一个或多个实施方式的安全(vaulted)存储器内容。

图4H示出了根据本技术的一个或多个实施方式的开放TOC页。

图4I示出了根据本技术的一个或多个实施方式的开放数据页。

图5A和5B示出了根据本技术的一个或多个实施方式的各种数据结构。

图6A—6C示出了根据本技术的一个或多个实施方式的流程图。

图7A—7G示出了根据本技术的一个或多个实施方式的示例。

图8A—8B示出了根据本技术的一个或多个实施方式的流程图。

具体实施方式

现在将参考附图来详细地描述本技术的特定实施方式。在本技术的实施方式的以下详细描述中,阐述了许多特定细节以便提供本技术的更透彻理解。然而,对于本领域的技术人员而言将显而易见的是可在没有这些特定细节的情况下实施本技术。在其它情况下,并未详细地描述众所周知的特征以避免不必要地使本描述变得复杂。

在图1A—8B的以下描述中,在本技术的各种实施方式中相对于图所述的任何部件可等价于相对于任何其它图所述的一个或多个相同名称部件。为了简便起见,将不会相对于每个图重复这些部件的描述。因此,每个图的部件的每个实施方式是通过引用而结合的,并且被假设为可选地存在于具有一个或多个相同命名的部件的每个其它图内。另外,根据本技术的各种实施方式,应将图的部件的任何描述解释为除相对于任何其它图中的相应相同命名部件所描述的实施方式之外、与之相结合或作为其替代可实现的可选实施方式。

一般地,本技术的实施方式涉及存储系统。更具体地,本技术的实施方式涉及包括自描述数据的存储系统。此外,本技术的实施方式涉及其中访问存储在存储系统中的用户数据所需的所有元数据与其描述的用户数据位于一起的存储系统。另外,使用该元数据来填充存储器内数据结构,其允许存储系统仅使用存储器内数据结构来直接地访问用户数据。另外,本技术的实施方式涉及在电源故障(或其它系统故障)的情况下将用户数据和元数据存储在持久性储存器中,并且然后在电源恢复时恢复此类存储数据和元数据。

图1A—1E示出了根据本技术的一个或多个实施方式的系统。参考图1A,该系统包括操作连接到存储装置102的一个或多个客户端(客户端A(100A)、客户端M(100M))。

在本技术的一个实施方式中,客户端100A、100M对应于包括用以向存储装置102发布读请求和/或向存储装置102发布写请求的功能的任何系统。虽 然在图1A中未示出,客户端100A、100M中的每一个可包括客户端处理器和客户端存储器。在下面的图1D中描述了关于客户端中的部件的附加细节。在本技术的一个实施方式中,客户端100A、100M被配置成使用以下协议中的一个或多个来与存储装置102通信:外围部件互连(PCI)、快速PCI(PCIe)、扩展PCI(PCI-X)、快速非易失性存储器(NVMe)、通过快速PCI结构的快速非易失性存储器(NVMe)、通过以太网结构的快速非易失性存储器(NVMe)以及通过Infiniband结构的快速非易失性存储器(NVMe)。本领域的技术人员将认识到本技术不限于上述协议。

在本技术的一个或多个实施方式中,如果客户端实现PCI、快速PCI或NVMe,则客户端包括根复合体(未示出)。在本技术的一个实施方式中,根复合体是将客户端处理器和客户端存储器连接到PCIe结构的设备。在本技术的一个实施方式中,根复合体被集成到客户端处理器中。

在本技术的一个实施方式中,PCIe结构包括根复合体和端点,其经由交换机(例如,图1D中的客户端交换机116和交换机结构(例如图2A中的交换机结构206)内的交换机)连接。在本技术的一个实施方式中,端点是除根复合体和交换机之外的设备,其可以发起PCI交易(例如,读请求、写请求)或者是PCI交易的目标。

在本技术的一个实施方式中,可将单个客户端和单个存储装置视为单个PCIe结构的一部分。在本技术的另一实施方式中,可将一个或多个客户端和一个或多个存储装置的任何组合视为单个PCIe结构的一部分。此外,如果存储装置内的单独部件使用PCIe进行通信,并且客户端(参见图1D)内的单独部件使用PCIe进行通信,则可将存储设备和客户端中的所有部件视为单个PCIe结构的一部分。本领域的技术人员将认识到在不脱离本技术的情况下可使用另一种结构来实现本技术的各种实施方式。

继续图1A,在本技术的一个实施方式中,存储装置102是包括易失性和持久性储存器两者且被配置成服务来自一个或多个客户端100A、100M的读请求和/或写请求的系统。下面在图2A—2D中描述存储装置102的各种实施方式。

参考图1B,图1B示出了其中客户端100A、100M被连接到以网格配置(在图1B中表示为存储装置网格104)布置的多个存储装置104A、104B、104C、104D的系统。如图1B中所示,以完全连接网格配置示出了存储装置网格104— 亦即,存储装置网格104中的每个存储装置104A、104B、104C、104D被直接地连接到存储装置网格104中的每个其它存储装置104A、104B、104C、104D。在本技术的一个实施方式中,客户端100A、100M中的每一个可被直接地连接到存储装置网格104中的一个或多个存储装置104A、104B、104C、104D。本领域的技术人员将认识到的是在不脱离本技术的情况下可使用其它网格配置(例如,部分连接网格)来实现存储装置网格。

参考图1C,图1C示出了其中客户端100A、100M被连接到以扇出配置布置的多个存储装置104A、104B、104C、104D的系统。在此配置中,每个客户端100A、100M被连接到存储装置104A、104B、104C、104D中的一个或多个;然而,在单独存储装置104A、104B、104C、104D之间不存在通信。

参考图1D,图1D示出了根据本技术的一个或多个实施方式的客户端。如图1D中所示,客户端110包括客户端处理器112、客户端存储器114以及客户端交换机116。下面描述这些部件中的每一个。

在本技术的一个实施方式中,客户端处理器112是具有被配置成执行指令的单核或多个核的一组电子电路。在本技术的一个实施方式中,可使用复杂指令集(CISC)架构或精简指令集(RISC)架构来实现客户端处理器112。在本技术的一个或多个实施方式中,客户端处理器112包括根复合体(由PCIe协议定义)(未示出)。在本技术的一个实施方式中,如果客户端110包括根复合体(其可被集成到客户端处理器112中),则客户端存储器114经由根复合体连接到客户端处理器112。替换地,客户端存储器114使用另一点到点连接机制而直接地连接到客户端处理器112。在本技术的一个实施方式中,客户端存储器114对应于任何易失性存储器,包括但不限于动态随机存取存储器(DRAM)、同步DRAM、SDR SDRAM以及DDR SDRAM。

在本技术的一个实施方式中,客户端存储器114包括以下各项中的一个或多个:用于客户端处理器的提交队列和用于客户端处理器的完成队列。在本技术的一个实施方式中,存储装置存储器包括通过结构对客户端可见的用于客户端处理器的一个或多个提交队列,并且客户端存储器包括通过结构对存储装置可见的用于客户端处理器的一个或多个完成队列。在本技术的一个实施方式中,使用用于客户端处理器的提交队列来向客户端处理器发送命令(例如,读请求、写请求)。在本技术的一个实施方式中,使用用于客户端处理器的完成 队列来用信号通知客户端处理器其向另一实体发布的命令已经完成。在不脱离本技术的情况下可使用其它通知机制来实现本技术的各种实施方式。

在本技术的一个实施方式中,客户端交换机116包括仅单个交换机。在本技术的另一实施方式中,客户端交换机116包括多个互连交换机。如果客户端交换机116包括多个交换机,则每个交换机可连接到每个其它交换机,可连接到交换机结构中的交换机子集,或者可仅连接到一个其它交换机。在本技术的一个实施方式中,客户端交换机116中的每个交换机是被配置成允许在客户端110与存储装置(未示出)之间传输数据和消息的硬件与逻辑的组合(例如使用集成电路来实现)(由交换机结构实现的协议定义)。

在本技术的一个实施方式中,当客户端100A、100M实现以下协议PCI、PCIe或PCI-X中的一个或多个时,客户端交换机116是PCI交换机。

在此类实施方式中,客户端交换机116包括许多端口,其中每个端口可被配置为透明桥接器或不透明桥接器。实现为透明桥接器的端口允许根复合体继续发现被(直接地或间接地)连接到端口的设备(其可以是其它根复合体、交换机、PCI桥接器或端点)。相反地,当根复合体遇到被实现为不透明桥接器的端口时,根复合体不能继续发现被连接到端口的设备—相反地,根复合体将此类端口视为端点。

当端口被实现为不透明桥接器时,在不透明桥接器的任一侧的设备可仅使用邮箱系统和门铃中断(由客户端交换机实现)进行通信。门铃中断允许在不透明桥接器的一侧的处理器向不透明桥接器的另一侧的处理器发布中断。此外,邮箱系统包括一个或多个寄存器,其可被在交换机结构的任一侧的处理器读和写。上述寄存器使得在客户端交换机的任一侧的处理器能够跨不透明桥接器传递控制和状态信息。

在本技术的一个实施方式中,为了从在不透明桥接器的一侧的设备向在不透明桥接器的另一侧的设备发送PCI交易,必须将PCI交易发送到实现不透明桥接器的端口。在接收到PCI交易时,客户端交换机执行地址转换(使用直接地址转换机制或基于查找表的转换机制)。结果得到的地址然后被用来将分组朝着在不透明桥接器的另一侧的适当设备路由。

在本技术的一个实施方式中,客户端交换机116被配置成使得客户端存储器114的至少一部分直接地可被存储装置访问。换言之,在客户端交换机的一 侧的存储装置可经由客户端交换机直接地访问在客户端交换机的另一侧的客户端存储器。

在本技术的一个实施方式中,客户端交换机116包括DMA引擎118。在本技术的一个实施方式中,可由客户端处理器或被连接到客户端交换机的存储装置对DMA引擎118进行编程。如上文所讨论的,客户端交换机116被配置成客户端存储器114的至少一部分可被存储装置或存储模块访问。因此,DMA引擎118可被编程为从可被存储装置访问的客户端存储器部分中的地址读取数据并直接地向存储装置或存储模块中的存储器写入此类数据的拷贝。此外,DMA引擎118可被编程为从存储装置读取数据并向可被存储装置访问的客户端存储器部分中的地址直接地写入此类数据的拷贝。

在本技术的一个实施方式中,DMA引擎118支持多播。在此类实施方式中,存储装置中的处理器(参见图2A)可创建多播群,其中,多播群的每个成员对应于存储装置上的存储器中的唯一目的地地址。多播群的每个成员与描述符相关联,该描述符指定:(i)目的地地址;(ii)源地址;(iii)传输尺寸字段;以及(iv)控制字段。用于每个描述符的源地址保持恒定,而目的地地址针对每个描述符改变。一旦创建了多播群,则通过交换机的以多播群地址为目标的任何数据传输(包括由DMA引擎发起的传输)将数据的相同拷贝放置在与多播群相关联的所有目的地地址上。在本技术的一个实施方式中,交换机并行地处理所有多播群描述符。

继续图1D的讨论,本领域的技术人员将认识到虽然图1D示出了位于客户端110中的客户端交换机116,但在不脱离本技术的情况下客户端交换机116可定位在客户端外部。此外,本领域的技术人员将认识到在不脱离本技术的情况下可将DMA引擎118定位在客户端交换机116外部。

参考图1E,图1E示出了其中客户端100A、100M经由客户端交换机108连接到以网格配置(在图1E中表示为存储装置网格104)布置的多个存储装置104A、104B、104C、104D的系统。在图1E中所示的实施方式中,每个客户端100A、100M不包括其自己的客户端交换机—相反地,所有客户端共享客户端交换机108。如图1E中所示,以完全连接网格配置示出了存储装置网格104—亦即,存储装置网格104中的每个存储装置104A、104B、104C、104D被直接地连接到存储装置网格104中的每个其它存储装置104A、104B、104C、 104D。在本技术的一个实施方式中,客户端交换机108可被直接地连接到存储装置网格104中的一个或多个存储装置104A、104B、104C、104D。本领域的技术人员将认识到的是在不脱离本技术的情况下可使用其它网格配置(例如,部分连接网格)来实现存储装置网格。

虽然在图1E中未示出,但每个客户端可包括其自己的客户端交换机(如图1D)中所示,但是可使用交换机结构(下文定义)连接到存储装置网格104。

本领域的技术人员将认识到虽然图1A—1E示出了被连接到有限数目的客户端的存储装置,但在不脱离本技术的情况下存储装置可连接到任何数目的客户端。本领域的技术人员将认识到虽然图1A—1E示出了各种系统配置,但本技术不限于上述系统配置。此外,本领域的技术人员将认识到的是在不脱离本技术的情况下客户端(无论系统的配置如何)可使用交换机结构(未示出)(下面描述)连接到存储装置。

图2A—2D示出了根据本技术的一个或多个实施方式的存储装置。参考图2A,存储装置包括控制模块200和存储模块组202。下面描述这些部件中的每一个。一般地,控制模块200被配置成管理来自一个或多个客户端的读和写请求的服务。特别地,控制模块被配置成经由IOM(下面讨论)从一个或多个客户端接收请求,处理该请求(其可包括向存储模块发送该请求),并在请求已被服务之后向客户端提供响应。下面包括关于控制模块中的部件的附加细节。此外,下面参考图4A—7C来描述相对于执行读和写请求的控制模块的操作。

继续图2A的讨论,在本技术的一个实施方式中,控制模块200包括输入/输出模块(IOM)204、交换机结构206、处理器208、存储器210以及可选地现场可编程门阵列(FPGA)212。在本技术的一个实施方式中,IOM 204是客户端(图1A—1E中的100A、100M)与存储装置中的其它部件之间的物理接口。IOM支持以下协议中的一个或多个:PCI、PCIe、PCI-X、以太网(包括但不限于根据IEEE 802.3a—802.3bj定义的各种标准)、Infiniband以及融合以太网承载远程直接存储器访问(RDMA)(RoCE)。本领域的技术人员将认识到在不脱离本技术的情况下可使用除上文列出的那些之外的协议来实现IOM。

继续图2A的讨论,交换机结构206包括仅单个交换机。在本技术的另一实施方式中,交换机结构206包括多个互连交换机。如果交换机结构206包括 多个交换机,则每个交换机可连接到每个其它交换机,可连接到交换机结构中的交换机子集,或者可仅连接到交换机结构中的一个其它交换机。在本技术的一个实施方式中,交换机结构206中的每个交换机是被配置成在存储装置中将各种部件连接在一起并在各种连接部件之间路由分组(使用逻辑)的硬件与逻辑的组合(例如使用集成电路来实现)(由交换机结构实现的协议定义)。在本技术的一个实施方式中,交换机结构206在物理上连接到IOM 204、处理器208、存储模块组202以及(如果存在的话)FPGA 212。在本技术的一个实施方式中,控制模块200中的所有部件间通信(除处理器208与存储器210之间的通信外)通过交换机结构206。此外,控制模块200与存储模块组202之间的所有通信通过交换机结构206。在本技术的一个实施方式中,使用PCI协议(例如,PCI、PCIe、PCI-X或另一PCI协议)来实现交换机结构206。在此类实施方式中,通过交换机结构206的所有通信使用相应的PCI协议。

在本技术的一个实施方式中,如果交换机结构实现PCI协议,则交换机结构206包括用于处理器的端口(或者具体地用于集成在处理器208中的根复合体或用于连接到处理器的根复合体的端口)、用于存储模块组202中的存储模块214A、214N(参见图3A—3B)的一个或多个端口、用于FPGA 212(如果存在的话)的端口以及用于IOM 204的端口。在本技术的一个或多个实施方式中,可将上述端口中的每一个配置为透明桥接器或不透明桥接器(如上文所讨论的)。本领域的技术人员将认识到的是虽然相对于PCI实现方式来描述交换机结构206,但在不脱离本技术的情况下可使用其它协议来实现交换机结构206。

在本技术的一个实施方式中,交换机结构206中的至少一个交换机被配置成实现多播。更具体地,在本技术的一个实施方式中,处理器208被配置成产生多播组,其中,该多播组包括两个或更多成员,每个成员指定存储器210中和/或存储模块214A、214N中的地址。当创建多播组时,多播组与多播地址相关联。为了实现多播,交换机结构中的至少一个交换机被配置成当接收到将多播地址指定为目的地地址的写入时,交换机被配置成生成针对多播组中的每个成员的新写入,并将该写入发布到存储装置中的适当地址。在本技术的一个实施方式中,通过向多播地址添加特定偏移来确定用于由交换机生成的每个写入的地址。

继续图2A,处理器208是具有被配置执行指令的单核或多个核的一组电子电路。在本技术的一个实施方式中,可使用复杂指令集(CISC)架构或精简指令集(RISC)架构来实现处理器208。在本技术的一个或多个实施方式中,处理器208包括根复合体(由PCIe协议定义)。在本技术的一个实施方式中,如果控制模块200包括根复合体(其可被集成到处理器208中),则存储器210经由根复合体连接到处理器208。替换地,存储器210使用另一点到点连接机制而直接地连接到处理器208。在本技术的一个实施方式中,存储器210对应于任何易失性存储器,包括但不限于动态随机存取存储器(DRAM)、同步DRAM、SDR SDRAM以及DDR SDRAM。

在本技术的一个实施方式中,处理器208被配置成创建并更新存储器内数据结构(未示出),其中,该存储器内数据结构被存储在存储器210中。在本技术的一个实施方式中,存储器内数据结构包括存储模块组中的逻辑地址与物理存储地址之间的(直接或间接)映射。在本技术的一个实施方式中,逻辑地址是从客户端的观点出发数据看起来常驻于该处的地址。在本技术的一个实施方式中,逻辑地址是(或包括)通过对n元组应用散列函数(例如SHA-1、MD-5等)而生成的散列值。在本技术的一个实施方式中,n元组是<对象ID,偏移ID>,其中,对象ID定义文件且偏移ID定义相对于该文件的起始地址的位置。在本技术的另一实施方式中,n元组是<对象ID,偏移ID,产生时间>,其中,产生时间对应于文件(使用对象ID识别)被创建时的时间。替换地,逻辑地址可包括逻辑对象ID和逻辑字节地址、或者逻辑对象ID和逻辑地址偏移。在本技术的另一实施方式中,逻辑地址包括对象ID和偏移ID。本领域的技术人员将认识到可将多个逻辑地址映射到单个物理地址,并且逻辑地址不限于上述实施方式。

在本技术的一个实施方式中,物理地址可对应于(i)存储器210中的位置,(ii)安全存储器(例如,图3A中的326)中的位置,或者(iii)固态存储器模块(例如,图3B中的330)中的位置。在本技术的一个实施方式中,存储器内数据结构可将单个散列值映射到多个物理地址,如果在存储装置中存在数据的多个拷贝的话。

在本技术的一个实施方式中,存储器210包括以下各项中的一个或多个:用于处理器的提交队列、用于处理器的完成队列、用于存储装置中的每个存储 模块的提交队列以及用于存储装置中的每个存储模块的完成队列。在本技术的一个实施方式中,使用用于处理器的提交队列来向处理器发送命令(例如,读请求、写请求)。在本技术的一个实施方式中,使用用于处理器的完成队列来用信号通知客户端处理器其向另一实体发布的命令已经完成。用于存储模块的提交和完成队列以类似方式运行。

在本技术的一个实施方式中,处理器(经由交换机结构)被配置成将各种类型的处理卸载到FPGA 212中。在本技术的一个实施方式中,FPGA 212包括用以计算用于正被写入到存储模块的数据和/或正在从存储模块读取的数据的检查和。此外,FPGA 212可包括用以出于使用RAID方案(例如,RAID 2—RAID 6)将数据存储在存储模块中的目的计算P和/或Q奇偶信息的功能和/或用以执行恢复使用RAID方案(例如,RAID 2—RAID 6)存储的已损坏数据所需的各种计算的功能。在本技术的一个实施方式中,存储模块组202包括每个被配置成存储数据的一个或多个存储模块214A、214N。下面在图3A—3B中描述存储模块。

在本技术的一个实施方式中,处理器208被配置成将一个或多个DMA引擎编程在系统中。例如,处理器208被配置成将DMA引擎编程在客户端交换机中(参见图1D)。处理器208还可被配置成将DMA引擎编程在存储模块中(参见图3A—3B)。在本技术的一个实施方式中,将DMA引擎编程在客户端交换机中可包括创建多播组并针对多播组中的每个成员生成描述符。

转到图2B,图2B示出了根据本技术的一个或多个实施方式的存储装置。该存储装置包括控制模块216和至少两个存储模块组236、238。控制模块216包括交换机结构234,其被直接地连接到IOM A 218、IOM B 220、处理器A 222、处理器B 224、(如果存在的话)FPGA A 230、(如果存在的话)FPGA B 232、存储模块组A 236中的存储模块236A、236N和存储模块组B 238中的存储模块238A、238N。上述部件之间(除处理器A 222与处理器B 224之间的以外)的所有通信都通过交换机结构234。在本技术的一个实施方式中,控制模块216内的处理器222、224能够直接地使用例如点到点互连(诸如QuickPath互连)进行通信。本领域的技术人员将认识到在本脱离本技术的情况下可使用其它点到点通信机制来许可处理器222、224之间的直接通信。

继续图2B,在本技术的一个实施方式中,控制模块216基本上类似于图2A中的控制模块200。在本技术的一个实施方式中,交换机结构234基本上类似于图2A中的交换机结构206。在本技术的一个实施方式中,每个处理器222、224基本上类似于图2A中的处理器208。在本技术的一个实施方式中,存储器226、228基本上类似于图2A中的存储器210。在本技术的一个实施方式中,IOM 218、220基本上类似于图2A中的IOM 204。在本技术的一个实施方式中,FPGA 230、232基本上类似于图2A中的FPGA 212。最后,存储模块组236、238基本上类似于图2A中的存储模块组202。

在本技术的一个实施方式中,控制模块216中的两个IOM 218、220将用于控制模块216的I/O带宽加倍(相比于具有单个IOM的控制模块的I/O带宽)。此外,第二IOM(或附加IOM)的添加增加可连接到给定控制模块的客户端的数目以及(通过扩展)可以连接到存储装置的客户端的数目。在本技术的一个实施方式中,使用交换机结构234来处理各种连接部件(上文所述)之间的通信允许每个处理器222、224直接地访问(经由交换机结构234)所有FPGA230、232和连接到交换机结构234的所有存储模块236A、236N、238A、238N。

参考图2C,图2C示出了包括连接(经由交换机结构246)到存储模块组256、258、260、262中的多个存储模块(未示出)的控制模块240。如图2C中所示,控制模块240包括两个IOM 242、244、两个处理器248、250以及存储器252、254。在本技术的一个实施方式中,控制模块240中的所有部件经由交换机结构246进行通信。另外,处理器248、250使用交换机结构246或直接连接(如图2C中所示)相互通信。在本技术的一个实施方式中,控制模块240内的处理器248、250能够直接地使用例如点到点互连(诸如QuickPath互连)进行通信。本领域的技术人员将认识到在本脱离本技术的情况下可使用其它点到点通信机制来许可处理器248、250之间的直接通信。

在本技术的一个实施方式中,处理器A 248被配置成主要处理与来自存储模块组A和B 256、258的数据的存储和检索有关的请求,而处理器B 250被配置成主要处理与来自存储模块组C和D 260、262的数据的存储和检索有关的请求。然而,处理器248、250被配置成与所有存储模块组256、258、260、262通信(经由交换机结构246)。此配置使得控制模块240能够在处理器之间扩散I/O请求的处理和/或提供内置冗余以处理其中处理器中的一个失灵的情 形。

继续图2C,在本技术的一个实施方式中,控制模块240基本上类似于图2A中的控制模块200。在本技术的一个实施方式中,交换机结构246基本上类似于图2A中的交换机结构206。在本技术的一个实施方式中,每个处理器248、250基本上类似于图2A中的处理器208。在本技术的一个实施方式中,存储器252、254基本上类似于图2A中的存储器210。在本技术的一个实施方式中,IOM 242、244基本上类似于图2A中的IOM 204。最后,存储模块组256、258、260、262基本上类似于图2A中的存储模块组202。

参考图2D,图2D示出了包括两个控制模块264、266的存储装置。每个控制模块包括IOM 296、298、300、302、处理器268、270、272、274、存储器276、278、280、282以及(如果存在的话)FPGA 288、290、292、294。控制模块264、266中的每一个包括控制模块内的部件通过其进行通信的交换机结构284、286。

在本技术的一个实施方式中,控制模块内的处理器268、270、272、274可直接地使用例如点到点互连(诸如QuickPath互连)相互通信。本领域的技术人员将认识到在本脱离本技术的情况下可使用其它点到点通信机制来许可处理器268、270、272、274之间的直接通信。另外,控制模块A中的处理器268、270可经由到控制模块B中的交换机结构286的直接连接来与控制模块B中的部件相互通信。同样地,控制模块B中的处理器272、274可经由到控制模块A中的交换机结构284的直接连接来与控制模块A中的部件相互通信。

在本技术的一个实施方式中,每个控制模块被连接到各种存储模块(用存储模块组304、306、308、310来表示)。如图2D中所示,每个控制模块可与被连接到控制模块中的交换机结构的存储模块通信。此外,控制模块A 264中的处理器可使用交换机结构B 286与被连接到控制模块B 266的存储模块通信。同样地,控制模块B 266中的处理器可使用交换机结构A 284与被连接到控制模块A 264的存储模块通信。

控制模块之间的互连允许控制模块将I/O负荷跨存储装置分布,无论哪个控制模块接收到I/O请求。此外,控制模块的互连使得存储装置能够处理较大数目的I/O请求。此外,控制模块的互连在控制模块(或其中的一个或多个部 件)失灵的情况下提供内置冗余。

相对于图2B—2D,在本技术的一个或多个实施方式中,存储器内数据结构跨控制模块中的存储器被镜像。在这种情况下,控制模块中的处理器发布必要的命令以更新存储装置中的所有存储器,使得存储器内数据结构跨所有存储器被镜像。以这种方式,任何处理器可使用其自己的存储器来确定数据(由上文所讨论的n元组定义)在存储装置中的位置。这种功能允许任何处理器服务关于存储模块内的数据位置的任何I/O请求。此外,通过镜像存储器内数据结构,存储装置可在存储器中的一个失灵时继续操作。

本领域的技术人员将认识到的是虽然图2A—2D示出了被连接到有限数目的存储模块的控制模块,但在不脱离本技术的情况下可将控制模块连接到任何数目的存储模块。本领域的技术人员将认识到的是虽然图2A—2D示出了存储装置的各种配置,但在不脱离本技术的情况下可使用其它配置来实现该存储装置。

图3A—3B示出了根据本技术的一个或多个实施方式的存储模块。参考图3A,存储模块320包括存储模块控制器322、存储器324以及一个或多个固态存储器模块330A、330N。下面描述这些部件中的每一个。

在本技术的一个实施方式中,存储模块控制器322被配置成接收用以从一个或多个控制模块读取和/或向其写入数据的请求。此外,存储模块控制器322被配置成使用存储器324和/或固态存储器模块330A、330N来服务读和写请求。虽然在图3A中未示出,存储模块控制器322可包括DMA引擎,其中,DMA引擎被配置成从存储器324或者从固态存储器模块330A、330N中的一个读取数据并向客户端存储器(图1D中的114)中的物理地址写入数据的拷贝。此外,DMA引擎可被配置成从存储器324向固态存储器模块中的一个或多个写入数据。在本技术的一个实施方式中,DMA引擎被配置成被处理器(例如,图2A中的208)编程。本领域的技术人员将认识到的是在不脱离本技术的情况下存储模块可包括在存储模块控制器外部的DMA引擎。

在本技术的一个实施方式中,存储器324对应于任何易失性存储器,包括但不限于动态随机存取存储器(DRAM)、同步DRAM、SDR SDRAM以及DDR SDRAM。

在本技术的一个实施方式中,可将存储器324在逻辑上或物理上分区成安 全存储器326和高速缓存器328。在本技术的一个实施方式中,存储模块控制器322被配置成在有存储模块中的电源故障的通知的情况下(或其中存储模块可能失去电源的另一情况下)将安全存储器326的全部内容写出到固态存储器模块330A、330N中的一个或多个。在本技术的一个实施方式中,存储模块控制器322被配置成在电源故障通知的时间与存储模块的实际失去电源之间将安全存储器326的全部内容写出到固态存储器模块330A、330N中的一个或多个。相反地,高速缓存器328中的内容在电源故障的情况下(或者在其中存储模块可能失去电源的另一情况下)丢失。

在本技术的一个实施方式中,固态存储器模块330A、330N对应于使用固态存储器来存储持久性数据的任何数据存储设备。在本技术的一个实施方式中,固态存储器可包括但不限于NAND闪存、NOR闪存、磁性RAM存储器(M-RAM)、自旋扭曲磁性RAM存储器(ST-MRAM)、相变存储器(PCM)或被定义为非易失性存储级存储器(SCM)的任何其它存储器。

参考图3B,在本技术的一个实施方式中,如果固态存储器模块330包括闪存(例如,NAND闪存、NOR闪存等),则闪存的一部分可在单层单元(SLC)模式332下操作,并且闪存的另一部分可在多层单元(MLC)模式下操作。更具体地,在本技术的一个实施方式中,闪存是MLC闪存,并且存储模块控制器包括用以将某些块指定为SLC块(即,SLC模式部分332)并将其它块指定为MLC块(即,MLC模式部分334)的功能。基于上述指定,存储模块控制器可与SLC块相交互,如同存在SLC闪存一样,即使该闪存事实上是MLC闪存。

与在MLC模式下操作的闪存的比例(即,MLC模式部分334的尺寸)相比较,在SLC模式下操作的闪存的比例(即,SLC模式部分332的尺寸)可基于技术的实施方式而改变。例如,在本技术的一个实施方式中,在SLC模式下操作的闪存的量至少等于安全存储器326的尺寸(如图3A中所示),闪存的其余部分在MLC模式下操作。

在本技术的一个实施方式中,以下存储位置是统一地址空间的一部分:(i)可经由客户端交换机访问的客户端存储器部分,(ii)控制模块中的存储器,(iii)存储模块中的存储器,以及(iv)固态存储器模块。因此,从存储装置中的处理器的观点出发,上述存储位置(虽然在物理上是分开的)表现为物理地 址的单个池。换言之,处理器可发布针对存储在统一地址空间中的任何物理地址处的数据的读和/或写请求。可将上述存储位置称为存储结构,其可使用统一地址空间来访问。

在本技术的一个实施方式中,部分地由允许控制模块中的处理器“看到”客户端存储器的一部分的客户端交换机中的不透明桥接器创建统一地址空间。因此,控制模块中的处理器可在其可以“看到”的客户端存储器部分中执行读和/或写请求。

图4A示出了根据本技术的一个或多个实施方式的存储模块。固态存储器模块400包括一个或多个块。在本技术的一个实施方式中,块是固态存储器模块400内的最小可擦除存储单元。

图4B示出了根据本技术的一个或多个实施方式的块。更具体地,每个块402包括一个或多个页。在本技术的一个实施方式中,页是用于固态存储器模块中的读和编程操作(包括到页的初始写入)的最小可寻址单元。在本技术的一个实施方式中,将块内的页重写要求将整个块重写。在本技术的一个实施方式中,块内的每个页是碎片页(参见图4C)或内容表(TOC)页(参见图4D)。

图4C示出了根据本技术的一个或多个实施方式的数据页404。在本技术的一个实施方式中,数据页404包括一个或多个碎片。在本技术的一个实施方式中,碎片对应于有限量的用户数据。此外,给定页内的碎片可以是均匀尺寸的或不均匀尺寸的。此外,给定块内的碎片可以是均匀尺寸的或不均匀尺寸的。在本技术的一个实施方式中,给定碎片可小于页的尺寸,可精确地是页的尺寸,或者可扩展超出一个或多个页。在本技术的一个实施方式中,数据页仅仅包括碎片。在本技术的一个实施方式中,每个碎片包括用户数据(即,由客户端提供的用于存储在存储装置中的数据)。出于本描述的目的,可互换地使用术语“碎片”和“用户数据”。

图4D示出了根据本技术的一个或多个实施方式的TOC页。在本技术的一个实施方式中,TOC页406包括一个或多个TOC条目,其中,每个TOC条目包括用于给定碎片的元数据。另外,TOC页406可包括对块402中的另一TOC页的引用。在本技术的一个实施方式中,TOC页仅包括TOC条目(以及可选地对块中的另一TOC页的引用),但是不包括任何碎片。在本技术的一个实施方式中,每个TOC条目对应于块402中的碎片(参见图4C)。TOC 条目仅仅对应于块内的碎片。换言之,TOC页与块相关联,并且仅包括用于该块中的碎片的TOC条目。在本技术的一个实施方式中,每个固态存储器模块内的每个块中的无缺陷的最后一页是TOC页。

图4E示出了根据本技术的一个或多个实施方式的块。更具体地,图4E示出了包括TOC页420、424、431和数据页416、418、422、428、428、430的块408。在本技术的一个实施方式中,从“顶部”到“底部”在概念上填充块408。此外,一旦用于数据页中的碎片的TOC条目的累积尺寸等于页的尺寸,则生成并存储TOC页。转到图4E,例如,数据页0 416和数据页1 418被存储在块408中。用于数据页0 416和数据页1 418中的碎片(未示出)的相应TOC条目(未示出)具有等于块中的页尺寸的总累积尺寸。因此,生成TOC页414(使用对应于块中的碎片的TOC条目)并存储在块408中。碎片页2 420随后被写入到块408。由于对应于数据页2 420中的碎片(未示出)的TOC条目具有等于块中的页尺寸的总累积尺寸,所以创建TOC页412并存储在块408中。此外,由于在块408中已存在TOC页,所以TOC页412还包括对TOC页414的引用。

重复此过程直至在块408中仅剩下一个页要填充为止。在这里,创建TOC页410并存储在块408的最后一页中。本领域的技术人员将认识到TOC页410中的TOC条目的总累积尺寸可以小于页的尺寸。在这种情况下,TOC页可包括补位以解决TOC条目的累积尺寸与页尺寸之间的差。最后,由于在块408中存在其它TOC页,所以TOC页410包括对一个其它TOC页412的引用。

如图4E中所示,TOC页被从块的“底部”链接到页的“顶部”,使得可通过遵循在TOC页下面的来自TOC页的引用而获得TOC页。例如,可使用TOC页410中的引用来访问TOC页412。

本领域的技术人员将认识到虽然块408仅包括数据页和TOC页,但在不脱离本技术的情况下块408可包括除数据页和TOC页之外的页(例如,包括奇偶数据的页)。此类其它页可位于块内,并且根据实施方式,在TOC页与数据页之间交错。

图4F示出了根据本技术的一个或多个实施方式的TOC条目。在本技术的一个实施方式中,每个TOC条目430包括用于碎片(且特别是碎片中的用户数据)的元数据,并且可包括以下字段中的一个或多个:

(i)对象ID 432,其识别到被存储的对象(例如,文件);

(ii)产生时间434,其指定对应于TOC条目的碎片被写入到安全存储器的时间(例如,控制模块中的处理器的处理器时钟值);

(iii)偏移ID 436,其识别相对于对象(由对象ID识别)的开头而言的碎片中的用户数据的起始点;

(iv)碎片尺寸438,其指定碎片的尺寸;

(v)页ID 440,其识别碎片被存储在其中的块中的页;

(vi)字节442,其识别页(由页ID识别)中的碎片的起始位置;

(vii)逻辑长度444,其指定碎片中的用户数据的未压缩长度;

(viii)类型446,其指定碎片中的用户数据的类型(例如,坏页、数据、快照、池);

(ix)种类448,其指定碎片是否是有效用户数据或整齐的(其指示当固态存储器模块执行垃圾收集时该碎片可被擦除);以及

(x)预留450,其对应于可用来存储其它用户数据的TOC条目中的空间。

在本技术的一个实施方式中,<对象ID,偏移ID>或<对象ID,偏移ID,产生时间>识别由客户端提供的用户数据。此外,<对象ID,偏移ID>或<对象ID,偏移ID,产生时间>被客户端用来识别特定用户数据,而存储装置使用物理地址来识别存储装置内的用户数据。本领域的技术人员将认识到客户端可提供逻辑地址而不是对象ID和偏移ID。

本领域的技术人员将认识到的是在不脱离本技术的情况下TOC条目可包括与图4F中所示的相比附加的字段或更少的字段。此外,在不脱离本技术的情况下,可将TOC条目中的字段按照不同顺序布置和/或组合。另外,虽然图4F中所示的TOC条目中的字段看起来全部是相同尺寸的,但TOC条目中的各种字段的尺寸可以是不均匀的,任何给定字段的尺寸基于TOC条目的实施方式而改变。

图4G示出了根据本技术的一个或多个实施方式的安全存储器内容。可将安全存储器460内的存储器部分分配为与最终存储在持久性储存器中的页相同尺寸的段(参见例如图4E)。在本技术的一个实施方式中,上述段可包括:(i)开放TOC页462,(ii)开放数据页464,以及(iii)写入数据页466。虽然以下小节相对于单个开放TOC页、单个开放数据页以及单个写入数据页来描述 本技术,但在不脱离本技术的情况下可使用多个开放TOC页、多个开放数据页和/或多个写入页来实现本技术的实施方式。在不脱离本技术的情况下,安全存储器可包括其它段。

开放TOC页462是被用来在TOC条目被写入到适当固态存储器模块之前存储此类TOC条目的存储器的一部分。更具体地,TOC条目被存储在安全存储器内的开放TOC页中,并且在某个时间点,开放TOC页变成满的(即,其不能再存储任何额外的TOC条目)。当这发生时,开放TOC页的内容被写入到存储存储器模块中的适当块作为TOC页(参见例如图4D)。在图4H中示出了关于开放TOC页的附加细节。

开放数据页464是被用来在碎片被写入到适当固态存储器模块之前存储此类碎片的存储器的一部分。在图4H中示出了关于开放数据页的附加细节。写入数据页466是包括当前被写入到适当固态存储器模块的碎片的存储器的一部分。存储器的上述部分的指定可随时间而变。例如,存储器的某个部分最初可被指定为开放数据页。一旦存储器的此部分已满(即,不能在该存储器部分中再存储碎片),则该存储器部分的指定变成写入数据页。写入数据页的内容然后被写入到固态存储器模块中的适当块作为数据页(参见例如图4C)。在下面的图6A—7G中可找到关于开放TOC页、开放数据页以及写入数据的附加细节。

图4H示出了根据本技术的一个或多个实施方式的开放TOC页。开放TOC页470包括TOC位476,其中,TOC位的状态(例如,0或1)反映该存储器部分是TOC页。开放TOC页470还包括临时物理地址478,其对应于TOC页最终将被存储在该处的块中(固态存储器模块中)的位置,但是不一定对应于TOC页将被存储在该处的块中的实际位置。更具体地,根据图6C来确定TOC页被存储在给定块中的位置。因此,在产生TOC页时(即,在TOC条目被存储在开放TOC页中时),未示出TOC页的最终位置。然而,TOC页将被存储在其中的块是已知的。因此,临时物理地址被选作TOC页将被存储在其中的块内的地址。TOC位476和临时物理地址478可统称为标签472。标签472在其它内容被存储在开放TOC页之前被存储在开放TOC页中。参考图4H,开放TOC页还包括一个或多个TOC条目,其可共同地称为有效负荷。

图4I示出了根据本技术的一个或多个实施方式的开放数据页。开放数据页 480包括TOC位486,其中,TOC位的状态(例如,0或1)反映该存储器部分是数据页。开放数据页480还包括物理地址488,其对应于数据页最终将其存储在该处的块中(在固态存储器模块中)的位置。TOC位486和物理地址488可统称为标签482。标签482在其它内容被存储在开放数据页之前被存储在开放数据页中。参考图4I,开放数据页还包括一个或多个碎片,其可统称为有效负荷484。

图5A示出了根据本技术的一个或多个实施方式的数据结构。如上文所讨论的,控制模块中的存储器包括存储器内数据结构。在本技术的一个实施方式中,存储器内数据结构包括n元组(例如,<对象ID,偏移ID>500,<对象ID,偏移ID,产生时间>(未示出))与固态存储器模块中的碎片的物理地址502之间的映射。在本技术的一个实施方式中,该映射是在n元组的散列值与物理地址之间。在本技术的一个实施方式中,将用于碎片的物理地址定义为以下n元组:<存储模块,通道,芯片启用,LUN,平面,块,页,字节>。上述元组对应于物理地址的内容的逻辑表示。可将上述内容编码成例如被存储装置中的各种部件(参见例如图1A—3B)使用的48位物理地址。

图5B示出了根据本技术的一个或多个实施方式的数据结构。在本技术的一个实施方式中,控制模块跟踪每个块504的TOC条目506的数目。更具体地,每当碎片被写入到安全存储器时,创建用于碎片的TOC条目。控制模块跟踪新创建的TOC条目与哪个块相关联并使用此信息来生成TOC页。例如,控制模块使用上述信息来确定与给定块相关联的未被写入到TOC块的所有TOC条目的累积尺寸是否等于块中的页尺寸。如果与给定块相关联的未被写入到TOC块的所有TOC条目的累积尺寸等于块中的页尺寸,则控制模块可使用上述条目来生成TOC页,并发起TOC页到存储模块的写入(参见例如图6C)。

图6A—6C示出了根据本技术的一个或多个实施方式的流程图。更具体地,图6A—6C示出了根据本技术的一个或多个实施方式的用于将用户数据存储在存储装置中的方法。虽然连续地提出并描述了流程图中的各种步骤,但本领域的技术人员将认识到某些或所有步骤可按照不同顺序执行,可被组合或省略,并且某些或所有步骤可并行地执行。在本技术的一个实施方式中,图6A中所示的步骤可与图6B中所示的步骤和图6C中所示的步骤并行地执行。此外,图6B中所示的步骤可与图6C中所示的步骤并行地执行。

参考图6A,在步骤600中,客户端向控制模块(图2A中的208)中的处理器的提交队列(SQ)写入写命令(写请求)。在本技术的一个实施方式中,写命令指定客户端存储器中的用户数据的逻辑地址(其也可称为“源地址”)。在本技术的一个实施方式中,写命令可使用<对象ID,偏移ID>来指定用户数据。在本技术的一个实施方式中,写命令在到达处理器的SQ之前通过至少客户端交换机和交换机结构。

在步骤602中,客户端向SQ尾端门铃寄存器写入新的SQ尾端。在本技术的一个实施方式中,通过向SQ尾端门铃寄存器进行写入,客户端通知处理器在其SQ中存在要处理的新命令。

在步骤604中,处理器从SQ获得写命令。在步骤606中,处理器确定要写入用户数据(作为碎片的一部分)的物理地址。在本技术的一个实施方式中,物理地址对应于固态存储器模块中的位置。在本技术的一个实施方式中,处理器选择要在其中写入用户数据的拷贝的两个物理地址,其中,每个物理地址在单独的固态存储器模块中。

如上文所讨论的,碎片在被写入到固态存储器模块之前被写入到安全存储器中的开放数据页,并且可将每个物理地址指定为<存储模块,通道,芯片启用,LUN,平面,块,页,字节>。因此,用于存储在开放数据页中的每个碎片的物理地址可针对物理地址的所有部分(除<字节>值之外)具有相同的值。因此,在本技术的一个实施方式中,可使用开放数据页的标签482中的物理地址486来确定在步骤606中选择的物理地址。换言之,一旦进行了给定碎片将被写入到特定固态存储器模块的确定,可基于安全存储器中的开放数据页中的标签的物理地址来确定将在该处存储碎片的物理地址。在这种情况下,通过获得标签中的物理地址且然后修改此物理地址的<字节>部分来确定将在该处写入碎片的物理地址。(参见例如图7A—7G)。

在步骤608中,处理器将DAM引擎编程为向多播地址发布写。在本技术的一个实施方式中,多播地址与多播组相关联,其中,多播组指定控制模块中的存储器中的第一存储器位置、第一安全存储器中的开放数据页中的第二存储器位置以及第二安全存储器中的开放数据页中的第三存储器位置。在本技术的一个实施方式中国,第一安全存储器位于与包括由处理器指定的物理地址的固态存储器模块相同的存储模块中。在本技术的一个实施方式中,第二安全存储 器位于不同的存储模块中以便针对第一存储模块的故障进行保护。在本技术的一个实施方式中,针对由处理器在步骤606中识别的每个物理地址选择一个存储器位置。

在步骤610中,DMA引擎从客户端存储器中的源地址读取用户数据,并按照控制模块的指挥将数据写入到多播地址。在本技术的一个实施方式中,交换机结构中的交换机与多播地址相关联。在接收到地址时,交换机对多播地址执行所需转换以获得三个地址(上述存储器位置的每一个对应一个地址)。交换机随后将用户数据的拷贝发送到三个存储器位置。本领域的技术人员将认识到实现多播的特定交换机可基于交换机结构的实施方式而改变。在本实施方式中,在客户端与存储装置之间仅发布一个写。

在本技术的另一实施方式中,在步骤608中,处理器将DMA引擎编程为并行地发布三个写请求(上述存储器位置的每一个对应一个写请求)。在本实施方式中,在步骤610中,DMA引擎并行地发布三个写请求。在本实施方式中,在客户端与存储装置之间发布三个写。

继续图6A,在步骤612中,针对存储在安全存储器中的用户数据的每个拷贝创建TOC条目。此外,在每个TOC条目中指定的页和字节对应于在步骤606中识别的相应物理地址的页和字节部分。因此,虽然在创建相应TOC条目时碎片未被写入到固态存储器模块中的物理地址,但碎片(作为数据页的一部分)意图在稍后的时间点被写入到物理地址。如上文所讨论的,每个TOC条目被存储在TOC页,并且该TOC页最后被写入到固态存储器模块。然而,在创建TOC页之前,创建TOC条目并临时地存储在控制模块中的存储器中和固态存储器模块上的安全存储器中。

继续图6A,在步骤614中,将在步骤612中创建的TOC条目被存储在安全存储器中。更具体地,每个TOC条目被存储在存储模块的安全存储器中的开放TOC页面中,并包括在稍后的时间点将在该处写入相应碎片的网络地址。

在步骤616中,处理器更新存储器内数据结构以反映用户数据的三个拷贝被存储在存储装置中。处理器还可更新每个块跟踪TOC条目的数据结构(参见图5)。在步骤618中,处理器将SQ标识符(其识别处理器的SQ)和写命令标识符(其识别客户端向处理器发布的特定写命令)写入到客户端的完成队列(CQ)。

在步骤620中,处理器生成用于客户端处理器的中断。在本技术的一个实施方式中,处理器使用由不透明桥接器提供的门铃中断来向客户端处理器发布中断。在步骤622中,客户端处理在其CQ中的数据。在此阶段,已经通知客户端该写请求已被服务。在步骤624中,一旦客户端已处理在完成队列头端处的数据,客户端将新CQ头端写入到CQ头端门铃。这向处理器表示在给客户端的未来通知中将使用CQ中的下一位置。

参考图6B,当安全存储器中的开发数据页面(参见例如图4G、464)不能再存储任何附加碎片(即,开放数据页已满)时,然后开放数据页变成写入数据页。在步骤626中,控制模块中的处理器向适当位置(即,与标签482中的物理地址486相对应的固态存储器模块中的位置)发起写入数据页的内容。在本技术的一个实施方式中,控制模块中的处理器将存储模块控制器中的DMA引擎编程为将该写入数据页(或写入数据页的内容)写入到固态存储器模块。在本技术的另一实施方式中,存储模块控制器可发起写入数据页到固态存储器模块的写入。一旦写入完成,则存储模块控制器可通知控制模块。

在步骤628中,在步骤626之后,控制模块中的处理器请求去除与在步骤626中被写入到固态存储器模块的用户数据相对应的安全存储器中的用户数据的所有拷贝。换言之,处理器可请求从安全存储器擦除写入数据页的内容。在步骤630中,由包括被擦除的写入数据页的每个存储模块向控制模块中的处理器发送去除的确认。

参考图6C,图6C示出了每当创建TOC条目时执行的方法。在步骤632中,进行关于在块中是否有超过一个空页的确定。换言之,进行关于是否数据页和TOC页已被写入到除块中的最后一页之外的所有其它页的确定。如果在块中剩下超过一个空页,则过程前进至步骤634;否则,过程前进至步骤636。如上文所讨论的,如果在块中仅存在将被写入数据页或TOC页的一个空页,则必须向块中的最后一页写入TOC页。

在步骤634中,进行关于开放TOC页是否已满(即,是否TOC条目的累积尺寸阻止附加TOC条目被存储在开放TOC页中)的确定。如果开放TOC页已满,则过程前进至步骤636;否则过程结束。

在步骤636中,开放TOC页中的临时物理地址478变成最终物理地址(即,其中将存储TOC页(或TOC页的内容)的块中的实际位置)。在本技术的一 个实施方式中,如果在块中仅存在将被写入用户数据的一个空页且TOC页未满,则可向开放TOC页添加补位以便填充TOC页。在步骤638中,进行关于块是否包括另一TOC页的确定。如果块包括另一TOC页,则过程前进至步骤640;否则过程前进至步骤642。在步骤640中,将对块中的最近存储TOC页的引用包括在已在步骤636中创建的TOC页(例如,图4E中的TOC页410引用TOC页412中。

在步骤642中,处理器发起满TOC页到固态存储器模块(或者,更具体地,到在TOC页中指定的最终物理地址)的写入。

在步骤644中,处理器请求包括被包括在在步骤642中写入到固态存储器模块的TOC页中的TOC条目的所有存储模块将此类TOC条目从其各自的安全存储器去除。换言之,处理器请求从安全存储器擦除开放TOC页的内容。在步骤646中,处理器从存储模块接收上述TOC条目已被去除的确认。

图7A—7G示出了根据本技术的一个或多个实施方式的在存储装置中存储用户数据的示例。本示例并不意图限制本技术的范围。

转到图7A,考虑其中安全存储器包括开放TOC页、数据页A(最初被指定为开放数据页)和数据页B(最初被指定为写入数据页)的情形。仅仅出于本示例的目的而包括页作为“数据页A”和“数据页B”的命名,并且其并不意图暗示数据页A与高于数据页B的块数目相关联(或者相反);相反地,页被这样命名是为了解释本技术的各种实施方式。开放TOC页包括设定TOC位(这指示其为TOC页)、临时物理地址,这对应于其最终将被存储于其中的固态储存器(未示出)中的块的物理位置。开放TOC页还包括TOC条目TE1。TE1是存储在数据页A中的用于碎片1的TOC条目。

如图7A中所示,数据页A包括未被设定的TOC位(指示其为数据页)。数据页A还包括物理地址PA2,其对应于数据页最后将在该处被写入的固态储存器中的物理位置。最后,数据页A包括存储在数据页A内的<字节>值处的碎片1,其中,<字节>值对应于在TE 1中指定的<字节>值(参见例如图4F、442)。

参见图7B,在某个稍后的时间点,第二碎片(碎片2)和第二TOC条目TE 2被写入到安全存储器。图7B示出了碎片2被存储在数据页A中且TE2被存储在开放TOC页中的安全存储器的状态。

在此阶段,数据页A是满的,并且同样地,其命名变成写入数据页。由于 此命名变化,数据页B的命名页也改变。具体地,数据页B的命名从写入数据页转变成开放数据页。因此,可将随后接收到的碎片存储在数据页B中。图7C示出了数据页的上述命名变化之后的安全存储器的状态。如图7C中所示,一旦数据页B的命名已变成开放数据页,TOC位(其被设置成0)和物理地址PA 3(其对应于固态存储器模块中的物理位置)被存储在数据页B中。一旦标签(即,TOC位和物理地址)已被存储在数据页B中,则可将碎片存储在数据页B中。

在某个稍后的时间点,数据页A的内容被写入到固态存储器模块中的PA1,然后,数据页A的内容被从安全存储器中的数据页A擦除。此外,碎片3和碎片4被写入到数据页B,并且相应TOC条目(TE 3和TE 4)被写入到开放TOC页。图7D示出了上述事件已发生之后的安全存储器的状态。

在此阶段,开放TOC页已满(即,在开放TOC页中不可再存储TOC条目)。因此,确定用于开放TOC页(或开放TOC页的内容)的最终物理地址。可将开放TOC页中的标签更新成包括该最终物理地址。图7E示出了上述事件已发生之后的安全存储器的状态。

如图7E中所示,开放TOC页和数据页B两者都已满。因此,控制模块或存储模块控制器可发起开放TOC页的内容和数据页B的内容到固态存储器模块中的适当位置的写入。

如果开放TOC页的内容到固态存储器模块的写入成功,则固态存储器模块将在对应于最终物理地址的位置上包括TOC页。此外,如果数据页B的内容到固态存储器模块的写入成功,则固态存储器模块将在对应于PA 2的位置上包括数据页。此外,可使用适当的MLC命令将上述内容写入到固态存储器模块的MLC模式部分。图7F示出了上述事件已发生之后的固态存储器模块的状态。

然而,如果在TOC页(参见图7E)的内容和数据页B的内容(参见图7E)被写入到固态存储器模块之前接收到电源故障的通知,则使用适当的SLC命令将TOC页(参见图7E)的内容和数据页B的内容(参见图7E)写入到固态存储器模块的SLC模式部分。上述页(例如,数据页和TOC页)被存储的位置并不对应于存在于被存储在上述页中的标签中的物理地址。上述内容可仅被存储在固态存储器模块的SLC模式部分内的最低有效位(LSB)页中。在 这种情况下,SLC模式部分的尺寸可大于安全存储器的尺寸(例如,是其两倍大)。图7G示出了上述事件已发生之后的安全存储器的状态。

在本技术的一个实施方式中,当控制模块重新启动时,可使用固态存储器模块中的TOC条目来产生适当的存储器内数据结构(参见例如图5)以便允许客户端访问存储在存储装置中的用户数据。图8A示出了根据本技术的一个或多个实施方式的用于使用存储在固态存储器模块的MLC模式部分中的TOC条目来产生存储器内数据结构的方法。图8B示出了根据本技术的一个或多个实施方式的用于使用存储在固态存储器模块的SLC模式部分中的TOC条目来产生存储器内数据结构的方法。虽然连续地提出并描述了上述流程图中的各种步骤,但本领域的技术人员将认识到某些或所有步骤可按照不同顺序执行,可被组合或省略,并且某些或所有步骤可并行地执行。

转到图8A,在步骤800中,选择块。在步骤802中,获得块中的最后一页。例如,处理器读取最后一页的内容。如上文所讨论的,存储装置内的固态存储器模块中的每个块的最后一页是TOC页。在步骤804中,从TOC页提取TOC条目。

在步骤806中,处理在步骤804中获得的每个TOC条目以填充存储器内数据结构。更具体地,处理每个TOC条目可包括以下各项中的一个或多个:

(i)从TOC条目提取页ID和字节信息;

(ii)将(i)中的信息与<存储模块,通道,芯片启用,LUN,平面,块>组合以获得物理地址;

(iii)从TOC条目提取对象ID和偏移ID(和可选地产生时间);

(iv)对<对象ID,偏移ID>(或者可选地<对象ID,偏移ID,产生时间)应用散列函数以产生散列值;以及

(v)用散列值和物理地址的映射来填充存储器内数据结构。

在本技术的一个实施方式中,处理器包括关于<存储模块,通道,芯片启用,LUN,平面,块>的信息,因为处理器需要此信息以获得块的最后一页。在本技术的一个实施方式中,处理器可使用TOC条目中的类型字段来确定碎片是否在坏页中。如果碎片被存储在坏页中,则处理器可产生用于TOC条目的存储器内数据结构中的映射。

在步骤808中,一旦TOC页中的所有TOC条目都已被处理,进行关于 TOC页是否包括对块(即,在步骤800中选择的块)中的另一TOC页的引用的确定。如果TOC页包括对块中的另一TOC页的引用,则过程前进至步骤810;否则,过程结束。在步骤810中,获得被引用的TOC页。在步骤812中,从TOC页提取TOC条目。该过程然后前进至步骤806。

转到图8B,在步骤820中,将来自固态存储器模块的SLC模式部分的内容加载到控制模块中的存储器中。该内容可包括一个或多个开放TOC页、一个或多个开放数据页以及一个或多个写入数据页。在本技术的一个实施方式中,当系统失去功率时常驻于安全存储器中的所有数据现在已被拷贝到控制模块的存储器中。由于存储装置实现多播写入机制(参见例如图6A—6C),所以在安全存储器中可存在数据的多个拷贝。无论固态存储器模块的任何给定SLC模式部分中的特定内容如何,存储在SLC模式部分中的每个页包括标签(参见例如图7G)。

在步骤822中,从在步骤820中获得的内容识别TOC页。识别TOC页可包括搜索上述获得内容中的包括用将指示页是TOC页的状态设定的TOC位的页。例如,可将包括TOC位=1的页识别为TOC页。

在步骤824中,获得来自在步骤822中识别的TOC页的TOC条目。在本技术的一个实施方式中,如果在控制模块存储器中存在TOC页的多个拷贝,则验证TOC页的每个拷贝以确定在TOC页的每个拷贝中特定TOC条目(即,在步骤824中获得的TOC条目)是相同的。

在步骤826中,使用TOC页中的标签中的物理地址和TOC条目的内容来确定对应于在步骤824中获得的TOC条目的碎片的物理地址。例如,TOC页的临时物理地址可以是<存储模块1,通道1,芯片启用1,LUN 1,平面1,块2,页2,字节0>,并且来自所选TOC条目的<页面,字节>信息可以是<页面2,字节5>(参见例如图4F、440、442)。因此,对应于TOC条目的碎片的物理地址可以是<存储模块1,通道1,芯片启用1,LUN 1,平面1,块2,页2,字节5>。本领域的技术人员将认识到虽然上述物理地址被表示为n元组,但上述物理地址可以是例如48位物理地址。

在步骤828中,将控制模块中的存储器内数据结构更新成包括<对象ID,偏移ID>(其是从TOC条目获得的)的映射和在步骤826中确定的物理地址。在不脱离本技术的情况下可将基于上述信息的其它映射存储在存储器内数据 结构中(参见图5)。

在步骤830中,然后搜索控制模块中的存储器以便对与在步骤826中确定的物理地址相对应的碎片进行定位。如果碎片存在于存储器中,则过程前进至步骤834;否则,过程前进至步骤832。

下面是用于对控制模块的存储器中的相应碎片进行定位的非限制性示例。考虑其中在步骤826中确定的用于碎片的物理地址是<存储模块1,通道1,芯片启用1,LUN 1,平面1,块2,页2,字节5>的情形,然后控制模块可在其存储器中进行搜索以对包括包含TOC位=0的标签和包含<存储模块1,通道1,芯片启用1,LUN 1,平面1,块2,页2>的物理地址的页进行定位。如果此类页被定位,则确定碎片在存储器中;否则,确定碎片在固态存储器模块中。

在步骤832中,使用在步骤826中获得的物理地址从固态存储器模块获得碎片。

在步骤834中,将碎片(在步骤832中获得或在步骤830中被识别为存在)写入到根据图6A—6C的存储模块中的新位置。

在本技术的一个实施方式中,如果碎片未存在于存储器中(即,碎片存在于固态存储器模块中),则作为当根据图8B来处理TOC条目时将相应碎片拷贝到存储器中的替代,可将碎片标记为用于垃圾收集。更具体地,可将碎片标记为使得其将被重新定位到固态存储器模块中的其它位置作为垃圾收集操作的一部分。

继续图8B的讨论,在步骤836中,进行关于是否存在要处理的附加TOC条目的确定。如果存在要处理的附加TOC条目,则该方法前进至步骤824;否则,过程结束。

在本技术的一个实施方式中,可对存储在存储器中的每个开放TOC页执行图8B中所示的方法。此外,当系统被通电时可针对存储器中的所有TOC页并行地执行图8B中的方法。

在本技术的一个实施方式中,可在系统被通电时针对存储装置内的所有块(或块的子集)并行地执行图8A中的方法。此外,可与图8B中所示的方法并行地执行图8A中的方法。在此过程之后,可随着新的用户数据被写入到存储装置而由处理器来更新结果得到的存储器内数据结构。

虽然上述讨论表明可将TOC页、开放数据页以及写入数据页写入到固态存储器的SLC模式部分,但可在固态存储器模块不具有SLC模式部分和MLC模式部分的情况下实现本技术。

例如,可使用使用例如MLC模式进行操作且包括预留部分和非预留部分的固态存储器模块来实现本技术,其中,根据图6B和图6C,预留部分对应于固态存储器模块的一部分,其被用来在电源故障(或电源故障通知)的情况下存储来自开发TOC页、开放数据页以及写入数据页的内容,并且固态存储器模块的非预留部分被用来存储来自TOC页和写入数据页的内容。

在另一示例中,可使用使用例如SLC模式进行操作且包括预留部分和非预留部分的固态存储器模块来实现本技术,其中,根据图6B和图6C,预留部分对应于固态存储器模块的一部分,其被用来在电源故障(或电源故障通知)的情况下存储来自TOC页、开放数据页以及写入数据页的内容,并且固态存储器模块的非预留部分被用来存储来自TOC页和写入数据页的内容。

本领域的技术人员将认识到虽然已相对于在固态存储器模块中实现本技术而描述了本技术,但可使用其它类型的非易失性存储介质来实现本技术的实施方式。

本领域的技术人员将认识到虽然已相对于将安全存储器与持久性储存器(例如,固态存储器模块)共同定位于相同位置上描述了本技术,但可实现其中安全存储器并未与持久性储存器共同定位的本技术的实施方式。

本领域的技术人员将认识到虽然已相对于每个块中的最后一页被预留为TOC页而描述了本技术,但在不脱离本技术的情况下可通过将块中的另一页设定为预留TOC页来实现本技术的实施方式。

在本技术的一个实施方式中,在对存储在固态存储器模块中的任何数据执行任何操作(例如,读操作、写操作和/或擦除操作)之前产生存储器内数据结构。

本技术的一个或多个实施方式提供了其中存储在存储装置中的所有用户数据与其元数据共同定位的系统和方法。以这种方式,存储在存储装置中的所有用户数据都是自描述的。通过根据本技术的各种实施方式来布置用户数据和相应元数据,针对给定固态存储器模块(或其子集)的故障更好地保护了存储装置。换言之,如果给定固态存储器模块(或其子集)失灵,则系统中的其它 固态存储器模块中的用户数据仍是可访问的,因为访问另一固态存储器模块中的用户数据所需的元数据本身位于其它固态存储器模块中。

此外,本技术的实施方式使得能够创建存储器内数据结构,其允许控制模块在单个查找步骤中访问用户数据。换言之,控制模块可使用存储器内数据结构来直接地确定存储装置中的用户数据的物理地址。使用此信息,控制模块能够直接地访问用户数据,并且不需要穿过任何中间元数据分级结构以获得用户数据。

可使用由系统中的一个或多个处理器执行的指令来实现本技术的一个或多个实施方式。此外,此类指令可对应于存储在一个或多个非临时计算机可读介质上的计算机可读指令。

虽然已相对于有限数目的实施方式描述了本技术,但受益于本公开的本领域的技术人员将认识到可以设计不脱离如在本文中公开的本技术的范围的其它实施方式。因此,本技术的范围将仅仅受到所附权利要求的限制。

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