用于用内容条目表格存储数据的系统和方法

文档序号:6533341阅读:132来源:国知局
用于用内容条目表格存储数据的系统和方法
【专利摘要】一种用于存储数据的方法包括:接收将用第一对象ID和第一偏移量ID定义的第一数据写至永久存储器的请求。该方法进一步包括:确定所述永久存储器中的第一物理地址,其中所述第一物理地址包括第一块ID和第一子块ID。该方法进一步包括:将所述第一数据写至所述第一物理地址;产生内容条目(TE)的第一表格,其包括所述第一对象ID、所述第一偏移量ID和所述第一子块ID;以及将所述第一TE写至所述永久存储器中的第二物理地址,其中所述第二物理地址包括所述第一块ID和第二子块ID,其中第二子块ID对应于所述第二子块ID,且其中所述第二子块位于同所述第一块ID相对应的第一块内。存储系统具有自描述数据。
【专利说明】用于用内容条目表格存储数据的系统和方法 背景
[0001] 在系统的整体性能中,系统能将数据写至永久存储器以及从永久存储器读取数据 的速度常常是一个关键因素。向永久存储器读取和写入数据的传统方法需要通过系统核心 中的多个层以及硬件中的多个实体进行处理。结果,向永久存储器读取和写入数据导致系 统中的明显延迟,且最终降低系统的整体性能。


【发明内容】

[0002] -般而言,在一个方面中,一种用于存储数据的方法。该方法包括:接收将第一数 据写至永久存储器的请求,其中该第一数据是用第一逻辑地址定义的;确定该永久存储器 中的第一物理地址,其中该第一物理地址包括第一块ID和第一子块ID ;将该第一数据写至 该第一物理地址;产生内容条目(TE)的第一表格,其包括有该第一逻辑地址和该第一子块 ID ;以及将该第一 TE写至该永久存储器中的第二物理地址,其中该第二物理地址包括该第 一块ID和第二子块ID,其中第二子块对应于该第二子块ID,且其中该第二子块位于同该第 一块ID相对应的第一块内。
[0003] -般而言,在一个方面中,本发明涉及一种用于存储数据的方法,包括:接收将第 一数据写至永久存储器的请求,其中该第一数据是用第一逻辑地址定义的;确定该永久存 储器中的第一物理地址,其中该第一物理地址包括第一块ID和第一页面ID ;将包含该第一 数据的副本的第一碎片写至该第一物理地址;产生内容条目(TE)的第一表格,其包括有该 第一逻辑地址和该第一页面ID ;接收将第二数据写至该永久存储器的请求,其中该第二数 据是用第二逻辑地址定义的;确定该永久存储器中的第二物理地址,其中该第二物理地址 包括第一块ID和第二页面ID ;将包含该第二数据的副本的第二碎片写至该第二物理地址; 产生包含该第一逻辑地址和该第二页面ID的第二TE ;产生内容表格(TOC)页面,其中该 TOC页面包括第一 TE和第二TE ;以及将该TOC页面写至该永久存储器中的第三物理地址, 其中该第三物理地址包括该第一块ID和第三页面ID。
[0004] 一般而言,在一个方面中,本发明涉及一种用于填充存储器内(in-memory)数据 结构的方法。该方法包括:(a)选择永久存储器中的第一块;(b)提取该第一块中的最后页 面,其中该第一块与第一块ID相关联;(c)从该第一块中的最后页面提取内容条目(TE)的 第一表格,其中该第一 TE包括针对第一数据的第一逻辑地址以及第一页面ID,第一页面ID 与第一数据所位于的第一块中的页面相对应;(d)使用第一块ID和第一页面ID产生针对 第一数据的第一物理地址;(e)散列该第一逻辑地址以获得第一散列值;以及(f)用该第一 散列值和该第一物理地址之间的第一映射填充该存储器内数据结构。
[0005] 本发明的其他方面将从下面的说明和所附权利要求是显而易见的。

【专利附图】

【附图说明】
[0006] 图1A-1E示出根据本发明的一个或多个实施例的系统。
[0007] 图2A-2D示出根据本发明的一个或多个实施例的存储装置。
[0008] 图3示出了根据本发明的一个或多个实施例的存储模块。
[0009] 图4A示出根据本发明的一个或多个实施例的存储模块。
[0010] 图4B示出根据本发明的一个或多个实施例的块。
[0011] 图4C示出根据本发明的一个或多个实施例的碎片页面。
[0012] 图4D示出根据本发明的一个或多个实施例的TOC页面。
[0013] 图4E示出根据本发明的一个或多个实施例的一块。
[0014] 图4F不出根据本发明的一个或多个实施例的内容表格(TOC)条目。
[0015] 图5示出根据本发明的一个或多个实施例的数据结构。
[0016] 图6A-6C示出根据本发明的一个或多个实施例的流程图。
[0017] 图7A-7E示出根据本发明的一个或多个实施例的示例。
[0018] 图8示出了根据本发明的一个或多个实施例的流程图。

