具有组播直接存储器存取和统一地址空间的存储系统的制作方法

文档序号:6533338阅读:265来源:国知局
具有组播直接存储器存取和统一地址空间的存储系统的制作方法
【专利摘要】一种使得客户端、控制模块和存储模块参与到统一地址空间以使用直接存储器存取进行高效读取和写入的系统和方法。用于读取数据的方法包括确定用于写入数据的第一副本的位于第一存储器中的第一位置、用于写入数据的第二副本的位于第二存储器中的第二位置,其中第一存储器是位于包括第一永久存储器的第一存储模块中,而第二存储器是位于包括第二永久存储器的第二存储模块中。该方法进一步包括对直接存储器存取引擎编程以从客户端存储器读取数据并向组播地址发布写入请求,其中第一位置、第二位置和第三位置是与组播地址相关。
【专利说明】具有组播直接存储器存取和统一地址空间的存储系统 背景
[0001] 系统能向永久存储器写入数据和从永久存储器读取数据的速度通常是该系统整 体性能中的一个关键因素。向永久存储器或者从永久存储器传送数据的传统方法要求通过 客户端系统和永久存储器系统上的软件、固件和硬件的多个层进行处理。此外,当数据在这 些层之间移动时,数据一般会被复制。于是,除了在对底层的物理存储介质进行读取或者写 入所需要的延迟之外,还产生额外的延迟,该额外的延迟降低了系统的整体性能。


【发明内容】

[0002] 总体而言,在一方面,本发明涉及一种用于写入数据的方法。该方法包括从客户端 接收写入数据的请求,其中数据是位于客户端存储器中;由存储装置确定第一存储器中的 第一位置以写入数据的第一副本,第二存储器中的第二位置以写入数据的第二副本,其中 第一存储器位于包括第一永久存储器的第一存储器模块中,第二存储器位于包括第二永久 存储器的第二存储器模块中,其中存储装置包括第一存储器模块和第二存储器模块;对直 接存储器存取(DMA)引擎编程以从客户端存储器读取数据并向组播地址发布第一写入请 求,其中第一位置、第二位置和第三位置与该组播地址相关联。该方法还包括,在进行编程 之后,存储装置中的交换机架构(switch fabric)中的交换机(switch)从DMA引擎接收第 一请求;响应于对第一请求的接收,在交换机中产生用以将第一副本写入第一位置的第二 请求、用以将第二副本写入第二位置的第三请求和用以将第三副本写入第三位置的第四请 求,其中第三位置位于该存储装置的控制模块的第三存储器中;其中响应于第二请求,数据 的第一副本被写入到第一位置,响应于该第三请求,数据的第二副本被写入到第二位置,响 应于该第四请求,数据的第三副本被写入到第三位置;其中DMA引擎从客户端存储器读取 数据,第一存储器、第二存储器、第三存储器以及客户端存储器的至少一部分是能够通过统 一地址空间存取的存储架构(storage fabric)的一部分。
[0003] 总体而言,在一方面,本发明涉及一种用于读取数据的方法。该方法包括从客户端 接收用以读取存储在存储装置中的数据的请求,其中该请求包括与数据相关的逻辑地址; 由存储装置使用该逻辑地址确定存储器内(in-memory)数据结构中的位置,从存储器内数 据结构中的位置获得物理地址,其中物理地址对应于永久存储器中的第一位置,其中永久 存储器位于存储装置的存储模块中且其中数据位于第一位置;对存储模块控制器编程以从 第一位置读取数据并在第二位置存储数据的第一副本,其中第二位置位于存储模块的存储 器中;在对存储模块控制器编程之后:由存储模块控制器从第一位置读取数据,并由存储 模块控制器将数据的第一副本写入第二位置;对直接存储器存取(DMA)引擎编程以从第二 位置读取数据并将数据的第二副本写入客户端存储器中的第三位置;在对DMA引擎编程之 后:由DMA引擎从第二位置读取该数据的第一副本,并由DMA引擎将数据的第二副本写入第 三位置,其中永久存储器、存储器以及客户端的至少一部分。
[0004] 总体而言,在一方面,本发明涉及一系统。该系统包括包含客户端处理器和客户端 存储器的客户端,和存储装置,该存储装置包括:
[0005] 处理器,其中处理器被配置成对第一直接存储器存取(DMA)引擎和第二DMA引擎 编程、第一存储器、包含第二存储器的第一存储模块、第一永久存储器、第二DMA引擎、包含 第三存储器和第二永久存储器的第二存储模块、包含被配置成实现组播的交换机的交换机 架构、以及包含第一 DMA引擎和非透明桥(non-transparent bridge)的客户端交换机,其 中非透明桥使得存储装置能够存取客户端存储器的至少一部分,其中第一 DMA引擎被配置 成从客户端存储器读取第一数据(first datum)并将第一数据写入交换机中的组播地址,其 中第二DMA引擎被配置成从选自下述组中的至少其中之一读取第二数据(second datum), 所述组由第一永久存储器和第二永久存储器组成,第二DMA引擎还被配置成将第二数据写 入客户端存储器,其中客户端存储器的所述部分、第一存储器、第二存储器和第三存储器是 能够通过统一地址空间存取的存储架构(storage fabric)的一部分。
[0006] 本发明的其他方面将通过下面的描述和所附的权利要求而变得显而易见。

【专利附图】

【附图说明】
[0007] 图1A-1E示出了根据本发明的一个或多个实施例的多个系统。
[0008] 图2A-2D示出了根据本发明的一个或多个实施例的多个存储装置。
[0009] 图3示出了根据本发明的一个或多个实施例的存储模块。
[0010] 图4A-4B示出了根据本发明的一个或多个实施例的多个流程图。
[0011] 图5A-5C不出了根据本发明的一个或多个实施例的多个不例。
[0012] 图6示出了根据本发明的一个或多个实施例的流程图。
[0013] 图7A-7C示出了根据本发明的一个或多个实施例的多个示例。

