使用原子多播的快速排序写入的方法和系统与流程

文档序号:15930720发布日期:2018-11-14 01:36阅读:299来源:国知局

本发明涉及用于使用原子多播(atomicmulticast)的快速排序写入的方法和系统。总体上来说,本技术的实施例涉及用于在包括多个分离的存储模块(storagemodule)的存储设备(storageappliance)中执行快速排序写入的方法和系统。更具体地,本技术的实施例使得能够将数据多播到存储设备中的多个存储模块,其中处理写入请求的顺序在存储设备中的所有存储模块上是相同的。

背景技术

存储设备包括存储介质(storagemedia)并且提供使客户端能够向该存储介质写入数据和从该存储介质读取数据的机制。



技术实现要素:

根据本公开的一个方面涉及一种用于处理写入请求的方法。该方法包括:从第一客户端并且由结构(fabric)接收包括第一数据的第一写入请求;由所述结构并且响应于所述第一写入请求,向第一存储模块发送第二写入请求,并且向第二存储模块发送第三写入请求;从第二客户端并且由所述结构接收包括第二数据的第四写入请求;由所述结构并且响应于所述第四写入请求,向所述第一存储模块发送第五写入请求,并且向所述第二存储模块发送第六写入请求;由所述结构向所述第一存储模块发送与所述第二写入请求相关联的第一提交请求和与所述第五写入请求相关联的第二提交请求;由所述结构向所述第二存储模块发送与所述第三写入请求相关联的第三提交请求和与所述第六写入请求相关联的第四提交请求;由所述第一存储模块处理所述第一提交请求和所述第二提交请求,其中,基于顺序,在所述第二提交请求之前处理所述第一提交请求;以及由所述第二存储模块处理所述第三提交请求和所述第四提交请求,其中,基于所述顺序,在所述第四提交请求之前处理所述第三提交请求。

根据本公开的另一个方面涉及一种存储设备。该存储设备包括:结构;存储阵列(storagearray),其可操作地连接到所述结构并且包括第一存储模块和第二存储模块。所述结构被编程为:从第一客户端接收包括第一数据的第一写入请求;响应于所述第一写入请求,向所述第一存储模块发送第二写入请求,并且向所述第二存储模块发送第三写入请求;从第二客户端接收包括第二数据的第四写入请求;响应于所述第四写入请求,向所述第一存储模块发送第五写入请求,并且向所述第二存储模块发送第六写入请求;向所述第一存储模块发送与所述第二写入请求相关联的第一提交请求和与所述第五写入请求相关联的第二提交请求;以及向所述第二存储模块发送与所述第三写入请求相关联的第三提交请求和与所述第六写入请求相关联的第四提交请求。所述第一存储模块被配置为处理所述第一提交请求和所述第二提交请求,其中基于顺序,在所述第二提交请求之前处理所述第一提交请求,其中所述顺序由所述结构指定。所述第二存储模块被配置为处理所述第三提交请求和所述第四提交请求,其中基于所述顺序,在所述第四提交请求之前处理所述第三提交请求。

附图说明

图1a至1c示出了根据本技术的一个或多个实施例的系统。

图2、图3、图4a和图4b示出了根据本技术的一个或多个实施例的流程图。

具体实施方式

在本技术的实施例的以下详细描述中,阐述了许多具体细节以便提供对该技术更透彻的理解。然而,对于本领域的普通技术人员来说显而易见的是,可以在没有这些具体细节的情况下实践该技术。在其他情况下,没有详细描述众所周知的特征以避免不必要地使描述复杂化。

在整个申请中,序数(例如,第一、第二、第三等)可以用作元素(即,本申请中的任何名词)的形容词。序数的使用并不意味着或创建任何特定的元素排序,也不限制任何元素仅为单个元素,除非明确地公开,例如通过使用术语“之前”、“之后”、“单个”和其他类似术语。更确切地说,序数的使用是为了区分这些元素。作为示例,第一元素不同于第二元素,并且第一元素可以包含多于一个元素并且在元素的排序中在第二元素之前(或先于)。