【具体实施方式】 现在将参考附图详细描述本发明的具体实施方案。在以下本发明实施例的详细描述 中,提出了许多具体的细节,以提供本发明的更深入的理解。然而,对本领域的普通技术人 员明显的是,本发明可以在没有这些具体的细节的情况下实施。在其他情况下,公知的特征 未被详细描述,以避免使描述不必要地复杂化。
[0019] 在以下图1A-8的描述中,在本发明的各种实施例中,针对某一附图描述的任何组 件可等同于针对任何其他附图描述的一个或多个同名组件。为简洁起见,这些组件的描述 将不在针对每一附图而重复。因此,每一附图的诸组件的每一和每个实施例都被结合作为 引用,并被假定为可选地出现于具有一个或多个同名组件的所有其他附图之内。另外,根据 本发明的各种实施例,某一附图的诸组件的任何描述要被解释为一个可选实施例,该可选 实施例可以除了、连同或代替结合任何其他附图中的相应同名组件所描述的那些实施例。
[0020] 在一般情况下,本发明的实施例涉及存储系统。更具体地说,本发明的实施例涉及 包括自描述数据的存储系统。此外,本发明的实施例涉及其中需要存取存储在存储系统中 的用户数据的所有元数据是用它所描述的用户数据来定位的。此外,该元数据是用来填充 (populate)存储器内数据结构,该存储器内数据结构允许存储系统仅使用该存储器内数据 结构来直接存取用户数据。
[0021] 图1A-1E示出根据本发明的一个或多个实施例的系统。参考图1A,该系统包括可 操作地连接到存储装置(102)的一个或多个客户端(客户端A(IOOA)、客户端M(IOOM))。
[0022] 在本发明的一个实施例中,客户端(100AU00M)对应于包括发出一读取请求至存 储装置(102)和/或发出一写入请求至存储装置(102)的功能的任何系统。虽然未示出于 图IA中,客户端(100AU00M)中的每一个都可包括客户端处理器和客户端存储器。以下图 ID描述了有关客户端中的诸组件的附加细节。在本发明的一个实施例中,客户端(100A、 100M)被配置为与存储装置(102)通信,该通信使用以下协议中的一个或多个:外围组件 互连(PCI)、PCI Express (PCIe)、PCI-eXtended(PCI-X)、非易失性存储器快线(UVMe)、 PCI-Express架构(Fabric)上的非易失性存储器快线(UVMe)、以太网架构上的非易失性存 储器快线(UVMe)以及无限带宽(Infiniband)架构上的非易失性存储器快线(UVMe)。本领 域技术人员会明白:本发明并不限于上述协议。
[0023] 在本发明的一个或多个实施例中,如果客户端实现PCI、PCI Express或UVMe,则 该客户端包括根组件(root complex)(未示出)。在本发明的一个实施例中,根组件是将客 户端处理器和客户端存储器连接至PCIe架构的设备。在本发明的一个实施例中,根组件被 集成入客户端处理器。
[0024] 在本发明的一个实施例中,PCIe架构包括经由交换机(例如,图ID中的客户端交 换机(116)和交换机架构内的交换机,交换机架构是例如图2A中的交换机架构(206))连 接的根组件和端点。在本发明的一个实施例中,端点是除了根组件或交换机之外的可以始 发PCI交换(例如,读取请求、写入请求)或者作为PCI交换的目标的设备。
[0025] 在本发明的一个实施例中,单个客户端和单个存储装置可以被视为单个PCIe架 构的一部分。在本发明的另一实施例中,一个或多个客户端以及一个或多个存储装置的任 何组合可以被视作是单个PCIe架构的一部分。此外,如果存储装置内的个别组件使用PCIe 进行通信,且客户端中的个别组件(参见图1D)使用PCIe进行通信,则存储装置和客户端 中的所有组件可以被视为单个PCIe架构的一部分。本领域技术人员会明白:可以使用另一 类型的架构来实现本发明的各种实施例,而不脱离本发明。
[0026] 继续图1A,在本发明的一个实施例中,存储装置(102)是一个系统,该系统包括易 失性存储器和永久存储器并被配置成服务来自一个或多个客户端(100AU00M)的读取请 求和/或写入请求。该存储装置(102)的各种实施例在以下图2A-2D中描述。
[0027] 参考图1B,图IB示出了其中客户端(100AU00M)连接到网格组态(在图IB中标 示为存储装置网格(104))中设置的多个存储装置(104A、104B、104C、104D)的系统。如图 IB所示,该存储装置网格(104)被显示在一个完全连接的网格组态中一即,存储装置网格 (104)中的所有存储装置(104A、104B、104C、104D)直接连接到存储装置网格(104)中的所 有其他存储装置(l〇4A、104B、104C、104D)。在本发明的一个实施例中,每一客户端(100A、 100M)可以直接连接到存储装置网格(104)中的一个或多个存储装置(104A、104B、104C、 104D)。本领域技术人员会明白:存储装置网格可以使用其他网格组态(例如,部分连接的 网格)来实现,而不背离本发明。
[0028] 参考图1C,图IC示出一系统,在该系统中,客户端(100AU00M)连接到按扇出 (fan-out)组态排列的多个存储装置(104A、104B、104C、104D)。在这种组态中,每一客户端 (100A、100M)被连接到存储装置(104A、104B、104C、104D)中的一个或多个;然而,各个存储 装置(104A、104B、104C、104D)之间没有通信。
[0029] 参考图1D,图ID示出了根据本发明的一个或多个实施例的客户端。如图ID所示, 客户端(110)包括客户端处理器(112)、客户端存储器(114)和客户端交换机(116)。这些 组件中的每一个描述如下。
[0030] 在本发明的一个实施例中,客户端处理器(112)是一组具有被配置成执行指令的 单核或多核的电子电路。在本发明的一个实施例中,客户端处理器(112)可以使用复杂指 令集体系(CISC)体系结构或精简指令集(RISC)体系结构实现。在本发明的一个或多个实 施例中,客户端处理器(112)包括根组件(如通过PCIe协议定义的)(未示出)。在本发明 的一个实施例中,如果客户端(110)包括根组件(其可以被集成入客户端处理器(112)),则 客户端存储器(114)经由该根组件连接到客户端处理器(112)。或者,客户端存储器(114) 使用另一个点对点的连接机制直接连接到客户端处理器(112)。在本发明的一个实施例 中,客户端存储器(114)对应于任何易失性存储器,包括,但不限于,动态随机存取存储器 (DRAM)、同步 DRAM、SDR SDRAM 和 DDR SDRAM。
[0031] 在本发明的一个实施例中,客户端存储器(114)包括下列一个或多个:客户端处 理器的提交队列和客户处理器的完成队列。在本发明的一个实施例中,该存储装置存储器 包括客户端处理器的一个或多个提交队列,其通过架构(fabric)对客户端可见,且该客户 端存储器包括客户端处理器的一个或多个完成队列,其通过架构对存储装置可见。在本发 明的一个实施例中,客户端处理器的提交队列被用于向客户端处理器发送命令(例如,读 取请求、写入请求)。在本发明的一个实施例中,客户端处理器的完成队列被用于向该客户 端处理器信令,告知它发出至另一实体的命令已被完成。可以使用其他的通知机制来实现 本发明的诸实施例,而不背离本发明。
[0032] 在本发明的一个实施例中,客户端交换机(116)只包括单个交换机。在本发明的 另一实施例中,客户端交换机(116)包括多个互连的交换机。如果客户端交换机(116)包 括多个交换机,则每一交换机可以连接到所有其他的交换机,可连接到交换架构中的诸交 换机的一个子集,或者只连接到一个其他交换机。在本发明的一个实施例中,客户端交换机 (116)中的每一交换机都是硬件和逻辑(例如,使用集成电路实现)的组合(如通过交换机 架构实现的协议定义的交换机架构),其被配置为允许数据和消息在客户端(110)和存储 装置(未示出)之间传递。
[0033] 在本发明的一个实施例中,当客户端(100A、100M)实施下列协议中的一个或多 个:PCI、PCIe或PCI-X,时,客户端交换机(116)是PCI交换机。
[0034] 在这种实施例中,客户端交换机(116)包括许多端口,其中每一端口可被配置为 透明桥或非透明桥。实现为透明桥的端口允许根组件继续发现连接(直接或间接)至该端 口的设备(可以是其他根组件、交换机、PCI桥或端点)。相反,当根组件遇到实现为非透明 桥的端口时,该根组件无法继续发现连接到该端口的设备,相反该根组件将这样的端口当 作端点处理。
[0035] 当端口被实现为非透明桥时,非透明桥的任一侧上的设备只能使用邮箱系统和门 铃中断(由客户端交换机实现)进行通信。该门铃中断允许该非透明桥的一侧上的处理器 发出一个中断至该非透明桥的另一侧上的处理器。此外,该邮箱系统包括一个或多个寄存 器,该寄存器对于交换机架构的任一侧上的处理器是可读和可写的。上述寄存器使客户端 交换机的任一侧上的处理器能够跨该非透明桥传递控制和状态信息。
[0036] 在本发明的一个实施例中,为了把PCI交换从非透明桥的一侧上的设备发送至 该非透明桥的另一侧上的设备,该PCI交换必须寻址到实现该非透明桥的端口。在接收 到该PCI交换时,客户端切换执行地址翻译(使用直接地址翻译机制或基于查找表的翻 译机制)。随后,由此获得的地址被用于向该非透明桥的另一侧上的合适设备路由分组 (packet)〇
[0037] 在本发明的一个实施例中,客户端交换机(116)被配置成使得客户端存储器 (114)的至少一部分为存储装置直接可存取。换言之,客户端交换机的一侧上的存储装置可 以经由客户端交换机直接存取客户端交换机的另一侧上的客户端存储器。
[0038] 在本发明的一个实施例中,客户端交换机(116)包括DM引擎(118)。在本发明的 一个实施例中,该DM引擎(118)可以由连接到客户端交换机的客户端处理器或存储装置 编程。如上面所讨论的,客户端交换机(116)被配置为使得客户端存储器(114)的至少一 部分对于存储装置或存储模块是可存取的。因此,DM引擎(118)可以被编程以从存储装 置可存取的客户端存储器的该部分中的地址读取数据并且将这种数据的副本直接写至存 储装置或存储模块中的存储器。此外,DM引擎(118)可以被编程为从存储装置读取数据 并且将这种数据的副本直接写至存储装置可存取的客户端存储器的该部分。
[0039] 在本发明的一个实施例中,DM引擎(118)支持组播。在这种实施例中,存储装置 中的处理器(参见图2A)可创建组播组,其中该组播组的每一成员对应于存储装置上的存 储器中的唯一目的地地址。该组播组的每一成员同一个描述符相关联,该描述符指定:(i) 目的地地址;(ii)源地址;(iii)传递大小字段;以及(iv)控制字段。每个描述符的源地 址保持不变,同时目的地地址对于每个描述符而改变。一旦创建了该组播组,通过靶向该组 播组地址的交换机的任何数据传递(包括由DM引擎启动的传递)将该数据的相同副本置 于同该组播组相关联的所有目的地端口。在本发明的一个实施例中,交换机并行处理所有 的组播组描述符。
[0040] 继续图ID的讨论,本领域技术人员将会理解:虽然图ID示出了位于客户端(110) 中的客户端交换机(116),但该客户端交换机(116)可以位于客户端外部,而不背离本发 明。此外,本领域技术人员将会理解 :DMA引擎(118)可以位于客户端交换机(116)外部, 而不背离本发明。
[0041] 参考图1E,图IE示出一系统,其中客户端(100A、100M)经由客户端交换机(108) 连接至按照网格组态(图IE中标示为存储装置网格(104))排列的多个存储装置(104A、 104B、104C、104D)。在图IE所示的实施例中,每一客户端(100A、100M)不包括其自己的客 户端交换机-相反,所有的客户端共享一个客户端交换机(108)。如图IE所示,存储装置 网格(104)按完全连接的网格组态加以显示一即存储装置网格(104)中的所有存储装置 (104A、104B、104C、104D)直接连接到该存储装置网格(104)中的所有其他存储装置(104A、 104B、104C、104D)。在本发明的一个实施例中,客户端交换机(108)可以直接连接到存储装 置网格(104)中的一个或多个存储装置(104A、104B、104C、104D)。本领域技术人员将会理 解:存储装置网格可以使用其他网格组态(例如,部分连接的网格)实现,而不背离本发明。
[0042] 虽然未在图IE中示出,但每一客户端可包括自己的客户端交换机(如图ID所 示),但可以使用交换机架构(定义见下文)连接到存储装置网格(104)。
[0043] 本领域的技术人员将会理解:虽然图1A-1E示出了存储装置连接至有限数量的客 户端,但存储装置可以连接到任何数量的客户端,而不背离本发明。本领域技术人员将会理 解:虽然图1A-1E示出了各种系统配置,但本发明并不限于上述的系统配置。此外,本领域 技术人员将会理解:客户端(不管系统的配置如何)可以使用交换机架构(未示出)连接 到(多个)存储装置(如下所述),而不背离本发明。
[0044] 图2A-2D示出了根据本发明的一个或多个实施例的存储装置的实施例。参考图 2A,存储装置包括控制模块(200)和存储模块组(202)。这些组件中的每一个描述如下。在 一般情况下,控制模块(200)被配置成管理来自一个或多个客户端的读取和写入请求的服 务。特别是,该控制模块被配置为经由IOM(下面讨论)从一个或多个客户端接收请求、处 理该请求(该处理可包括发送请求到存储模块),以及在请求已被服务之后向客户端提供 响应。以下包括了有关控制模块中的诸组件的附加细节。此外,下面参考图4A-7C来描述 相对于服务读取和写入请求的控制模块的操作。
[0045] 继续图2A的讨论,在本发明的一个实施例中,该控制模块(200)包括输入/输出 模块(IOM) (204)、交换机架构(206)、处理器(208)、存储器(210)和,任选地,现场可编程门 阵列(FPGA) (212)。在本发明的一个实施例中,I0M(204)是在客户端(图1A-1E中的100A、 100M)和存储装置中的其他组件之间的物理接口。该IOM支持以下协议中的一个或多个: PCI、PCIe、PCI-X、以太网(包括,但不限于,在IEEE 802.3a-802.3bj下定义的各种标准)、 无限带宽技术(Infiniband)和融合以太网(RoCE)上的远程直接存储器存取(RDMA)。本领 域技术人员将会理解:该IOM可使用除了以上列举以外的其他协议实现,而不背离本发明。
[0046] 继续图2A的讨论,交换机架构(206)仅包括单个交换机。在本发明的另一实施例 中,交换机架构(206)包括多个互连的交换机。如果交换机架构(206)包括多个交换机, 每一交换机可以连接到所有其他的交换机,可以连接到交换机架构中的诸交换机的子集, 或可以仅连接到交换机架构中的一个其他交换机。在本发明的一个实施例中,在交换机架 构(206)中的每一交换机是硬件和逻辑(例如,使用集成电路实现)的组合(如由交换机 架构实现的协议定义交换机架构),其被配置为在存储装置中将各种部件连接在一起并在 各种连接的组件之间路由分组(使用逻辑)。在本发明的一个实施例中,交换机架构(206) 物理连接到IOM(204)、处理器(208)、存储模块组(202)和,如果存在,FPGA(212)。在本发 明的一个实施例中,控制模块(200)中的所有组件间通信(除了在处理器(208)和存储器 (210)之间)通过交换机架构(206)。此外,该控制模块(200)和存储模块组(202)之间的 所有通信通过该交换机架构(206)。在本发明的一个实施例中,交换机架构(206)采用PCI 协议(例如,PCI、PCIe、PCI-X或另一个PCI协议)实现。在这种实施例中,通过交换机架 构(206)的所有通信使用相应的PCI协议。
[0047] 在本发明的一个实施例中,如果交换机架构实现PCI协议,交换机结构(206)包括 用于处理器的端口(或者,更具体地说,用于集成在处理器(208)中的根组件或用于连接到 处理器的根组件的端口)、用于存储模块组(202)中的存储模块(214A、214N)(见图3)的一 个或多个端口、用于FPGA(212)(如果存在的话)的端口以及用于I0M(204)的端口。在本 发明的一个或多个实施例中,上述端口中的每一个可以配置为透明桥或非透明桥(如以上 所讨论的)。本领域技术人员将会理解:虽然已联系PCI实现来描述交换机架构(206),但 该交换机架构(206)可以使用其他协议来实现,而不背离本发明。
[0048] 在本发明的一个实施例中,交换机结构(206)中的至少一个交换机被配置为实现 组播。更具体地说,在本发明的一个实施例中,处理器(208)被配置为产生组播组,其中该 组播组包括两个或更多成员,每一成员指定存储器(210)和/或存储模块(214A、214N)中 的一地址。当创建该组播组时,将该组播组同组播地址相关联。为了实现组播,交换机架构 中的至少一个交换机被配置为:当接收到将该组播地址指定为目的地地址的写入时,交换 机被配置成为该组播组中的每一成员产生一个新的写入并发出该写入至存储装置中的合 适地址。在本发明的一个实施例中,通过将特定偏移量(offset)加到该组播地址来确定由 交换机产生的用于每一写入的地址。
[0049] 继续图2A,处理器(208)是一组具有被配置成执行指令的单核或多核的电子电 路。在本发明的一个实施例中,处理器(208)可以使用复杂指令集(CISC)体系结构或精简 指令集(RISC)体系结构实现。在本发明的一个或多个实施例中,处理器(208)包括根组件 (如通过PCIe协议定义)。在本发明的一个实施例中,如果控制模块(200)包括根组件(其 可以被集成入处理器(208)),则存储器(210)经由该根组件连接到处理器(208)。或者,存 储器(210)使用另一个点对点连接机制直接连接到处理器(208)。在本发明的一个实施例 中,存储器(210)对应于任何易失性存储器,包括,但不限于,动态随机存取存储器(DRAM)、 同步 DRAM、SDR SDRAM 和 DDR SDRAM。
[0050] 在本发明的一个实施例中,处理器(208)被配置为创建和更新存储器内数据结构 (未不出),其中该存储器内数据结构被存储于存储器(210)中。在本发明的一个实施例 中,存储器内数据结构包括存储模块组中的逻辑地址与物理存储地址之间的映射(直接或 间接)。在本发明的一个实施例中,逻辑地址是从客户端的角度来看数据似乎驻留在此处 的地址。在本发明的一个实施例中,逻辑地址是(或包括)通过将散列函数(例如SHA-1、 MD-5等等)应用于η元组所产生的散列值。在本发明的一个实施例中,该η元组是<对象 ID,偏移量ID>,其中在对象ID定义一文件且偏移量ID定义相对于文件的起始地址的位置。 在本发明的另一实施例中,η元组是<对象ID,偏移量ID,出生时间〉,其中出生时间对应于 创建(使用对象ID标识)文件时的时间。或者,逻辑地址可包括逻辑对象ID和逻辑字节 地址,或逻辑对象ID和逻辑地址偏移量。在本发明的另一实施例中,逻辑地址包括对象ID 和偏移量ID。本领域技术人员将会理解:多个逻辑地址可被映射到单个物理地址且逻辑地 址不限于上述的实施例。
[0051] 在本发明的一个实施例中,物理地址可对应于:(i)存储器(210)中的位置,(ii) 在弯曲存储器(vaulted memory)(例如图3中的324)中的位置,或(iii)在固态存储器模 块(例如图3中的330A)中的位置。在本发明的一个实施例中,如果存储装置中有数据的 多个副本,则存储器内数据结构可将单个散列值映射至多个物理地址。
[0052] 在本发明的一个实施例中,存储器(210)包括以下的一个或多个:用于处理器的 提交队列、用于处理器的完成队列、用于存储装置中的每一存储模块的提交队列以及用于 存储装置中的每一存储模块的完成队列。在本发明的一个实施例中,该用于处理器的提交 队列被用于发送命令(例如,读取请求和写入请求)至处理器。在本发明的一个实施例中, 该用于处理器的完成队列被用于向该处理器发信号,告知它向另一实体发出的命令已被完 成。用于存储模块的提交队列和完成队列以类似的方式运行。
[0053] 在本发明的一个实施例中,处理器(经由交换机架构)被配置为卸下对FPGA(212) 的各种类型的处理。在本发明的一个实施例中,该FPGA(212)包括计算正被写入至存储模 块的数据和/或正从存储模块读取的数据的校验和的功能。此外,FPGA(212)可以包括出 于用RAID方案(例如,RAID2-RAID 6)将数据存入存储模块的目的而计算P和/或Q的奇 偶信息的功能和/或执行恢复使用RAID方案(例如,RAID2-RAID6)存储的损坏数据所必 要的各种计算的功能。在本发明的一个实施例中,存储模块组(202)包括一个或多个存储 模块(214A、214N),其中每一个存储模块都被配置用于存储数据。存储模块以下在图3中加 以描述。
[0054] 在本发明的一个实施例中,处理器(208)被配置为编程系统中的一个或多个DMA 引擎。例如,处理器(208)被配置为编程客户端交换机中的DMA引擎(参见图ID)。处理 器(208)也可以被配置成编程存储模块中的DM引擎(参见图3)。在本发明的一个实施例 中,编程客户端交换机中的DM引擎可以包括创建组播组和为该组播组中的每一成员产生 描述符。
[0055] 转向图2B,图2B示出了根据本发明的一个或多个实施例的存储装置。存储装置 包括控制模块(216)和至少两个存储模块组(236, 238)。控制模块(216)包括交换机架 构(234),其直接连接到IOM A(218)、I0M B(220)、处理器A(222)、处理器B(224)、(如果 存在的话)FPGA A (230)、(如果存在的话)FPGA B (232)、存储模块组A (236)中的存储模块 (2364,236沁以及存储模块组8(238)中的存储模块(238八,238沁。上述组件之间的所有通 信(除了在处理器A(222)和处理器B(224)之间)通过交换机架构(234)。在本发明的一 个实施例中,控制模块(216)内的处理器(222, 224)能够使用例如点对点互连技术(比如 英特尔⑩QuickPath互连)直接通信。本领域技术人员将会理解:其他的点对点通信机制 可以用于允许处理器(222, 224)之间的直接通信,而不背离本发明。
[0056] 继续图2B,在本发明的一个实施例中,控制模块(216)基本上类似于图2A中的控 制模块(200)。在本发明的一个实施例中,交换机架构(234)基本上类似于图2A中的交换 机架构(206)。本发明的一个实施例中,每一处理器(222,224)基本上类似于图2A中的处 理器(208)。在本发明的一个实施例中,存储器(226,228)基本类似于的图2A中的存储器 (210)。在本发明的一个实施例中,I0M(218,220)基本上类似于图2A中的I0M(204)。在本 发明的一个实施例中,FPGA(230,232)基本上类似于图2A中的FPGA(212)。最后,存储模块 组(236, 238)基本上类似于图2A中的存储模块组(202)。
[0057] 在本发明的一个实施例中,控制模块(216)中的两个IOM (218, 220)使用于控制模 块(216)的I/O带宽加倍(相比具有单个IOM的控制模块的I/O带宽)。此外,第二IOM的 添加(或附加的Ι0Μ)增加了可以连接至给定控制模块的客户端的数量,以及通过扩展,可 以连接至存储装置的客户端的数量。在本发明的一个实施例中,使用交换机架构(234)来 处理各种连接的组件之间的通信(如上所述)允许处理器(222,224)中的每一个直接存取 (经由交换机架构(234))连接到交换机架构(234)的所有FPGA (230, 232)以及所有存储模 块(236A,236N,238A,238N)。
[0058] 参考图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)能够使用例如 点对点互连技术(诸如英特^K?QuickPath互连)直接通信。本领域技术人员将会理解: 其他的点对点通信机制可以被用于允许处理器(248,250)之间的直接通信,而不背离本发 明。
[0059] 在本发明的一个实施例中,处理器A (248)被配置为主要处理与来自存储模块组A 和B (256, 258)的数据的存储和检索相关的请求,同时处理器B (250)被配置为主要处理与 来自存储模块组C和D (260, 262)的数据的存储和检索相关的请求。然而,处理器(248, 250) 被配置为(经由交换机架构(246))与所有的存储模块组(256,258,260,262)通信。这种 配置使控制模块(240)能在处理器之间传播I/O请求的处理和/或提供内置的冗余度来处 理诸处理器之一发生故障的情况。
[0060] 继续图2C,在本发明的一个实施例中,该控制模块(240)基本上类似于图2A中的 控制模块(200)。在本发明的一个实施例中,交换机架构(246)基本上类似于图2A中的交 换机架构(206)。本发明的一个实施例中,每一处理器(248,250)基本上类似于图2A中的 处理器(208)。在本发明的一个实施例中,存储器(252,254)基本类似于图2A中的存储器 (210)。在本发明的一个实施例中,I0M(242,244)基本上类似于图2A中的I0M(204)。最 后,存储模块组(256, 258, 260, 262)基本上类似于图2A中的存储模块组(202)。
[0061] 参考图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),控制模块内的诸组件通过该交换机架构(284, 286)进行通信。
[0062] 在本发明的一个实施例中,控制模块内的处理器(268, 270, 272, 274)可以使用例 如点对点互连技术(诸如:英特尔?QuickPath互连)直接彼此通信。本领域技术人员将会 理解:其他的点对点通信机制可以用于允许处理器(268, 270, 272, 274)之间的直接通信, 而不背离本发明。此外,控制模块A中的处理器(268,270)可以经由与控制模块B中的交 换机架构(286)的直接连接同控制模块B中的诸组件进行通信。类似地,控制模块B中的 处理器(272, 274)可以经由与控制模块A中的交换机架构(284)的直接连接同控制模块A 中的诸组件进行通信。
[0063] 在本发明的一个实施例中,每一控制模块连接到各种存储模块(由存储模块组 (304,306,308,310)表示)。如图2D所示,每一控制模块可以与连接到控制模块中的交换 机架构的存储模块通信。此外,控制模块A(264)中的处理器可以使用交换机架构B(286) 与连接到控制模块B (266)的存储模块进行通信。类似地,控制模块B (266)中的处理器可 以使用交换机架构A(284)与连接到控制模块A (264)的存储模块进行通信。
[0064] 控制模块之间的互连允许存储控制来跨存储装置分配I/O负载,而无论哪个控制 模块接收该I/O请求。此外,控制模块的互连使存储装置能处理大量的I/O请求。此外,控 制模块的互连在控制模块(或其中的一个或多个组件)发生故障的情况下提供内置的冗余 度。
[0065] 参考图2B-2D,在本发明的一个或多个实施例中,存储器内数据结构跨控制模块中 的存储器被镜像(mirrored)。在这种情况下,控制模块中的诸处理器发出必要的命令来更 新存储装置内的所有存储器,以使该存储器内数据结构跨所有存储器被镜像。在这种方式 中,任何处理器可以使用自己的存储器来确定数据在存储装置中的位置(如由η元组定义, 如以上讨论的)。此功能允许任何处理器来服务有关存储模块内的数据位置的I/O请求。 此外,通过镜像该存储器内数据结构,存储装置可以在存储器之一发生故障时继续工作。 [0066] 本领域技术人员将会理解:虽然图2A-2D示出了连接到有限数量的存储模块的控 制模块,但该控制模块可以连接到任何数目的存储模块,而不背离本发明。本领域技术人员 将会理解:虽然图2A-2D示出了存储装置的各种配置,但该存储装置可以使用其他配置来 实现,而不背离本发明。
[0067] 图3示出了根据本发明的一个或多个实施例的存储模块。存储模块(320)包括存 储模块控制器(322)、存储器(324)以及一个或多个固态存储器模块(330Α,330Ν)。这些组 件中的每一个描述如下。
[0068] 在本发明的一个实施例中,存储模块控制器(322)被配置为接收从一个或多个控 制模块读取数据和/或写入数据到一个或多个控制模块的请求。此外,存储模块控制器 (322)被配置为使用存储器(324)和/或固态存储器模块(330A,330N)来服务该读取和写 入请求。虽然图3中未示出,存储模块控制器(322)可以包括DM引擎,其中该DM引擎被 配置为从存储器(324)或从固态存储器模块(330A,330N)之一读取数据并将该数据的副本 写入到客户端存储器(图ID中的114)的物理地址。此外,该DM引擎可以被配置为将来自 存储器(324)的数据写入至固态存储器模块中的一个或多个。在本发明的一个实施例中, DMA引擎被配置成由处理器(例如图2A中的208)编程。本领域技术人员将会理解:存储 模块可以包括在存储模块控制器外部的DM引擎,而不背离本发明。
[0069] 在本发明的一个实施例中,存储器(324)对应于任何易失性存储器,包括,但不限 于,动态随机存取存储器(DRAM)、同步DRAM、SDR SDRAM和DDR SDRAM。
[0070] 在本发明的一个实施例中,存储器(324)可以在逻辑上或物理上划分成弯曲存储 器(326)和高速缓存(328)。在本发明的一个实施例中,存储模块控制器(322)被配置为: 在通知存储模块中的电源故障的情况下(或者存储模块可能损失电力的另一种情况下) 将弯曲存储器(326)的全部内容写出至固态存储器模块(330A,330N)中的一个或一个以 上。在本发明的一个实施例中,存储模块控制器(322)被配置成:在通知电源故障的时间 和存储模块实际断电的时间之间将弯曲存储器(326)的全部内容写入至固态存储器模块 (330A,330N)中的一个或一个以上。相反,高速缓存(328)的内容在电源故障的情况下(或 在存储模块可能损失电力的另一种情况下)是丢失的。
[0071] 在本发明的一个实施例中,该固态存储器模块对应于任何使用固态存储器存储 持久性数据的数据存储装置。在本发明的一个实施例中,固态存储器可以包括,但不限 于,NAND闪存、NOR Flash存储器、磁随机存取存储器(M-RAM)、自旋磁随机存取存储器 (ST-MRAM)、相变存储器(PCM)或任何其他被定义为非易失性存储级存储器(SCM)的存储 器。
[0072] 在本发明的一个实施例中,下列的存储位置是统一地址空间的一部分:(i)经由 客户端交换机可存取的客户端存储器的一部分,(ii)控制模块中的存储器,(iii)存储模 块中的存储器以及(iv)固态存储器模块。因此,从存储装置中的处理器的角度来看,上述 存储位置(在物理上分开时)出现作为物理地址的单个池(pool)。换言之,该处理器可以 发出针对存储于该统一地址空间中的任何物理地址的数据的读取和/或写入请求。上述存 储位置可称为使用统一地址空间可存取的存储架构。
[0073] 在本发明的一个实施例中,部分通过客户端交换机中的非透明桥来创建统一地址 空间,允许控制模块中的处理器"看见"该客户端存储器的一部分。因此,控制模块中的处 理器可以在它可以"看见"的那部分客户端存储器中执行读取和/或写入请求。
[0074] 图4A示出了根据本发明的一个或多个实施例的存储模块。固态存储器模块(400) 包括一个或多个块。在本发明的一个实施例中,块是固态存储器模块(400)内的最小可擦 除存储单位。
[0075] 图4B示出了根据本发明的一个或多个实施例的块。更具体地,每一块(402)包括 一或多个页面。在本发明的一个实施例中,页面是固态存储器模块中用于读取和编程操作 (包括对页面的初始写入)的最小可寻址单位。在本发明的一个实施例中,重写块内的页面 要求整个块被重写。在本发明的一个实施例中,块内的每一页面是碎片页面(Frag Page) (参见图4C)或者TOC页面(参见图4D)。
[0076] 图4C示出了根据本发明的一个或多个实施例的碎片页面。在本发明的一个实施 例中,该碎片页面包括一个或多个碎片。在本发明的一个实施例中,碎片对应于有限量的用 户数据。此外,给定页面内的碎片可以是统一大小或者不统一大小。此外,给定页面内的碎 片可以是统一大小或者不统一大小。在本发明的一个实施例中,给定碎片可以小于页面的 大小,可以正好是页面的大小,或者可以超出一个或多个页面。在本发明的一个实施例中, 碎片页面仅包括碎片。在本发明的一个实施例中,每一碎片包括用户数据(即,客户端提供 的用于存储在存储装置中的数据)。出于描述的目的,术语"碎片"和"用户数据"是可交换 地使用的。
[0077] 图4D示出了根据本发明的一个或多个实施例的TOC页面。在本发明的一个实施 例中,该TOC页面(406)包括一个或多个TOC条目,其中每一 TOC条目包括用于给定碎片的 元数据。此外,该TOC页面(406)可以包括对块(402)中的另一 TOC页面的引用。在本发 明的一个实施例中,TOC页面仅包括TOC条目(以及,任选地,对块中的另一 TOC页面的引 用),但不包括任何碎片。在本发明的一个实施例中,每一 TOC条目对应于块(402)中的一 碎片(参见图4C)。TOC条目仅仅对应于块内的多个碎片。换言之,该TOC页面与一块相关 联并仅包括用于该块中的多个碎片的TOC条目。在本发明的一个实施例中,每一固态存储 器模块内的每一块中的没有缺陷的最后页面是TOC页面。
[0078] 图4E示出了根据本发明的一个或多个实施例的块。更具体地,图4E示出了块 (408),它包括1'0(:页面(410、412、414)和碎片页面(416、418、422、420、424、426)。在本发 明的一个实施例中,块(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)的引用。
[0079] 重复该过程直到在块(408)中只留有一个页面待填充。在这一点,TOC页面(410) 被创建并被存储在块(408)的最后页面中。本领域技术人员将会理解:T0C页面(410) 中的TOC条目的总累计大小可以小于页面大小。在这种情况中,TOC页面可以包括填充 (padding)以解决TOC条目的累计大小和页面大小之间的差。最后,因为块(408)中有其他 TOC页面,TOC页面(410)包括对一个其他TOC页面(412)的引用。
[0080] 如图4E所示,将TOC页面从该块的"底"链接到页面的"顶",以便可以通过跟随来 自该TOC页面下面的TOC页面的引用获得TOC页面。例如,TOC页面(412)可以用TOC页 面(410)中的引用来存取。
[0081] 本领域技术人员将会理解:虽然块(408)仅包括碎片页面和TOC页面,但块(408) 可以包括除了碎片页面和TOC页面之外的其他页面(例如,包括奇偶校验数据的页面),而 不背离本发明。这种其他页面可位于块内,且根据实施方式在TOC页面和碎片页面之间交 叉存取。
[0082] 图4F示出了根据本发明的一个或多个实施例的TOC条目。在本发明的一个实施例 中,每一 TOC条目(430)包括用于碎片的元数据(且特别是片段中的用户数据),并可以包 括以下字段中的一个或多个:(i)对象ID (432),其标识正被存储的对象(例如文件);(ii) 出生时间(434),其指定对应于TOC条目的碎片被写入至弯曲存储器的时间(例如,控制模 块中的处理器的处理器时钟值);(iii)偏移量ID(436),其相对于对象(由对象ID标识) 开始而标识碎片中的用户数据的起始点;(iv)片段(fragment)大小(438),其指定了碎片 的大小;(V)页面ID(440),其标识其中存储了碎片的块中的页面;(vi)字节(442),其标识 页面(由页面ID标识)中碎片的起始位置;(vii)逻辑长度(444),其指定碎片中的用户数 据的未压缩长度;(vii)类型(type) (446),其指定碎片中的用户数据的类型(例如,坏页面 (badpage)、数据、快照、池);(ix)种类(kind) (448),其指定该碎片是有效用户数据还是裁 减(trim)(其表明在固态存储器模块执行无用存储单元收集(garbage collection)时可 以擦除该碎片);以及(ix)保留(450),其对应于可用于存储其他用户数据的TOC条目中的 空间。
[0083] 在本发明的一个实施例中,〈对象ID,偏移量ID>或〈对象ID,偏移量ID,出生时 间〉标识客户端提供的用户数据。此外,〈对象ID,偏移量ID>或〈对象ID,偏移量ID,出 生时间〉由客户端用来标识特定用户数据,同时存储装置使用物理地址来标识存储装置内 的用户数据。本领域技术人员将会理解:客户端可提供逻辑地址来代替对象ID和偏移量 ID。
[0084] 本领域技术人员将会理解:TOC条目可以包括与图4F所示的相比更多或更少的字 段,而不背离本发明。此外,TOC条目中的字段可以按照不同的顺序和/或组合来安排,而 不背离本发明。此外,虽然在图4F所示的TOC条目中的字段看起来都是相同的大小,但TOC 条目中的各字段的大小可以是不统一的,其中任何给定字段的大小根据TOC条目的实现方 式而变化。
[0085] 图5示出了根据本发明的一个或多个实施例的数据结构。如以上所讨论的,控制 模块中的存储器包括存储器内数据结构。在本发明的一个实施例中,该存储器内数据结构 包括η元组(例如,〈对象ID,偏移量ID>(500),〈对象ID,偏移量ID,出生时间 >(未示 出))和固态存储器模块中的碎片的物理地址(502)之间的映射。在本发明的一个实施例 中,该映射是η元组的散列和物理地址之间的映射。在本发明的一个实施例中,碎片的物理 地址被定义为以下的η元组:〈存储模块,通道,芯片使能,LUN,平面,块,页面,字节〉。
[0086] 在本发明的一个实施例中,该控制模块还跟踪每个块(504)的TOC条目(506)的 数量。更具体地说,每次碎片被写入至拱形存储体时,就创建用于该碎片的TOC条目。控制 模块跟踪新创建的TOC条目与哪个块相关联,并使用该信息来产生TOC页面。例如,控制模 块使用该信息决定与给定块相关联的所有未被写入到TOC页面的TOC条目的累计大小是否 等于块中的页面大小。如果与给定块相关联的所有未被写入到TOC页面的TOC条目的累计 大小等于块中的页面大小,则控制模块可以使用上述条目产生TOC页面并发起将该TOC页 面写入到存储模块。
[0087] 图6A-6C示出了根据本发明的一个或多个实施例的流程图。更具体地说,图6A-6C 示出根据本发明的一个或多个实施例的用于将用户数据存储于存储装置的方法。虽然流程 图中的各个步骤被顺序地呈现和描述,但本领域的普通技术人员将会理解:这些步骤中的 一些或者全部都可以按不同的次序执行,可以被组合或省略,且一些或所有的步骤可以并 行执行。在本发明的一个实施例中,图6A所示的步骤可以同图6B中所示的步骤和图6C中 所示的步骤并行执行。另外,图6B中所示的步骤可以同图6C中所示的步骤并行执行。
[0088] 参考图6A,在步骤600中,客户端将写入命令(写入请求)写至控制模块(图2A 中的208)中的处理器的提交队列(SQ)。在本发明的一个实施例中,该写入命令指定客户端 存储器中的用户数据的逻辑地址(也可称为"源地址")。在本发明的一个实施例中,该写 入命令可以使用〈对象ID,偏移量ID>指定用户数据。在本发明的一个实施例中,写入命令 在到达处理器的SQ之前至少通过客户端交换机和交换机架构。
[0089] 在步骤602中,客户端将新的SQ尾部写至SQ尾部门铃寄存器。在本发明的一个 实施例中,通过写至SQ尾部门铃寄存器,客户端通知处理器在其SQ中有新的命令要处理。
[0090] 在步骤604中,处理器获得来自SQ的写入命令。在步骤606中,处理器确定要将 用户数据(作为碎片的一部分)要写至的(多个)物理地址。在本发明的一个实施例中, (多个)物理地址对应于固态存储器模块中的位置。在本发明的一个实施例中,处理器选择 在这两个物理地址中写入用户数据的副本,其中该物理地址中的每一个是在分开的固态存 储器模块中。
[0091] 在步骤608中,处理器编程DM引擎以发出一写入至一组播地址。在本发明的一 个实施例中,该组播地址与组播组相关联,其中该组播组指定控制模块中的存储器中的第 一存储器位置、第一弯曲存储器中的第二存储器位置以及第二弯曲存储器中的第三存储器 位置。在本发明的一个实施例中,第一弯曲存储器与固态存储器模块位于同一存储模块中, 固态存储器模块包括由处理器指定的物理地址。在本发明的一个实施例中,第二弯曲存储 器按类似的方式确定。在本发明的一个实施例中,有一个在步骤606中为处理器所标识的 每一物理地址选择的弯曲存储器位置。
[0092] 在步骤610中,DM引擎从客户端存储器中的源地址读取用户数据,并将该数据写 入到组播地址,如由控制模块所引导的。在本发明的一个实施例中,交换机架构中的交换机 与组播地址相关联。在收到该地址时,交换机对该组播地址进行必要翻译,以获得三个地 址一上述每一个存储器位置各一个。随后,交换机发送用户数据的副本至该三个存储器位 置。本领域技术人员将会理解:实现组播的特定交换机可以基于交换机架构的实现方式而 变化。在这个实施例中,在客户端和存储装置之间只发出一个写入。
[0093] 在本发明的另一实施例中,在步骤608中,处理器编程DMA引擎以并行发出三个写 入请求一上述每一存储器位置各一个。在这个实施例中,在步骤610中,DM引擎并行发 出三个写入请求。在这个实施例中,客户端和存储装置之间发出三个写入。
[0094] 继续图6A,在步骤612中,为弯曲存储器中存储的用户数据的每一副本创建TOC条 目。另外,每一 TOC条目中指定的页面和字节对应于在步骤606中标识的相应物理地址的 页面和字节部分。因此,虽然在创建该相应TOC条目时该碎片不被写至固态存储器模块中 的物理地址,但该碎片(作为碎片页面的一部分)意图在稍后的时间点被写至该物理地址。 如上面所讨论的,每个TOC条目都被存储在TOC页面中,且该TOC页面最终被写入至固态存 储器模块。然而,在创建TOC页面之前,TOC条目被创建并被暂时存储在控制模块中的存储 器中并被存储在固态存储模块之一上的弯曲存储器中。
[0095] 继续图6A,在步骤614中,步骤612中所创建的TOC条目被存入弯曲存储器中。更 具体地说,每一 TOC条目被存储在存储模块的弯曲存储器中,并包括相应的碎片将在稍后 的时间点被写入其中的物理地址。
[0096] 在步骤616中,处理器更新存储器内数据结构,以反映用户数据的三个副本被存 储在存储装置中。该处理器还可更新该数据结构,其跟踪每个块的TOC条目(参见图5)。 在步骤618中,处理器将SQ标识符(其标识处理器的SQ)和写入命令标识符(其标识客户 端向处理器发出的特定写入命令)写入至客户端的完成队列(CQ)。
[0097] 在步骤620中,处理器产生用于客户端处理器的中断。在本发明的一个实施例中, 处理器使用由非透明桥提供的门铃中断以发出一中断至客户端处理器。在步骤622中,客 户端处理其CQ中的数据。在这个阶段,客户端已被通知该写入请求已被服务。在步骤624 中,一旦客户端已处理在完成队列头部处的数据,则该客户端将新的CQ头部写入至CQ头部 门铃。这向处理器预示CQ中的下一个位置要用于在未来给客户的通知。
[0098] 参考图6B,在步骤626中,控制模块中的处理器发起将来自弯曲存储器的用户数 据的副本写至步骤608中标识的物理地址。在本发明的一个实施例中,控制模块中的处理 器编程存储模块控制器中的DM引擎以从弯曲存储器读取用户数据并将该用户数据的副 本写入至固态存储器模块中的物理地址。如上所述,要将用户数据的副本写入其中的物理 地址是先前在步骤606中由处理器确定的物理地址。
[0099] 在步骤628中,紧接着步骤626,控制模块中的处理器请求移除弯曲存储器中的用 户数据的与步骤626中被写入至固态存储器模块的用户数据相对应的全部副本。在步骤 630中,通过将用户数据的副本包括在其各自弯曲存储器中(在步骤626中写入)的每一个 存储模块,将移除确认发送至控制模块中的处理器。
[0100] 参考图6C,图6C示出了每次创建TOC条目时执行的方法。在步骤632中,确定块 中是否剩余有一个以上的空白页。换言之,确定用户数据是否已被写入到除了块中的最后 页面之外的所有其它页面。如果块中剩余有一个以上的空白页,该过程行进至步骤636 ;否 则该过程行进至步骤634。正如上面所讨论的,如果只有一个空白页面在要写入用户数据的 块中,则TOC页面必须被写入至该块的最后一个页面。
[0101] 在步骤634中,确定与块(其未被写入到块中的TOC页面)相关联的TOC条目的 累积大小是否大于或等于页面大小。如果与该块(其未被写入到块中的TOC页面)相关联 的TOC条目的累积大小大于或等于页面大小,则该过程行进到步骤636 ;否则该过程结束。
[0102] 在步骤636中,将用于块(其未被写入到块中的TOC页面)的TOC条目结合,以创 建TOC页面。在本发明的一个实施例中,如果要写入用户数据的块中只有一个空白页面,则 这种情况下创建的TOC页面可包括填充(如上所述)。在步骤638中,确定该块是否包括另 一个TOC页面。如果该块包括另一个TOC页面,则该过程行进到步骤640 ;否则该过程行进 到步骤642。在步骤640中,对块中最近存储的TOC页面的引用被包含在步骤636中创建的 TOC页面中(例如,图4E中的TOC页面(410)引用TOC页面(412))。
[0103] 在步骤642中,该处理器发起将TOC页面写入至固态存储器模块。更具体地说,由 处理器编程的DM引擎将TOC页面的副本写入至固态存储器模块中的包括与TOC页面中的 TOC条目相对应的碎片的块。
[0104] 在步骤644中,处理器请求包括这样的TOC条目的所有存储模块:这些TOC条目被 包含于在步骤642中被写入至固态存储器模块的TOC页面中,以便从它们各自的弯曲存储 器中移除这种TOC条目。在步骤646中,处理器从存储模块接收上述TOC条目已被移除的 确认。
[0105] 图7A-7E示出根据本发明的一个或多个实施例的将用户数据存入存储装置的示 例。该示例并非旨在限制本发明的范围。
[0106] 转向图7A,考虑一种情况,其中客户端(700)发出将用户数据(由黑色圆圈标注) 写至存储装置的请求。响应于该请求,控制模块(704)中的处理器(714)确定:用户数据的 第一副本应被写至存储模块A(718)中的固态存储器模块A(726)中的第一物理位置,且用 户数据的第二副本应被写至存储模块B (720)中的固态存储器模块B (728)中的第二物理位 置。
[0107] 处理器(714)在接收到该写入请求之前创建具有三个成员的组播组。第一成员具 有弯曲存储器A(722)中的目的地地址,第二成员具有弯曲存储器B(724)中的目的地地址, 且第三成员具有存储器(712)中的目的地地址。处理器(714)随后编程交换机架构(716) 中的交换机(未示出)以实现该组播组。
[0108] DMA引擎继续发出一写入至与该组播组相关联的组播地址。该写入被发送到交换 机架构并最终到达实现该组播组的交换机(未示出)。随后,该交换机创建三个写入(每一 个都指向由组播组指定的一个目的地)并将这些写入发出至这些目标存储器位置。在本发 明的一个实施例中,这三个写入是并行发生的。
[0109] 要在各种目的地地址处被写入的碎片经过交换机架构(716)。一旦这些写入完成, 该存储装置中就会有用户数据的三份副本。一旦这些写入完成,更新存储器(712)中的存 储器内数据结构(未示出)以反映出用户数据已被存入存储装置内的三个位置。此外,向 客户端(700)通知这些写入已完成。
[0110] 参考图7B,一旦这些碎片都被写入至弯曲存储器,处理器就在存储器(712)中 为弯曲存储器中存储的每一碎片产生一 TOC条目(TE 1,TE 2)。TE 1是来自弯曲存储器 A(722)中存储的碎片的TOC条目,且TE2是用于弯曲存储器B(724)中存储的碎片的TOC条 目。随后,处理器(经由DMA引擎,未示出)将TE 1的副本写至弯曲存储器A(722)并将TE 2的副本写至弯曲存储器B (724)。正如上面所讨论的,在这一阶段,TOC条目(TE 1和TE 2)被暂时存储在上述的弯曲存储器中,直到它们被添加到TOC页面并被写入到合适的固态 存储器模块。
[0111] 此外,独立于存储装置的操作,客户端(700)可以将用户数据(已经被写入存储装 置)从客户端存储器(708)移除。
[0112] 参考图7C,在稍后的某一时间点,处理器(714)发出一请求到存储模块A(718),以 将当前在弯曲存储器A(722)中的用户数据的副本写入至固态存储器模块(726)中的物理 地址。响应于该请求,存储模块控制器(未示出)将弯曲存储器A(722)中的用户数据的副 本写入至固态存储器模块A(726)。一旦该写入完成,就通知处理器(714)。处理器(714) 可在接收到来自存储模块A(718)的通知后更新存储器内数据结构。
[0113] 参考图7D,在稍后的某一时间点,处理器(714)确定TE 1和用于同一块(即,其中 存储有对应于TE 1的碎片的块)中的碎片的其他TOC条目(未示出)的累计总大小等于 页面大小。基于该确定,处理器创建TOC页面,且随后(经由DMA引擎(未示出))将TOC 页面写入至固态存储器模块中包括与TE 1相对应的碎片的块(未示出)。
[0114] 参考图7E,在稍后的某一时间点,一旦碎片已被写入固态存储器模块A,处理器 (714)发出一请求至包括弯曲存储器中的用户数据的副本的所有存储模块,以将该用户数 据的副本从它们各自的弯曲存储器中移除。此外,一旦TOC页面已被写入固态存储器模块 A,处理器(714)发出一请求至包括前述TOC页面中写入的任何TOC条目的副本的所有存储 模块,以从它们各自的弯曲存储器中移除这种TOC条目。当这些请求完成时,存储模块的每 一个通知控制模块。图7E示出在所有存储模块已完成上述请求后的系统状态。在接收到来 自存储模块的告知弯曲存储器中的用户数据的所有副本已被移除的通知后,处理器(714) 可更新存储器内数据结构。
[0115] 在本发明的一个或多个实施例中,为用户数据的每一副本创建TOC条目,且该TOC 条目被存储在弯曲存储器中,以便在TOC条目之一损坏、丢失或者其他不可用的情况下可 以存取用户数据的每一副本。此外,在发生电力故障的情况下,弯曲存储器内的所有TOC条 目都被写入到相应的固态存储器模块。此外,对应于前述TOC条目的碎片被写入到在客户 端的写入请求被处理时处理器原始确定的物理地址。
[0116] 图8示出了根据本发明的一个或多个实施例的流程图。更具体地,图8示出了根 据本发明的一个或多个实施例的一种产生存储器内数据结构的方法。虽然流程图中的各个 步骤按照顺序被呈现和描述,但本领域的普通技术人员将会理解:一些或所有的步骤都可 以按不同的次序执行,可以被组合或省略,且一些或所有的步骤可以并行执行。
[0117] 在步骤800中,选择一块。在步骤802中,获得该块中的最后页面。例如,该处理 器读取最后页面的内容。如以上所讨论的,固态存储模块中的每个块的最后页面是TOC页 面。在步骤804中,TOC条目是从TOC页面中提取的。
[0118] 在步骤806中,步骤804中获得的每一 TOC条目都被处理以填充存储器内数据结 构。更具体地说,处理每一 TOC条目可包括以下的一个或多个:(i)从TOC条目中提取页面 ID和字节信息;(ii)结合(i)中的信息和〈存储模块,通道,芯片使能,LUN,平面,块〉,以 获得物理地址;(iii)从TOC条目提取对象ID和偏移量ID(且可选的出生时间);(iv)将 散列函数应用于〈对象ID,偏移量ID> (或,任选的,〈对象ID,偏移量ID,出生时间 >),以 产生一个散列值;以及(V)用散列值和物理地址的映射填充存储器内数据结构。
[0119] 在本发明的一个实施例中,处理器已经包括关于〈存储模块,通道,芯片使能, LUN,平面,块〉的信息,因为处理器需要这个信息来获得块的最后页面。在本发明的一个实 施例中,处理器可以(i)使用TOC条目中的类型字段来确定该碎片是否在坏页面中。如果该 碎片被存储在坏页面中,处理器可以不产生用于TOC条目的存储器内数据结构中的映射。
[0120] 在步骤808中,一旦TOC页面中的所有TOC条目已被处理,确定TOC页面是否包括 对块(即,步骤800中选择的块)中的另一个TOC页面的引用。如果TOC页面包含对该块 中的另一个TOC页面的引用,则该过程行进到步骤810 ;否则该过程结束。在步骤810中, 获得引用的TOC页面。在步骤812中,TOC条目是从TOC页面中提取的。然后,该过程行进 到步骤806。
[0121] 在本发明的一个实施例中,在启动系统的时候,图8中的方法可以对存储装置内 的所有块(或块的子集)并行执行。紧接着该处理,在将新的用户数据写入到存储装置时, 所得到的存储器内数据结构可以由处理器更新。
[0122] 本领域技术人员将会理解:虽然已相对于被保留作为TOC页面的每一块中的最 后页面描述了本发明,但本发明的实施例也可以通过设置块中的另一个页面作为经保留的 TOC页面实施,而不背离本发明。
[0123] 在本发明的一个实施例中,在对固态存储器模块中存储的任何数据进行的任何操 作(例如,读取操作、写入操作和/或擦除操作)之前产生存储器内数据结构。
[0124] 本发明的一个或多个实施例提供一种系统和方法,其中存储装置中存储的所有用 户数据是与元数据共处的。在这种方式中,存储装置中存储的所有用户数据是自描述的。通 过根据本发明的各种实施例来安排用户数据和相应的元数据,可以更好地保护存储装置, 应对给定固态存储器模块(或其子集)的故障。换句话说,如果给定固态存储器模块(或 其子集)故障,则该系统中的其他固态存储器模块中的用户数据仍可存取,因为存取其他 固态存储器模块中的用户数据所需的元数据本身就位于其他固态存储器模块中。
[0125] 进一步,本发明的实施例使能在存储器内数据结构的建立,其允许控制模块在单 个查找步骤中存取用户数据。换言之,控制模块可使用存储器内数据结构来直接确定存储 装置中的用户数据的(多个)物理地址。使用此信息,控制模块能够直接存取用户数据而 不需要为了获取用户数据而通过任何中间元数据层次。
[0126] 本发明的一个或多个实施例可以使用由系统中的一个或多个处理器执行的指令 实现。另外,这种指令可对应于存储在一个或多个非暂时性计算机可读介质上的计算机可 读指令。
[0127] 虽然已相对有限数量的实施例来描述本发明,但本领域技术人员,受益于该公开 内容,将会理解:也可设计不背离这里所公开的本发明的范围的其它实施例。因此,本发明 的范围应仅由所附的权利要求书限定。
【权利要求】
1. 一种用于存储数据的方法,包括: 接收将第一数据写至永久存储器的请求,其中所述第一数据是用第一逻辑地址定义 的; 确定所述永久存储器中的第一物理地址,其中所述第一物理地址包括第一块ID和第 一子块ID ; 将所述第一数据写至所述第一物理地址; 产生内容条目(TE)的第一表格,其包括所述第一逻辑地址和所述第一子块ID,其中所 述第一 TE不被存储于由所述第一子块ID标识的子块中;以及 将所述第一 TE写至所述永久存储器中的第二物理地址,其中所述第二物理地址包括 所述第一块ID和第二子块ID,其中第二子块对应于所述第二子块ID,且其中所述第二子块 位于同所述第一块ID相对应的第一块内,且其中由所述第二子块ID标识的子块不包括所 述第一数据。
2. 如权利要求1所述的方法,进一步包括: 接收将第二数据写至所述永久存储器的请求,其中所述第二数据是用第二逻辑地址定 义的; 确定所述永久存储器中的第三物理地址,其中所述第三物理地址包括所述第一块ID 和第三子块ID ; 将所述第二数据写至所述第三物理地址; 产生第二TE,所述第二TE包括所述第二逻辑地址和所述第三子块ID,其中所述第二TE 不被存储于由所述第三子块ID标识的子块中; 将所述第二TE写至所述永久存储器中的第四物理地址,其中所述第四物理地址包括 所述第一块ID和第四子块ID,其中第四子块对应于所述第四子块ID,且其中所述第四子块 位于所述第一块内,且其中由所述第四子块ID标识的子块不包括所述第一数据。
3. 如权利要求1所述的方法,其特征在于,所述永久存储器是固态存储器,且其中所述 第一块是NAND块,且所述第一子块是NAND页面。
4. 如权利要求1所述的方法,其特征在于,所述第四子块包括对所述第二子块的引用。
5. -种用于存储数据的方法,包括: 接收将第一数据写至永久存储器的请求,其中所述第一数据是用第一逻辑地址定义 的; 确定所述永久存储器中的第一物理地址,其中所述第一物理地址包括第一块ID和第 一页面ID ; 将包含所述第一数据的副本的第一碎片写至所述第一物理地址; 产生内容条目(TE)的第一表格,其包括所述第一逻辑地址和所述第一页面ID,其中所 述第一 TE不被存储于由所述第一页面ID标识的页面中; 接收将第二数据写至所述永久存储器的请求,其中所述第二数据是用第二逻辑地址定 义的; 确定所述永久存储器中的第二物理地址,其中所述第二物理地址包括所述第一块ID 和第二页面ID ; 将包含所述第二数据的副本的第二碎片写至所述第二物理地址; 产生包含所述第二逻辑地址和所述第二页面ID的第二TE,其中所述第二TE不被存储 于由所述第二页面ID标识的页面中; 产生内容表格(TOC)页面,其中所述TOC页面包括所述第一 TE和所述第二TE,且其中 所述TOC页面不包括所述第一数据和所述第二数据;以及 将所述TOC页面写至所述永久存储器中的第三物理地址,其中所述第三物理地址包括 所述第一块ID和第三页面ID。
6. 如权利要求5所述的方法,进一步包括: 接收将第三数据写至所述永久存储器的请求,其中所述第三数据是用第三逻辑地址定 义的; 确定所述永久存储器中的第四物理地址,其中所述第四物理地址包括所述第一块ID 和第四页面ID ; 将包含所述第三数据的副本的第三碎片写至所述第四物理地址; 产生第三TE,所述第三TE包括所述第三逻辑地址和所述第四页面ID,其中所述第三TE 不被存储于由所述第三页面ID标识的页面中; 产生包含所述第三TE的第二TOC页面; 将所述第二TOC页面写至所述永久存储器中的第五物理地址,其中所述第五物理地址 包括所述第一块ID和第五页面ID,且其中所述第二TOC页面不包括所述第三数据。
7. 如权利要求6所述的方法,其特征在于,对应于所述第五页面ID的第五页面是所述 第一块中的最后页面。
8. 如权利要求7所述的方法,其特征在于,所述第二TOC页面包括对所述第一 TOC页面 的引用。
9. 如权利要求8所述的方法,其特征在于,所述引用位于所述第二TOC页面的末尾处。
10. 如权利要求5所述的方法,其特征在于,在将所述第一碎片写至所述永久存储器中 的第一物理地址之前,所述第一碎片的第一副本被存入第一存储器且所述第一碎片的第二 副本被存入第二存储器,其中为所述第一碎片的所述第二副本产生第三TE,其中一旦将所 述TOC页面写至所述第三物理存储器地址,就擦除所述第三TE。
11. 如权利要求10所述的方法,其特征在于,所述第一存储器位于所述第一存储模块 中且所述第二存储器位于所述第二存储模块中,且其中所述永久存储器位于所述第一存储 模块中。
12. 如权利要求5所述的方法,其特征在于,所述第一TE进一步包括选自由出生时间字 段、类型字段、逻辑长度字段和种类字段所构成的群组中的至少一个。
13. 如权利要求5所述的方法,其特征在于,所述第一逻辑地址包括对象ID和偏移量 ID。
14. 一种用于填充存储器内数据结构的方法,包括: (a) 选择永久存储器中的第一块; (b) 提取所述第一块中的最后页面,其中所述第一块与第一块ID相关联; (c) 从所述第一块中的最后页面提取内容条目(TE)的第一表格,其中所述第一TE包括 针对第一数据的第一逻辑地址以及第一页面ID,所述第一页面ID标识所述第一数据所位 于的第一块中的页面,其中所述页面不是最后页面且其中所述第一逻辑地址不包括所述页 面ID ; (d) 使用所述第一块ID和从所述第一 TE提取的第一页面ID产生针对所述第一数据的 第一物理地址,其中所述第一物理地址包括所述第一页面ID ; (e) 散列所述第一逻辑地址以获得第一散列值;以及 (f) 用所述第一散列值和所述第一物理地址之间的第一映射填充所述存储器内数据结 构。
15. 如权利要求14所述的方法,进一步包括: (g) 选择所述永久存储器中的第二块; (h) 提取所述第二块中的最后页面,其中所述第二块与第二块ID相关联; (i) 从所述第二块中的所述最后页面中提取第二TE,其中所述第二TE包括针对第二数 据的第二逻辑地址以及第二页面ID,所述第二页面ID与所述第二数据所位于的第二块中 的页面相对应; (j) 使用所述第二块ID和从所述第二TE提取的所述第二页面ID产生针对所述第二数 据的第二物理地址; (k) 散列所述第二逻辑地址以获得第二散列值;以及 (l) 用所述第二散列值和所述第二物理地址之间的第二映射填充所述存储器内数据结 构。
16. 如权利要求15所述的方法,其特征在于,(a)-(c)和(g)-(i)并行发生。
17. 如权利要求15所述的方法,其特征在于,所述第一块位于第一存储模块中,所述第 二块位于所述第二存储模块中,且其中所述存储器内数据结构位于所述第一存储模块和所 述第二存储模块外部的存储器中。
18. 如权利要求14所述的方法,其特征在于,还包括: 确定所述第一块中的所述最后页面包括对所述第一块中的所述第二页面的引用,其中 所述第二页面包括第二TE,其中所述第二TE包括针对第二数据的第二逻辑地址以及第二 页面ID,所述第二页面ID与所述第二数据所位于的第一块中的页面相对应; 使用所述第一块ID和所述第二页面ID产生针对所述第二数据的第二物理地址; 散列所述第二逻辑地址以获得第二散列值;以及 用所述第二散列值和所述第二物理地址之间的第二映射填充所述存储器内数据结构。
19. 如权利要求14所述的方法,其特征在于,所述永久存储器是固态存储器。
20. 如权利要求14所述的方法,其特征在于,在由对永久存储器中存储的任何数据执 行的读操作、写操作和擦除操作构成的群组中的任何操作之前,用所述永久存储器中的所 有TE填充所述存储器内数据结构。
21. 如权利要求14所述的方法,其特征在于,所述第一逻辑地址包括对象ID和偏移量 ID〇
22. -种用于存储数据的方法,包括: 接收将第一数据写至永久存储器的请求,其中所述第一数据是用第一逻辑地址定义 的; 确定所述永久存储器中的第一物理地址,其中所述第一物理地址包括第一块ID和第 一页面ID ; 在将第一碎片写至所述永久存储器中的第一物理地址之前: 将所述第一碎片的第一副本存入第一存储器中并将所述第一碎片的第二副本存入第 二存储器中; 将包含所述第一数据的副本的第一碎片写至所述第一物理地址; 产生内容条目(TE)的第一表格,其包括所述第一逻辑地址和所述第一页面ID; 接收将第二数据写至所述永久存储器的请求,其中所述第二数据是用第二逻辑地址定 义的; 确定所述永久存储器中的第二物理地址,其中所述第二物理地址包括所述第一块ID 和第二页面ID ; 将包含所述第二数据的副本的第二碎片写至所述第二物理地址; 产生包含所述第二逻辑地址和所述第二页面ID的第二TE ; 产生内容表格(TOC)页面,其中所述TOC页面包括所述第一 TE和所述第二TE;以及 将所述TOC页面写至所述永久存储器中的第三物理地址,其中所述第三物理地址包括 所述第一块ID和第三页面ID,其中为所述第一碎片的第二副本产生第三TE,其中一旦将所 述TOC页面写至所述第三物理存储器地址就擦除所述第三TE。
【文档编号】G06F12/00GK104246724SQ201380015085
【公开日】2014年12月24日 申请日期:2013年3月21日 优先权日:2012年3月23日
【发明者】J·S·邦威克, M·W·夏皮罗 申请人:Dssd股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1