【具体实施方式】 本发明的具体实施例现在将被结合附图详细描述。在下述的对于本发明的实施例的详 细描述中,许多具体细节被阐述以提供对于本发明的透彻的理解。然而,对于本领域的普通 技术人员来说,很明显本发明可以以不具备这些具体细节的方式被实现。在其他的示例中, 公知的特征没有被具体描述,以避免这些描述被不必要的复杂化。
[0014] 在下述对于附图1A-7C的描述中,结合一附图所描述的任何组件,在本发明 的不同的实施例中,可以等效于结合任何其他附图而描述的一个或多个被相似命名 (like-named)的组件。为了使得描述简洁,将不会结合每一个附图而重复对于这些部 件的描述。因此,在每一个附图中这些部件的每一个(each)和每一个实施例(every embodiment)将被以参照的方式引入并被假设以任意展现在具有一个或多个类似命名的部 件的每一个其他附图中。此外,按照本发明的不同的实施例,一个附图中对于这些部件的任 何描述将被解释为一个可实现的可选实施例,以附加于、结合于、或者代替结合任何其他附 图中对于一个对应的类似命名的部件而描述的实施例。
[0015] 总体而言,本发明的实施例涉及存储系统。更具体地说,本发明的实施例涉及包括 一个或多个存储装置的存储系统,每一个存储装置被配置成允许客户端使用客户端存储器 和物理存储器模块的存储器之间的单个直接存储器存取(DMA)来将数据从客户端传送至 存储装置,同时保持存储装置能够控制物理存储器布局(physical storage layout)并向 其客户端展示抽象的逻辑布局的能力。该架构被称为零副本(Zer〇-C〇py)DMA,其中除了用 于每一个读取或者写入的唯一 DMA以外,该架构中产生数据的零副本。具体而言,在本发明 的一个或多个实施例中,存储装置包括存储模块,且客户端能够使用零副本DMA直接传送 数据至存储模块。此外,在本发明的一个或多个实施例中,存储装置包括使用零副本DMA直 接将数据从存储模块传送到客户端存储器的功能。
[0016] 图1A-1E揭示了根据本发明的一个或多个实施例的多个系统。参考图1A,该 系统包括可操作地连接至存储装置(102)的一个或多个客户端(客户A(100A)、客户端 M(100M))。
[0017] 在本发明的一个实施例中,客户端(100A、100M)对应于包括向存储装置(102)发 布读取请求和/或向存储装置(102)发布写入请求的功能的任何系统。尽管在图1A中没 有示出,客户端(100AU00M)中的每一个可包括客户端处理器和客户端存储器。关于客户 端中的组件的额外细节将在下面的图1D中描述。在本发明的一个实施例中,客户端(100A、 100M)被配置成使用下述协议中的一个或者多个来与存储装置(102)通信:外围组件互联 (PCI)、快速 PCI (PCI-Express,PCIe)、扩展 PCI (PCI-eXtended,PCI-X)、快速非易失性存储 (NVMe)、基于快速PCI架构(fabric)的快速非易失性存储、基于以太网架构的快速非易失 性存储以及基于无限带宽架构(infiniband fabric)的快速非易失性存储。本领域的技术 人员将意识到本发明并不局限于前述的协议。
[0018] 在本发明的一个或多个实施例中,如果客户端执行PCI、快速PCI或者NVMe,则该 客户端包括根组件(root complex)(根组件未示出)。在本发明的一个实施例中,根组件是 将客户端处理器和客户端存储器连接至PCIe架构的设备。在本发明的一个实施例中,根组 件被集成到客户端处理器中。
[0019] 在本发明的一个实施例中,PCIe架构包括经由交换机(例如图1D中的客户端交 换机(116)和例如图2A中的交换机架构(206)的交换机架构内的交换机)连接的根组件 和端点(endpoint)。在本发明的一个实施例中,端点是除了根组件或者交换机以外的设备, 该设备能发起PCI交换(例如,读取请求、写入请求)或者作为PCI交换的目标。
[0020] 在本发明的一实施例中,单个的客户端和单个的存储装置可被认为是单个的PCIe 架构的一部分。在本发明的另一个实施例中,一个或者多个客户端和一个或者多个存储装 置的任意组合可被认为是单个PCIe架构的一部分。此外,如果存储装置中的个别组件使用 PCIe通信,并且客户端中的个别组件(参考图1D)使用PCIe通信,那么存储装置和客户端 中的所有组件都可被认为是单个PCIe架构的一部分。本领域的技术人员将意识到本发明 的不同实施例可使用其他类型的架构实现而不脱离本发明的范围。
[0021] 继续参考图1A,在本发明的一个实施例中,存储装置(102)是包括易失存储器和 永久存储器的系统,并且该系统被配置成服务来自一个或多个客户端(100AU00M)的读取 请求和/或写入请求。存储装置(102)的不同实施例以下在图2A-2D中被描述。
[0022] 参考图1B,图1B示出了一系统,其中客户端(100A、100M)连接至多个存储装置 (104A、104B、104C、104D),该多个存储装置被布置成网格组态(mesh configuration)(在 图1B中被标记为存储装置网格(104))。如图1B所示,存储装置网格(104)被示为全连接 (full connected)网格组态,也就是说,存储装置网格(104)中的每一个存储装置(104A、 104B、104C、104D)与存储装置网格(104)中每一个其他存储装置(104A、104B、104C、104D) 直接连接。在本发明的一个实施例中,每一个客户端(100A、100M)可直接连接至存储装置 网格(104)中的一个或多个存储装置(104A、104B、104C、104D)。本领域的技术人员将意识 到存储装置网格可使用其他网格组态(例如,部分连接网格)实现而不脱离本发明的范围。
[0023] 参考图1C,图1C示出了一个系统,其中客户端(100AU00M)连接至多个存储装置 (104A、104B、104C、104D),该多个存储装置被安排成扇出组态(fan-out configuration)。 在该组态中,每一个客户端(100A、100M)连接至一个或多个存储装置(104A、104B、104C、 104D);然而,各个存储装置(104A、104B、104C、104D)之间并不互相通信。
[0024] 参考图1D,图1D示出了根据本发明的一个或多个实施例的客户端。如图1D所示, 客户端(110)包括客户端处理器(112)、客户端存储器(114)和客户端交换机(116)。这些 组件中的每一个在下面进行描述。
[0025] 在本发明的一个实施例中,客户端处理器(112)是被配置成执行指令的具有单个 核心或者多个核心的一组电子电路。在本发明的一个实施例中,客户端处理器(112)可使 用复杂指令集(CISC)体系结构或精简指令集(RISC)体系结构实现。在本发明的一个或多 个实施例中,客户端处理器(112)包括(由PCIe协议定义的)根组件(未示出)。在本发明 的一个实施例中,如果客户端(110)包括根组件(根组件可被集成至客户端处理器(112)), 则客户端存储器(114)经由根组件连接至客户端处理器(112)。或者,客户端存储器(114) 使用其他点对点连接机制直接连接至客户端处理器(112)。在本发明的一个实施例中,客户 端存储器(114)对应于任何易失存储器,包括但不限于,动态随机存取存储器(DRAM)、同步 动态随机存取存储器(SDRAM)、单数据速率同步动态随机存取存储器(SDR SDRAM)、双倍数 据速率同步动态随机存取存储器(DDR SDRAM)。
[0026] 在本发明的一个实施例中,客户端存储器(114)包括下述的一个或者多个:用于 客户端处理器的提交队列和用于客户端处理器的完成队列。在本发明的一个实施例中,存 储装置存储器包括一个或多个用于客户端处理器的提交队列,这些提交队列对于客户端是 通过架构(fabric)可见的,而客户端存储器包括一个或多个用于客户端处理器的完成队 列,这些完成队列对于存储装置是通过架构可见的。在本发明的一个实施例中,用于客户端 处理器的提交队列被用于向客户端处理器发送命令(例如,读取请求、发送请求)。在本发 明的一个实施例中,用于客户端处理器的完成队列被用于发信号通知(signal)客户端处 理器由客户端处理器发布给另一个实体的命令已经被完成。本发明的实施例可使用其他通 知机制(notification mechanism)实现而不脱离本发明的范围。
[0027] 在本发明的一个实施例中,客户端交换机(116)仅仅包括一个单个的交换机。在 本发明的另一个实施例中,客户端交换机(116)包括数个互联的交换机。如果客户端交换 机(116)包括数个交换机,那么每一个交换机可以与每一个其他交换机连接,可以与交换 机架构的交换机子集连接,或者仅仅连接至一个其他的交换机。在本发明的一个实施例中, 客户端交换机(116)中的每一个交换机是硬件和逻辑的组合(比如可以使用集成电路来实 现),(如由(多个)协议所定义的,交换机架构执行)该组合被配置成允许数据和消息在 客户端(110)和存储装置(未示出)之间传送。
[0028] 在本发明的一个实施例中,当客户端(100AU00M)执行一个或多个下述协议: PCI、PCIe或者PCI-X时,客户端交换机(116)是PCI交换机。
[0029] 在这些实施例中,客户端交换机(116)包括数个端口,每一个端口可被配置成透 明桥或非透明桥。实现为透明桥的端口允许根组件继续发现(直接或者间接)连接至该端 口的设备(可以是其他根组件、交换机、PCI桥或者端点)。相比之下,当根组件遇到被实现 为非透明桥的端口时,根组件不能继续发现连接至该端口的设备,进而,根组件将这种端口 作为端点处理。
[0030] 当端口被实现为非透明桥时,位于非透明桥任意一侧的设备可仅使用电子邮箱系 统和(由客户端交换机实现的)门铃中断(doorbell interrupt)进行通信。门铃中断允 许位于非透明桥一侧的处理器向位于非透明桥另一侧的处理器发布中断。此外,电子邮箱 系统包括一个或多个可供交换机架构任一侧的处理器读或者写的寄存器。前述的寄存器使 得位于客户端交换机任一侧的处理器能跨越非透明桥而传送控制和状态信息。
[0031] 在本发明的一实施例中,为了从非透明桥一侧的一个设备发送PCI交换 (transaction)至非透明桥另一侧的一个设备,PCI交换必须被寻址至实现该非透明桥的 端口。在接收到PCI交换之后,客户端交换机执行地址翻译(使用直接地址翻译机制或者 基于查找表的翻译机制)。获得的地址接下来被用于将分组路由至非透明桥另一侧的合适 的设备。
[0032] 在本发明的一个实施例中,客户端交换机(116)被配置以使得客户端存储器 (114)的至少一部分能够由存储装置直接存取。换句话说,在客户端交换机一侧的存储装置 可经由客户端交换机直接存取客户端交换机另一侧的客户端存储器。
[0033] 在本发明的一个实施例中,客户端交换机(116)包括DMA引擎(118)。在本发明的 一个实施例中,DMA引擎(118)可由连接至客户端交换机的客户端处理器或者存储装置编 程。如上面所讨论的,客户端交换机(116)被配置以使得客户端存储器(114)的至少一部 分能够由存储装置或者存储模块直接存取。因此,DMA引擎(118)可被编程以从客户端存储 器中能够由存储装置存取的那部分中的地址读取数据,以及直接将上述数据的副本写入存 储装置或者存储模块的存储器中。此外,DMA引擎(118)可被编程以从存储装置中读取数 据并将上述数据的副本直接写入客户端存储器中能够由存储装置存取的那部分中的地址。
[0034] 在本发明的一实施例中,DMA引擎(118)支持组播。在这些实施例中,存储装置中 的处理器(参考图2A)可创建组播组,其中组播组中的每一个成员对应存储装置的存储器 中的唯一目的地地址。组播组中的每一个成员与一个描述符相关联,该描述符指定:(i)目 的地地址;(ii)源地址;(iii)传送尺寸字段;以及(iv)控制字段。用于每一个描述符的 源地址保持不变,而用于每一个描述符的目的地地址是变化的。一旦创建组播组,任何通过 交换机且以组播组地址为目标的数据传送,包括由DMA引擎发起的传送,将数据的一致副 本置于所有与组播组相关联的目的地端口。在本发明的一个实施例中,交换机并行处理所 有的组播组描述符。
[0035] 继续讨论图1D,本领域的技术人员将会意识到虽然图1D示出了位于客户端(110) 内的客户端交换机(116),客户端交换机(116)可位于该客户端之外,这并不脱离本发明的 范围。此外,本领域的技术人员将会意识到DMA引擎(118)可位于客户端交换机(116)之 夕卜,这也不脱离本发明的范围。
[0036] 参考图1E,图1E示出了一个系统,其中客户端(100AU00M)经由客户端交换机 (108)连接到数个被布置成网格组态(在图1E中被标记为存储装置网格(104))的存储装 置(104A、104B、104C、104D)。在图1E所示的实施例中,每一个客户端(100A、100M)并不包 括其自己的客户端交换机,相反,所有的客户端共享一个客户端交换机(108)。如图1E所 示,存储装置网格(104)被示为全连接网格组态,也就是说,存储装置网格(104)中的每一 个存储装置(l〇4A、104B、104C、104D)直接连接至存储装置网格(104)中的每一个其他存储 装置(104A、104B、104C、104D)。在本发明的一个实施例中,客户端交换机(108)可直接连接 至存储装置网格(104)中的一个或多个存储装置(104A、104B、104C、104D)。本领域的技术 人员将会意识到存储装置网格可以采用其他网格组态(例如,部分连接组态)实现而不脱 离本发明的范围。
[0037] 尽管在图1E中没有示出,每一个客户端可包括其自己的客户端交换机(如在图 1D中示出的),但客户端交换机可使用交换机架构(下面会定义)而连接至存储装置网格 (104)。
[0038] 本领域的技术人员将会意识到虽然图1A-1E所示的存储装置连接至有限数量的 客户端,存储装置可以连接至任意数量的客户端而并不脱离本发明的范围。本领域的技 术人员将会意识到图1A-1E示出了不同的系统组态,本发明并不被局限于前述的系统组态 中。此外,本领域的技术人员将会意识到客户端(不考虑系统的组态)可使用交换机架构 (没有示出)被连接至存储装置(下面会进行描述)而不脱离本发明的范围。
[0039] 图2A-2D示出了根据本发明的一个或多个实施例的多个存储装置的实施例。参考 图2A,存储装置包括控制模块(200)和存储模块组(202)。这些组件中的每一个将在下面 被描述。总体而言,控制模块(200)被配置成管理来自一个或多个客户端的读取和写入请 求的服务。具体而言,控制模块被配置成通过Ι0Μ(下面会讨论)从一个或多个客户端接收 请求,处理该请求(可包括将该请求发送至存储模块),并在请求被服务后向客户端提供响 应。关于控制模块中的组件的其他细节包括在下面的描述中。此外,控制模块关于读取和 写入请求的服务的操作将在下面结合附图4A-7C进行描述。
[0040] 继续对于图2A的讨论,在本发明的一个实施例中,控制模块(200)包括输入/输 出模块(Ι0Μ) (204)、交换机架构(206)、处理器(208)、存储器(210)以及,可选的,现场可 编程门阵列(FPGA) (212)。在本发明的一个实施例中,I0M(204)是客户端(图1A-1E中的 100A、100M)和存储装置中的其他组件之间的物理接口(physical interface)。Ι0Μ支持 一个或者多个下述协议:PCI、PCIe、PCI-X、以太网(包括但不限于,由IEEE802.3a-802.3bj 所定义的各种标准)、无限带宽(Infiniband)、融合以太网上的远程直接存储器存取(RDMA) (RoCE)。本领域的技术人员将会意识到Ι0Μ可以使用上述所列的协议之外的协议实现而不 脱离本发明的范围。
[0041] 继续对于图2A的讨论,交换机架构(206)仅包括单个的交换机。在本发明的另一 个实施例中,交换机架构(206)包括数个互联的交换机。如果交换机架构(206)包括多个 交换机,那么每一个交换机可以连接至每一个其他交换机,可以连接至交换机架构的交换 机子集,或者可以仅仅连接至交换机架构中的另一个交换机。在本发明的一个实施例中, 交换机架构(206)中的每一个交换机是硬件和逻辑的组合(比如可以使用集成电路来实 现),(如由(多个)协议所定义的,交换机架构执行)该组合被配置成将存储装置中的各 个组件连接在一起并在各个连接的组件之间(使用该逻辑)路由分组。在本发明的一个 实施例中,交换机架构(206)是物理连接至Ι0Μ(204)、处理器(208)、存储模块组(202)以 及,如果存在的话,FPGA(212)。在本发明的一个实施例中,控制模块(200)中的所有组件间 (inter-component)通信(除了处理器(208)和存储器(210)之间的通信)都通过交换机 架构(206)。此外,控制模块(200)和存储模块组(202)之间的所有通信都通过交换机架构 (206)。在本发明的一个实施例中,交换机架构(206)是使用PCI协议(例如,PCI、PCIe、 PCI-X或者另一个PCI协议)实现。在这些实施例中,所有通过交换机架构(206)的通信使 用所对应的PCI协议。
[0042] 在本发明的一个实施例中,如果交换机架构实现PCI协议,则交换机架构(206)包 括用于处理器的端口(或者,更具体地说,用于集成在处理器(208)中的根组件或者用于 连接至处理器的根组件的端口)、一个或多个用于存储模块组(202)中的存储模块(214A、 214N)(参考图3)的端口、用于FPGA(212)(如果存在的话)的端口以及用于I0M(204)的端 口。在本发明的一个或多个实施例中,每一个上述的端口可被配置为透明桥或者非透明桥 (如上面讨论的)。本领域的技术人员将会意识到虽然交换机架构(206)是关于PCI实现 而描述,交换机架构(206)可以使用其他协议实现而不脱离本发明的范围。
[0043] 在本发明的一个实施例中,交换机架构(206)中的至少一个交换机被配置为实现 组播。更具体地说,在本发明的一个实施例中,处理器(208)被配置为产生组播组,其中组 播组包括两个或多个成员,每一个成员指定存储器(210)和/或存储模块(214A、214N)中 的地址。当组播组被创建时,组播组与一组播地址相关。为了实现组播,交换机架构中的至 少一个交换机被配置成:当接收到指定组播地址作为目的地地址的写入时,交换机被配置 成为组播组中的每一个成员产生新的写入,并将这些写入发布至存储装置中适当的地址。 在本发明的一个实施例中,用于由交换机产生的每一个写入的地址是通过在组播地址上增 加特定的偏移而确定。
[0044] 继续对于图2A的讨论,处理器(208)是被配置成执行指令的具有单个核心或者 多个核心的一组电子电路。在本发明的一个实施例中,处理器(208)可使用复杂指令集 (CISC)架构或精简指令集(RISC)架构实现。在本发明的一个或多个实施例中,处理器 (208)包括(由PCIe协议定义的)根组件。在本发明的一个实施例中,如果控制模块(200) 包括根组件(根组件可被集成在处理器(208)中),那么存储器(210)经由根组件连接至处 理器(208)。或者,存储器(210)使用其他点对点连接机制直接连接至处理器(208)。在本 发明的一个实施例中,存储器(210)对应于任何易失存储器,包括但不限于,动态随机存取 存储器(DRAM)、同步动态随机存取存储器(SDRAM)、单数据速率同步动态随机存取存储器 (SDR SDRAM)、双倍数据速率同步动态随机存取存储器(DDR SDRAM)。
[0045] 在本发明的一个实施例中,处理器(208)被配置成创建并更新存储器内 (in-memory)数据结构(未示出),其中存储器内数据结构存储在存储器(210)中。在本 发明的一个实施例中,存储器内数据结构包括在存储模块的集合中在逻辑地址和物理地址 之间(直接或者间接)的映射。在本发明的一个实施例中,逻辑地址是从客户端的角度展 现的数据所驻留的地址。在本发明的一个实施例中,逻辑地址是(或者包括)对η元组 (n-tuple)应用散列(hash)函数(例如,SHA-UMD-5等等)而产生的散列值。在本发明 的一个实施例中,η元组是〈对象ID,偏移> (〈object ID, offset〉),其中对象ID定义文件 而偏移定义相对于该文件的起始地址的位置。在本发明的另一个实施例中,η元组是〈对 象ID,偏移,出生时间> (〈object ID, off set, birth time〉),其中出生时间对应于(使用对 象ID标识)文件被创建的时间。或者,逻辑地址可包括逻辑对象ID和逻辑字节(byte)地 址,或者逻辑对象ID和逻辑地址偏移。在本发明的另一个实施例中,逻辑地址包括对象ID 和偏移。本领域的技术人员将会意识到多个逻辑地址可被映射到单个的物理地址,因此逻 辑地址并不被限制于上述的实施例。
[0046] 在本发明的一个实施例中,物理地址可对应于(i)存储器(210)中的位置、(ii)弯 曲存储器(vaulted memory)(例如图3中的324)中的位置、(iii)固态存储器模块(例如 图3中的330A)中的位置。在本发明的一个实施例中,如果在存储装置中存在数据的多个 副本,则存储器内数据结构可将单个的散列值映射到多个物理地址。
[0047] 在本发明的一个实施例中,存储器(210)包括下述中的一个或多个:用于处理器 的提交队列、用于处理器的完成队列、用于存储装置中的每一个存储模块的提交队列和用 于存储装置中的每一个存储模块的完成队列。在本发明的一个实施例中,用于处理器的提 交队列被用于向处理器发送命令(例如,读取请求、写入请求)。在本发明的一个实施例中, 用于处理器的完成队列被用于发信号通知(signal)处理器由处理器发布给另一个实体的 命令已经被完成。用于存储模块的提交和完成队列以类似的方式运作。
[0048] 在本发明的一个实施例中,(经由交换机架构)处理器被配置为将各种类型的处 理卸载(offload)至FPGA (212)。在本发明的一个实施例中,FPGA (212)包括为正写入至 存储模块和/或正从存储模块中读取的数据计算校验和的功能。此外,为了使用RAID方案 (例如RAID 2-RAID 6)将数据存储在存储模块中,FPGA(212)可包括计算P和/或Q奇偶 校验信息的功能,和/或,FPGA(212)还可包括执行各种计算的功能,这些计算是恢复采用 RAID方案(例如RAID 2-RAID 6)保存但被损坏的数据所需要的。在本发明的一个实施例 中,存储模块组(202)包括一个或多个存储模块(214A、214N),每一个存储模块被配置成存 储数据。存储模块在下面的图3中描述。
[0049] 在本发明的一个实施例中,处理器(208)被配置成对系统中的一个或多个DMA引 擎编程。例如,处理器(208)被配置成对客户端交换机(参见图1D)中的DMA引擎编程。处 理器(208)也可被配置成对存储模块(参考图3)中的DMA引擎编程。在本发明的一个实 施例中,对客户端交换机中的DMA引擎编程可包括创建组播组和产生用于组播组中的每一 个成员的描述符。
[0050] 转到图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)能够使用诸如丨nte_)快速 通道互联(Intel? QuickPath Interconnect)的点对点互联直接通信。本领域的技术人员 将会意识到其他点对点通信机制可被用于允许处理器(222、224)之间的直接通信而不脱 离本发明的范围。
[0051] 继续参考图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)基本上相似。
[0052] 在本发明的一个实施例中,控制模块(216)中的两个Ι0Μ (218、220)使得用于控制 模块(216)的I/O带宽(相对于具有单个Ι0Μ的控制模块的I/O带宽)加倍。此外,添加 第二Ι0Μ(或者额外的Ι0Μ)增加了可连接至给定的控制模块的客户端的数量,以及,通过扩 展,增加了可连接至存储装置的客户端的数量。在本发明的一个实施例中,使用交换机架构 (234)来处理各个相连接的组件之间的通信(如上面所描述的)允许每一个处理器(222、 224)(经由交换机架构(234))直接存取连接至该交换机架构(234)的所有的FPGA(230、 232)和所有的存储模块(236A、236N、238A、238N)。
[0053] 参考图2C,图2C示出了一存储装置,该存储装置包括(通过交换机架构(246))连 接至存储模块组(256、258、260、262)中的多个存储模块(未示出)的控制模块(240)。如 图2C所示,存储模块(240)包括两个Ι0Μ (242、244)、两个处理器(248、250)和存储器(252、 254)。在本发明的一个实施例中,控制模块(240)中的所有组件经由交换机架构(246)通 信。此外,处理器(248、250)可使用交换机架构(246)或者直接连接(如图2C所示)而与 彼此通信。在本发明的一个实施例中,控制模块(240)中的处理器(248、250)可使用诸如 丨ntel?快速通道互联(Intel? QuickPath Interconnect)的点对点互联直接通信。本领域 的技术人员将会意识到其他点对点通信机制可被用于处理器(248、250)之间的直接通信 而不脱离本发明的范围。
[0054] 在本发明的一个实施例中,处理器A (248)被配置成主要处理涉及存储模块组A和 B(256、258)的存储和提取(retrieval)数据的请求,而处理器B(250)被配置成主要处理 涉及存储模块组C和D(260、262)的存储和提取(retrieval)数据的请求。然而,处理器 (248、250)被配置成(经由交换机架构(246))与所有的存储模块组(256、258、260、262)通 信。这种组态使得控制模块(240)能够扩展处理之间的I/O请求的处理,和/或,提供内置 的冗余度来处置其中一个处理器失效的情况。
[0055] 继续参考图2C,在本发明的一个实施例中,控制模块(240)基本上与图2A中的控 制模块(200)相似。在本发明的一个实施例中,交换机架构(246)基本上与图2A中的交换 机架构(206)相似。在本发明的一个实施例中,每一个处理器(248、250)基本上与图2A中 的处理器(208)相似。在本发明的一个实施例中,存储器(252、254)基本上与图2A中的存 储器(210)相似。在本发明的一个实施例中,Ι0Μ (242、244)基本上与图2A中的Ι0Μ (204) 相似。最后,存储模块组(256、258、260、262)基本上与图2A中的存储模块组(202)相似。
[0056] 参考图2D,图2D示出了包括两个控制模块(264、266)的存储装置。每一个控制 模块包括 Ι0Μ (296、298、300、302)、处理器(268、270、272、274)、存储器(276、278、280、282) 和(如果存在的话)??6八(288、290、292、294)。每一个存储模块(264、266)包括交换机架构 (284、286),控制模块内的部件经由交换机架构通信。
[0057] 在本发明的一个实施例中,控制模块中的多个处理器(268、270、272、274)可使用 诸如Intel?快速通道互联(丨ntel? QuickPath Interconnect)的点对点互联直接彼此通 信。本领域的技术人员将会意识到其他点对点通信机制可被用于允许多个处理器(268、 270、272、274)之间的直接通信而不脱离本发明的范围。此外,控制模块A中的处理器(268、 270)可经由与控制模块B中的交换机架构(286)的直接连接而与控制模块B中的组件通 信。类似的,控制模块B中的处理器(272、274)可经由与控制模块A中的交换机架构(284) 的直接连接而与控制模块A中的组件通信。
[0058] 在本发明的一个实施例中,每一个控制模块连接至(被标记为存储模块组(304、 306、308、310)的)各个存储模块。如图2D所示,每一个控制模块可与连接至控制模块中的 交换机架构的存储模块通信。此外,控制模块A (264)中的处理器可使用交换机架构B (286) 与连接至控制模块B (266)的存储模块通信。类似的,控制模块B (266)中的处理器可使用 交换机架构A (284)与连接至控制模块A (264)的存储模块通信。
[0059] 控制模块之间的互联允许存储控制在整个存储装置上分配I/O负载而不需要考 虑是哪一个控制模块接收了该I/O请求。此外,控制模块的互联使得存储装置能够处理更 大数量的I/O请求。更进一步,控制模块的互联提供在一个控制模块(或者其中的一个或 多个组件)失效的情况下内置的冗余度。
[0060] 参考图2B-2D,在本发明的一个或多个实施例中,存储器内(in-memory)数据结 构跨控制模块中的存储器被镜像。在这种情况下,控制模块中的处理器发布所必要的命令 来更新存储装置中的所有存储器,使得存储器内数据结构跨所有的存储器被镜像。在这种 方式中,任何处理器可使用其自己的存储器来确定存储装置中数据的位置(如上面所讨论 的,由η元组定义)。这个功能允许任何存储器服务于任何关于存储模块中数据的位置的 I/O请求。此外,通过镜像存储器内数据结构,存储装置可在其中一个存储器失效时继续进 行运行。
[0061] 本领域的技术人员将会意识到虽然图2A-2D所示的存储模块连接至有限数量的 存储模块,该存储模块可连接至任意数量的存储模块而不脱离本发明的范围。本领域的技 术人员将会意识到虽然图2A-2D示出了存储装置的不同组态,存储装置可使用其他组态实 现而不脱离本发明的范围。
[0062] 图3示出了根据本发明的一个或多个实施例的存储模块。存储模块(320)包括存 储模块控制器(322)、存储器(324)以及一个或多个固态存储器模块(330Α、330Ν)。这些组 件中的每一个将在下面被描述。
[0063] 在本发明的一个实施例中,存储模块控制器(322)被配置成接收多个请求,这些 请求从一个或多个控制模块读取数据和/或向一个或多个控制模块写入数据。此外,存储 模块控制器(322)被配置成是使用存储器(324)和/或固态存储器模块(330Α、330Ν)来服 务于多个读取请求和写入请求。尽管在图3中没有示出,存储模块控制器(322)可包括DMA 引擎,其中DMA引擎被配置成从存储器(324)或者从其中一个固态存储器模块(330A、330N) 读取数据,并将数据的副本写入客户端存储器(图ID中的114)中的物理地址。此外,DMA 引擎可被配置成将数据从存储器(324)写入到一个或多个固态存储器模块。在本发明的一 个实施例中,DMA引擎被配置成由处理器(例如图2A中的208)编程。本领域的技术人员 将会意识到存储模块可包括位于该存储模块之外的DMA引擎而不脱离本发明的范围。
[0064] 在本发明的一个实施例中,存储器(324)对应于任何易失存储器,包括但不限于, 动态随机存取存储器(DRAM)、同步动态随机存取存储器(SDRAM)、单数据速率同步动态随 机存取存储器(SDR SDRAM)、双倍数据速率同步动态随机存取存储器(DDR SDRAM)。
[0065] 在本发明的一个实施例中,存储器(324)可被逻辑上或者物理上划分成弯曲存储 器(vaulted memory) (326)和高速缓存(328)。在本发明的一个实施例中,存储模块控制器 (322)被配置成在被通知存储模块中的电源失效(或者在另一种存储模块可能失电)的情 况下,将弯曲存储器(326)中的全部内容写入到一个或多个固态存储器模块(330A、330N) 中。在本发明的一个实施例中,存储模块控制器(322)被配置成在被通知电源失效的时间 和存储模块实际失电的时间之间将弯曲存储器(326)中的全部内容写入到一个或多个固 态存储器模块(330A、330N)中。相反,高速缓存(328)中的内容在电源失效(或者在另一 种存储模块可能失电)的情况下会丢失。
[0066] 在本发明的一个实施例中,固态存储器模块对应于任何使用固态存储器来存储永 久数据的数据存储设备。在本发明的一个实施例中,固态存储器可包括但不限于,NAND闪 存(NAND flash)存储器、N0R闪存(NOR flash)存储器、磁随机存取(M-RAM)存储器、自旋 磁随机存取(ST-MRAM)存储器、相变存储器(PCM)、忆阻内存(memrisitive memory)或者任 何其他被定义为非易失性存储级存储器(SCM)的存储器。本领域的技术人员将会意识到本 发明的实施例并不限制于存储级存储器。
[0067] 在本发明的一个实施例中,下述的存储位置是统一地址空间的一部分:(i)经由 客户端交换机可存取的客户端存储器的部分、(ii)控制模块的存储器、(iii)存储模块中 的存储器以及(iv)固态存储器模块。因此,从存储装置中的处理器的角度看,上述的存储 位置(在物理上是分离的)表现为物理地址的单一池 (single pool)。换句话说,处理器可 以对存储在该统一地址空间中的任何物理地址的数据发布读取和/或写入请求。上述的存 储位置可被称为是使用统一地址空间可存取的存储架构(storage fabric)。
[0068] 在本发明的一个实施例中,统一地址空间部分地(in part)是通过客户端交换机 中的非透明桥创建,非透明桥允许控制模块中的处理器"看见"客户端存储器的一部分。因 此,控制模块中的处理器在其能够"看见"的客户端存储器的部分中执行读取和/或写入请 求。
[0069] 图4A-4B示出了根据本发明的一个或多个实施例的多个流程图。更具体地,图 4A-4B示出了根据本发明的一个或多个实施例的用于在存储装置中存储数据的方法。虽然 流程图中的各个步骤被展示并描述为按顺序的,本领域的技术人员将会意识到一些步骤或 者全部的步骤可以以不同的顺序执行、可被组合或者省略,以及一些或者全部的步骤可被 并行执行。在本发明的一个实施例中,图4A中所示的步骤与图4B中所示的步骤可被并行 执行。
[0070] 参考图4A,在步骤400,客户端向控制模块中的处理器(图2A中的208)的提交队 列(SQ)写入一写入命令(写入请求)。在本发明的一个实施例中,写入命令指定客户端存 储器中数据的逻辑地址(也可以被称为是"源地址")。在本发明的一个实施例中,写入命 令在达到处理器的提交队列(SQ)之前通过至少客户端交换机和交换机架构。
[0071] 在步骤402,客户端向提交队列尾部门铃寄存器(SQ Tail doorbell register)写 入新的提交队列尾部(SQ Tail)。在本发明的一个实施例中,通过向提交队列尾部门铃寄存 器进行写入,客户端通知处理器在其提交队列中有新的命令需要处理。
[0072] 在步骤404,处理器从提交队列获得该写入命令。在步骤406,处理器确定将要写 入该数据的物理地址。在本发明的一个实施例中,物理地址对应于固态存储器模块中的位 置。在本发明的一个实施例中,处理器选择两个将要写入该数据的副本的物理地址,其中每 一个物理地址是位于分开的固态存储器模块中。
[0073] 在步骤408,处理器对DMA引擎编程以向组播地址发布写入。在本发明的一个实施 例中,组播地址与组播组相关,其中组播组指定控制模块的存储器中的第一存储位置、第一 弯曲存储器中的第二存储位置以及第二弯曲存储器中的第三存储位置。在本发明的一个实 施例中,第一弯曲存储器与包括由处理器指定的物理地址的固态存储器模块是位于同一个 存储模块中。在本发明的一个实施例中,第二从固态存储器以相似的方式确定。在本发明 的一个实施例中,为每一个在步骤406中由处理器确定的物理地址选择一个弯曲存储器位 置。
[0074] 在步骤410, DMA引擎从客户端存储器中的源地址读取用户数据,并将该数据写入 由控制模块所指向的组播地址。在本发明的一个实施例中,交换机架构中的交换机与组播 地址相关。在接收到该地址后,交换机对组播地址执行必要的翻译以获得三个地址一每一 个对应一个上述的存储器位置。交换机然后将用户数据的副本发送至三个存储器位置。本 领域的技术人员将会意识到执行组播的特定交换机可以根据交换机架构的实现而变化。在 该实施例中,在客户端与存储装置之间仅有一个写入被发布。
[0075] 在本发明的另一个实施例中,在步骤408,处理器对DMA引擎编程以并行发布三个 写入请求一每一个对应一个上述的存储器位置。在该实施例中,在步骤410, DMA引擎并行 发布该三个写入请求。在该实施例中,在客户端和存储装置之间有三个写入被发布。
[0076] 继续参考图4A,在步骤412,处理器更新存储器内数据结构以反映该数据的三个 副本被存储在存储装置中。在步骤414,处理器将(标识处理器的提交队列的)提交队列标 识符(SQ Identifier)和(标识由客户端发布给处理器的具体写入命令的)写入命令标识 符(Write Command Identifer)写入客户端的完成队列(CQ)。
[0077] 在步骤416,处理器为客户端处理器产生中断。在本发明的一个实施例中,处理器 使用由非透明桥提供的门铃中断来向客户端处理器发布中断。在步骤418,客户端处理其完 成队列(CQ)中的数据。在这一阶段,客户端被通知写入请求已经被处理(serviced)。在步 骤420,一旦客户端处理完成处于完成队列头部的数据时,客户端向完成队列(CQ)头部门 铃写入新的完成队列(CQ)头部。这对于处理器来说,表示在完成队列中用于未来提供给客 户端的通知的下一个位置。
[0078] 参考图4B,在步骤422,控制模块中的处理器开始从弯曲存储器向在步骤406中标 识的物理地址写入数据。在本发明的一个实施例中,控制模块中的处理器对存储模块控制 器中的DMA引擎编程,以从弯曲存储器中读取数据并将数据的副本写入固态存储器模块中 的物理地址。
[0079] 在步骤424,延续步骤422,控制模块中的处理器请求弯曲存储器中对应于在步骤 422中被写入至固定存储器模块的数据的所有副本被移除。在步骤426,对于移除的确认由 每一个在它们各自的弯曲存储器中包括(在步骤410被写入的)数据的副本的存储模块发 送至控制模块中的处理器。
[0080] 图5A-5C示出了在根据本发明的一个或多个实施例的存储装置中存储数据的示 例。该示例并不意图限制发明的范围。此外,为了清楚的目的,在图5A-5C中客户端和存储 装置中的各个部件被省略。
[0081] 转到图5A,考虑客户端(500)发布请求以将(由黑色圈所标记)的数据写入存储 装置的情况。响应于该请求,控制模块(504)中的处理器(514)确定数据的第一副本应当 被写入存储模块A(518)中的固态存储器模块A(526)中的第一物理位置,而数据的第二副 本应当被写入存储模块B (520)中的固态存储器模块B (528)中的第二物理位置。
[0082] 根据该判断,处理器(514)创建具有三个成员的组播组。第一成员具有弯曲存储 器A(522)中的目的地地址,第二成员具有弯曲存储器B(524)中的目的地地址,而第三成员 具有存储器(512)中的目的地地址。处理器(514)之后对交换机架构(516)中的交换机 (未示出)编程以实现该组播组。
[0083] DMA引擎继续向与组播组相关联的组播地址发布写入。该写入被发送至交换机架 构并最终抵达实现组播组的交换机(未示出)。交换机然后创建三个写入(每一个写入对 应一个由该组播组指定的目标)并将写入发布至目标存储位置。在本发明的一个实施例 中,三个写入是并行发生的。
[0084] 将在不同的目的地地址被写入的数据的副本通过交换机架构(516)。一旦写入完 成,在存储装置中有数据的三个副本。一旦写入完成,存储器(512)中的存储器内数据结构 (未示出)被更新以反映该数据在存储装置内的三个位置被存储。此外,客户端(500)被通 知写入已完成。
[0085] 参考图5B,在晚一些的时间点上,处理器(514)向存储模块A(518)发布请求将弯 曲存储器A(522)中当前的数据的副本写入固态存储器模块A(526)的物理地址。响应于该 请求,存储模块控制器(未示出)将弯曲存储器A(522)中的数据的副本写入固态存储器模 块A(526)。处理器(514)在写入完成时被通知。处理器(514)可在从存储模块A(518)接 收到该通知时更新存储器内数据结构。
[0086] 此外,独立于存储装置的运行,客户端(500)可从客户端存储器(508)移除(已经 被写入至存储装置的)数据。
[0087] 参考图5C,一旦数据的副本已被写入固态存储器模块A,处理器(514)向所有在弯 曲存储器中包括数据的副本的存储模块发布请求,要求从它们各自的弯曲存储器中移除数 据的副本。在完成该请求后,各存储模块各自通知控制模块。图5C示出了在所有的存储模 块完成该请求后系统的状态。处理器(514)可在从存储模块接收到弯曲存储器内所有数据 的副本被移除的通知后更新存储器内数据结构。
[0088] 图6示出了根据本发明的一个或多个实施例的流程图。更具体地,图6示出了根 据本发明的一个或多个实施例的从存储装置中读取数据的方法。虽然流程图中的各个步骤 被展示并描述为按顺序的,本领域的技术人员将会意识到一些步骤或者全部的步骤可以以 不同的顺序执行、可被组合或者省略,以及一些或者全部的步骤可被并行执行。
[0089] 在步骤600,客户端向控制模块中的处理器的提交队列(SQ)写入读取命令(读取 请求)。在本发明的一个实施例中,读取命令包括逻辑地址。如上面所讨论的,逻辑地址的 内容可根据实现方式而变化。
[0090] 在步骤602,客户端向提交队列尾部门铃寄存器(SQ Tail doorbell register)写 入新的提交队列尾部(SQ Tail)。在本发明的一个实施例中,通过对提交队列尾部门铃寄存 器的写入,客户端通知处理器在其提交队列中有新的命令要处理。在步骤604,处理器从提 交队列(SQ)获取读取命令。在步骤606,处理器基于逻辑地址确定存储器内数据结构中的 物理地址的位置。
[0091] 在步骤608,处理器从在步骤606确定的位置获取物理地址。在本发明的一个实施 例中,物理地址对应于存储装置中的数据的一个或多个位置。例如,数据的位置可以包括下 述中的一个或多个:处理器的存储器中的位置、存储模块的存储器中的位置和/或固态存 储器模块中的位置。
[0092] 在本发明的一个变化实施例中,如果存储器中数据结构包括逻辑地址至物理地址 的直接映射,则步骤606和608可被合并成单个的查找,在该单个的查找中逻辑地址被用于 直接获取物理地址。
[0093] 在步骤610,做出其中一个数据位置是否在控制模块的存储器中的决定 (determination)。如果其中一个数据位置是在控制模块的存储器中,该过程继续至步骤 622 ;否则,该过程继续至步骤612。在本发明的一个实施例中,在存储装置中有数据的多个 副本的情况下,数据优先从控制模块的存储器中读取。如果该数据在控制模块的存储器中 不存在,数据优先从弯曲存储器(如果存在弯曲存储器的话)中读取,之后从固态存储器模 块(如果数据的副本在弯曲存储器中不存在)中读取。
[0094] 在步骤612,处理器向存储模块的提交队列(SQ)写入读取物理数据命令(Read Physical Data Command)〇
[0095] 在步骤614,存储模块将数据从固态存储器模块中的物理位置传送到存储模块存 储器(例如图3中的324),发起从存储模块存储器到客户端存储器的数据的DMA传送,并在 DMA完成之后,向处理器的完成队列(CQ)写入读取命令完成。在本发明的一个实施例中,如 果所请求的物理位置是在弯曲存储器中,则存储模块不需要将数据从固态存储器模块中的 物理位置传送至存储模块存储器。
[0096] 在本发明的一个实施例中,DMA引擎位于数据所处的存储模块的存储模块控制器 中。在本发明的一个实施例中,DMA引擎被配置成向客户端交换机发送数据的副本。客户 端交换机收到后,客户端交换机执行必要的映射(或者翻译)以标识客户端存储器中的适 当的位置。该数据的副本然后被写入客户端存储器中所标识的位置。
[0097] 在步骤616中,存储模块为处理器产生中断。在步骤618,处理器处理其完成队列 (CQ)中的数据。在这个阶段,处理器已经被通知读取请求已经被服务。在步骤620,一旦处 理器处理完位于完成队列头部的数据,客户端向完成队列头部门铃(CQ head doorbell)写 入新的完成队列头部(CQhead)。对于存储模块来说,这表示在完成队列中用于未来提供给 处理器的通知的下一个位置。该过程然后继续至步骤624。
[0098] 在步骤622,处理器对(可位于存储装置或者客户端交换机中的)DMA引擎编程以 从控制模块的存储器中读取数据并将数据的副本写入可经由非透明桥存取的客户端存储 器中的位置。DMA引擎然后从控制模块中的存储器读取数据并将数据的副本写入客户端存 储器。
[0099] 在步骤624,处理器向客户端的完成队列(CQ)写入(确定处理器的提交队列 (SQ))的提交队列标识符(SQ Identifier)和(确定客户端发布给处理器的具体读取命令) 的读取命令标识符(Read Command Identifier)。在步骤626,处理器为客户端处理器产生 中断。在本发明的一个实施例中,处理器使用由非透明桥提供的门铃中断来向客户端处理 器发布中断。在步骤628,客户端在其完成队列(CQ)中处理数据。在这个阶段,客户端已经 被通知该读取请求已经被服务。在步骤630, 一旦客户端处理完位于完成队列头部的数据, 客户端向完成队列头部门铃(CQ head doorbell)写入新的完成队列头部(CQ head)。对于 处理器来说,这表示在完成队列中用于未来提供给客户端的通知的下一个位置。
[0100] 图7A-7C示出了从根据本发明的一个或多个实施例的存储装置中读取数据的多 个示例。这些示例并不意图限制本发明的范围。
[0101] 参考图7A,考虑客户端(500)发布从存储装置读取(用黑色圈表示的)数据的请 求的情况。响应于该请求,控制模块(504)中的处理器(514)确定数据的第一副本是位于 存储器(512)中而数据的第二副本是位于固态存储器模块B (528)中。根据该确定,处理器 (514)对DMA引擎(为示出)编程以从存储器(512)读取数据并将数据的副本写入客户端 存储器(508)中的物理地址。当被编程后,DMA引擎从存储器(512)读取数据并向客户端 存储器(508)发布写入。当将要被写入的数据的副本抵达客户端交换机(502)时,客户端 交换机将DMA引擎提供的目的地地址映射(或翻译)成客户端存储器(508)中的地址。数 据的副本然后被写入到客户端存储器(508)中由客户端交换机(502)所确定的地址。在这 个示例中,DMA引擎可位于客户端交换机(502)中。
[0102] 参考图7B,考虑客户端(500)发布从存储装置读取(用黑色圈表示的)数据的请 求的情况。响应于该请求,控制模块(504)中的处理器(514)确定数据的副本是位于固态 存储器模块B (528)中。根据该确定,处理器发起从固态存储器模块B (528)至可由DMA引 擎(未示出)存取的存储器(例如弯曲存储器B(524))的数据传送,接下来对DMA引擎编 程以从该存储位置读取数据并将数据的副本写入客户端存储器(508)中被请求的位置。当 将要被写入的数据的副本抵达客户端交换机(502)时,客户端交换机将DMA引擎提供的目 的地地址映射(或翻译)成客户端存储器(508)中的地址。该数据的副本然后被写入到客 户端存储器(508)中由客户端交换机(502)所确定的地址。在这个示例中,DMA引擎可位 于存储模块B (520)中。
[0103] 参考图7C,考虑客户端(500)发布从存储装置读取(用黑色圈表示的)数据的请 求的情况。响应于该请求,控制模块(504)中的处理器(514)确定数据的第一副本是位于弯 曲存储器B(524)中而数据的第二副本是位于固态存储器模块B(528)中。根据该确定,处理 器(514)对DMA引擎(未示出)进行编程以从弯曲存储器B(524)中读取数据并将数据的副 本写入客户端存储器(508)的物理地址中。当被编程后,DMA引擎从弯曲存储器B (524)中 读取数据并向客户端存储器(508)发布写入。当将要被写入的数据的副本抵达客户端交换 机(502)时,客户端交换机将DMA引擎提供的目的地地址映射(或翻译)成客户端存储器 (508)中的地址。数据的副本然后被写入到客户端存储器(508)中由客户端交换机(502) 所确定的地址。在这个示例中,DMA引擎可位于存储模块B(520)中。
[0104] 本发明的一个或多个实施例可使用由该系统中的一个或多个处理器执行的指令 实现。此外,这些指令可对应于存储在一个或多个非暂时性的计算机可读介质上的计算机 可读指令。
[0105] 虽然本发明是结合有限数量的实施例被描述,本领域的技术人员,从本发明中受 益后,将会意识到其他的实施例也能够被设计出而不脱离此处所揭示的发明的范围。因此, 本发明的范围不应当仅被所附的权利要求所限制。
【权利要求】
1. 一种写入数据的方法,包括 从客户端接收写入数据的请求,其中所述数据是位于客户端存储器中; 由存储装置确定第一存储器中的第一位置以写入数据的第一副本、第二存储器中的第 二位置以写入数据的第二副本,其中所述第一存储器位于包括第一永久存储器的第一存储 模块中,而所述第二存储器位于包括第二永久存储器的第二存储模块中,其中所述存储装 置包括第一存储模块和第二存储模块; 对直接存储器存取(DMA)引擎编程以从客户端存储器读取数据并向组播地址发布第 一写入请求,其中所述第一位置、所述第二位置和一第三位置是与该组播地址相关; 在编程后: 在所述存储装置的交换机架构中的交换机处从DMA引擎接收所述第一请求; 响应于接收第一请求,在所述交换机中产生将第一副本写入所述第一位置的第二请 求、将第二副本写入所述第二位置的第三请求以及将第三副本写入所述第三位置的第四请 求,其中所述第三位置是位于存储装置中的控制模块的第三存储器中; 其中响应于所述第二请求,数据的第一副本被写入所述第一位置; 其中响应于所述第三请求,数据的第二副本被写入所述第二位置; 其中响应于所述第四请求,数据的第三副本被写入所述第三位置; 其中DMA引擎从客户端存储器读取数据; 其中所述第一存储器、所述第二存储器、所述第三存储器和所述客户端存储器的至少 一部分是能通过统一地址空间存取的存储架构的一部分。
2. 如权利要求1所述的方法,还包括: 在数据的第一副本被写入第一位置、数据的第二副本被写入第二位置以及数据的第三 副本被写入第三位置后: 通知客户端写入数据的请求已经被完成。
3. 如权利要求2所述的方法,还包括: 在通知客户端后: 将数据的第一副本写入所述第一永久存储器;以及 在写入之后,将数据的第一副本从所述第一存储器移除。
4. 如权利要求3所述的方法,其中所述存储装置中的处理器发起向所述第一永久存储 器写入数据的第一副本。
5. 如权利要求3所述的方法,其中所述第一永久存储器是固态存储器模块。
6. 如权利要求5所述的方法,其中所述固态存储器模块包括数个NAND管芯(NAND die)。
7. 如权利要求3所述的方法,还包括: 在通知客户端后: 从所述第二存储器移除数据的第二副本;以及 从所述第三存储器移除数据的第三副本。
8. 如权利要求1所述的方法,其中所述写入数据的请求是经由客户端交换机从客户端 接收,其中客户端使用快速外围组件互联(PCIe)与客户端交换机通信,存储装置使用PCIe 与客户端交换机通信。
9. 如权利要求8所述的方法, 其中所述客户端是第一根组件, 其中所述存储装置包括处理器,其中该处理器是第二根组件, 其中该客户端交换机包括非透明桥, 其中数据的至少一个副本通过该非透明桥被发送至所述存储装置。
10. 如权利要求8所述的方法,其中所述DMA引擎是位于所述客户端交换机中。
11. 如权利要求1所述的方法,其中所述存储装置中的处理器对DMA引擎编程。
12. 如权利要求1所述的方法,其中所述第一位置、所述第二位置以及所述第三位置是 由DMA引擎所实现的组播组中的一部分。
13. -种读取数据的方法,包括: 从客户端接收读取保存在存储装置中的数据的请求,其中所述请求包括与所述数据相 关的逻辑地址; 由所述存储装置使用所述逻辑地址确定存储器内(in-memory)数据结构中的位置; 从存储器内数据结构中的所述位置获取物理地址,其中该物理地址对应于永久存储器 中的第一位置,其中所述永久存储器位于存储装置的存储模块中,其中所述数据位于所述 第一位置; 对存储模块控制器编程以从所述第一位置读取数据并将数据的第一副本保存在第二 位置,其中所述第二位置是在所述存储装置的存储器中; 在编程后,所述存储模块控制器: 由存储模块控制器从所述第一位置读取所述数据;以及 由存储模块控制器将数据的第一副本写入所述第二位置; 对直接存储器存取(DMA)引擎编程以从第二位置读取所述数据并将数据的第二副本 写入客户端存储器中的第三位置; 在编程所述DMA引擎后: 由DMA引擎从所述第二位置读取数据的第一副本; 由DMA引擎将数据的第二副本写入所述第三位置, 其中将数据的第二副本写入所述第三位置包括通过非透明桥将数据的第二副本发送 至客户端, 其中所述永久存储器、所述存储器以及所述客户端存储器的至少一部分是能通过统一 地址空间存取的存储架构的一部分。
14. 如权利要求13所述的方法,其中DMA引擎是位于所述存储器模块中,且其中所述存 储装置中的处理器对DMA引擎编程。
15. 如权利要求13所述的方法,其中客户端使用快速外围组件互联(PCIe)与客户端交 换机通信,而存储装置使用PCIe与客户端交换机通信,以及其中客户端交换机实现非透明 桥。
16. 如权利要求15所述的方法,其中所述客户端存储器的至少一部分是DMA引擎经由 非透明桥能够直接存取的。
17. 如权利要求13所述的方法,其中所述第一位置是在位于所述永久存储器中的NAND 闪存(NAND flash)中。
18. -种系统,包括: 客户端,包括客户端处理器和客户端存储器; 存储装置,包括: 处理器,其中该处理器被配置成对第一直接存储器存取(DMA)引擎和第二DMA引擎编 程; 第一存储器; 第一存储模块,包括第二存储器、第一永久存储器和所述第二DMA引擎; 第二存储模块,包括第三存储器和第二永久存储器;以及 交换机架构,包括被配置成实现组播的交换机;以及 客户端交换机,包括所述第一 DMA引擎和非透明桥,其中所述非透明桥使得该存储装 置能够存取所述客户端存储器的至少一部分; 其中第一 DMA引擎被配置成从所述客户端存储器读取第一数据(first datum)并将第 一数据写入交换机中的组播地址, 其中第二DMA引擎被配置成从选自由第一永久存储器和第二永久存储器所组成的组 中的至少其中之一读取第二数据(second datum),并将该第二数据写入所述客户端存储 器, 其中客户端存储器的所述部分、所述第一存储器、所述第二存储器以及所述第三存储 器是能够由统一地址空间存取的存储架构的一部分。
19. 如权利要求18所述的系统,其中所述第一存储器包括存储器内数据结构,且其中 所述处理器使用存储器内数据结构来确定所述第二数据的位置,其中该位置被用于对所述 第二DMA引擎编程。
20. 如权利要求18所述的系统,其中所述处理器进一步被配置成对所述第二DMA引擎 编程,以将所述第二存储器中的第一数据的副本写入所述第一永久存储器。
21. 如权利要求18所述的系统,其中客户端使用快速外围组件互联(PCIe)与客户端交 换机通信,且存储装置使用PCIe与客户端交换机通信。
【文档编号】G06F9/50GK104272257SQ201380015061
【公开日】2015年1月7日 申请日期:2013年3月21日 优先权日:2012年3月23日
【发明者】M·W·夏皮罗, J·S·邦威克, W·H·穆尔 申请人:Dssd股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1