在以下对图1a至4b的描述中,在本技术的各个实施例中关于附图描述的任何组件可以等同于关于任何其他附图描述的一个或多个相同名称的组件。为了简洁起见,这些组件的描述将不会关于每个图重复。因此,每个附图的组件的每个和每一个实施例通过引用并入并且被假定为可选地存在于具有一个或多个相同命名组件的每个其他附图中。另外,根据本技术的各种实施例,附图的组件的任何描述将被解释为可选的实施例,除了、结合或替代关于任何其他图中的对应相同命名组件描述的实施例,可以实施可选的实施例。

总体上来说,本技术的实施例涉及用于在包括多个分离的存储模块的存储设备中执行快速排序写入的方法和系统。更具体地,本技术的实施例使得能够将数据多播到存储设备中的多个存储模块,其中处理写入请求的顺序在存储设备中的所有存储模块上是相同的。该技术的实施例能够实现上述顺序,而不需要客户端协调将数据写入存储设备。具体地,本技术的实施例使用结构(例如,pcie结构)结合包括全局提交队列(参见例如图4a)或每个客户端提交队列的存储模块来执行写入请求的排序(参见例如,图4b)。

在本技术的一个实施例中,排序在存储设备中的存储模块上是一致的,使得存储在各个存储模块(或存储模块的子集)中的数据是相同的。例如,考虑存储设备包括三个存储模块(1、2、3)的情况。此外,假设客户端a发出指定对象和偏移的第一写入请求(a),并且客户端b发出指定相同对象和偏移的第二写入请求(b)。该技术的实施例确保写入请求(a、b)在每个存储模块上以相同的顺序被处理,使得在两个写入请求都已经在三个存储模块(1、2、3)上被处理之后,针对特定对象和偏移存储的数据在三个存储模块(1、2、3)中的每一个上都是相同。

图1a示出了根据本技术的一个或多个实施例的系统。参考图1a,该系统包括可操作地连接到存储设备(100)的一个或多个客户端(客户端a(108a)-客户端m(108m))。

在本技术的一个实施例中,客户端(108a-108m)可以是任何类型的物理系统,其包括向存储设备(100)发出读取请求和/或向存储设备(100)发出写入请求的功能。虽然在图1a中未示出,但是每个客户端(108a-108m)分别可以包括客户端处理器(未示出)、客户端存储器(memory,未示出)以及实现本技术的一个或多个实施例所需的任何其他软件和/或硬件。

在本技术的一个实施例中,客户端(108a-108m)被配置为执行包括文件系统的操作系统(os)。文件系统提供了用于从存储设备(100)存储和检索文件的机制。更具体地说,文件系统包括执行必要动作以向存储设备(100)发出读取请求和写入请求的功能。文件系统还可以提供编程接口以使得能够创建和删除文件,读取和写入文件,在文件内执行搜索,创建和删除目录,管理目录内容等。另外,文件系统还提供管理接口以创建和删除文件系统。在本技术的一个实施例中,为了访问文件,操作系统(经由文件系统)通常提供文件操作接口以打开、关闭、读取和写入每个文件内的数据和/或操纵相应的元数据。在本技术的另一个实施例中,客户端被配置为执行用于访问存储设备的块驱动程序。在本技术的另一个实施例中,客户端被配置为执行使得客户端能够访问存储设备的应用编程接口(api)。

在本技术的一个实施例中,客户端(108a-108m)与存储设备(100)的结构(106)对接以与存储设备(100)通信,如以下在图2中进一步描述的。

在本技术的一个实施例中,存储设备(100)是包括永久性存储装置并被配置为服务于来自一个或多个客户端(108a-108m)的读取请求和/或写入请求的系统。

根据本技术的一个或多个实施例,存储设备(100)包括组织在存储阵列(102)中的一个或多个存储模块(104a-104n)和将存储模块(104a-104n)与客户端(108a-108m)对接的结构(106)。下面介绍这些组件中的每一个。

