本发明一般涉及存储系统,更具体地说,本发明涉及用于通过基于nvmeof以太网的ssd中的虚拟连接队列对,执行读取命令的高效raid实现的系统和方法。
背景技术:
raid(独立磁盘冗余阵列)是一种将多个磁盘驱动器组件组合成逻辑单元的存储技术。数据以取决于冗余和性能级别的、被称为“raid级别”的多种方式中的一种方式分布在驱动器上。固态驱动器(ssd)或固态磁盘是使用集成电路装配件作为存储器以持久地存储数据的固态存储装置。ssd技术主要使用与传统块输入/输出(i/o)硬盘驱动器(hdd)兼容的电子接口,其允许在常见应用中进行简单替换。
现有存储系统通常是具有一个或多个硬盘驱动器(hdd)或一个或多个固态驱动器(ssd)的物理服务器(存储盒节点)。现有存储系统也可以是可访问一个或多个hdd和/或ssd的虚拟机或虚拟逻辑单元构件。现有存储系统可具有pcie(外围组件快速互连)扩展限制。如图1所示,现有的存储系统因为其需要cpu、价格昂贵的具有raid硬件的复杂主板而具有庞大的体积。此外,现有存储系统使用多个直接存储器访问(dma)数据复制来执行数据传输。这些多个dma数据事务导致更多延迟并消耗更多功率。
图1是根据现有技术的示出了具有用于数据传输的存储盒节点106的现有架构的示意图。根据现有技术,一个或多个计算机主机102_1至102_m连接到40g/100g以太网交换机104,以太网交换机104又连接到存储盒节点106。存储盒节点106包括具有raid硬件的一个或多个ssd108_1至108_n并具有pcie扩展限制。存储盒节点106还包括cpu、具有raid硬件的主板,这种主板价格昂贵并且使存储盒节点106体积庞大。此外,存储盒节点106与一个或多个计算主机102_1至102_m之间的数据传输是利用多个数据事务执行的,这些数据事务创建数据流量、消耗功率和增加延迟。
因此,需要一种解决本文中的上述问题和难题并提供解决方案的系统和方法。因此,仍然需要一种系统来解决可扩展性(除了pcie以外的以太网ssd可扩展方式)、功率和延迟的问题,并且开辟在存储节点和计算主机之间直接传输数据的可能性。
技术实现要素:
本文的各种实施例描述了一种nvmeof独立磁盘冗余阵列(raid)控制器,其用于在计算主机和基于结构的一个或多个存储目标装置之间执行直接数据传输。nvmeof独立磁盘冗余阵列(raid)控制器包括nvmeofraid目标模块、nvmeofraid实现模块、以及nvmeofraid发起器模块。所述nvmeofraid目标模块适于与所述计算主机交互并从所述计算主机接收一个或多个基于结构的高速非易失性存储器(non-volatilememoryexpressoverfabrics,nvmeof)命令。所述nvmeofraid实现模块适于从所述nvmeofraid目标模块接收所述一个或多个nvmeof命令,并对接收到的所述一个或多个nvmeof命令执行raid功能。所述nvmeofraid发起器模块适于与所述一个或多个存储目标装置交互。所述nvmeofraid发起器模块从所述nvmeofraid实现模块接收所述一个或多个nvmeof命令,并将所述一个或多个nvmeof命令传输到所述一个或多个存储目标装置并在所述计算主机与所述一个或多个存储目标装置之间建立一个或多个虚拟队列对连接,以实现所述计算主机和所述一个或多个存储目标装置之间的所述直接数据传输。
根据一个实施例,所述计算主机与所述一个或多个存储目标装置之间的所述直接数据传输是通过以下连接实现的:由所述计算主机在所述计算主机与所述nvmeofraid目标模块之间建立的计算端物理连接、由所述nvmeofraid发起器模块在所述nvmeofraid发起器模块与所述一个或多个存储目标装置之间建立的存储端物理连接,以及由所述nvmeofraid发起器模块在所述一个或多个存储目标装置与所计算主机之间建立的一个或多个虚拟队列对连接。
根据一个实施例,所述raid功能包括识别一个或多个相应的存储目标装置,其中由所述计算主机传输用于所述一个或多个相应的存储目标装置的所述nvmeof命令。
在一方面,提供了一种在计算主机与nvmeofraid目标模块之间建立计算端物理连接的方法,所述方法包括:由所述计算主机将一个或多个nvmeof连接命令发出到所述nvmeofraid目标模块,以建立所述计算端物理连接;由所述nvmeofraid目标模块接收从所述计算主机发出的所述一个或多个nvmeof连接命令,以在所述nvmeofraid目标模块内创建管理和输入/输出(i/o)队列;由所述nvmeofraid目标模块将一个或多个nvmeof连接命令完成传输到所述计算主机;并且当所述计算端物理连接被建立时,由所述计算主机从所述nvmeofraid目标模块接收所述一个或多个nvmeof连接命令完成。
在另一方面,提供了一种在nvmeofraid发起器模块与一个或多个存储目标装置之间建立一个或多个存储端物理连接的方法,所述方法包括:由所述nvmeofraid发起器模块将一个或多个nvmeof连接命令发出到所述一个或多个存储目标装置,以建立所述一个或多个存储端物理连接;由所述一个或多个存储目标装置从所述nvmeofraid发起器模块接收所述一个或多个nvmeof连接命令,以在所述一个或多个存储目标装置中创建管理并实现一个或多个i/o队列;由所述一个或多个存储目标装置将一个或多个nvmeof连接命令完成传输到所述nvmeofraid发起器模块;并且当所述一个或多个存储端物理连接被建立时,由所述nvmeofraid发起器模块从所述一个或多个存储目标装置接收所述一个或多个nvmeof连接命令完成。
在又一方面,提供了一种建立一个或多个虚拟队列对连接的方法,所述一个或多个虚拟队列对连接用于实现一个或多个计算主机与一个或多个存储目标装置之间的直接数据传输,所述方法包括:由nvmeofraid发起器模块将一个或多个供应商连接命令发出到所述一个或多个存储目标装置,其中所述一个或多个供应商连接命令包括关于用于在所述一个或多个计算主机与所述一个或多个存储目标装置之间建立所述一个或多个虚拟队列对连接的一个或多个计算主机的信息;由所述一个或多个存储目标装置接收所述一个或多个供应商连接命令以在所述一个或多个计算主机与所述一个或多个存储目标装置之间创建虚拟管理并实现i/o队列连接;当所述一个或多个虚拟队列对连接被建立时,由所述一个或多个存储目标装置将一个或多个供应商连接命令完成传输到nvmeofraid发起器模块;并且由所述nvmeofraid发起器模块从所述一个或多个存储目标装置接收所述一个或多个供应商连接命令完成。
根据一个实施例,通过在所述一个或多个计算主机与所nvmeofraid控制器之间创建一个和多个计算端物理连接并在所述nvmeofraid控制器与所述一个或多个存储目标装置之间创建一个或多个存储端物理连接,来建立所述一个或多个虚拟队列对连接。
在另一方面,提供了一种用于在计算主机与一个或多个存储目标装置之间读取输入/输出(i/o)数据的方法,所述方法包括:由所述计算主机将一个或多个nvmeof读取命令发送到nvmeofraid目标模块,用于读取针开始逻辑块地址(slba)开始的n个逻辑块(nlb)的所述一个或多个存储目标装置中的数据;由nvmeofraid实现模块识别存储来自所述nlb的数据的所述一个或多个存储目标装置;由nvmeofraid发起器模块将所述一个或多个nvmeof读取命令发起到所识别的包括来自相应的slba和nlb的数据的所述一个或多个存储目标装置;通过使用一个或多个虚拟队列,由所述一个或多个存储目标装置将rdma_write事务直接发起到所述计算主机;由一个或多个存储目标装置将一个或多个成功读取命令完成传输到所述nvmeofraid发起器模块;并且由所述nvmeofraid目标模块将来自所述一个或多个存储目标装置的所述一个或多个成功读取命令完成作为合并的单个命令完成传输到所述计算主机。
在另一方面,本文描述了一种用于在计算主机与一个或多个存储目标装置之间执行输入/输出(i/o)读取容错数据的方法。所述方法包括:由所述计算主机将一个或多个nvmeof读取命令传输到nvmeofraid目标模块,用于读取从一个slba开始的nlb的所述一个或多个存储目标装置中的数据;由nvmeofraid控制器模块识别存储来自从所述slba开始的所述nlb的数据的所述一个或多个存储目标装置;由nvmeofraid发起器模块基于一个或多个存储端物理连接将所述一个或多个nvmeof读取命令发起到所识别的包括来自相应的slba和nlb的数据的一个或多个注册的存储目标装置;通过使用一个或多个虚拟队列对连接,由所述一个或多个存储目标装置将一个或多个rdma_write事务直接发起到所述计算主机;通过使用所述一个或多个存储端物理连接,由一个或多个存储目标装置将一个或多个读取命令完成传输到所述nvmeofraid发起器模块;由所述nvmeofraid发起器模块基于所述一个或多个存储器端物理连接获取读取完成失败并识别原因,以针对所述读取完成失败重建数据;由所述nvmeofraid发起器模块基于所述一个或多个存储端物理连接将所述一个或多个nvmeof读取命令重新发出到所述一个或多个注册的存储目标装置;由所述一个或多个存储目标装置基于所述一个或多个存储端物理连接通过所述一个或多个rdma_write事务,将相应的条带和奇偶校验条带传输到所述nvmeofraid发起器模块;由所述nvmeofraid控制器从接收到的条带和奇偶校验条带检索缺失的条带;由所述一个或多个存储目标装置将一个或多个成功nvmeof读取完成传输到所述nvmeofraid发起器模块;由所述nvmeofraid目标模块将检索到的条带作为rdma_write事务传输到所述计算主机;并且由所述nvmeofraid控制器的所述nvmeofraid目标模块将合并的nvmeof命令完成发送到所述计算主机。
上文已经概述了本发明的各个方面,并且用于帮助更好地理解随后的更完整的详细描述。参照这些,应清楚地理解本发明不限于本文描述和说明的方法或应用。从本文包含的详细描述或说明中明显或显而易见的本发明的任何其他优点和目的都在本发明的范围内。
附图说明
根据以下优选实施例的描述和附图,本领域技术人员将想到其他目的、特征和优点,其中:
图1是示出根据现有技术的具有用于数据传输的存储盒节点的现有架构的示意图。
图2是示出根据本发明实施例的用于通过存储目标装置中的虚拟连接队列对进行高效raid实现的示例性方法的示意图。
图3是示出根据本发明实施例的利用nvmeofraid控制器在计算主机和一个或多个存储目标装置之间建立一个或多个虚拟队列对连接的方法的示意流程图。
图4是示出根据本发明实施例的对计算主机与一个或多个存储目标装置之间的输入/输出(i/o)数据流进行读取的示意流程图。
图5是示出根据本发明实施例的在计算主机和一个或多个存储目标装置之间执行输入/输出(i/o)读取容错数据的示意流程图。
尽管在一些附图中示出了本发明的具体特征而在其他附图中没有示出,但这仅仅是为了方便,因为每个特征可以与根据本发明的任何或所有其他特征组合。
具体实施方式
本发明描述了一种用于通过基于以太网的存储目标装置中的虚拟连接队列对,执行读取命令的高效raid实现的系统和方法。在本发明实施例的以下详细描述中,对构成本文一部分的附图进行参照,并且附图通过图示的方式示出了可以实施本发明的特定实施例。足够详细地描述了这些实施例以使本领域技术人员能够实施本发明,并且应该理解,可以利用其他实施例,并且可以在不脱离本发明的范围的情况下做出改变。因此,以下详细描述不应被视为具有限制意义,并且本发明的范围仅由所附权利要求限定。
说明书可以在指代若干位置参照“一”、“一个”或“一些”实施例。这并不一定意味着每一这种参照是针对相同的实施例,或者该特征仅适用于单个实施例。还可以组合不同实施例的单个特征以提供给其他实施例。
如本文所使用的,单数形式“一”、“一个”和“所述”旨在也包括复数形式,除非另有明确说明。将进一步理解,当在本说明书中使用术语“包括”、“包含”、“包括有”和/或“包含有”时,指所述特征、整数、步骤、操作、元件和/或组件的存在,但不排除存在或添加本说明书的一个或多个其他特征、整数、步骤、操作、元素、组件和/或组。如本文所使用的,术语“和/或”包括一个或多个相关所列项目的任何和所有组合和布置。
除非另外定义,否则本文使用的所有术语(包括技术和科学术语)具有与本公开所属领域的普通技术人员通常理解的含义相同的含义。将进一步理解,诸如在常用词典中定义的那些术语应当被解释为具有与其在相关领域的上下文中的含义一致的含义,并且将不被理解为理想化或过于正式的含义,除非在本文中有明确限定。
通过参照在附图中示出并在下文描述中详述的非限制性实施例,将更全面地解释本文的实施例及其各种特征和优点。对众所周知的组件和处理技术的描述已被省略,以免不必要地模糊本文的实施例。本文使用的示例仅旨在便于理解本文中的实施例可以实施的方式,并且进一步使本领域技术人员能够实施本文的实施例。因此,这些实施例不应被解释为限制本文实施例的范围。
在本发明实施例的以下详细描述中,参照构成本文一部分的附图,并且其中通过图示的方式示出了可以实施本发明的具体实施例。足够详细地描述了这些实施例以使本领域技术人员能够实施本发明,并且应该理解,可以利用其他实施例,并且可以在不脱离本发明的范围的情况下进行改变。因此,以下详细描述不应被视为具有限制意义,并且本发明的范围仅由所附权利要求限定。
图2是示出根据本发明的实施例的用于通过存储目标装置208_1至208_n中的虚拟连接队列对来高效raid实现的示例性方法的示意图。根据本实施例,直接使用由nvmeofraid控制器204创建的虚拟连接队列对来执行在一个或多个计算主机202_1至202_m与一个或多个存储目标装置208_1至208_n之间的数据传输。nvmeofraid控制器204、一个或多个计算主机202_1至202_m以及一个或多个存储目标装置208_1至208_n连接至以太网交换机206。nvmeofraid控制器204包括nvmeofraid目标模块210、nvmeofraid实现模块212和nvmeofraid发起器模块214。nvmeofraid目标模块210适于与一个或多个计算主机202_1至202_m交互并且从一个或多个计算主机202_1至202_m接收一个或多个基于结构的高速非易失性存储器(nvmeof)命令。nvmeofraid实现模块212适于从nvmeofraid目标模块210接收一个或多个nvmeof命令,并对一个或多个接收到的nvmeof命令执行raid功能。
nvmeofraid发起器模块214从nvmeofraid实现模块212接收一个或多个nvmeof命令,并将一个或多个nvmeof命令传输到一个或多个存储目标装置208_1到208_n。nvmeofraid发起器模块214在一个或多个计算主机202_1至202_m与一个或多个存储目标装置208_1至208_n之间建立一个或多个虚拟队列对连接,从而能够在一个或多个计算主机202_1至202_m与一个或多个存储目标装置208_1至208_n之间实现直接数据传输。一个或多个计算主机202_1至202_m与一个或多个存储目标装置208_1至208_n之间的直接数据传输是通过以下连接实现的:在一个或多个计算主机202_1至202_m与nvmeofraid目标模块210之间建立的一个或多个计算端物理连接、在nvmeofraid发起器模块214与一个或多个存储目标装置208_1至208_n之间建立的一个或多个存储端物理连接、以及一个或多个计算主机202_1至202_m与一个或多个存储目标装置208_1至208_n之间的一个或多个虚拟队列对连接。
图3是示出根据本发明的实施例的利用nvmeofraid控制器204在计算主机202_1与一个或多个存储目标装置208_1至208_n之间建立一个或多个虚拟队列对连接的方法的示意流程图。在该图中未示出计算主机202_1和以太网206之间的连接、nvmeofraid控制器204和以太网206之间的连接、存储目标装置208_1至208_n和以太网206之间的连接。根据该图,在步骤0处,计算主机202_1执行探索并发现nvmeofraid控制器204。在步骤1处,计算主机202_1将nvmeof连接命令发送到nvmeofraid控制器204。在步骤2处,nvmeofraid目标模块210将nvmeof连接命令的完成发送到计算主机202_1。在步骤3处,计算主机202_1与nvmeofraid控制器204建立计算端物理连接。nvmeofraid实现模块212将注册的存储目标的信息提供给nvmeofraid发起器模块214。在步骤4(即,4a-4n)处,nvmeofraid发起器模块214将(a)具有nvmeofraid发起器模块214的传送上下文信息的一个或多个nvmeof连接命令和(b)具有计算主机202_1的传送上下文信息的一个或多个供应商(vendor)连接命令发送到注册的一个或多个存储目标装置208_1至208_n,以建立一个或多个存储端物理连接。在实施例中,通过nvmeofraid发起器模块214传送到注册的一个或多个存储目标装置208_1至208_n的一个或多个供应商连接命令中的每个供应商连接命令,是彼此不同/唯一的命令。
在步骤5(即,5a-5n)处,在内部存储nvmeofraid发起器模块214和计算主机202_1的传送上下文信息之后,一个或多个存储目标装置208_1至208_n将nvmeof连接命令完成和供应商连接命令完成发送到nvmeofraid发起器模块214。在步骤6(即,6a-6n)处,nvmeofraid发起器模块214与注册的一个或多个存储目标装置208_1至208_n建立一个或多个存储端物理连接。在步骤7(即,7a-7n)处,一个或多个存储目标装置208_1至208_n与计算主机202_1建立一个或多个虚拟队列对连接。一个或多个虚拟队列对连接允许执行一个或多个存储目标装置208_1至208_n与计算主机202_1之间的直接数据传输。在实施例中,在一个或多个计算主机202_1至202_m与一个或多个存储目标装置208_1至208_n之间建立一个或多个虚拟队列对连接。通过一个或多个计算端物理连接、一个或多个存储端物理连接以及通过将计算主机202_1至202_m的传送上下文信息和nvmeofraid发起器模块214的传送上下文信息存储在一个或多个存储目标装置208_1至208_n中,来建立一个或多个虚拟队列对连接。
图4是示出根据本发明的实施例的读取计算主机202_1与一个或多个存储目标装置208_1至208_n之间的输入/输出(i/o)数据的示意流程图。在该图中未示出计算主机202_1与以太网206之间的连接、nvmeofraid控制器204与以太网206之间的连接、存储目标装置208_1至208_n与以太网206之间的连接。根据该图,在步骤1处,计算主机202_1将nvmeof读取命令发送到计算端物理连接上的nvmeofraid目标模块210,用于从开始逻辑块地址(slba)开始读取n个逻辑块(nlb)的数据。在步骤2处,nvmeofraid实现模块212识别存储来自nlb的数据的一个或多个存储目标装置208_1至208_n。在步骤3(即,3a-3n)处,nvmeofraid发起器模块214发起以下传输:将一个或多个存储端物理连接上的一个或多个nvmeof读取命令传输到所识别的包括来自相应的slba和nlb的数据的一个或多个存储目标装置208_1至208_n(例如,注册的一个或多个存储目标装置)。在步骤4(即,4a-4n)处,一个或多个存储目标装置208_1至208_n通过使用建立的一个或多个虚拟队列对连接将rdma_write事务直接发起到计算主机202_1。在步骤5(即,5a-5n)处,一个或多个存储目标装置208_1至208_n将一个或多个成功读取完成传输到一个或多个存储端物理连接上的nvmeofraid发起器模块214。最后,在步骤6处,nvmeofraid目标模块210将合并的(consolidate)单个命令完成传输到计算端物理连接上的计算主机202_1。在实施例中,利用nvmeofraid控制器204经由上述步骤,在一个或多个计算主机202_1至202_m与一个或多个存储目标装置208_1至208_n之间执行一个或多个nvmeof读取命令。
图5是示出根据本发明的实施例的在计算主机202_1和nvmeofraid控制器204之间执行输入/输出(i/o)nvmeof读取容错数据的示意流程图。在该图中未示出计算主机202_1至202_m与以太网206之间的连接、nvmeofraid控制器204和以太网206之间的连接、存储目标装置208_1至208_n和以太网206之间的连接。在步骤1处,计算主机202_1将nvmeof读取命令发送到nvmeofraid目标模块210,以从开始逻辑块地址(slba)开始读取n个逻辑块(nlb)的数据。在步骤2处,nvmeofraid实现模块212识别存储nlb的数据的一个或多个存储目标装置208_1至208_n。在步骤3(即,3a-3n)处,nvmeofraid发起器模块214发起以下传输:将一个或多个存储终端物理连接上的一个或多个nvmeof读取命令传输到所识别的包括来自相应的slba和nlb的数据的一个或多个存储目标装置208_1至208_n。
在步骤4(即,4a-4n)处,一个或多个存储目标装置208_1至208_n通过使用用于对应逻辑块的数据传输的一个或多个虚拟队列对连接,将一个或多个rdma_write事务直接发起到计算主机202_1。在步骤5(即,5a-5n)处,一个或多个存储目标装置208_1至208_n还将一个或多个读取命令完成传输到一个或多个存储端物理连接上的nvmeofraid发起器模块214。nvmeofraid发起器模块214通过一个或多个存储端物理连接中的一个获得读取完成失败命令,并识别原因以针对读取完成失败重建数据。
在步骤6(即,6a-6n)处,nvmeofraid发起器模块214将一个或多个nvmeof读取命令重新发出到注册的(先前发送成功完成的)一个或多个存储目标装置208_1至208_n。重新发出一个或多个nvmeof读取命令以请求一个或多个存储目标装置208_1至208_n基于一个或多个存储端物理连接将数据发送到nvmeofraid发起器模块214。在步骤7(即,7a-7n)处,一个或多个存储目标装置208_1至208_n通过用于相应逻辑块的数据传输的一个或多个存储端物理连接,将一个或多个rdma_write事务发起到nvmeofraid发起器模块214。在步骤8(即,8a-8n)处,一个或多个存储目标装置208_1至208_n将一个或多个成功的nvmeof读取完成传输到nvmeofraid发起器模块214。在步骤9处,nvmeofraid控制器204从接收到的条带和奇偶校验条带中检索缺失的条带(针对该数据nvmeofraid发起器模块214之前接收到失败完成)。在步骤10处,nvmeofraid目标模块210将检索到的条带作为rdma_write事务传输到计算主机202_1。最后,在步骤11处,nvmeofraid控制器204的nvmeofraid目标模块210将合并的nvmeof命令完成发送到计算主机202_1。在实施例中,经由上述步骤在一个或多个计算主机之间202_1至202_m与nvmeofraid控制器204之间处理一个或多个nvmeof读取命令的容错。
尽管本说明书已经关于本发明的特定实施例进行了详细描述,但是应当理解,本领域技术人员在理解了前述内容后,可以容易地想到对这些实施例的改变、变化和等同物。在不脱离本发明的范围的情况下,本领域普通技术人员可以实施对本发明的这些和其他修改和变化。此外,本领域普通技术人员将理解,前面的描述仅是示例性的,并不意图限制本发明。因此,本主题旨在涵盖这些修改和变化。