根据本技术的实施例,存储阵列(106)容纳一个或多个存储模块(104a-104n)。根据需要或期望,存储阵列可实现存储设备的模块化配置,其中存储模块可被添加到存储设备(100)或从存储设备(100)移除。根据本发明的实施例的存储模块(104)参考图1c在下面描述。

继续讨论存储设备(100),存储设备包括结构(106)。结构(106)可以使用以下协议中的一个或多个来提供客户端(108a-108m)与存储模块(104a-104n)之间的物理连接:外围组件互连(pci)、pci-express(pcie)、pci-extended(pci-x)、非易失性存储器express(nvme)、pci-express结构的非易失性存储器express(nvme)、以太网结构的非易失性存储器express(nvme)和infiniband结构的非易失性存储器express(nvme)。本领域技术人员将认识到,该技术不限于上述协议。下面参考图1b描述根据本技术的实施例的结构(106)。

图1b示出了根据本技术的一个或多个实施例的结构。结构(106)包括一个或多个叶层交换机(110a、110m)和一个或多个集线器层交换机(112a、112n)。下面描述这些组件中的每一个。

关于叶层交换机(110a、110m),每个叶层交换机是连接到一个或多个客户端(108)的物理pcie交换机,并且每个客户端(108)可以连接到一个或多个叶层交换机。每个叶层交换机也连接到一个或多个集线器层交换机。在本技术的一个实施例中,每个叶层交换机连接到结构中的每个集线器层交换机,导致结构中的层之间的完全连接的网格。在不脱离本技术的情况下,可以在层之间没有完全连接的网格的情况下实施本技术的实施例。

在本技术的一个实施例中,每个叶层交换机被配置为:(i)从其所连接的客户端接收事务层分组(tlp),并使用地址路由将tlp路由到适当的集线器层交换机;以及(ii)从叶层交换机连接到的一个或多个集线器层交换机接收tlp,并使用地址路由将tlp路由到适当的客户端。

关于集线器层交换机(112a-112n),每个集线器层交换机是连接到一个或多个叶层交换机(110a-110m)并连接到一个或多个存储模块(104)的物理pcie交换机。此外,每个存储模块可以连接到一个或多个集线器层交换机。在本技术的一个实施例中,每个集线器层交换机连接到结构中的每个其他叶层交换机,导致结构中的层之间的完全连接的网格。在不脱离本技术的情况下,可以在层之间没有完全连接的网格的情况下实施本技术的实施例。

在本技术的一个实施例中,每个集线器层交换机被配置为:(i)从与其连接的存储模块(104)接收tlp,并使用地址路由将tlp路由到适当的叶层交换机,以及(ii)从集线器层交换机连接到的一个或多个叶层交换机接收tlp,并使用地址路由将tlp路由到适当的存储模块(104)。

另外,一个或多个集线器层交换机被配置为响应于从叶层交换机接收单个tlp而生成多个tlp。例如,客户端(108)可以将包括多播地址的tlp生成并发送到叶层交换机。叶层交换机评估多播地址,并基于评估将tlp路由到集线器层交换机。集线器层交换机随后接收tlp并且评估基于评估被识别为多播地址的地址。基于评估,生成n个tlp。然后将n个tlp中的每一个发送到不同的存储模块。

在本技术的一个实施例中,结构可以同时从多个客户端接收tlp。但是,结构将传输序列化到存储模块。更具体地说,在本技术的一个实施例中,每个集线器层交换机将其从各种客户端接收到的tlp的处理序列化。结果,集线器层交换机还将tlp的传输序列化到存储模块。通过这种方式,集线器层交换机确保它向每个存储模块发出的tlp以相同的顺序发出。

在本技术的一个实施例中,结构被配置为执行图3中所示的全部或部分方法。

图1c示出了根据本技术的一个或多个实施例的存储模块(104)。存储模块(104)包括存储模块控制器(120)、缓冲器(122)、一个或多个提交队列(124a、104n)和永久性存储装置(126)。下面描述这些组件中的每一个。

在本技术的一个实施例中,存储模块控制器(120)被配置为接收和服务于从永久性存储装置(122)读取和/或写入数据的请求。这些请求可以源自客户端(108)并且可以经由结构(106)被传送到存储模块控制器(120)。此外,存储模块控制器(124)可以被编程为或者以其他方式被配置为执行图4a和图4b中所示的全部或部分方法。

在本技术的一个实施例中,存储模块控制器(120)包括处理器(未示出)(例如,被配置为执行指令的处理器的一个或多个内核或微内核)、一个或多个硬件寄存器(未示出)和存储器(示出)(例如易失性存储器,其可以是但不限于动态随机存取存储器(dram)、同步dram、sdrsdram和ddrsdram)以执行图4a和/或图4b中所描述的方法的一部分。或者,存储模块控制器(120)可以使用现场可编程门阵列(fpga)和/或专用集成电路(asic)来实现。

在本技术的一个实施例中,存储模块(104)的永久性存储装置(126)可以包括但不限于自旋扭矩磁性ram(st-mram)、相变存储器(pcm)、nand闪存和nor闪存。本领域技术人员将认识到,该技术不限于上述类型的永久性存储装置。

在本技术的一个实施例中,缓冲器(122)是易失性存储器,其在数据被存储在永久性存储装置中之前暂时存储由存储模块接收的数据。

在本技术的一个实施例中,存储模块可以包括一个或多个提交队列(124a、124n)。提交队列按照存储模块接收的顺序存储提交请求。在本技术的一个实施例中,存储模块包括单个全局提交队列,其中存储从所有客户端接收的所有提交请求。在本技术的另一个实施例中,存储模块包括一组提交队列,其中每个提交队列仅存储从特定客户端接收的提交请求。

本领域技术人员将认识到,系统的架构不限于图1a至1c中所示的组件。例如,存储设备(100)的组件可以包括任何数量的存储模块(104a-104n)。此外,存储模块(104)的存储模块控制器(120)可以配备有中央处理单元(cpu)、现场可编程门阵列(fpga)、专用集成电路(asic)和/或任何其他类型的处理器,而不偏离本技术。此外,结构可以基于除了上面讨论的那些之外的通信标准,而不偏离本技术。

图2、3和4a示出了根据本技术的一个或多个实施例的流程图。尽管顺序地呈现和描述了流程图中的各个步骤,但本领域的普通技术人员将会理解,可以以不同的顺序执行一些或全部步骤,可以组合或省略这些步骤,并且一些或全部步骤可以并行执行。在该技术的一个实施例中,图2、3和4a可以与图2、3和4a中所示的任何其他步骤并行执行。

图2示出了根据本技术的一个或多个实施例的从客户端的角度将数据写入存储模块的方法。

在步骤200中,客户端生成包括地址和数据的写入请求。包括在写入请求中的地址可以是多播地址。更具体地说,从客户端的角度来看,地址可以显示为任何其他地址;然而,当地址由结构评估时,其导致生成n个写入请求(参见例如图3,步骤304)。

在步骤202中,写入请求由客户端发出到结构。如果结构是pcie结构(即,实现pcie的结构),则可以使用一个或多个tlp来发出写入请求。

在步骤204中,客户端生成包括多播地址(即,与在步骤200中生成的写入请求中包括的地址相同的地址)的提交请求。尽管写入请求包括要发送的数据,但是提交请求包括导致数据被存储在永久性存储装置中的命令(参见例如图4a、图4b)。

在步骤206中,提交请求由客户端发出到结构。如果结构是pcie结构(即,实现pcie的结构),则可以使用一个或多个tlp来发出提交请求。

在稍后的某个时间点,在步骤208中,客户端接收到n个提交回复。更具体地说,因为客户端发出了带有多播地址的写入请求和提交请求,所以n个数据副本将被写入存储阵列。对于写入存储阵列的数据的每个副本,结构将接收提交回复(参见例如图3,步骤316)。每次结构接收到提交回复时,都会将其发送给发出提交请求的客户端。客户端将继续接收与给定提交请求相关联的提交回复,直到它已经接收到n个提交回复(假设提交请求已由各个存储模块成功处理并且结构保持可操作)。

图3示出了根据本技术的一个或多个实施例的从结构的角度向存储模块写入数据的方法。

在步骤300中,包括数据和多播地址的写入请求由结构中的叶交换机接收。如果结构是pcie结构,则可以将写入请求作为一个或一组tlp接收。

在步骤302中,叶交换机处理写入请求。更具体地说,写入请求的处理包括评估写入请求中的地址以识别集线器层交换机(或可操作地连接到集线器层交换机的出口端口)。处理的结果是将写入请求发送到集线器层交换机。在本技术的一个实施例中,特定集线器层交换机处理对于给定多播地址的所有写入请求。例如,包括地址a的结构接收的所有写入请求都被路由到集线器层交换机a。

在步骤304中,响应于接收到写入请求,集线器层交换机处理写入请求。写入请求的处理包括确定写入请求中的地址是多播地址,并且响应于该确定,生成n个写入请求。生成的写入请求的具体数量(n)在集线器层交换机上预先配置。在本技术的一个实施例中,每个生成的写入请求包括单播地址。

在步骤306中,将所生成的写入请求(即,在步骤304中生成的写入请求)发送到存储模块。更具体地,n个写入请求中的每一个被发送到存储设备中的不同存储模块。

在步骤308中,由结构中的叶交换机接收包括多播地址的提交请求。如果结构是pcie结构,则提交请求可以作为一个或一系列tlp被接收。

在步骤310中,叶交换机处理提交请求。更具体地说,提交请求的处理包括评估提交请求中的地址以识别集线器层交换机(或可操作地连接到集线器层交换机的出口端口)。处理的结果是将提交请求发送到集线器层交换机(即,步骤302中写入请求被发送到的集线器层交换机)。

在步骤312中,响应于接收到提交请求,集线器层交换机处理提交请求。提交请求的处理包括确定提交请求中的地址是多播地址,并且响应于该确定,生成n个提交请求。生成的提交请求的具体数量(n)在集线器层交换机上预先配置。在本技术的一个实施例中,每个生成的提交请求包括单播地址。

在步骤314中,将所生成的提交请求(即,在步骤312中生成的提交请求)发送到存储模块(即,到步骤306中写入请求被发送到的相同存储模块)。更具体地说,n个提交请求中的每一个被发送到存储设备中的n个存储模块中的一个,其中在存储模块接收到相应的写入请求之后,由每个存储模块接收提交请求。

在本技术的一个实施例中,特定集线器交换机接收与特定多播地址相关联的所有提交请求。集线器交换机接收对于特定多播地址的提交请求的顺序被保持,使得在步骤312中生成的n个提交请求以与所有目标存储模块相同的顺序生成。

例如,考虑存在两个客户端(c1、c2)和三个存储模块(sm1、sm2、sm3)的情况。在这种情况下,c1可能会发出包括地址的第一提交请求(cr1),并且c2可能会发出包括相同地址的第二提交请求(cr2)。如上所述,这两个提交请求都将通过结构路由到相同的集线器交换机。在这个示例中,假定cr1在cr2之前被接收。相应地,首先处理cr1,导致生成并发送三个提交请求(cr11、cr12、cr13)。cr11被发送到sm1,cr12被发送到sm2,并且cr13被发送到sm3。然后,集线器交换机在cr1被处理之后处理cr2。处理cr2的结果导致生成和传输三个提交请求(cr21、cr22、cr23)。cr21被发送到sm1,cr22被发送到sm2,并且cr23被发送到sm3。因为集线器层交换机处理cr1和cr2的特定顺序,所以从集线器层交换机发出到存储模块的结果cr也按照相同的顺序被发出(例如,在将cr21发出到sm1之前,将cr11发出到sm1)。将cr发出到给定存储模块的顺序也导致按此顺序接收cr,并随后按此顺序处理。

在稍后的某个时间点,在步骤316中,结构接收n个提交回复。更具体地说,因为结构发出了n个写入请求和n个提交请求,所以将n个数据副本写入存储阵列。对于写入存储阵列的数据的每个副本,结构将从对应的存储模块接收到提交回复(参见例如图4a,步骤410和图4b,步骤430)。每次由结构接收到提交回复时,都会将其发送给发出提交请求的客户端。结构将继续接收提交回复,直到它已经接收到n个提交回复(假设提交请求已由各个存储模块成功处理)。

图4a示出了根据本技术的一个或多个实施例的利用单个全局提交队列的从存储模块的角度将数据写入存储模块的方法。

在步骤400中,从结构接收单播写入请求(即,在步骤306中由结构发出的写入请求)。

在步骤402中,将与写入请求相关联的数据存储在存储模块的缓冲器中。

在步骤404中,从结构接收单播提交请求(即,在步骤312中由结构发出的提交请求)。

在步骤406中,将单播提交请求放置在单个全局提交队列中。在本技术的一个实施例中,提交请求包括客户端标识符或者以其他方式与客户端标识符相关联。在相应提交回复的生成和/或处理中使用客户端标识符(参见例如图4,步骤410)。

在步骤408中,基于先进先出机制来处理全局提交队列中的提交请求,以便保持处理顺序。处理提交请求的结果是将数据存储在永久性存储装置中。更具体地说,考虑存储模块接收写入请求1(wr1)并且随后接收提交请求1(cr1)的情况。处理cr1的结果是将与wr1相关的数据从存储模块中的缓冲器复制到永久性存储装置中的位置。

在步骤410中,生成提交回复并将其发送到结构。在本技术的一个实施例中,提交回复是至少部分地基于与对应的提交请求相关联的客户端标识符来生成的。

在本技术的一个实施例中,步骤400-406与步骤408-410并行执行。具体来说,步骤400-406导致全局提交队列的填充,而步骤408-410导致处理全局提交队列中的提交请求。

图4b示出了根据本技术的一个或多个实施例的利用每个客户端提交队列从存储模块的角度向存储模块写入数据的方法。

在步骤420中,从结构接收单播写入请求(即,在步骤306中由结构发出的写入请求)。

在步骤422中,将与写入请求相关联的数据存储在存储模块的缓冲器中。

在步骤424中,从结构接收单播提交请求(即,在步骤312中由结构发出的提交请求)。

在步骤426中,将单播提交请求放置在每个客户端提交队列中。在本技术的一个实施例中,提交请求包括全局排序标签或者以其他方式与全局排序标签相关联。全局排序标签用于维护由存储模块接收到的提交请求的全局处理顺序。全局排序标签可被添加到存储模块控制器的提交请求(或以其他方式与其相关联)。

在步骤428中,基于全局排序标签来处理每个客户端提交队列中的提交请求,以便在存储模块中保留全局处理顺序。换句话说,数据写入永久性存储装置的顺序由处理提交请求的顺序决定,而不是由存储模块接收写入请求(和/或数据)的顺序决定。处理提交请求的结果是将数据存储在永久性存储装置中。更具体地说,考虑存储模块接收写入请求1(wr1)并且随后接收提交请求1(cr1)的情况。处理cr1的结果是将与wr1相关的数据从存储模块中的缓冲器复制到永久性存储装置中的位置。

在步骤430中,生成提交回复并将其发送到结构。在本技术的一个实施例中,提交回复是至少部分地基于与其中存储提交请求的每个客户端提交队列相关联的客户端标识符来生成的。

在本技术的一个实施例中,与步骤428-430并行地执行步骤420-426。具体来说,步骤420-426导致每个客户端提交队列的填充,同时步骤428-430导致处理每个客户端提交队列中的提交请求。

尽管已经关于有限数量的实施例描述了本技术,但是受益于本公开的本领域技术人员将会理解,可以设计出不偏离在此公开的技术范围的其他实施例。因此,本技术的范围应仅由所附权利要求来限定。

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