CN101657802A - 用于远程直接存储器存取固态存储设备的装置、系统及方法 - Google Patents

用于远程直接存储器存取固态存储设备的装置、系统及方法 Download PDF

Info

Publication number
CN101657802A
CN101657802A CN200780050983A CN200780050983A CN101657802A CN 101657802 A CN101657802 A CN 101657802A CN 200780050983 A CN200780050983 A CN 200780050983A CN 200780050983 A CN200780050983 A CN 200780050983A CN 101657802 A CN101657802 A CN 101657802A
Authority
CN
China
Prior art keywords
data
solid
storage
memory
controller
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN200780050983A
Other languages
English (en)
Inventor
大卫·弗林
伯特·拉格斯特德特
约翰·斯特拉瑟
乔纳森·撒切尔
迈克尔·扎佩
大卫·阿特金森
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Iverson Multi System (dba Co Iverson - Io)
Original Assignee
Iverson Multi System (dba Co Iverson - Io)
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Iverson Multi System (dba Co Iverson - Io) filed Critical Iverson Multi System (dba Co Iverson - Io)
Publication of CN101657802A publication Critical patent/CN101657802A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H05ELECTRIC TECHNIQUES NOT OTHERWISE PROVIDED FOR
    • H05KPRINTED CIRCUITS; CASINGS OR CONSTRUCTIONAL DETAILS OF ELECTRIC APPARATUS; MANUFACTURE OF ASSEMBLAGES OF ELECTRICAL COMPONENTS
    • H05K7/00Constructional details common to different types of electric apparatus
    • H05K7/14Mounting supporting structure in casing or on frame or rack
    • H05K7/1485Servers; Data center rooms, e.g. 19-inch computer racks
    • H05K7/1487Blade assemblies, e.g. blade cases or inner arrangements within a blade
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/16Constructional details or arrangements
    • G06F1/18Packaging or power distribution
    • G06F1/183Internal mounting support structures, e.g. for printed circuit boards, internal connecting means
    • HELECTRICITY
    • H05ELECTRIC TECHNIQUES NOT OTHERWISE PROVIDED FOR
    • H05KPRINTED CIRCUITS; CASINGS OR CONSTRUCTIONAL DETAILS OF ELECTRIC APPARATUS; MANUFACTURE OF ASSEMBLAGES OF ELECTRICAL COMPONENTS
    • H05K7/00Constructional details common to different types of electric apparatus
    • H05K7/14Mounting supporting structure in casing or on frame or rack
    • H05K7/1438Back panels or connecting means therefor; Terminals; Coding means to avoid wrong insertion
    • H05K7/1439Back panel mother boards
    • H05K7/1444Complex or three-dimensional-arrangements; Stepped or dual mother boards

Abstract

公开了一种在多个主机之间共享设备的装置、系统和方法。该装置、系统和方法包括固态存储设备、RDMA建立模块以及RDMA执行模块。RDMA建立模块配备有用于RDMA操作的固态存储控制器以便响应于存储请求在固态存储控制器和请求设备之间传送文件或对象的数据。存储请求基本上不含数据,固态存储控制器可经由存储器输入/输出(“I/O”)总线控制固态存储器。固态控制器控制在固态存储器中存储数据,以及请求设备经由计算机网络连接到固态控制器。RDMA执行模块执行RDMA操作以在请求设备和固态存储控制器之间传送数据。

Description

用于远程直接存储器存取固态存储设备的装置、系统及方法
相关申请的交错引用
本申请是下述申请的部分连续申请并要求下述申请的优先权:DavidFlynn等人于2006年12月6日提交的题为“Elemental Blade System”的美国临时专利申请(申请号为:60/873,111);David Flynn等人于2007年9月22日提交的题为“Apparatus,System,and Method for Object-Oriented固态存储器”的美国临时专利申请(申请号为:60/974,470),上述申请通过引用并入本文中。
技术领域
本发明涉及数据管理,尤其是涉及远程直接存储器存取(“RDMA”)固态存储设备。
背景技术
数据存储设备可以处于计算机内部或者外部,通常用系统总线与计算机相连接。其中,存储设备在内部,系统总线可以是外围组件互连express(“PCI-e”)总线、串行高级技术附件(“串行ATA”)总线等等。其中存储设备是外部的,系统总线可以是通用串行总线(“USB”)连接、电气与电子工程师协会(“IEEE”)1394总线(“FireWire”)、等等。由客户机访问存储设备一般会经由计算机来实现。因为由客户机访问存储设备需要经由各种网络协议及软件层来进行导航,所以效率很低。
发明内容
需要一种用于远程直接存储器存取(“RDMA”)固态存储设备的系统、装置及方法。有益地是,该系统、装置及方法允许在经由网络连接到固态存储设备的客户机内存之间进行直接访问。
本发明是针对现有技术的现况开发出来的,特别是,是针对现有技术中通过用于访问固态存储设备的现有系统并未完全解决的问题和需要而开发出来的。因此,本发明已经被开发出来以提供一种克服现有技术中的多数或全部上述缺陷的、用于远程直接存储器存取(“RDMA”)固态存储设备的装置、系统和方法。
在一个实施方式中,该装置具有用于实现远程直接存储器存取固态存储设备的多个模块,包括RDMA建立模块以及RDMA执行模块。RDMA建立模块配备有用于RDMA操作的固态存储控制器以便响应于存储器请求在固态存储控制器和请求设备之间传送文件或对象的数据。存储器请求基本上不含数据,以及固态存储控制器可经由存储器输入/输出(“I/O”)总线控制固态存储器。固态控制器控制在固态存储器中存储数据,以及请求设备经由计算机网络连接到固态控制器。RDMA执行模块执行RDMA操作以在请求设备和固态存储控制器之间传送数据。。
在一个实施方式中,RDMA执行模块利用本地RDMA来执行RDMA操作。在另一个实施方式中,当存储器请求包括写入请求时,RDMA操作直接接收来自请求设备的内存的数据。当存储器请求包括读取请求时,RDMA操作直接将数据传输给请求设备中的内存。在另一个实施方式中,对于包括写入请求的存储器请求来说,RDMA执行模块将数据从请求设备的内存中取出。对于包括读取请求的存储器请求来说,RDMA执行模块将数据推入请求设备的内存。
在一个实施方式中,固态存储控制器管理存储在固态存储器中的一个或多个对象,其中所管理的对象对请求设备来说看作是对象文件系统或对象文件服务器中的对象。在另一个实施方式中,在一组固态存储控制器中,用于接收存储器请求的固态存储控制器包括第一控制器。第一控制器一般会与其他固态存储控制器进行通信。该装置还包括分布式存储模块,其将数据的数据段与该组的每个固态存储控制器相关联并且将存储子请求发送给组中的每一个固态控制器。每个存储子请求都包括使接收固态控制器在用于接收存储子请求的固态控制器与请求设备的内存之间以RDMA操作来传送相关数据段的信息。在另一个实施方式中,第一控制器包括独立驱动器冗余阵列(“RAID”)控制器。分布式存储模块还包括RAID模块,其为数据产生数据条模式并根据RAID级别将数据分成每个数据条N个数据段。分布式存储模块还根据数据条的N个数据段为每个数据条产生校验校验数据段。
在一个实施方式中,固态存储器包括被分成两个或更多内存库的非易失性、固态数据存储元件阵列。在另一个实施方式中,固态存储器和固态存储控制器是配置于双列直插式内存模块(“DIMM”)中的固态存储设备的一部分。在又一个实施方式中,固态存储器可以是闪速存储器。在一个实施方式中,由固态存储控制器所管理的固态存储器还用作数据存储设备的高速缓冲存储器。数据存储设备可包括一个或多个固态存储器、硬盘驱动器、光盘驱动器、以及磁带存储器。在各个实施方式中,数据存储设备被连接到固态存储控制器或者与固态存储控制器和固态存储器相集成。在另一个实施方式中,该装置可包括连接于系统,总线的系统总线连接,所述系统总线被连接到主机。在另一个实施方式中,系统总线包括外围组件互连express(“PCI-e”)总线、串行高级技术附件(“串行ATA”)总线、以太网总线、通用串行总线(“USB”)、电气与电子工程师协会(“IEEE”)1394总线。
还提出了一种本发明的系统。该系统基本包括关于装置的如上所述的模块和实施方式。在一个实施方式中,该系统包括固态存储设备、RDMA建立模块以及RDMA执行模块。固态存储设备包括固态存储控制器和固态存储器,存储器请求基本上不含数据。固态存储控制器一般经由存储器输入/输出(“I/O”)总线来控制固态存储器,固态控制器控制固态存储器中的数据存储。RDMA建立模块配备有用于RDMA操作的固态存储控制器以便响应于存储器请求在固态存储控制器和请求设备之间传送文件或对象的数据。请求设备经由计算机网络连接到固态存储设备,存储器请求基本上不含数据。RDMA执行模块执行RDMA操作以在请求设备和固态存储控制器之间传送数据。
在系统的一个实施方式中,该系统包括与固态存储设备搭配的网络接口,所述固态存储设备连接到固态存储控制器和计算机网络。还提出了一种本发明的方法,用于在多个主机之间共享设备。在公开的实施方式中的该方法大体上包括实现上述与所述装置和系统的运行有关的功能的必要步骤。在一个实施方式中,该方法包括配备有用于RDMA操作的固态存储控制器以便响应于存储器请求在固态存储控制器和请求设备之间传送文件或对象的数据。存储器请求基本上不含数据,固态存储控制器经由存储器输入/输出(“I/O”)总线控制固态存储器。固态控制器控制固态存储器中的数据存储,以及请求设备一般经由计算机网络连接到固态控制器。该方法还包括执行RDMA操作以在请求设备和固态存储控制器之间传送数据。
本说明书全文所提到的特征、优点或者类似措辞并不意味着可在本发明包含在本发明的任一单独的实施方式中的情况下实现所有的特征和优点。当然,涉及特征和优点的措辞被理解为意味着:与实施方式一起描述的特定的特征、优点或者特点包括在本发明的至少一种实施方式中。因此,在本说明书全文中,关于特征、优点和类似措辞的讨论可(但未必)涉及同一实施方式。
此外,描述的本发明的特征、优点和特点可采用任何合适的方式与一个或多个实施方式结合。相关领域的技术人员可意识到本发明可在不具备特定实施方式的一个或多个具体特征或优点的情况下被实施。在其他例子中,可意识到附加特征和优点出现在某些实施方式中,而不是在本发明的所有实施方式中都出现。
通过下面的说明和附加的权利要求,本发明的这些特征和优点将变得更加充分的显而易见,或者可以通过按下文所阐述的实施本发明的方法而获悉。
附图说明
为了使本发明的优点更加容易理解,会参考附图中示出的特定实施方式给出上面简要描述的本发明的更具体的说明。在理解到这些附图仅描述了本发明的一般实施方式并且并不因此认为本发明限于此范围的情况下,将通过使用附图并结合更多的具体特征和细节描述和解释本发明,附图中:
图1A是示意性框图,示出了根据本发明的用于在固态存储设备内的数据管理的系统的一种实施方式;
图1B是示意性框图,示出了根据本发明的用于在固态存储设备内的对象管理的系统的一种实施方式;
图1C是示意性框图,示出了根据本发明的用于服务器中(in-server)存储区域网络的系统的一种实施方式;
图2A是示意性框图,示出了根据本发明的用于在存储设备内的对象管理的装置的一种实施方式;
图2B是示意性框图,示出了根据本发明的位于固态存储设备内的固态存储设备控制器的一种实施方式;
图3是示出了根据本发明的位于固态存储设备内的固态存储设备控制器的一种实施方式的示意性框图,该固态存储设备控制器具有写入数据管道和读取数据管道;
图4A是示意性框图,示出了根据本发明的固态存储控制器中的内存库交错访问控制器的一种实施方式;
图4B是示意性框图,示出了根据本发明的固态存储控制器中的内存库交错访问控制器的一种替代实施方式;
图5A是示意性流程图,示出了根据本发明的在固态存储设备内采用数据管道管理数据的方法的一种实施方式;
图5B是示意性流程图,示出了根据本发明的用于in-server SAN的方法的一种实施方式;
图6是示意性流程图,示出了根据本发明的在固态存储设备内采用数据管道管理数据的方法的另一种实施方式;
图7是示意性流程图,示出了根据本发明的在固态存储设备内采用内存库交错管理数据的方法的一种实施方式;
图8是示意性框图,示出了根据本发明的用于在固态存储设备中进行无用存储单元收集的装置的一种实施方式;
图9是示意性流程图,示出了根据本发明的用于在固态存储设备中进行无用存储单元收集的方法的一种实施方式;
图10是示意性框图,示出了根据本发明的用于渐进式RAID、前端分布式RAID以及共享前端分布式RAID的系统的一种实施方式;
图11是示意性框图,示出了根据本发明的用于前端分布式RAID的装置的一种实施方式;
图12是示意性流程图,示出了根据本发明的用于前端分布式RAID的方法的一种实施方式;
图13是示意性框图,示出了根据本发明的用于共享前端分布式RAID的装置的一种实施方式;
图14是示意性流程图,示出了根据本发明的用于共享前端分布式RAID的方法的一种实施方式;
图15是示意性框图,示出了根据本发明的用于在多个主机之间共享的设备的系统的一种实施方式;
图16是示意性框图,示出了根据本发明的用于在多个主机之间共享的设备的命令代理主机中的装置的一种实施方式;
图17是示意性框图,示出了根据本发明的用于在多个主机之间共享的设备的共享设备中的装置的一种实施方式;
图18是示意性框图,示出了根据本发明的用于在多个主机之间共享的设备的请求主机中的装置的一种实施方式;
图19是示意性流程图,示出了根据本发明的用于在多个主机之间共享的设备的方法的第一种实施方式;
图20是示意性流程图,示出了根据本发明的用于在多个主机之间共享的设备的方法的第二种实施方式;以及
图21是示意性流程图,示出了根据本发明的用于在多个主机之间共享的设备的方法的第三种实施方式;
图22是示意性框图,示出了根据本发明的用于对固态存储设备进行RDMA的装置的一种实施方式;以及
图23是示意性流程图,示出了根据本发明的用于对固态存储设备进行RDMA的方法的一种实施方式。
具体实施方式
为了更显著地强调功能性单元运行的独立性,在本说明书中描述的许多功能性单元已被标示为模块。例如,模块可作为硬件电路来实施,所述硬件电路包括自定义VLSI电路、门阵列或成品半导体(例如逻辑芯片、晶体管或其他分立元件)。模块也可在可编程硬件设备(如现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备或类似设备)内实施。
模块还可在由不同类型的处理器运行的软件中实施。例如,可执行代码的识别模块可以包括一个或多个计算机指令物理块或逻辑块,该计算机指令被作为对象、程序或函数来组织。然而,识别模块的可执行文件不必在物理上位于一起,但是可包括存储在不同位置的不同命令,当这些命令在逻辑上连接在一起时,所述命令包括所述模块并实现所述模块的指定目标。
当然,可执行代码的模块可以为一个或许多指令,并且甚至可以分布在若干不同的代码段中、分布在不同的程序中并可分布在多个存储设备中。类似地,可以在此在模块内识别并示出运算数据,并且可以以任何合适的形式体现所述运算数据并在任意合适类型的数据结构中组织所述运算数据。所述运算数据可作为单数据集收集,或者可以分布在不同的位置(包括不同的存储设备),并且可在系统或网络中至少部分地仅作为电信号存在。当模块或模块的部分在软件中实施时,软件部分被存储在一个或多个计算机可读媒体上。
本说明书全文所提到的“一种实施方式”、“实施方式”或类似的措辞意味着与实施方式一起描述的特定的特征、结构或特点包括在本发明的至少一种实施方式中。因此,在本说明书全文中,短语“在一种实施方式中”、“在实施方式中”及类似措辞的出现可(但未必)涉及同一实施方式。
提及信号承载媒介可采取任何能够生成信号、导致信号生成或者导致在数字处理设备上执行机器可读命令程序的形式。信号承载媒介可通过下述设备体现:传输线、光盘、数字视频光盘、磁带、伯努利驱动器、磁盘、穿孔卡、闪存、集成电路或其他数字处理装置存储设备。
此外,描述的本发明的特征、结构或特点可以以任何合适的方式合并在一种或多种实施方式中。在下文的说明中,提供了大量的具体细节以全面理解本发明的实施方式,所述具体细节比如编程、软件模块、用户选择、网络事务、数据库查询、数据库结构、硬件模块、硬件电路、硬件芯片等等的实例。然而,相关技术领域的技术人员可认识到:本发明可在不具备一个或多个具体实施方式的具体细节的情况下被实施,或者本发明可结合其他方法、组件、材料等实施。在其他例子中,并没有显示或描述公知的结构、材料或操作以使本发明变得清晰。
此处包括的示意性流程图大体上是作为逻辑流程图来列举的。就这点而言,描述的顺序和标记的步骤是本方法的一种实施方式的指示性说明。可设想其他在功能上、逻辑上或效果上与图示方法的一个或多个步骤(或其中部分)相同的步骤和方法。此外,使用的格式和符号被用于解释方法的逻辑步骤并被理解为不限制本方法的范围。尽管在流程图中可使用不同的箭头类型和线条类型,但这些箭头类型和线条类型被理解为不限制相应方法的范围。的确,一些箭头或其他连接器可用于仅表示方法的逻辑流程。例如,箭头可表示描述的方法的列举的步骤之间的未指明间期的等待或监测时期。此外,特定方法的步骤的顺序可或可不严格依照所示的对应步骤的顺序
本发明可采用其他指定形式实施而不脱离本发明的宗旨或本质特点。描述的实施方式在各个方面被视为仅仅是示例性而不是限制性的。因此,本发明的范围由附属的权利要求确定,而不是由上述说明书确定。在本发明的权利要求的含义和等价范围内的所有改变被包含在本发明的保护范围内。
固态存储系统
图1A是示意性框图,示出了根据本发明的用于固态存储设备内的数据管理的系统100的一种实施方式。系统100包括固态存储设备102、固态存储控制器104、写入数据管道106、读取数据管道108、固态存储器110、计算机112、客户端114和计算机网络116,这些装置描述如下。
系统100包括至少一个固态存储设备102。在另一种实施方式中,系统100包括两个或更多个固态存储设备102,每个固态存储设备102可包括非易失性的、固态的存储器110,所述非易失性的、固态的存储器例如纳米随机存取存储器(“纳米RAM”或者“NRAM”)、磁电阻式RAM(“MRAM”)、动态RAM(“DRAM”)、相变RAM(“PRAM”)闪存等等。结合图2和图3更详细地描述了固态存储设备102。固态存储设备102被描述成位于通过计算机网络116与客户端114相连的计算机112内。在一种实施方式中,固态存储设备102位于计算机112内部并且采用系统总线连接,所述系统总线例如快速外围组件互连(“PCI-e”)总线、串行高级技术附件(“串行ATA”)总线或类似总线。在另一种实施方式吧,固态存储设备102位于计算机112外部,并且通过通用串行总线(“USB”)、电气与电子工程师协会(“IEEE”)1394总线(“火线”)或类似总线连接。在其他实施方式中,固态存储设备102采用下述方式与计算机112相连接:外围组件互连(“PCI”)express总线、外部电或光总线扩展或者总线网络解决方案,所述总线网络解决方案例如无限带宽或快速PCI高级交换(“PCIe-AS”)或类似技术。
在不同的实施方式中,固态存储设备102可以是双列直插式内存模块(“DIMM”)、子卡或微型模块的形式。在另一种实施方式中,固态存储设备102是位于机架式刀片内的元件。在另一种实施方式中,固态存储设备102包含在直接集成到高级集成装置(如主板、笔记本电脑、图形处理器)的封装内。在另一种实施方式中,包括固态存储设备102的单独元件直接集成到高级集成装置上而不经过中间封装。
固态存储设备102包括一个或多个固态存储控制器104,每个固态存储控制器104可包括写入数据管道106和读取数据管道108,而且,每个固态存储控制器104还包括固态存储器110,这将在下文中结合图2和图3详细说明。
系统100包括一台或多台连接到固态存储设备102的计算机112。计算机112可以是主机、服务器、存储区域网络(“SAN”)的存储控制器、工作站、个人计算机、笔记本电脑、手持式计算机、超级计算机、计算机集群、网络交换机、路由器或设备、数据库或存储设备、数据采集或数据采集系统、诊断系统、测试系统、机器人、便携式电子设备、无线设备或类似设备。在另一种实施方式中,计算机112可以是客户端,并且固态存储设备102自主运行以应答发送自计算机112的数据请求。在这种实施方式中,计算机112和固态存储设备102可采用下列方式连接:计算机网络、系统总线或其他适于在计算机112和自主固态存储设备102之间连接的通信手段。
在一种实施方式中,系统100包括一个或多个客户端114,所述一个或多个客户端114通过一个或多个计算机网络116连接到一台或多台计算机112。客户端114可以是主机、服务器、SAN的存储控制器、工作站、个人计算机、笔记本电脑、手持式计算机、超级计算机、计算机集群、网络交换机、路由器或设备、数据库或存储设备、数据采集或数据采集系统、诊断系统、测试系统、机器人、便携式电子设备、无线设备或类似设备。计算机网络116可包括因特网、广域网(“WAN”)、城域网(“MAN”)、局域网(“LAN”)、令牌环网、无线网络、光纤通道网络、SAN、网络附属存储(“NAS”)、ESCON或类似网络、或者是网络的任意组合。计算机网络116还可包括来自IEEE802系列网络技术中的网络,如以太网、令牌环网、WiFi、WiMax及类似网络。
计算机网络116可包括服务器、交换机、路由器、电缆、无线电和其他用于促进计算机112和客户端114的网络连接的设备。在一种实施方式中,系统100包括通过计算机网络116进行对等通信的多台计算机112。在另一种实施方式中,系统100包括通过计算机网络116进行对等通信的多个固态存储设备102。本领域技术人员可认识到其他计算机网络116可包括一个或多个计算机网络116以及相关设备,所述相关设备具有一个或多个客户端114、其他计算机或与一台或多台计算机112相连的一个或多个固态存储设备102之间的单个或冗余连接,所述其他计算机具有一个或多个固态存储设备102。在一种实施方式中,系统100包括两个或更多个通过计算机网络118连接到客户端116的固态存储设备102,而不包括计算机112。
存储控制器管理的对象
图1B是示意性框图,示出了根据本发明的用于存储设备内的对象管理的系统101的一种实施方式。系统101包括一个或多个存储设备150(每一个存储设备150都具有存储控制器152和一个或多个数据存储设备154)和一个或多个请求设备155。存储设备152联网在一起并与一个或多个请求设备155连接。请求设备155将对象请求发给存储设备150a。对象请求可以是创建对象的请求、向对象写入数据的请求、从对象读取数据的请求、删除对象的请求、检查对象的请求、复制对象的请求及类似请求。本领域技术人员会认识到其他对象请求。
在一种实施方式中,存储控制器152和数据存储设备154是分离的设备。在另一种实施方式中,存储控制器152和数据存储设备154集成到一个存储设备150上。在另一种实施方式中,数据存储设备154为固态存储器110,而存储控制器为固态存储设备控制器202。在其他实施方式中,数据存储设备154可以为硬盘驱动器、光驱动器、磁带存储器或类似存储设备。在另一种实施方式中,存储设备150可包括两个或更多个不同类型的数据存储设备154。
在一种实施方式中,数据存储设备154为固态存储器110,并且被布置为固态存储元件216、218、220的阵列。在另一种实施方式中,固态存储器110被布置在两个或更多个内存库(bank)214a-n内。下文结合图2B更详细地描述了固态存储器110。
存储设备150a-n可联网在一起并且可作为分布式存储设备运行。与请求设备155连接的存储设备150a控制发送到所述分布式存储设备的对象请求。在一种实施方式中,存储设备150和关联的存储控制器152管理对象并对请求设备155来说表现为分布式对象文件系统。在这种情况下,一类分布式对象文件系统的实例是并行对象文件系统。在另一种实施方式中,存储设备150和关联的存储控制器152管理对象并对请求设备155来说表现为分布式对象文件服务器。在这种情况下,一类分布式对象文件服务器的实例是并行对象文件服务器。在这些和其他实施方式中,请求设备155可只管理对象或者与存储设备150结合而参与管理对象,这通常并不将存储设备150的功能限制在为其他客户端114充分管理对象的范围内。在退化情况下,每个分布式存储设备、分布式对象文件系统和分布式对象文件服务器能作为单个设备独立运行。联网的存储设备150a-n可作为分布式存储设备、分布式对象文件系统、分布式对象文件服务器和它们的任意组合运行,所述组合具有一个或多个为一个或多个请求设备155配置的这些功能。例如,存储设备150可配置为:为第一请求设备155a作为分布式存储设备运行,而请求设备155b作为分布式存储设备和分布式对象文件系统为运行。当系统101包括一个存储设备150a时,存储设备150a的存储控制器152a管理对象并对请求设备155来说表现为对象文件系统或对象文件服务器。
在一种实施方式中,其中,存储设备150作为分布式存储设备联网在一起,存储设备150充当由一个或多个分布式存储控制器152管理的独立驱动器冗余阵列(“RAID”)。例如,写入对象数据段的请求导致所述数据段根据RAID级别在数据存储设备154a-n中被条带化为具有奇偶校验条带的条带。这种布置的一个好处是这种对象管理系统可在单独的存储设备150(无论是存储控制器152、数据存储设备154或存储设备150的其他组件)出现故障时继续使用。
当冗余网络用于互连存储设备150和请求设备155时,所述对象管理系统可在出现网络故障的情况下(只要网络中的一个仍在运行)继续使用。具有一个存储设备150a的系统101还可包括多个数据存储设备154a,而存储设备150a的存储控制器152a可作为RAID控制器运行并在存储设备150a的数据存储设备154a间分割数据段,存储设备150a的存储控制器152a可包括根据RAID级别的奇偶校验条带。
在一种实施方式中,其中,一个或多个存储设备150a-n是具有固态存储设备控制器202和固态存储器110的固态存储设备102,固态存储设备102可配置为DIMM配置、子卡、微型模块等,并保留在计算机112内。计算机112可以是服务器或具有固态存储设备102的类似设备,固态存储设备102联网在一起并作为分布式RAID控制器运行。有利地是,存储设备102可采用PCI-e、PCIe-AS、无限带宽或其他高性能总线、交换总线、网络总线或网络连接,并且可提供极致密型、高性能的RAID存储系统,在该系统中,单独的或分布式固态存储控制器202自主地在固态存储器110a-n间条带化数据段。
在一种实施方式中,请求设备155用于与存储设备150通信的同一网络可被对等存储设备150a使用,以与对等存储设备150b-n通信以实现RAID功能。在另一种实施方式中,可为了RAID的目的而在存储设备150间使用单独的网络。在另一种实施方式中,请求设备155可通过向存储设备150发送冗余请求而参与RAID进程。例如,请求设备155可向第一存储设备150a发送第一对象写入请求,而向第二存储设备150b发送具有相同数据段的第二对象写入请求以实现简单的镜像。
当具有在存储设备102内进行对象处理的能力时,只有存储控制器152具有采用一个RAID级别存储一个数据段或对象的能力,而采用不同的RAID级别或不采用RAID条带化来存储另一数据段或对象。这些多个RAID群组可与存储设备150内的多个分区相关联。可同时在各种RAID群组间支持RAID0、RAID1、RAID5、RAID6和复合RAID类型10、50、60,所述RAID群组包括数据存储设备154a-n。本领域技术人员可认识到还可同时支持的其他RAID类型和配置。
而且,由于存储控制器152像RAID控制器一样自主运行,所述RAID控制器能够执行渐进式RAID并能够将在数据存储设备154间条带化的具有一个RAID级别的对象或对象的某些部分转换为另一RAID级别,转换时请求设备155不受影响、不参与或者甚至不探测RAID级别的变化。在优选实施方式中,促进RAID配置从一个级别变为另一级别可在对象或甚至在包基上自主实现,并且可由运行在存储设备150或存储控制器152中的一个上的分布式RAID控制模块初始化。通常,RAID渐进是从高性能和低效率的存储配置(如RAID1)转换为低性能和高存储效率的存储配置(如RAID5),其中,转换是基于读取频率被动态地初始化。但是,可以发现,从RAID5到RAID1的渐进也是可能的。可配置其他用于初始化RAID渐进的进程,或者可由客户端或外部代理(如存储系统管理服务器请求)请求该进程。本领域技术人员可认识到具有存储控制器152的存储设备102的其他特征和优点,该存储控制器152自主管理对象。
具有服务器内SAN的固态存储设备
图1C是示意性框图,示出了根据本发明的用于服务器内存储区域网络(“SAN”)的系统103的一种实施方式。系统103包括计算机112,计算机112通常被配置为服务器(“服务器112”)。每个服务器112包括一个或多存储设备150,其中,服务器112和存储设备150分别连接到共享网络接口155。每个存储设备150包括存储控制器152和相应的数据存储设备154。系统103包括客户端114、114a、114b,客户端114、114a、114b位于服务器112的内部或者外部。客户端114、114a、114b可通过一个或多个计算机网络116与每个服务器112和每个存储设备150通信,所述一个或多个计算机网络116大体上与上述的计算机网络类似。
存储设备150包括DAS模块158、NAS模块160、存储通信模块162、服务器内SAN模块164、通用接口模块166、网络代理模块170、虚拟总线模块172、前端RAID模块174及后端RAID模块176,这些模块将在下文中描述。模块158-176图示为位于存储设备150内,模块158-176中的每一个的全部或部分可位于存储设备150、服务器112、存储控制器152内或位于其他位置。
服务器112(如与服务器内SAN结合使用的)是具有服务器功能的计算机。服务器112至少包括一项服务器功能(如文件服务器功能),而且还可包括其他服务器功能。服务器112可以是服务器群的一部分并可服务其他客户端114。在其他实施方式中,服务器112还可以是个人计算机、工作站或其他包括存储设备150的计算机。服务器112可像访问直接附加存储(“DAS”)、SAN附加存储或者网络附加存储(“NAS”)那样访问服务器112内的一个或多个存储设备150。参与服务器内SAN或NAS的存储控制器150可位于服务器112的内部或外部。
在一种实施方式中,服务器内SAN装置包括DAS模块158,该DAS模块158将由服务器112的存储控制器152控制的至少一个数据存储设备154的至少一部分配置为附属于服务器112的DAS设备,以服务从至少一个客户端114传送到服务器112的存储请求。在一种实施方式中,第一数据存储设备154a被配置为第一服务器112a的DAS,而且,第一数据存储设备154a还被配置为第一服务器112a的服务器内SAN存储设备。在另一种实施方式中,第一数据存储设备154a被分割,以使得一个分区为DAS而另一个分区为服务器内SAN。在另一种实施方式中,第一数据存储设备154a内的存储空间的至少一部分被配置为第一服务器112a的DAS,而第一服务器112a的存储空间的同一部分被配置为第一服务器112a的服务器内SAN。
在另一种实施方式中,服务器内SAN装置包括NAS模块160,该NAS模块160将存储控制器152配置为用于至少一个客户端114的NAS设备并服务来自客户端114的文件请求。存储控制器152还可被配置为用于第一服务器112a的服务器内SAN设备。存储设备150可通过共享网络接口155直接连接到计算机网络116,共享网络接口155独立于存储设备150位于其内的服务器112。
在一种基本的形式中,用于服务器内SAN的装置包括第一服务器112a内的第一存储控制器152a,其中,第一存储控制器152a控制至少一个存储设备154a。第一服务器112a包括由第一服务器112a和第一存储控制器152a共享的网络接口156,所述服务器内SAN装置包括存储通信模块162,该存储通信模块162促进第一存储控制器152a和位于第一服务器112a外部的至少一个设备之间的通信,以使得第一存储控制器152a和外部设备之间的所述通信独立于第一服务器112a。存储通信模块162可允许第一存储控制器152a独立地访问网络接口156a以进行外部通信。在一种实施方式中,存储通信模块162访问网络接口156a中的交换机以管理第一存储控制器152a和外部设备之间的网络流量。
服务器内SAN装置还包括服务器内SAN模块164,该服务器内SAN模块164利用网络协议和总线协议中的一个或两个服务存储请求。服务器内SAN模块164服务独立于第一服务器112a的所述存储请求,并且所述服务请求接收自内部或外部客户端114a、114。
在一种实施方式中,位于第一服务器112a外部的设备是第二存储控制器152b。第二存储控制器152b控制至少一个数据存储设备154b。服务器内SAN模块164利用第一和第二存储控制器152a、152b之间、通过网络接口156a的通信服务所述存储请求,第一和第二存储控制器152a、152b独立于第一服务器112a。第二存储控制器152b可位于第二服务器112b内或位于一些其他设备内。
在另一种实施方式中,第一服务器112a外部的设备是客户端114,并且所述存储请求源于外部客户端114,其中,第一存储控制器被配置为SAN的至少一部分,并且服务器内SAN模块164通过独立于第一服务器112a的网络接口156a服务所述存储请求。外部客户端114可位于第二服务器112b内或可位于第二服务器112b的外部。在一种实施方式中,即使当第一服务器112a不可用时,服务器内SAN模块164也能够服务来自外部客户端114的存储请求。
在另一种实施方式中,生成所述存储请求的客户端114a位于第一服务器112a的内部,其中,第一存储控制器152a被配置为SAN的至少一部分,并且服务器内SAN模块164通过一个或多个网络接口156a和系统总线服务所述存储请求。
传统的SAN配置允许像按直接附加存储(“DAS”)访问服务器112内的存储设备一样访问远离服务器112的存储设备,以使得远离服务器112的所述存储设备表现为块存储设备。通常,按SAN连接的存储设备需要SAN协议,所述SAN协议例如光纤通道、互联网小型计算机系统接口(“iSCSI”)、HyperSCSI、光纤连通性(“FICON”)、通过以太网的高级技术附件(“ATA”)等。服务器内SAN包括服务器112内的存储控制器152,同时仍然允许存储控制器152a和远程存储控制器152b或外部客户端之间利用网络协议和/或总线协议的网络连接。
通常,SAN协议是网络协议的形式,并且,出现了更多的网络协议,例如可允许存储控制器150a和关联的数据存储设备154a被配置为SAN并与外部外部客户端114或第二存储控制器152b通信的无限带宽。在另一种实例中,第一存储控制器152a可利用以太网与外部客户端114或第二存储控制器152b通信。
存储控制器152可通过总线与内部存储控制器152或客户端114a通信。例如,存储控制器152可通过使用PCI-e的总线通信,所述PCI-e可支持PCI快速输入/输出虚拟化(“PCIe-IOV”)。其他新出现的总线协议允许系统总线扩展超出计算机或服务器112并可允许存储控制器152a被配置为SAN。一种这样的总线协议是PCIe-AS。本发明并不仅限于SAN协议,还可利用新出现的网络和总线协议服务存储请求。外部设备(无论是客户端114的形式还是外部存储控制器152b的形式)可通过扩展系统总线或计算机网络116通信。正如此处所使用的,存储请求包括写入数据、读取数据、擦除数据、查询数据的请求等等,并且所述存储请求可包括对象数据、元数据、管理请求以及块数据请求。
传统的服务器112通常具有控制访问服务器112内的设备的根联合体。通常,服务器112的所述根联合体具有网络接口156,从而使得服务器112控制任何通过网络接口156的通信。然而,在服务器内SAN装置的优选实施方式中,存储控制器152能够独立地访问网络接口156,从而使得客户端114可直接地与形成SAN的第一服务器内112a内的一个或多个存储控制器152a通信,或者使得一个或多个第一存储控制器152a可与第二存储控制器152b或其他远程存储控制器152联网在一起以形成SAN。在这种优选实施方式中,远离第一服务器112a的设备可通过单独的、共享的网络地址访问第一服务器112a或第一存储控制器152a。在一种实施方式中,服务器内SAN装置包括通用接口模块166,该通用接口模块166配置网络接口156、存储控制器152和服务器112,以使得可使用共享网络地址访问服务器112和存储控制器152。
在其他实施方式中,服务器112包括两个或更多个网络接口156。例如,服务器112可通过一个网络接口156通信,而存储设备150可通过另一个接口通信。在另一个实例中,服务器112包括多个存储设备150,每个存储设备150具有网络接口156。本领域技术人员会认识到具有一个或多个存储设备150和一个或多个网络接口156的服务器112的其他配置,其中,一个或多个存储设备150访问独立于服务器112的网络接口156。本领域技术人员还可认识到扩展这些不同的配置的方法以支持网络冗余并提高可用性。
有利地是,服务器内SAN装置大大降低了传统SAN的复杂性和花费。例如,典型的SAN需要具有外部存储控制器152和关联的数据存储设备154的服务器112。这占用了机架上的额外空间并且需要电缆、交换机等。配置传统的SAN所需的电缆、交换机和其他的开销占用了空间、降低了带宽并且昂贵。服务器内SAN装置允许存储控制器152和关联的存储器154适合服务器112的形体尺寸,并因此减少了需要的空间和费用。服务器内SAN还允许通过内部和外部高速数据总线使用相对高速的通信的连接。
在一种实施方式中,存储设备150为固态存储设备102,存储控制器152为固态存储控制器104,而数据存储设备154为固态存储器110。由于此处所述的固态存储设备102的速度,这种实施方式是有利的。此外,固态存储设备102可被配置为位于DIMM中,所述DIMM可方便地装配在服务器112内并仅需要少量的空间。
服务器112中的一个或多个内部客户端114a还可通过服务器的网络接口156连接到计算机网络116,并且服务器112通常控制所述客户端的连接。这种方法具有一些好处。客户端114a可直接地本地访问或远程访问存储设备150,并且客户端114a可初始化客户端114a的存储器和存储设备150之间的本地或远程直接存储器存取(“DMA”,“RDMA”)数据的传送。
在另一种实施方式中,当利用本地连接的存储设备150作为DAS设备、网络连接的存储设备150、网络连接的固态存储设备102(这些设备作为服务器内SAN、外部SAN和混合SAN的一部分)时,位于服务器112内部或外部的客户端114、114a可通过一个或多个网络116对客户端114起文件服务器的作用。存储设备150可同时参与DAS、服务器内SAN、SAN、NAS等(及其中的任意的组合)。此外,每个存储设备150可以以如下方式被分割:第一分区使存储设备150作为DAS可用,第二分区使存储设备150作为服务器内SAN内的元件可用,第三分区使存储设备150作为NAS可用,第四分区使存储设备150作为SAN的元件可用,等等。类似地,存储设备150可被分割为符合安全性和存取控制要求。本领域技术人员会认识到可以构建和支持下述设备或系统的任意组合和排列:存储设备、虚拟存储设备、存储网络、虚拟存储网络、专用存储器、共享存储器、平行文件系统、平行对象文件系统、块存储设备、对象存储设备、存储装置、网络装置及类似设备。
此外,通过将存储设备150直接地连接到计算机网络116,存储设备150彼此之间能够互相通信并能够起服务器内SAN的作用。通过计算机网络116连接的服务器112内的客户端114a和客户端114可像访问SAN那样访问存储设备150。通过将存储设备150移到服务器112内并使其具备将存储设备150配置为SAN的能力,服务器112/存储设备150的结合使得在常规SAN中不需要专用的存储控制器、光纤通道网络和其他设备。服务器内SAN系统103具有能够使存储设备150与客户端114和计算机112共享共用的资源(如电源、制冷、管理和物理空间)的优点。例如,存储设备150可插在服务器112的空的插槽中并提供SAN或NAS的所有工作性能、可靠性和可用性。本领域技术人员会认识到服务器内SAN系统103的其他特征和优点。
在另一种配置中,多个服务器内SAN存储设备150a被布置在单独的服务器112a基础架构内。在一种实施方式中,服务器112a由一个或多个利用PCI快速IOV互连的内部刀片服务器客户端114a组成,而没有外部网络156、外部客户端114、114b或外部存储设备150b。
此外,服务器内SAN存储设备150可通过一个或多个计算机网络116与对等存储设备150通信,所述对等存储设备150位于计算机112(图1中的每一台计算机)内,或者不通过计算机112而直接连接到计算机网络116以形成同时具有SAN和服务器内SAN的全部功能的的混合SAN。这种灵活性具有以下优点:简化了扩展性和在不同的可能的固态存储网络实施方案之间的移植。本领域技术人员会认识到放置和互连固态控制器104的其他组合、配置、实施方案和布局。
当网络接口156a仅能被运行在服务器112a内的一个代理控制时,运行在所述代理中的链路建立模块168能够通过连接到外部存储设备150b和客户端114、114b的网络接口156a建立内部客户端114a和存储设备150a/第一存储控制器152a之间的通信通路。在优选的实施方式中,一旦建立了所述通信通路,单独的内部存储设备150a和内部客户端114a能够建立和管理它们自己的命令队列,并通过网络接口156a和独立于控制网络接口156a的网络代理或代理的RDMA将命令和数据同时双向地直接传送给外部存储设备150b和客户端114、114b。在一种实施方式中,链路建立模块168在初始化过程(如硬件的启动或初始化)期间建立通信链路。
在另一种实施方式中,网络代理模块170指令至少一部分用于通过第一服务器112服务存储请求的命令,而至少与所述存储请求关联的数据(也可能是其他命令)在第一存储控制器和独立于第一服务器的外部存储设备之间通信。在另一种实施方式中,网络代理模块170代表内部存储设备150a和客户端114a转发命令或数据。
在一种实施方式中,第一服务器11a包括位于第一服务器112a内的一个或多个服务器,并包括虚拟总线模块172,该虚拟总线模块172允许第一服务器112a内的所述一个或多个服务器通过分享的虚拟总线独立地访问一个或多个存储控制器152a。所述虚拟总线可利用高级总线协议(如PCIe-IOV)建立。支持IOV的网络接口156a可允许所述一个或多个服务器和所述一个或多个存储控制器独立地控制一个或多个网络接口156a。
在不同的实施方式中,服务器内SAN装置允许两个或更多个存储设备150被配置在RAID中。在一种实施方式中,服务器内SAN装置包括将两个或更多个存储控制器配置为RAID的前端RAID模块174。当来自客户端114、114a的存储请求包括存储数据的请求时,前端RAID模块174通过将所述数据以符合特定应用的RAID级的形式写入所述RAID服务所述存储请求。第二存储控制器152可位于第一服务器112a的内部或者外部。前端RAID模块174允许将存储控制器152配置成RAID,从而使得存储控制器对发送所述存储请求的客户端114、114a可见。这种方法允许被指定为主机的存储控制器152或客户端114、114a管理条纹和校验信息。
在另一种实施方式中,服务器内SAN装置包括后端RAID模块176,该后端RAID模块176将由存储控制器控制的两个或更多个数据存储设备154配置为RAID。当来自所述客户端的存储请求包括存储数据的请求时,后端RAID模块176通过将所述数据以符合应用的RAID级的形式写入所述RAID服务所述存储请求,从而使得客户端114、114a像访问由第一存储控制器152控制的单个数据存储设备154那样访问被配置为RAID的存储设备154。这种RAID应用允许以如下方式将由存储控制器152控制的数据存储设备配置成RAID:配置成RAID的过程对任何访问数据存储设备154的客户端114、114a来说是透明的。在另一种实施方式中,前端RAID和后端RAID都具有多级RAID。本领域技术人员会认识到将存储设备152以符合此处所述的固态存储控制器104和关联的固态存储器110的形式配置为RAID的其他方法。
用于存储控制器管理的对象的装置
图2A是示意性框图,示出了根据本发明的用于存储设备内的对象管理的装置200的一种实施方式。装置200包括存储控制器152,该存储控制器152具有:对象请求接收器模块260、解析模块262、命令执行模块264、对象索引模块266、对象请求排队模块268、具有消息模块270的封包器302、及对象索引重建模块272,上述模块描述如下。
存储控制器152大体上与图1B中的系统102描述的存储控制器152类似,并且可以是图2描述的固态存储设备控制器202。装置200包括对象请求接收器模块260,该对象请求接收器模块260接收来自一个或多个请求设备155的对象请求。例如,对于存储对象数据请求,存储控制器152在数据存储设备154中以数据包的形式存储数据段,该数据存储设备154与存储控制器152相连接。所述对象请求通常由存储在或将要被存储在一个或多个对象数据包中的数据段指令存储控制器管理的对象。对象请求可请求存储控制器152创建对象,该对象随后会通过可利用本地或远程直接内存读取(“DMA”、“RDMA”)转换的稍后的对象请求来填充数据。
在一种实施方式中,对象请求为将对象的全部或一部分写入先前创建的对象的写入请求。在一个实例中,所述写入请求用于对象的数据段。可将所述对象的其他数据段写入存储设备150或者写入其他存储设备152。在另一个实例中,所述写入请求用于整个对象。在另一个实例中,所述对象请求为从由存储控制器152管理的数据段中读取数据。在又一种实施方式中,所述对象请求为删除请求,以删除数据段或对象。
有利地是,存储控制器152能接受不仅仅写新对象或为已存在的对象添加数据的写入请求。例如,由对象请求接收器模块260接收的写入请求可包括:在由存储控制器152存储的数据前添加数据的请求、在已存储的数据中插入数据的请求或者替换数据的一段的请求。由存储控制器152保持的对象索引提供了这些复杂写操作所需要的灵活性,所述写操作在其他存储控制器内不可用,但是目前仅在服务器和其他计算机文件系统内的存储控制器外可用。
装置200包括解析模块262,该解析模块262将所述对象请求解析为一条或多条命令。通常,解析模块262将所述对象请求解析为一个或多个缓存。例如,所述对象请求中的一条或多条命令可被解析为命令缓存。通常,解析模块262准备对象请求,以使得所述对象请求中的信息可以被存储控制器152理解并执行。本领域技术人员会认识到将对象请求解析为一条或多条命令的解析模块262的其他功能。
装置200包括命令执行模块264,该命令执行模块264执行从所述对象请求解析出的命令。在一种实施方式中,命令执行模块264执行一条命令。在另一种实施方式中,命令执行模块264执行多条命令。通常,命令执行模块264解释解析自所述对象请求的命令(如写入命令),然后创建、排列并且执行子命令。例如,解析自对象请求的写入命令可指令存储控制器152存储多个数据段。所述对象请求还可包括必要属性(如加密、压缩等)。命令执行模块264可命令存储控制器152压缩所述数据段、加密所述数据段、创建一个或多个数据包并为每个数据包关联包头、使用媒体加密密钥加密所述数据包、添加错误修正码并将所述数据包存储在指定位置。在指定位置存储所述数据包,并且其他子命令还可被分解为其他更低级别的子命令。本领域技术人员会认识到命令执行模块264能执行一条或多条解析自对象请求的命令的其他方法。
装置200包括对象索引模块266,该对象索引模块266在对象索引中创建对象项,以响应创建对象或存储所述对象数据段的存储控制器152。通常,存储控制器152从所述数据段中创建数据包,并且在存储所述数据段时,所述数据包存储的位置即被指定。同数据段一起接收的或作为对象请求的一部分接收的对象元数据可采用类似方法存储。
对象索引模块266在存储所述数据包和分配所述数据包的物理地址时创建进入对象索引的对象项。所述对象项包括所述对象的逻辑标识符和一个或多个物理地址之间的映射,所述一个或多个物理地址对应于存储控制器152存储一个或多个数据包和任何对象元数据包的位置。在另一种实施方式中,在存储所述对象的数据包之前在所述对象索引中创建项。例如,如果存储控制器152较早地确定存储所述数据包的物理地址,则对象索引模块266可较早地在所述对象索引中创建项。
通常,当对象请求或对象请求组导致对象或数据段被修改时(可能在读修改写操作期间),所述对象索引模块266更新所述对象索引中的项以符合修改的对象。在一种实施方式中,所述对象索引创建新对象并在所述对象索引为所述修改的对象创建新项。通常,当仅有对象的一部分被修改时,所述对象包括修改过的数据包和一些保持不变的数据包。在这种情况下,所述新项包括到未变的数据包(与最初写入它们的位置相同)的映射和到写入新位置的修改后的对象的映射。
在另一种实施方式中,对象请求接收器模块260接收对象请求,该对象请求包括擦除数据块或其他对象元的命令,存储控制器152可至少存储一个包(如擦除包,该擦除包具有对象的引用、与对象的关系和擦除的数据块的大小的信息)。此外,这可进一步表明擦除的对象元素被填充为0。因此,擦除对象请求可用于仿真被擦除的实际的内存或存储器,并且,所述实际的内存或存储器实际上具有合适的内存/存储器的一部分,所述合适的内存/存储器实际上以0存储在所述内存/存储器的单元中。
有利地是,创建具有项(该项表明了数据段和对象元数据之间的映射)的对象索引允许存储控制器152自主的处理和管理对象。这种能力允许在存储设备150中十分灵活地存储数据。一旦创建了对象的索引项,存储控制器152可有效地处理后继关于所述对象的对象请求。
在一种实施方式中,存储控制器152包括对象请求排队模块,该对象请求排队模块在解析模块262解析之前将一个或多个由对象请求接收器模块260接收到的对象排队。对象请求排队模块268允许在接收对象请求时和在执行所述对象请时之间的灵活性。
在另一种实施方式中,存储控制器152包括封包器302,该封包器302根据一个或多个数据段创建一个或多个数据包,其中,数据包的大小适于存储在数据存储设备154内。在下文中结合图3更详细地描述封包器302。在一种实施方式中,封包器302包括为每个包创建包头的消息模块270。所述包头包括包标识符和包长度。所述包标识符把所述包与对象(为该对象生成所述包)联系起来。
在一种实施方式中,由于包标识符包含足够的信息以确定对象和在对象内的包含在包内的对象元素之间的关系,因此每个包包括自包含的包标识符。然而,更有效的优选实施方式是在容器中存储包。
容器是一种数据结构,这种数据结构有助于更有效的存储数据包并帮助建立对象和数据包、元数据包和其他与存储在容器内的对象有关的包之间的关系。注意到存储控制器152通常以处理作为对象的一部分接收的对象元数据的类似方式处理数据段。通常,“包”可指包含数据的数据包、包含元数据的元数据包或其他包类型的其他包。对象可存储在一个或多个容器中,并且容器通常包括仅用于一个唯一的对象的包。对象可分布在多个容器之间。容器通常存储在单个逻辑擦除块内(存储部)并且通常不分散在逻辑擦除块间。
在一个实例中,容器可分散在两个或更多个逻辑/虚拟页间。通过将容器与对象关联起来的容器标签确定容器。容器可包含0个到许多个包并且容器内的这些包通常来自一个对象。包可以有许多对象元素类型(包括对象属性元、对象数据元、对象索引元和类似的元素类型)。可以创建包括不止一个对象元类型的混合包。每个包可包含0个到许多个同一类型的元。容器内的每个包通常都包含标识与对象关系的唯一标识符。
每个包与一个容器相关联。在优选实施方式中,容器被限于擦除块,以使得在每个擦除块的起始部分或在擦除块的起始部分附近能发现容器包。这有助于将数据丢失限制在具有损坏的包头的擦除块范围内。在这种实施方式中,如果对象索引不可用并且擦除块内的包头损坏,由于可能没有可靠的机制确定后继包的位置,从损坏的包头到擦除块尾的内容可能会丢失。在另一种实施方式中,更可靠的方法是采用限于页的边界的容器。这种实施方式需要更多包头开销。在另一种实施方式中,容器可流经页面和擦除块边界。这种方法需要较少的包头开销,但是,如果包头损坏,则有可能会丢失更多部分的数据。对这些实施方式来说,使用一些类型的RAID以进一步保证数据完整性是可以预期的。
在一种实施方式中,装置200包括对象索引重建模块272,该对象索引重建模块272采用来自存储在数据存储设备154中的包头的信息重建所述对象索引中的项。在一种实施方式中,对象索引重建模块272通过读取包头(以确定每个包所属的对象)和序列信息(以确定数据或元数据在对象中所属的位置)来重建所述对象索引的项。对象索引重建模块272采用每个包的物理地址信息和时间戳或序列信息以创建包的物理地址和对象标识符和数据段序列间的映射。对象索引重建模块272使用时间戳或序列信息以再现索引变更的顺序并通常因此重建最近的状态。
在另一种实施方式中,对象索引重建模块272采用包头信息以及容器包信息放置包以识别包的物理位置、对象标识符和每个包的序列号,从而在所述对象索引中重建项。在一种实施方式中,在写入数据包时,擦除块被戳记上时间,或者赋给擦除块序列号,并且擦除块的时间戳或序列信息和来自容器头和包头的信息一起使用以重建对象索引。在另一种实施方式中,当擦除块恢复时,时间戳或序列信息被写入该擦除块。
当对象索引存储在易失性存储器中时,如果不能重建所述对象索引,错误、失电、或其他导致存储控制器152未存储所述对象索引而停工的因素可能会成为问题。对象索引重建模块272允许所述对象索引存储在具有易失性存储体优点(如快速存取)的易失性存储体中。对象索引重建模块272允许自主地快速重建所述对象索引,而并不需要依靠位于存储设备150外的设备。
在一种实施方式中,易失性存储体中的所述对象索引周期性地存储在数据存储设备154内。在具体的实例中,所述对象索引或“索引元数据”周期性地存储固态存储器110中。在另一种实施方式中,所述索引元数据存储在固态存储器110n(与固态存储器110a-110n-1存储包分离)中。独立于数据和对象元数据管理所述索引元数据,所述数据和对象元数据传送自请求设备155并且由存储控制器152/固态存储控制器202管理。管理和存储与其他来自对象的数据和元数据分离的索引元数据允许有效的数据流,同时存储控制器152/固态存储设备控制器202并不会不必要地处理对象元数据。
在一种实施方式中,其中,由对象请求接收器模块260接收到的对象请求包括写入请求,存储控制器152通过本地或远程直接存储器存取(“DMA”、“RDMA”)操作接收来自请求设备155的内存的一个或多个对象数据段。在优选实例中,存储控制器152在一次或多次DMA或RDMA操作中从请求设备155的内存中读取数据。在另一实例中,请求设备155在一次或多次DMA或RDMA操作中将所述数据段写入存储控制器152。在另一种实施方式中,其中,所述对象请求包括读请求,存储控制器152在一次或多次DMA或RDMA操作中将对象的一个或多个数据段传送给请求设备155的内存。在优选实例中,存储控制器152在一次或多次DMA或RDMA操作中将数据写入请求设备155的内存。在另一实例中,请求设备在一次或多次DMA或RDMA操作中从存储控制器152中读取数据。在另一实施方式中,存储控制器152在一次或多次DMA或RDMA操作中从请求设备155的内存中读取对象命令请求集。在另一实例中,请求设备155在一次或多次DMA或RDMA操作中将对象命令请求集写入存储控制器152。
在一种实施方式中,存储控制器152仿真块存储,并且在请求设备155和存储控制器152之间通信的对象包括一个或多个数据块。在一种实施方式中,请求设备155包括驱动器,以使得存储设备150表现为块存储设备。例如请求设备155可与请求设备155期望数据存储的物理地址一起发送特定大小的一组数据。存储控制器152接收所述数据块,并将与所述数据块一起传送的物理块地址或者将物理块地址的转化形式作为对象标识符。然后,存储控制器152通过随意地封包所述数据块和存储数据块将所述数据块存储为对象或对象的数据段。然后,对象索引模块266利用基于物理块的对象标识符和存储控制器152存储所述数据包的实际物理位置在所述对象索引中创建项,所述数据包包括来自所述数据块的数据。
在另一种实施方式中,存储控制器152通过接收块对象仿真块存储。块对象可包括块结构中的一个或多个数据块。在一种实施方式中,存储控制器152像处理任意其他对象一样处理所述块对象。在另一种实施方式中,对象可代表整个块设备、块设备的分区或块设备的一些其他逻辑子元件或物理子元件,所述块设备包括磁道、扇区、通道及类似设备。值得特别注意的是将块设备RAID群组重映射到支持不同RAID构建(如渐进式RAID)的对象。本领域技术人员会认识到将传统的或未来的块设备映射到对象的其他方法
固态存储设备
图2B是示出了根据本发明的位于固态存储设备102内的固态存储设备控制器202的一种实施方式201的示意性框图,该固态存储设备控制器202包括写入数据管道106和读取数据管道108。固态存储设备控制器202可包括若干固态存储控制器0-N,104a-n,每个固态存储控制器都控制固态存储器110。在描述的实施方式中,示出了两个固态控制器:固态控制器0 104 a和固态控制器N104n,并且它们中的每一个都控制固态存储器110a-n。在描述的实施方式中,固态存储控制器0 104a控制数据通道,以使得附属固态存储器110a存储数据。固态存储控制器N 104n控制与存储的数据关联的索引元数据通道,以使得关联的固态存储器110n存储索引元数据。在替代的实施方式中,固态存储设备控制器202包括具有单个固态存储器110a的单个固态控制器104a。在另一种实施方式中,存在大量的固态存储控制器104a-n和关联的固态存储器110a-n。在一种实施方式中,一个或多个固态控制器104a-104n-1(与它们的关联固态存储器110a-110n-1连接)控制数据,而至少一个固态存储控制器104n(与其关联固态存储器110n连接)控制索引元数据。
在一种实施方式中,至少一个固态控制器104是现场可编程门阵列(“FPGA”)并且控制器功能被编入FPGA。在特定的实施方式中,FPGA是Xilinx
Figure G2007800509838D00261
公司的FPGA。在另一种实施方式中,固态存储控制器104包括专门设计为固态存储控制器104的组件(如专用集成电路(“ASIC”)或自定义逻辑解决方案)。每个固态存储控制器104通常包括写入数据管道106和读取数据管道108,结合图3进一步描述了这两个管道。在另一种实施方式中,至少一个固态存储控制器104由FPGA、ASIC和自定义逻辑组件的组合组成。
固态存储器
固态存储器110是非易失性固态存储元件216、218、220的阵列,该阵列布置在内存库214中并且通过双向存储输入输出(I/O)总线210并行访问。在一种实施方式中,存储I/O总线210能够在任何一个时刻进行单向通信。例如,当将数据写入固态存储器110时,不能从固态存储器110中读取数据。在另一种实施方式中,数据可同时双向地流动。然而,双向(如此处针对数据总线使用的)指在同一时间数据仅在一个方向流动的数据通路,但是,当在双向数据总线上流动的数据被阻止时,数据可在所述双向总线上沿相反方向流动。
固态存储元件(如SSS 0.0 216a)通常被配置为芯片(一个或多个小片的封装)或电路板上的小片。正如所描述的那样,固态存储元件(如216a)独立于或半独立于其他固态存储元件(如218a)运行,即使这些元件被一起封装在芯片包、芯片包的堆栈或一些其他封包元件内。正如所描述的,一列固态存储元件216、218、220被指定为内存库214。正如所描述的,可以有“n”个内存库214a-n并且每个内存库可以有“m”个固态存储元件216a-m,218a-m,220a-m,从而在固态存储器110中成为固态存储元件216、218、220的n*m阵列。在一种实施方式中,固态存储器110a在每个内存库214(有8个内存库214)中包括20个固态存储元件216、218、220,并且,固态存储器110n在每个内存库214中(只有一个内存库214)包括两个固态存储元件216、218。在一种实施方式中,每个固态存储元件216、218、220由单层单元(“SLC”)设备组成。在另一种实施方式中,每个固态存储元件216、218、220由多层单元(“MLC”)设备组成。
在一种实施方式中,用于多个内存库的固态存储元件被封包在一起,所述多个内存库共享公用存储I/O总线210a行(如216b、218b、220b)。在一种实施方式中,固态存储元件216、218、220的每个芯片可具有一个或多个小片,而一个或多个芯片垂直堆叠且每个小片可被独立存取。在另一种实施方式中,固态存储元件(如SSS 0.0 216a)的每个小片可具有一个或多个虚拟小片,每个芯片可具有一个或多个小片,而一个或多个小片中的一些或全部垂直堆叠且每个虚拟小片可被独立存取。
在一种实施方式中,每组有四个堆,每堆有两个小片垂直堆叠,从而形成8个存储元件(如SSS 0.0-SSS 0.8)216a-220a,每个存储元件位于分离的内存库214a-n内。在另一种实施方式中,20个存储元件(如SSS 0.0-SSS 20.0)216形成虚拟内存库214a,因此八个虚拟内存库中的每一个都具有20个存储元件(如SSS0.0-SSS20.8)216、218、220。通过存储I/O总线210将数据发送到固态存储器110,并发送到存储元件(SSS 0.0-SSS 0.8)216a、218a、220a的特定组的所有存储元件。存储控制总线212a用于选择特定的内存库(如内存库-0 214a),从而通过连接到所有内存库214的存储I/O总线210接收到的数据仅被写入选定的内存库214a。
在优选实施方式中,存储I/O总线210由一个或多个独立I/O总线(包括210a.a-m,210n.a-m的“IIOBa-m”)组成,其中,每一行内的固态存储元件共享独立I/O总线中的一条,所述独立I/O总线中的一条平行访问每个固态存储元件216、218、220,从而使得同时访问所有的内存库214。例如,存储I/O总线210的一个通道可同时访问每个内存库214a-n的第一固态存储元件216a、218a、220a。存储I/O总线210的第二通道可同时访问每个内存库214a-n的第二固态存储元件216b、218b、220b。固态存储元件216、218、220的每一行都被同时访问。在一种实施方式中,其中,固态存储元件216、218、220是多层的(物理堆叠的),固态存储元件216、218、220的所有物理层被同时访问。正如此处所使用的,“同时”还包括几乎同时的访问,其中,以略有不同的时间间隔访问设备以避免切换噪声。在这种情况下,同时被用于与连续的或系列的访问相区别,其中,命令和/或数据被单独地并相继地发送。
通常,采用存储控制总线212独立地选择内存库214a-n。在一种实施方式中,采用芯片选通或芯片选择来选择内存库214。当芯片选择和芯片使能均可用时,存储控制总线212可选择多层固态存储元件216、218、220中的一层。在其他实施方式中,存储控制总线212使用其他命令来单独地选择多层固态存储元件216、218、220中的一层。还可通过控制和地址信息的结合来选择固态存储元件216、218、220,所述控制和地址信息在存储I/O总线210和存储控制总线212上传输。
在一种实施方式中,每个固态存储元件216、218、220被分割成擦除块,并且每个擦除块被分割成页。典型的页的容量为2000字节(“2kB”)。在一个实例中,固态存储元件(如SSS 0.0)包括两个寄存器并能编程为两页,从而双寄存器固态存储元件216、218、220具有4kB的容量。20个固态存储元件216、218、220的内存库214就会有80kB的页访问容量,同时同一地址流出存储I/O总线210的通道。
在固态存储元件216、218、220的内存库214中的这一组80kB大小的页可称为虚拟页。类似地,内存库214a的每个存储元件216a-m的擦除块可被分组以形成虚拟块。在优选实施方式中,当在固态存储元件216、218、220中接收到擦除命令时,擦除位于固态存储元件216、218、220内的页擦除块。然而,在固态存储元件216、218、220内的擦除块、页、平面层或其他逻辑和物理部分的大小和数量预计会随着技术的进步而变化,可以预期的是,与新配置一致的许多实施例是可能的并与本文的一般描述相一致。
通常,当将包写入固态存储元件216、218、220内的特定位置时,其中,拟将所述包写入特定页内的位置,所述特定页对应于特定内存库的特定元件的特定擦除块的页,在发送所述包之后通过存储I/O总线210发送物理地址。所述物理地址包含足够的信息,以使得固态存储元件216、218、220将所述包导入页内的指定位置。由于存储元件行(如SSS 0.0-SSS 0.N 216a、218a、220a)上的存储元件通过存储I/O总线210a.a内的合适总线同时被访问,为了到达合适的页并将所述数据包写入在存储元件行(SSS 0.0-SSS 0.N 216a、218a、220a)中具有相似地址的页,存储控制总线212同时选择内存库214a(包括具有要将所述数据包写入其内的正确页的固态存储元件SSS 0.0 216a)。
类似地,在存储I/O总线210上传输的读命令需要同时在存储控制总线212上传输的命令,以选择单个的内存库214a和内存库214内的合适页。在优选实施方式中,读命令读取整个页,并且由于在内存库214内存在许多并行的固态存储元件216、218、220,读命令读取整个虚拟页。然而,所述读命令可分割为子命令,这将在下文中结合内存库交错进行解释。还可以在写操作中访问虚拟页。
可通过存储I/O总线210发出的擦除块擦除命令以擦除擦除块,该擦除块具有特定的擦除块地址以擦除特定的擦除块。通常,可通过存储I/O总线210的并行通路发送擦除块擦除命令以擦除虚拟擦除块,每个虚拟擦除块具有特定的擦除块地址以擦除特定的擦除块。同时,通过存储控制总线212选择特定的内存库(如内存库-0 214a)以防止擦除所有的内存库(内存库1-N 214b-n)中的具有类似地址的擦除块。还可采用存储I/O总线210和存储控制总线212的结合将其他命令发送到特定位置。本领域技术人员会认识到采用双向存储I/O总线210和存储控制总线212选择特定存储单元的其他方法。
在一种实施方式中,将包顺序地写入固态存储器110。例如,包流到存储元件216的内存库214a的存储写入缓冲器,并且当所述缓冲器饱和时,所述包被编程入指定的虚拟页。然后所述包再次填充所述存储写入缓冲器,并且当所述存储缓冲器再次饱和时,所述包被写入下一虚拟页。所述下一个虚拟页可位于同一个内存库214a内或可位于另一个内存库(如214b)内。这个过程(一个虚拟页接一个虚拟页)通常一直持续到虚拟块被填满时。在另一种实施方式中,当这个过程(一个虚拟擦除块接一个虚拟擦除块)持续时,数据流可继续越过虚拟擦除块边界。
在读、修改、写操作中,在读操作中定位并读取与所述对象关联的数据包。已被修改的修改对象的数据段并不写入读取它们的位置。取而代之,修改的数据段再次被转化为数据包并随后被写入正在被写入的虚拟页中的下一个可用位置。各个数据包的所述对象索引项被修改为指向包含已修改的数据段的包。所述对象索引中用于与同一对象(未被修改)关联的数据包的项(或多个项)会包括指向未被修改的数据包的源位置的指针。因此,如果源对象保持不变(例如保持所述对象的先前版本不变),所述源对象将在所述对象索引中具有指向所有与最初写入的一样的数据包的指针。新对象将在所述对象索引中具有指向一些源数据包的指针和指向正在被写入的虚拟页中的修改的数据包的指针。
在复制操作中,所述对象索引包括用于源对象的项,该源对象映射到若干存储在固态存储器110中的包。当复制完拷贝时,创建了新对象并在所述对象索引中创建将所述新对象映射到源包的新项。还将所述新对象写入固态存储器110,且所述新对象的地址映射到所述对象索引中的新项。新对象包可用于确定在源对象中的包,该包被引用以防在未复制的源对象中发生改变并以防对象索引丢失或损坏。
有利地是,顺序地写入包有助于更平滑地使用固态存储器110并允许固态存储设备控制器202监测固态存储器110内的存储热点和不同虚拟页的层使用状况。相继地写入包还可有助于建立强大、高效的垃圾收集系统,这将在下文中详细描述。本领域技术人员会认识到顺序地存储数据包的其他好处。
固态存储设备控制器
在不同的实施方式中,固态存储设备控制器202还可包括数据总线204、局部总线206、缓冲控制器208、缓冲器0-N 222a-n,主控制器224、直接存储器存取(“DMA”)控制器226、存储器控制器228、动态存储器阵列230、静态随机存储器阵列232、管理控制器234、管理总线236、连接系统总线240的网桥238和杂项逻辑块242,这些将在下文中描述。在其他实施方式中,系统总线240与一个或多个网络接口卡(“NIC”)244相连接,这些网络接口卡中的一些可包括远程DMA(“RDMA”)控制器246、一个或多个中央处理器(“CPU”)248、一个或多个外部存储器控制器250和关联的外部存储器阵列252、一个或多个存储控制器254、对等控制器256和专用处理器258,这将在下文描述。连接到系统总线240的组件244-258可位于计算内112内或者可以为其他设备。
通常,固态存储控制器104通过存储I/O总线210与固态存储器110进行数据通信。在典型的实施方式中,固态存储器布置在内存库214内,且每个内存库214包括多个并行访问的存储元件216、218、220,存储I/O总线210是多条总线的阵列,每一条总线用于内存库214内的存储元件216、218、220的每一行。正如此处所使用的,术语“存储I/O总线”可指一条存储I/O总线210或多条独立的数据总线204的阵列。在优选实施方式中,访问存储元件的行(如216、218a、220a)的每条存储I/O总线210可包括在存储元件216、218a、220a的行中访问的存储部(如擦除块)的逻辑-物理映射。如果第一存储部失效、部分失效、不可访问或出现一些其他问题时,这种映射允许映射到存储部的物理地址的逻辑地址重映射到不同的存储部。相对于图3中重映射模块314进一步解释了重映射。
还可通过系统总线240、网桥238、局部总线206、缓冲器22并最终通过数据总线204将数据从请求设备155传送到固态存储控制器104。数据总线204通常连接到一个或多个由缓冲控制器208控制的缓冲器222a-n。缓冲控制器208通常控制数据从局部总线206传递到缓冲器222并通过数据总线204传递到管道输入缓冲器306和输出缓冲器330。为了解决时钟域差异、防止数据冲突等等,缓冲控制器208通常控制在缓冲器222中暂时存储来自请求设备的数据的方式,并控制此后传送给数据总线204(或相反)的方式。缓冲控制器208通常与主控制器224结合使用以协调数据流。当数据到达时,所述数据会到达系统总线240并通过网桥238传递给局部总线206.
通常,数据在主控制器224和缓冲控制器208的控制下从局部总线206传递给一个或多个数据缓冲器222。然后,所述数据通过固态控制器104从缓冲器222流向数据总线204并到达固态存储器110(如NAND闪存或其他存储媒体)。在优选实施方式中,数据与与所述数据一起到达的关联的带外元数据(“对象元数据”)采用一个或多个的数据通道被送达,所述数据通道包括一个或多个固态存储控制器104a-104n-1和关联的固态存储器110a-110n-1,而至少一个通道(固态存储控制器104n、固态存储器110n)用于带内元数据(如索引信息和其他固态存储设备102内部生成的元数据)。
局部总线206通常为双向总线或总线组,所述双向总线或总线组允许数据和命令在固态存储设备控制器202内部的设备间通信,也允许命令和数据在固态存储设备102内部的设备和与系统总线240连接的设备244-258之间通信。网桥238有助于在局部总线206和系统总线240之间的通信。本领域技术人员会认识到其他实施方式,如总线240、206、204、210和网桥238的环结构或交换式星形配置和功能。
系统总线240通常是计算机、安装有或连接有固态存储设备102的其他设备的总线。在一种实施方式中,系统总线240可以为PCI-e总线、串行高级技术附件(“串行ATA”)总线、并行ATA或类似总线。在另一种实施方式中,系统总线240为外部总线,例如小型计算机系统接口(“SCSI”)、防火墙、光纤通道、USB、PCIe-As或类似总线。固态存储设备102可被封装为适于置于设备内部或被封装为外部连接设备。
固态存储设备控制器202包括在固态存储设备102内控制较高级别功能的主控制器224。在不同的实施方式中,主控制器224通过解释对象请求和其他请求来控制数据流,指导创建索引,该索引将与数据关联的对象标识符映射到关联的数据(或协调的DMA请求等)的物理地址。主控制器224完全地或部分地控制此处描述的许多功能。
在一种实施方式中,主控制器224采用嵌入式控制器。在另一种实施方式中,主控制器224采用局部存储器,如动态存储器阵列230(动态随机存取存储器“DRAM”)、静态存储器阵列323(静态随机存取存储器“SRAM”)等。在一种实施方式中,采用主控制器224控制局部存储器。在另一实施方式中,主控制器通过存储器控制器228访问局部存储器。在另一种实施方式中,所述主控制器运行Linux服务器并可支持各种常用服务器接口,如万维网、超文本标记语言(“HTML”)等。在另一种实施方式中,主控制器224采用纳米处理器。可采用可编程或标准逻辑或上述控制器类型的任意组合来构建主控制器224。本领域技术人员会认识到主控制器的许多实施方式。
在一种实施方式中,其中,存储设备152/固态存储设备控制器202管理多个数据存储设备/固态存储器110a-n,主控制器224在内部控制器(如固态存储控制器104a-n)之间分配工作负载。例如,主控制器224可分割将要被写入数据存储设备(如固态存储器110a-n)中的对象,使得每个附属的数据存储设备存储所述对象的一部分。这种特征是允许更快地存储和访问对象的性能增强。在一种实施方式中,主控制器224利用FPGA实施。在另一种实施方式中,位于主控制器224内的固件可通过管理总线236、通过网络连接到NIC244的系统总线240或其他连接到系统总线240的设备更新。
在一种实施方式中,管理对象的主控制器224仿真块存储,从而使得计算机102或其他连接到存储设备152/固态存储设备102的设备将存储设备152/固态存储设备102视为块存储设备并将数据发送给存储设备152/固态存储设备120中的特定物理地址。然后,主控制器224分配块并像存储对象一样存储数据块。然后,主控制器224将块和与块一起发送的物理地址映射到由主控制器224确定的实际位置。映射存储在对象索引中。通常,对于块仿真来说在计算机112、客户端114或其他希望将存储设备152/固态存储设备102当成块存储设备来使用的设备中提供有块设备应用程序接口(“API”)。
在另一种实施方式中,主控制器224与NIC控制器244和嵌入式RDMA控制器246协同运行以提供准时的RDMA数据和命令集传输。NIC控制器244可隐藏在非透明端口后以使得能够使用自定义的驱动器。同样地,客户端114上的驱动器可通过采用标准栈API的并与NIC244结合运行的I/O存储驱动器访问计算机网络118。
在一种实施方式中,主控制器224也是独立驱动器冗余阵列(“RAID”)控制器。当数据存储设备/固态存储设备120与一个或多个其他数据存储设备/固态存储设备120联网时,主控制器224可以是用于单层RAID、多层RAID、渐进式RAID等的RAID控制器。主控制器224还允许一些对象存储在RAID阵列内而其他对象不通过RAID存储。在另一种实施方式中,主控制器224可以是分布式RAID控制器元件。在另一种实施方式中,主控制器224可包括许多RAID、分布式RAID和另行描述的其他功能。
在一种实施方式中,主控制器224与单个或多个网络管理器(如交换机)协同运行以建立路由、平衡带宽使用率、故障转移等。在另一种实施方式中,主控制器224与集成专用逻辑器件(通过局部总线206)和关联的驱动器软件协同运行。在另一种实施方式中,主控制器224与附属专用处理器258或逻辑器件(通过外部系统总线240)和关联的驱动器软件协同运行。在另一种实施方式中,主控制器224与远程专用逻辑器件(通过计算机网络118)和关联的驱动器软件协同运行。在另一种实施方式中,主控制器224与局部总线206或附属于硬盘驱动器(“HDD”)存储控制器的外部总线协同运行。
在一种实施方式中,主控制器224与一个或多个存储控制器254通信,其中存储设备/固态存储设备120可表现为通过SCSI总线、因特网SCSI(“iSCSI”)、光纤通道等连接的存储设备。同时,存储设备/固态存储设备120可自主地管理对象并可表现为对象文件系统或分布式对象文件系统。还可通过对等控制器256和/或专用处理器258访问主控制器224。
在另一种实施方式中,主控制器224与自主集成管理控制器协同运行以周期性地验证FPGA码和/或控制器软件、在运行(复位)时验证FPGA码和/或在通电(复位)期间验证控制器软件、支持外部复位请求、支持由于检查包而超时的复位请求,并支持电压、电流、功率、温度及其他环境测量和阈值中断设置。在另一种实施方式中,主控制器224管理垃圾收集以释放擦除块用于再次使用。在另一种实施方式中,主控制器224管理耗损均衡。在另一种实施方式中,主控制器224允许数据存储设备/固态存储设备102被分割成多个虚拟设备并允许基于分区的媒体加密。在又一种实施方式中,主控制器224支持具有高级的、多位的ECC修正的固态存储控制器104。本领域技术人员会认识到位于存储控制器152内(或更具体地说位于固态存储设备102内)的主控制器224的其他特征和功能。
在一种实施方式中,固态存储设备控制器202包括存储器控制器228,该存储器控制器228控制动态随机存储器阵列230和/或静态随机存储器阵列232。如上所述,存储器控制器228可独立于主控制器224使用或与主控制器224集成使用。存储器控制器228通常控制验证一些存储器类型,如DRAM(动态随机存储器阵列230)和SRAM(静态随机存储器阵列232)。在其他实例中,存储器控制器228还控制其他存储器类型,如电可擦可编程序只读存储器(“EEPROM”)等。在其他实施方式中,存储器控制器228控制两种或更多种存储器类型且存储器控制器228可包括不止一个控制器。通常,存储器控制器228在可行情况下控制尽可能多的SRAM232,并且通过DRAM230补足SRAM232。
在一种实施方式中,所述对象索引存储在存储器230、232中并周期性的被卸载到固态存储器110n或其他非易失性存储器的通道内。本领域技术人员会认识到存储器控制器228、动态存储器阵列230、静态存储器阵列232的其他运用和配置。
在一种实施方式中,固态存储设备控制器202包括DMA控制器226,该DMA控制器226控制在下列设备之间的DMA操作:存储设备/固态存储设备102、一个或多个外部存储器控制器250、关联的外部存储器阵列252和CPU248。应该注意到,外部存储器控制器250和外部存储器阵列252之所以被称为外部是因为它们位于存储设备/固态存储设备102的外部。此外,DMA控制器226还可通过NIC244和关联的RDMA控制器246控制请求设备的RDMA操作。DMA和RDMA在下文中有详细说明。
在一种实施方式中,固态存储设备控制器202包括连接到管理总线236的管理控制器234。通常管理控制器234管理存储设备/固态存储设备102的环境指标和状态。管理控制器234可通过管理总线236监测设备温度、风扇转速、电力供应设置等。管理控制器可支持电可擦可编程序只读存储器(“EEPROM”)以存储FPGA码和控制器软件。通常,管理总线236连接到存储设备/固态存储设备102内的不同组件。管理控制器234可通过局部总线206进行警报、中断等的通信或可包括单独的到系统总线240或其他总线的连接。在一种实施方式中,管理总线236为内部集成电路(“I2C”)总线。本领域技术人员会认识到通过管理总线236连接到存储设备/固态存储设备102的组件的管理控制器234的其他功能和运用。
在一种实施方式中,固态存储设备控制器202包括杂项逻辑块242,该杂项逻辑块242可被定制为专用。通常,当固态设备控制器202或主控制器224被配置为使用FPGA或其他可配置控制器时,可基于特定应用、用户需求、存储需求等而包括定制逻辑。
数据管道
图3是示出了根据本发明的位于固态存储设备102内的固态存储设备控制器104的一种实施方式300的示意性框图,该固态存储设备控制器具有写入数据管道106和读取数据管道108。实施方式300包括数据总线204、局部总线206和缓冲控制器208,这些设备大体上类似于相对于图2中固态存储设备控制器202描述的设备。所述写入数据管道包括封包器302和纠错码(“ECC”)发生器304。在其他实施方式中,所述写入数据管道包括输入缓冲器306、写入同步缓冲器308、写入程序模块310、压缩模块312、加密模块314、垃圾收集器旁路316(部分位于所述读取数据管道内)、媒体加密模块318和写入缓冲器320。读取数据管道108包括读取同步缓冲器328、ECC纠错模块322、解包器324、对齐模块326和输出缓冲器330。在另一种实施方式中,读取数据管道108可包括媒体解密模块332、垃圾收集器旁路316的一部分、解密模块334、解压缩模块336和读取程序模块338。固态存储控制器104还可包括控制与状态寄存器340和控制队列342、内存库交错控制器344、同步缓冲器346、存储总线控制器348及多路转换器(“MUX”)350。固态控制器104的组件和关联的写入数据管道106和读取数据管道108描述如下。在其他实施方式中,可采用同步固态存储器110并且可不使用同步缓冲器308、328。
写入数据管道
写入数据管道106包括封包器302,该封包器直接地或间接地通过另一写入数据管道106的级接收将要被写入固态存储器的数据或元数据段,并创建一个或多个大小适于固态存储器110的包。所述数据或元数据段通常是对象的一部分,但也可包括整个对象。在另一种实施方式中,所述数据段是数据块的一部分,但也可包括整个数据块。通常,对象接收自计算机112、客户端114或其他计算机或设备并被以流向固态存储设备102或计算机112的数据段的形式传送给固态存储设备102。数据段也可被称为另一名称(如数据包裹),本文所提及的数据段包括对象或数据块的全部或一部分。
每个对象被存为一个或多个包。每个对象可具有一个或多个容器包。每个包包含包头。所述包头可包括包头类型字段。类型字段可包括数据、对象属性、元数据、数据段定界符(多包)、对象结构、对象连接及类似物。所述包头还可包括关于包的大小的信息(如包内的数据的字节数)。所述包的长度可由包类型确实。一个实例可能是利用数据包包头的偏移值来确定对象内数据段的位置。本领域技术人员会认识到其他包含在由封包器302添加到数据上的包头内的信息和其他添加到数据包的信息。
每个包包括包头,还可能包括来自所述数据和元数据段的数据。每个包的包头包括用于将包与包所属对象联系起来的相关信息。例如,所述包头可包括对象标识符和偏移值,该偏移值表明了用于数据包形成的数据段、对象或数据块。所述包头还可包括存储总线控制器348用以存储包的逻辑地址。所述包头还可包括关于包的大小的信息(如包内字节数)。所述包头还可包括序列号,当生建数据段或对象时,该序列号识别数据段相对于对象内的其他包所属的位置。所述包头可包括包头类型字段。类型字段可包括数据、对象属性、元数据、数据段定界符(多包)、对象结构、对象连接及类似物。本领域技术人员会认识到其他包含在由封包器302加到数据上的包头内的信息和其他添加到数据包的信息。
写入数据管道106包括ECC发生器304,该ECC发生器为一个或多个接收自封包器302的包生成一个或多个纠错码(“ECC”)。ECC发生器304通常采用纠错算法生成ECC,该ECC与包一起存储。与包一起存储的ECC通常用于探测和纠正由于传送和存储而引起的错误。在一种实施方式中,包作为长度为N的未编码块流入ECC发生器304。计算并添加长度为S的并发位,并作为长度为N+S的编码块输出。N和S的值依赖于算法的特点,该算法被选择用于实现特定的性能、效率和鲁棒性指标。在优选实施方式中,在ECC块和包之间并没有固定关系;包可包括不止一个ECC块;ECC块可包括不止一个包;且第一包可在ECC块内的任何位置终止而第二包可始于同一ECC块内的第一包终止的位置。在优选实施方式中,ECC算法不能被动态修改。在优选实施方式中,与数据包一起存储的ECC足够稳健以在两个以上的位内纠正错误。
有利地是,采用允许不止一位的修正或甚至是两位修正的稳健ECC算法允许延长固态存储器110的使用寿命。例如,如果固态存储器110内使用闪存作为存储媒体,闪存在每个擦除周期内可被写入大约100000次不出现错误。这种使用期限可通过稳健ECC算法延长。固态存储设备102板载有ECC发生器304和相应的ECC纠错模块322,固态存储设备102可在其内部纠正错误并具有比采用不甚稳健的ECC算法(如单位错误修正)更长的使用寿命。然而,在其他实施方式中,ECC发生器304可采用不甚稳健的算法并可修正单位或双位错误。在另一种实施方式中,固态存储设备110可包括不甚可靠的存储器以增加容量,所述不甚可靠的存储器例如多级单元(“MLC”)闪存,所述不甚可靠的存储器在没有稳健ECC算法的情况下可以不充分可靠。
在一种实施方式中,写入数据管道包括输入缓冲器306,该输入缓冲器接收将要被写入固态存储器110的数据段并存储输入的数据段直到写入数据管道106的下一级,例如封包器302(或其他更复杂写入数据管道106的其他级)准备处理下一个数据段。通过使用适当容量的数据缓冲器,输入缓冲器306通常允许写入数据管道106接收和处理数据段之间存在速率差异。输入缓冲器306还允许数据总线204将数据传送给写入数据管道106的速率大于写入数据管道106能支持的速率,从而改进数据总线204运行的效率。通常,当写入数据管道106不包括输入缓冲器306时,缓冲功能在别处(如固态存储设备102)实现,但所述别处位于写入数据管道106外、位于计算机内,例如当使用远程直接存储器读取(“RMDA”)时,如在网络接口卡(“NIC”)内或其他设备上。
在另一种实施方式中,写入数据管道106还包括写入同步缓冲器308,该写入同步缓冲器308在将包写入固态存储器110之前缓冲接收自ECC发生器304的包。写入同步缓冲器308位于本地时钟域和固态存储时钟域之间的边界上,并且提供缓冲以解决时钟域差异。在其他实施方式中,可采用同步固态存储器110而移除同步缓冲器308、328。
在一种实施方式中,写入数据管道106还包括媒体加密模块318,该媒体加密模块318直接地或间接地从封包器302接收一个或多个包,并在将包发送给ECC发生器304之前利用对固态存储设备102唯一的加密密钥加密所述一个或多个包。通常,整个包(包括包头)都被加密。在另一种实施方式中,并不加密包头。在本文中,在一种实施方式中,加密密钥被理解为意味着在外部管理的秘密加密密钥,这种密钥将固态存储器110和需要加密保护的设备集成在一起。媒体加密模块318和相应的媒体解密模块332为存储在固态存储器110中数据提供安全等级。例如,当数据利用媒体加密模块加密时,如果固态存储器110连接到不同的固态存储控制器104、固态存储设备102或计算机112,通常,在不使用同一加密密钥(在将数据写入固态存储器110期间使用)时,如果不经过合理的努力,则不能读取固态存储器110的内容。
在典型的实施方式中,固态存储设备102不将所述加密密钥存储在非易失性存储器中并且不允许从外部访问所述加密密钥。在初始化期间为固态存储控制器104提供加密密钥。固态存储设备102可使用并存储非秘密性加密临时值,该非秘密性加密临时值与加密密钥结合使用。不同的临时值可与每个包一起存储。为了加强保护,加密算法可利用唯一临时值在多个包之间分割数据段。所述加密密钥可接收自客户端114、计算机112、密钥管理器或其他管理固态存储控制器104使用的加密密钥的设备。在另一种实施方式中,固态存储器110可具有两个或更多个分区,并且固态存储控制器104显得就像有两个或更多个固态存储控制器104,每一个固态存储控制器104在固态存储器110内的单个分区上运行。在这种实施方式中,唯一的媒体加密密钥可与每个分区一起使用。
在另一种实施方式中,写入数据管道106还包括加密模块314,该加密模块314在将数据段发送给封包器302之前直接地或间接地加密接收自输入缓冲器306的数据或元数据段,利用与数据段一同接收的加密密钥来加密数据段。加密模块314与媒体加密模块318不同,这是由于:加密模块318用以加密数据的加密密钥对存储在固态存储设备102内的数据来说不是共同的并在对象基础上可能不同,并且加密密钥可不与数据段一起接收(如下所述)。例如,加密模块318用以加密数据段的加密密钥可与数据段一起被接收或可作为将对象写入数据段所属位置的命令的一部分被接收。固态存储设备102可在每个与加密密钥结合使用的对象包中使用并存储非秘密性加密临时值。不同的临时值可与每个包一起存储。为了通过加密算法加强保护,可利用唯一临时值在多个包之间分割数据段。在一种实施方式中,媒体加密模块318使用的临时值与加密模块314使用的临时值相同。
加密密钥可接收自客户端114、计算机112、密钥管理器或其他保存用于加密数据段的加密密钥的设备。在一种实施方式中,加密密钥被从固态存储设备102、计算机112、客户端114或其他外部代理中的一个传送到固态存储控制器104,所述外部代理能够执行工业标准方法以安全地传送并保护私有密钥和公共密钥。
在一种实施方式中,加密模块318利用与第一包一起接收的第一加密密钥加密第一包,并利用与第二包一起接收的第二加密密钥加密第二包。在另一种实施方式中,加密模块318利用与第一包一起接收的第一加密密钥加密第一包,而将第二数据包传递给下一级(未经加密)。有利地是,包括在固态存储设备102的写入数据管道106内的加密模块318允许对象接对象或段接段的数据加密,而不需要单独的文件系统或其他外部系统来追踪不同的用于存储相应对象或数据段的加密密钥。每个请求设备155或相关密钥管理器独立地管理加密密钥,该加密密钥仅用于加密请求设备155发送的对象或数据段。
在另一种实施方式中,写入数据管道106包括压缩模块312,该压缩模块312在将数据段发送给封包器302之前为元数据段压缩数据。压缩模块312通常利用本领域技术人员熟知的压缩程序来压缩数据或元数据段以减少段占用的的存储空间大小。例如,如果数据段包括一串512个0位,压缩模块312可用表明512个0位的编码或令牌来替换这512个0位,其中,所述编码所占的空间比512个0位所占的空间要小得多。
在一种实施方式中,压缩模块312利用第一压缩程序压缩第一段,而输送第二段(未经压缩)。在另一种实施方式中,压缩模块312利用第一压缩程序压缩第一段并利用第二压缩程序压缩第二段。在固态存储设备102内具有这种灵活性是有利的,以便客户端或其他将数据写入固态存储设备102内的设备中每一个都可指定压缩程序或以便一个设备指定压缩程序而另一个设备指定无压缩。还可根据每个对象类型或对象类基础的默认设置来选择压缩程序。例如,特定对象的第一对象可以能够废除默认压缩程序设置,同一对象类和对象类型的第二对象可采用默认压缩程序,而同一对象类和对象类型的第三对象可不压缩。
在一种实施方式中,写入数据管道106包括垃圾收集器旁路316,该垃圾收集器旁路316接收来自读取数据管道的108(在垃圾收集系统中作为数据旁路的一部分)的数据段。垃圾收集系统通常标记不再有效的包,不再有效的原因通常是由于包被标记为删除或包已被修改且修改过的数据存储在不同的位置。在某一时刻,垃圾收集系统确定存储器的某个区域可被恢复。之所以确定某个区域可被恢复可能是由于:缺乏可用的存储空间、标记为无效的的数据百分比达到阈值、有效数据的合并、存储器的该区域错误检出率达到阈值或基于数据分布提高性能等。垃圾收集算法可考虑大量的因素以确定何时存储器的区域将要被恢复。
一旦存储器的区域被标记为恢复,该区域内的有效包通常必须被重新存放。垃圾收集器旁路316允许将包读入读取数据管道108,并允许然后将包直接传送给写入数据管道106而不会将包路由出固态存储控制器104。在优选实施方式中,垃圾收集器旁路316是运行在固态存储设备102内的自主垃圾收集系统的一部分。这允许固态存储设备102管理数据,从而数据系统地传播到整个固态存储器110以提升性能、数据可靠性并避免过度使用和不充分使用固态存储器110的任何一个位置或区域,并且延长了固态存储器110的使用寿命。
垃圾收集器旁路316协调将数据段插入写入数据管道106而其他数据段由客户端116或其他设备写入。在描述的实施方式中,垃圾收集器旁路316位于写入数据管道106内的封包器302之前、读取数据管道内的解包器314之后,但也可位于写入和读取数据管道106、108内的其他位置。可在清洗写入数据管道106期间使用垃圾收集器旁路316,以填充虚拟页的剩余部分,从而提升固态存储器110内的存储效率并因此减少垃圾收集的频率。
在一种实施方式中,写入数据管道106包括写入缓冲器320,该写入缓冲器320为了高效的写操作而缓冲数据。通常,写入缓冲器320包括用于包的足够容量,以填充固态存储器110内的至少一个虚拟页。这允许写操作将数据的整个页没有中断地发送给固态存储器110。通过选择写入数据管道106的写入缓冲器320的容量并将读取数据管道108内的缓冲器的容量选为同样大小容量或比固态存储器110内存储写入缓冲器的容量大,由于单个写入命令可被设计为将数据的整个虚拟页发送给固态存储器110,从而以单条命令替代多条命令,写入和读取数据的效率更高。
当填充写入缓冲器320时,固态存储器110可用于其他读操作。这是有利的,原因是:当将数据写入存储写入缓冲器时和注入数据缓冲器的数据失速时,具有更小容量的写入缓冲器的或不具有写入缓冲器的其他固态设备可绑定固态存储器。读操作会被拦截直到整个存储写入缓冲器被填充或被编程。用于不具写入缓冲器或具有小容量的写入缓冲器的系统的另一种方法是清洗未满的存储写入缓冲器以使得能进行读操作。同样地,由于需要多写入/编程周期来填充页,因此这种方法的效率低下。
对于描述的具有容量比虚拟页容量大的写入缓冲器320的实施方式,单个的写入命令(包括大量子命令)的后续命令可以是单个程序命令,以将来自每个固态存储元件216、218、220中的存储写入缓冲器的数据页传递给每个固态存储元件216、218、220中的指定页。这种技术带来的好处是:减少了部分页编程,众所周知,这降低了数据的可靠性和稳定性并在当缓冲器填充时,为读命令和其他命令释放了目标内存库。
在一种实施方式中,写入缓冲器320为交替缓冲器,其中,所述交替缓冲器的一侧被填充,然后当所述交替缓冲器的另一侧被填充时,所述交替缓冲器的一侧被指定为在适当的时间传送数据。在另一种实施方式中,写入缓冲器320包括先进先出(“FIFO”)寄存器,该FIFO寄存器的容量比数据段虚拟页的容量大。本领域技术人员会认识到允许在将数据写入固态存储器110之前存储数据虚拟页的其他写入缓冲器320配置。
在另一种实施方式中,写入缓冲器320的容量比虚拟页小,从而少于一页的信息可被写入固态存储器110内的存储写入缓冲器。在这种实施方式中,为了防止写入数据管道106的失速阻止读操作,采用需要从一个位置移动到另一个位置的垃圾收集系统将数据排队,这个过程是垃圾收集进程的一部分。为了防止写入数据管道106中的数据失速,可通过垃圾收集器旁路316将所述数据供应给写入缓冲器320并然后将所述数据供应给固态存储器110中的存储写入缓冲器,从而在编程所述数据之前填充虚拟页的页面。这样,写入数据管道106中的数据失速不会使读取自固态存储设备102的数据失速。
在另一种实施方式中,写入数据管道106包括写入程序模块310,该写入程序模块310具有写入数据管道106内的一个或多个用户可定义的功能。写入程序模块310允许用户自定义写入数据管道106。用户可基于特定数据请求或应用自定义写入数据管道106。当固态存储控制器104为FPGA时,用户可相对轻松地编程具有自定义命令和功能的写入数据管道106。用户还可利用写入程序模块310以使ASIC包括自定义功能,然而自定义ASIC可能比使用FPGA时更困难。写入程序模块310可包括缓冲器和旁路机制,以允许第一数据段在写入程序模块310中执行,而第二数据段通过写入数据管道106可继续传送。在另一种实施方式中,写入程序模块310可包括能通过软件编程的处理器内核。
应注意,写入程序模块310被示为位于输入缓冲器306和压缩模块312之间,然而写入程序模块310可位于写入数据管道106内的任何位置,并且可分布在不同的级302-320之间。此外,在不同的、已编程的且独立运行的级302-320之间可分布有多个写入程序模块310。此外,级302-320的顺序可以改变。本领域技术人员会认识到基于特定用户需求的级302-320的顺序的可行改变。
读取数据管道
读取数据管道108包括ECC纠错模块322,该ECC纠错模块322通过使用与请求包中的每个ECC块一起存储的ECC来确定接收自固态存储器110的请求包的ECC块中是否存在错误。然后,如果存在任何错误并且所述错误可使用ECC修正,则ECC纠错模块322修正请求包中的任何错误。例如,如果ECC能够探测6位的错误但只能修正3位的错误,那么ECC纠错模块322修正具有3位错误的请求包ECC块。ECC纠错模块322通过把出错的位改变为正确的1或0状态来修正出错的位,从而请求数据包与其被写入固态存储器110并且为包生成ECC时一致。
如果ECC纠错模块322确定请求包包含了比ECC能修正的位数多的出错位,则ECC纠错模块322不能修正请求包毁坏的ECC块的错误并发送中断。在一种实施方式中,ECC纠错模块322发送中断以及指示请求包出错的消息。所述消息可包括指出ECC纠错模块322不能修正错误或ECC纠错模块322没有能力修正错误的信息。在另一种实施方式中,ECC纠错模块322与所述中断和/或消息一起发送请求包中毁坏的ECC块。
在优选的实施方式中,请求包中毁坏的ECC块或毁坏的ECC块的一部分(不能被ECC纠错模块322修正)由主控制器224读取,并被修正和返回给ECC纠错模块322以被读取数据管道108进一步处理。在一种实施方式中,请求包中毁坏的ECC块或毁坏的ECC块的一部分被发送给请求数据的设备。请求设备155可修正所述ECC块或用另一拷贝替换数据(如备份或镜像拷贝),然后可使用请求数据包的替换的数据或将所述替换的数据返回给读取数据管道108。请求设备155可使用出错请求包中的包头信息以识别替换毁坏请求包或替换包所属的对象所需的数据。在另一种优选实施方式中,固态存储控制器104采用一些类型的RAID存储数据并能够恢复毁坏的数据。在另一种实施方式中,ECC纠错模块322发送中断和/或消息,并且接收设备停止与请求数据包关联的读操作。本领域技术人员会认识到ECC纠错模块322确定请求包的一个或多个ECC块为毁坏的且ECC纠错模块322不能修正错误后采取的其他选择和操作。
读取数据管道108包括解包器324,该解包器324直接地或间接地接收来自ECC修正模块322的请求包ECC块,并检查和删除一个或多个包头。解包器324可通过检查包头内的包标识符、数据长度、数据位置等验证包头。在一种实施方式中,所述包头包括散列码,该散列码可用于验证传递给读取数据管道108的包为请求包。解包器324还从请求包中删除由封包器302添加的包头。解包器324可被指定为不对某些包起作用而将这些包未经修改地向前传送。一个实例可以是容器标签,当对象索引重建模块272需要包头信息时,该容器标签在重建进程期间被请求。另外的实例包括传送不同类型的包(预定在固态存储设备102内使用)。在另一种实施方式中,解包器324操作可以依赖于包的类型。
读取数据管道326包括对齐模块326,该对齐模块326接收来自解包器324的数据并删除多余的数据。在一种实施方式中,发送给固态存储器110的读命令恢复数据包。请求数据的设备可不需要恢复的数据包内的所有数据,并且对齐模块326删除多余的数据。如果恢复页内的所有数据都是请求的数据,对齐模块326不删除任何数据。
对齐模块326在数据段传输到下一级之前以与请求数据段的设备兼容的形式按对象的数据段重新格式化数据。通常,由于数据由读取数据管道108处理,数据段或包的大小在不同级间改变。对齐模块326使用接收到的数据以将数据格式化为适于发送给请求设备155的数据段,该数据段还适于连接在一起以形成响应。例如,来自第一数据包的一部分的数据可与来自第二数据包的一部分的数据结合。如果数据段比由请求设备请求的数据大,对齐模块326可丢弃不需要的数据。
在一种实施方式中,读取数据管道108包括读取同步缓冲器328,该读取同步缓冲器328在读取数据管道108处理之前缓冲一个或多个读取自固态存储器110的请求包。读取同步缓冲器328位于固态存储时钟域和本地总线时钟域之间的边界上并提供缓冲以解决时钟域差异。
在另一种实施方式中,读取数据管道108包括输出缓冲器330,该输出缓冲器330接收来自对齐模块326的请求包并在数据包传送到所述请求设备前存储该包。输出缓冲器330解决当从读取数据管道108接收数据段时和当将数据段传送给固态存储控制器104的其他部分或传送给请求设备时之间的差异。输出缓冲器330还允许数据总线以比读取数据管道108能够支持的速率高的速率接收来自读取数据管道108的数据,以提升数据总线204运行的效率。
在一种实施方式中,读取数据管道108包括媒体解密模块332,该媒体解密模块332接收一个或多个来自ECC纠错模块322的加密过的请求包并在将一个或多个所述请求包发送给解包器324之前利用对于固态存储设备102唯一的加密密钥解密一个或多个所述请求包。通常,媒体解密模块332用以解密数据的加密密钥与媒体加密模块318使用的加密密钥一致。在另一种实施方式中,固态存储器110可具有两个或更多个分区且固态存储控制器104表现得好像有两个或更多个固态存储控制器104(每个都在固态存储器110内的单独分区内运行)一样。在这种实施方式中,可对每个分区使用唯一的媒体加密密钥。
在另一种实施方式中,读取数据管道108包括解密模块334,该解密模块334在将数据段发送给输出缓冲器330之前解密由解包器324格式化的所述数据段。采用与读请求一起接收的加密密钥解密所述数据段,所述读请求初始化恢复由读取同步缓冲器328接收的请求包。解密模块334可利用与用于第一包的读请求一起接收的加密密钥解密第一包,然后可利用不同的加密密钥解密第二包或可将第二包未经解密地传送给读取数据管道108的下一级。通常,解密模块334使用与媒体解密模块332用以解密请求数据包的加密密钥不同的加密密钥解密数据段。当包与非秘密性加密临时值一起存储时,该临时值与加密密钥一起使用以解密数据包。加密密钥可接收自客户端114、计算机112、密钥管理器或管理固态存储控制器104使用的加密密钥的其他设备。
在另一种实施方式中,读取数据管道108包括解压缩模块336,该解压缩模块336解压缩由解包器324格式化的数据段。在优选实施方式中,解压缩模块336使用存储在包头和容器标签中的一个或两个中的压缩信息以选择补充程序,压缩模块312使用该补充程序来压缩数据。在另一种实施方式中,解压缩模块336所使用的解压缩程序由请求解压缩的数据段确定。在另一种实施方式中,解压缩模块336根据每个对象类型或对象类基础的默认设置选择解压缩程序。第一对象的第一包可以能够废除默认解压缩程序设置,具有相对的对象类和对象类型的第二对象的第二包可采用默认解压缩程序,而具有相同的对象类和对象类型的第三对象的第三包可不经过解压缩。
在另一种实施方式中,读取数据管道108包括读取程序模块338,该读取程序模块338包括一个或多个在读取数据管道108内的用户可定义功能。读取程序模块338具有与写入程序模块310类似的特点并允许用户提供自定义功能给读取数据管道108。读取程序模块338可位于图3中所示的位置、可位于读取数据管道108内的其他位置、或者可包括读取数据管道108内多个位置的多个部分。此外,在读取数据管道108内的多个不同位置可有多个独立运行的读取程序模块338。本领域技术人员会认识到读取数据管道108内的读取程序模块338的其他形式。正如写入数据管道,读取数据管道108的级可重新排序,本领域技术人员会认识到读取数据管道108内的级的其他排列顺序。
固态存储控制器104包括控制和状态寄存器340和相应的控制队列342。控制和状态寄存器340和控制队列342有助于控制并按顺序排列与在写入和读取数据管道106、108内处理的数据相关联的命令和子命令。例如,封包器302中的数据段可具有一个或多个在与ECC发生器关联的控制队列342内的相应控制命令或指令。当数据段被封包时,可在封包器302内执行一些指令或命令中。当从数据段建立的、最新形成的数据包被传送给下一级时,其他命令或指令可通过控制和状态寄存器340直接传送给下一个控制队列342。
可同时将命令和指令加载到控制队列342上以将包转发给写入数据管道106,同时,由于每个管道级要执行各自的包,因此每个管道级读取合适的命令或指令。类似地,可同时将命令和指令加载到控制队列342上以从读取数据管道108请求包,而且,由于每个管道级要执行各自的包,因此每个管道级读取合适的命令或指示。本领域技术人员会认识到控制和状态寄存器340和控制队列342的其他特征和功能。
固态存储控制器104和/或固态存储设备102还可包括内存库交错控制器344、同步缓冲器346、存储总线控制器348及多路转换器(“MUX”)350,这些设备相对于图4A和图4B描述。
内存库交错
图4A是根据本发明的位于固态存储控制器104内的内存库交错控制器344一种实施方式400的示意性框图。内存库交错控制器344连接到控制和状态寄存器340并通过MUX350、存储总线控制器348和同步缓冲器346连接到存储I/O总线210和存储控制总线212上,这在下文中有所描述。内存库交错控制器包括读取代理402、写入代理404、擦除代理406、管理代理408、读取队列410a-n、写入队列412a-n、擦除队列414a-n、用于固态存储器110中的内存库214的管理队列416a-n、内存库控制器418a-n、总线仲裁器420和状态MUX422,这些设备在下文中描述。存储总线控制器348包括具有重映射模块430的映射模块424、状态捕捉模块426和NAND总线控制器438,这些设备在下文中描述。
内存库交错控制器344将一条或多条命令送往内存库交错控制器344中的两个或更多个队列,并在固态存储器110的内存库214之间协调存储在队列中的命令的执行,以使得第一类型的命令在一个内存库241a上执行而第二类型的命令在第二内存库214b上执行。所述一条或多条命令按命令类型分别送入队列中。固态存储器110的每个内存库214在内存库交错控制器344内具有相应的队列集,且每个队列集包括每个命令类型的队列。
内存库交错控制器344在固态存储器110的内存库214之间协调存储在队列中的命令的执行。例如,第一类型的命令在在一个内存库241a上执行而第二类型的命令在第二内存库214b上执行。通常,命令类型和队列类型包括读取和写入命令和队列410、412,但是还可包括存储媒介指定的其他命令和队列。例如,在图4A所描述的实施方式中,擦除和管理队列414、416被包括在其中且适于闪存、NRAM、MRAM、DRAM、PRAM等。
对于其他类型的固态存储器110,可包括其他类型的命令和相应的队列而不脱离本发明的范围。FPGA固态存储控制器104的灵活性质允许存储媒介的灵活性。如果将闪存换成另一种固态存储类型,可改变内存库交错控制器344、存储总线控制器348和MUX350以适应媒介类型而不显著地影响数据管道106、108和其他固态存储控制器104运行。
在图4A所描述的实施方式中,对每个内存库214来说,内存库交错控制器344包括:用于从固态存储器110读取数据的读取队列410、用于将命令写入固态存储器110的写入队列412、用于擦除固态存储器中的擦除块的擦除队列414、用于管理命令的管理队列416。内存库交错控制器344还包括相应的读取、写入、擦除和管理代理402、404、406、408。在另一种实施方式中,控制和状态寄存器340和控制队列342或类似元件在没有内存库交错控制器344的情况为了发送给固态存储器110的内存库214的数据而将命令排队。
在一种实施方式中,代理402、404、406、408将预定用于特定内存库214a的合适类型的命令送到内存库214a的修正队列。例如,读取代理402可接收用于内存库-1 214b的读命令并将所述读命令送到内存库-1读取队列410b。写入代理404可接收将数据写入固态存储器110的内存库-0 214a的写入命令并然后会将所述写入命令发送给内存库-0写入队列412a。类似地,擦除代理406可接收擦除命令以擦除内存库-1 214b中的擦除块并然后会将所述擦除命令传送给内存库-1擦除队列414b。管理代理408通常接收管理命令、状态请求及其类似消息,如复位命令或读取内存库214(如内存库-0 214a)的配置寄存器的请求。管理代理408将所述管理命令发送给内存库-0管理队列416a。
代理402、404、406、408通常还监测队列410、412、414、416的状态并当队列402、404、406、408满、接近满、丧失功能时,发送状态、中断或其他消息。在一种实施方式中,代理402、404、406、408接收命令并生成相应的子命令。在一种实施方式中,代理402、404、406、408通过控制和状态寄存器340接收命令并生成相应的子命令,所述子命令被转发给队列410、412、414、416。本领域技术人员会认识到代理402、404、406、408的其他功能。
队列410、412、414、416通常接收命令并存储所述命令直到所述命令被要求传送给固态存储器内存库214。在典型的实施方式中,队列410、412、414、416是先进先出(“FIFO”)寄存器或以FIFO运行的类似组件。在另一种实施方式中,队列410、412、414、4166按与数据、重要性或其他标准相匹配的顺序来存储命令。
内存库控制器418通常接收来自队列410、412、414、416的命令并生成合适的子命令。例如,内存库-0写入队列412a可接收将数据包的页写入内存库-0214a的命令。内存库-0控制器418a可在合适的时间接收写入命令并可为每个存储在写入缓冲器320中的数据包生成一个或多个写入子命令(将要被写入内存库-0 214a的页中)。例如,内存库-0控制器418a可生成验证内存库-0 214a和固态存储阵列216状态的命令、选择写入一个或多个数据包的合适位置的命令、清除位于固态存储阵列216内的输入缓冲器的命令、将一个或多个数据包传送所述输入缓冲器的命令、将输入缓冲器放到选定位置中的命令、检验数据被正确编程的命令,并且如果发生程序故障,则一次或多次地中断主控制器、重试写入同一物理地址并重试写入不同的物理地址。此外,与实例中的写入命令一起,存储总线控制器348会将一条或多条命令乘以每条存储I/O总线210a-n从而翻倍,而所述命令的逻辑地址映射到用于存储I/O总线210a的第一物理地址,并映射到用于存储I/O总线210a的第二物理地址,下面将详细描述。
通常,总线仲裁器420选自内存库控制器418并从内存库控制器418的输出队列提取子命令,并且将这些子命令以最优化内存库214性能的序列形式发给存储总线控制器348。在另一种实施方式中,总线仲裁器420可响应高级中断并修改普通选择标准。在另一种实施方式中,主控制器224可通过控制和状态寄存器340控制总线仲裁器420。本领域技术人员会认识到总线控制器420可控制和交错从内存库控制器418传送到固态存储器110的命令序列。
通常,总线仲裁器420协调来自内存库控制器418适当的命令和命令类型所需的相应数据的选择,并将所述命令和数据发送给存储总线控制器348。总线仲裁器420通常还将命令发送给存储控制总线212以选择合适的内存库214。对于闪存或其他具有异步、双向串行的存储I/O总线210的固态存储器110而言,一次只能传送一条命令(控制信息)或数据集。例如,当将写入命令或数据通过存储I/O总线210传送给固态存储器110时,读取命令、读取的数据、擦除命令、管理命令或其他状态命令不能在存储I/O总线210上传输。例如,当从存储I/O总线210读取数据时,不能向固态存储器110写入数据。
例如,在内存库-0的写操作期间,总线仲裁器420选择在其队列顶部具有写入命令或一系列写入子命令的内存库-0控制器418a,所述一系列写入子命令使得存储总线控制器348执行后继的序列。总线仲裁器420将写入命令转发给存储总线控制器348,该存储总线控制器348通过下列方式建立了写入命令:通过存储控制总线212选择内存库-0 214a、发送清除与内存库-0 214a关联的固态存储元件110的输入缓冲器的命令、发送验证与内存库-0 214a关联的固态存储元件216、218、220的状态的命令。然后,存储总线控制器348通过包含了物理地址存储I/O总线210传送写入命令,该物理地址如同映射自逻辑擦除块地址一样包括用于每个单独的物理擦除固态存储元件216a-m的逻辑擦除块地址。然后,存储总线控制器348通过多路转换器350将写入缓冲器经写入同步缓冲器多路复用到存储I/O总线210并使写入数据流向合适的页。当所述页写满时,然后,存储总线控制器348促使与内存库-0 214a关联的固态存储元件216a-m将输入缓冲器编入固态存储元件216a-m的内存单元。最终,存储总线控制器348验证状态以确保所述页被正确编程。
读操作与上文的写操作实例类似。在读操作期间,通常,总线仲裁器420或内存库交错控制器344的其他组件接收数据和相应的状态信息并将数据发送给读取数据管道108,同时将状态信息发送给控制和状态寄存器340。通常,从总线仲裁器420传送给存储总线控制器348的读数据命令会促使多路转换器350将读数据通过存储I/O总线210传送给读取数据管道108并通过状态多路转换器422向控制和状态寄存器340发送状态信息。
总线仲裁器420协调不同的命令类型和数据存取模式,使得在任意给定的时间内,在总线上只有合适的命令类型或对应数据。如果总线仲裁器420已选择了写入命令,且写入子命令和对应数据正在被写入固态存储器110,总线仲裁器420不会允许在存储I/O总线210存在其他命令类型。有利地是,总线仲裁器420使用定时信息(如预定的命令执行时间)以及接收到的关于内存库214状态的信息,以协调总线上不同命令的执行,这样做的目标是最小化或消除总线的停工时间。
通过总线仲裁器420的主控制器224通常使用存储在队列410、412、414、416中的命令的预定完成时间以及状态信息,使得在一个内存库214a上执行与命令关联的子命令时,而在其他内存库241b-n上执行其他命令的其他子命令。当内存库214a完全执行完一条命令时,总线仲裁器420将其他命令传给内存库214a。总线仲裁器420还可与协调存储在队列410、412、414、416的命令一起协调不存储在队列410、412、414、416的其他命令。
例如,可发出擦除命令以擦除固态存储器110内的一组擦除块。执行擦除命令可消耗比执行写入或读取命令多10到1000倍的时间,或消耗比执行程序命令多10到100倍的时间。对于N个内存库214,内存库交错控制器可将擦除命令分割为N条命令,每条命令擦除内存库214a的虚拟擦除块。当内存库-0 214a执行擦除命令时,总线仲裁器420可选择在其他内存库214b-n上执行的其他命令。总线仲裁器420还可与其他组件(如存储总线控制器348、主控制器224等)一起工作以在总线之间协调命令的执行。利用总线仲裁器420、内存库控制器418、队列410、412、414、416、和内存库交错控制器的代理402、404、406、408协调命令的执行可显著的提升性能(相比于其他没有内存库交错功能的固态存储系统)。
在一种实施方式中,固态控制器104包括一个内存库交错控制器344,该内存库交错控制器344为固态存储器110的所有存储元件216、218、220提供服务。在另一种实施方式中,固态控制器104内存库包括用于每个存储元件行216a-m、218a-m、220a-m的交错控制器344。例如一个内存库交错控制器344服务存储元件的一行SSS 0.0-SSS 0.N 216a、218a、220a,第二内存库交错控制器344服务存储元件的第二行SSS 1.0-SSS 1.N 216b、218b、220b,等等。
图4B是示出了根据本发明的位于固态存储设备内的内存库交错控制器的一种替代实施方式401的示意性框图。图4B所示实施方式中描述的组件210、212、340、346、348、350、402-430大体上与相对于图4A描述的内存库交错装置400类似,除了下述不同点:每个内存库214包括单独的队列432a-n及用于内存库的(如内存库-0 214a)读取命令、写入命令、擦除命令、管理命令等被传送给内存库214的单独队列432a。在一种实施方式中,队列432是FIFO。在另一种实施方式中,队列432可具有以不同于存储的顺序的顺序从队列432中提取的命令。在另一种替代实施方式(未示出)中,读取代理402、写入代理404、擦除代理406和管理代理408可结合成单个代理,所述单个代理将命令分配给合适的队列432a-n。
在另一种替代的实施方式(未示出)中,命令存储在单独的队列中,其中,可以以不同于存储的顺序的顺序从队列中提取命令,从而使得内存库交错控制器344在余下的内存库214b-n上执行。本领域技术人员会轻易地认识到其他能够在一个内存库214a上执行命令而在其他内存库214b-n上执行其他命令的队列配置和类型。
特定存储组件
固态存储控制器104包括同步缓冲器346,该同步缓冲器346从固态存储器110发送和接收的命令和状态消息。同步缓冲器346位于固态存储时钟域和本地总线时钟域之间的边界上,并提供缓冲以解决时钟域差异。同步缓冲器346、写入同步缓冲器308和读取同步缓冲器328可独立地或共同运作以缓冲数据、命令、状态消息等等。在优选实施方式中,同步缓冲器346所处的位置使得跨越时钟域的信号数量最少。本领域技术人员会认识到:时钟域间的同步可任意运行在固态存储设备102的其他位置,以优化设计实施方案的某些方面。
固态存储控制器104包括存储总线控制器348,该存储总线控制器348解释和翻译用于发送给或读取自固态存储器110的数据的命令并基于固态存储器110的类型接收自固态存储器110的状态消息。例如,存储总线控制器348可针对不同的存储类型、不同性能特点、不同制造商的存储器等而具有不同的定时要求。存储总线控制器348还将控制命令发送给存储控制总线212。
在优选实施方式中,固态存储控制器104包括MUX350,该MUX350包括多路转换器350a-n的阵列,其中,每个多路转换器用于固态存储阵列110的一行。例如,多路转换器350a与固态存储元件216a、218a、220a关联。MUX350通过存储总线控制器348、同步缓冲器346和内存库交错控制器344将来自写入数据管道106的数据和来自存储总线控制器348的命令经存储I/O总线210路由至固态存储器110,并将来自固态存储器110的数据和状态消息经存储I/O总线210路由至读取数据管道108和控制和状态寄存器340。
在优选实施方式中,固态存储控制器104包括用于固态存储元件的每一行的(如SSS 0.1 216a、SSS 0.2 218a、SSS 0.N 220a)的MUX350。MUX350将来自写入数据管道106的数据和发送给固态存储器110的命令通过存储I/O总线210结合起来,并将需要由读取数据管道108处理的数据从命令中分离出来。存储在写入缓冲器320中的包通过用于固态存储元件的每一行(SSS x.0 to SSSx.N 216、218、220)的写入缓冲器308由写入缓冲器外的总线传给用于固态存储元件的每一行(SSS x.0 to SSS x.N 216、218、220)的MUX350。MUX350从存储I/O总线210接收命令和读取数据。MUX350还将状态消息传给存储总线控制器348。
存储总线控制器348包括映射模块424。映射模块424将擦除块的逻辑地址映射到擦除块的一个或多个物理地址。例如,每个内存库214a具有20个存储元件的阵列(如SSS 0.0至SSS M.0 216)的固态存储器110可具有映射到擦除块的20个物理地址的特定擦除块的逻辑地址(每个存储元件有一个物理地址)。由于平行访问存储元件,所以位于存储元件216a、218a、220a的行中的每个存储元件中的同一位置的擦除块会分享物理地址。为了选择一个擦除块(如在存储元件SSS 0.0 216a中)代替行(如在存储元件SSS 0.0、0.1,…0.N 216a、218a、220a中)中的所有擦除块,可选择一个内存库(在这种情况下为内存库-0 214a)。
这种用于擦除块的逻辑到物理的映射是有好处的,这是由于如果一个擦除块已损坏或不可访问,所述映射可改为映射到另一擦除块。当一个元件的擦除块出错时,这种方法减少了失去整个虚拟擦除块的损失。重映射模块430将擦除块的逻辑地址的映射改为虚拟擦除块的一个或多个物理地址(遍布存储元件的阵列)。例如,虚拟擦除块1可映射到存储元件SSS 0.0 216a的擦除块1、映射到存储元件SSS 1.0 216b的擦除块1、…和映射到存储元件M.0 216m,虚拟擦除块2可映射到存储元件SSS 0.1 218a的擦除块2、映射到存储元件SSS1.1 218b的擦除块2、…和映射到存储元件M.1 218m,等等。
如果存储元件SSS 0.0 216a的擦除块1损坏、由于损耗遇到错误或由于一些原因不能被使用,重映射模块可将从逻辑到物理的映射改为指向虚拟擦除块1的擦除块1的逻辑地址的映射。如果存储元件SSS 0.0 216a的空闲擦除块(将其称为擦除块221)可用且当前并未被映射,重映射模块可改变虚拟擦除块1的映射为映射到指向存储元件SSS 0.0 216的擦除块221,而继续指向存储元件SSS 1.0 216b的擦除块1、存储元件SSS 2.0(未示出)的擦除块1、…和指向存储元件M.0 216m。映射模块424或重映射模块430可按固定顺序映射擦除块(虚拟擦除块1到存储元件的擦除块1,虚拟擦除块2到存储元件的擦除块2,等等)或可按基于其他一些标准的顺序映射存储元件216、218、220的擦除块。
在一种实施方式中,可按访问时间分组擦除块。按访问时间分组、均衡命令执行的时间(如将数据编入或写入指定擦除块的页)可平均命令补齐,从而使得在虚拟擦除块的擦除块之间执行的命令不会由于最慢的擦除块而被限制。在另一种实施方式中,可按损耗程度、运行状况来分组擦除块。本领域技术人员会认识到当映射或重映射擦除块时需要考虑的其他问题。
在一种实施方式中,存储总线控制器348包括状态捕捉模块426,该状态捕捉模块426接收来自固态存储器110的状态消息并将该状态消息发送给状态MUX422。在另一种实施方式中,当固态存储器110为闪存时,存储总线控制器348包括NAND总线控制器428。NANA总线控制器428将命令从读取和写入数据管道106、108传送给固态存储器110中的正确位置,并根据所述闪存的特点协调命令执行的时间,等等。如果固态存储器110为另一种类型的固态存储器,则将NAND总线控制器428替换为针对存储类型的总线控制器。本领域技术人员会认识到NAND总线控制器428的其他功能。
流程图
图5A是根据本发明的在固态存储设备102内采用数据管道管理数据的方法500的一种实施方式的示意性流程图。方法500始于步骤502,输入缓冲器306接收一个或多个将要被写入固态存储器110的数据段(步骤504)。通常来说,所述一个或多个数据段包括对象的至少一部分,但也可以是整个对象。封包器302可创建一个或多个对象指定包以及对象。封包器302为每个包添加包头,所述包头通常包括包的长度和对象内包的序列号。封包器302接收一个或多个存储在输入缓冲器306的数据或元数据段(步骤504),并通过创建一个或多个大小适于固态存储器110的包来封包所述一个或多个数据或元数据段(步骤506),其中,每个包包括一个包头和来自一个或个段的数据。
通常,第一包包括对象标识符,该对象标识符确定对象,为了该对象而创建包。第二包可包括具有信息的包头,该信息由固态存储设备102用于关联第二包和第一包中确定的对象,该包头还具有在对象内定位第二包的偏移信息和数据。固态存储设备控制器202管理内存库214和包流向的物理区域。
ECC发生器304接收来自封包器302的包并为数据包生成ECC(步骤508)。通常,在包和ECC块之间没有固定关系。ECC块可包括一个或多个包。包可包括一个或多个ECC块。包可始于ECC块内的任意位置并可在ECC块内的任意位置结束。包可始于第一ECC块内的任意位置并可在相继的ECC块中的任意位置结束。
写入同步缓冲器308在将ECC块写入固态存储器110之前缓冲分布在对应ECC块中的包(步骤510),然后固态存储控制器104在考虑到时钟域差异的适当的时间写入数据(步骤512),方法500终止于步骤514。写入同步缓冲器308位于本地时钟域和固态存储器110时钟域的边界上。注意到为方便起见,方法500描述了接收一个或多个数据段并写入一个或多个数据包,但通常接收数据段流或组。通常,若干包括完整固态存储器110的虚拟页的ECC块被写入固态存储器110。通常,封包器302接收某个大小的数据段并生成另一大小的包。这必然需要数据或元数据段或数据或元数据段的部分结合起来,以形成将段的所有数据捕捉进包的数据包。
图5B是示出了根据本发明的用于服务器内SAN的方法的一种实施方式的示意性流程图。方法500开始于522,并且存储通信模块162促进第一存储控制器152a和位于第一服务器112a外部的至少一个设备之间的通信(步骤554)。第一存储控制器152a和外部设备之间的通信独立于第一服务器112a。第一存储控制器112a位于第一服务器112a内部,并且第一存储控制器152a控制至少一个存储设备154a。第一服务器112a包括与第一服务器112a和第一存储控制器152a搭配使用的网络接口156a。服务器内SAN模块164应答存储请求(步骤556)并且方法501终止于558。服务器内SAN模块164使用网络协议和/或总线协议应答存储请求(步骤556)。服务器内SAN模块164独立于第一服务器112a应答存储请求(步骤556)并且从客户端114、114a接收服务请求。
图6是根据本发明的在固态存储设备102内采用数据管道管理数据的方法600的再一种实施方式的示意性流程图。方法600始于步骤602,输入缓冲器306接收一个或多个将要被写入固态存储器110的数据或元数据段(步骤604)。封包器302为每个包添加包头,所述包头通常包括对象内包的长度。封包器302接收一个或多个存储在输入缓冲器306中的段(步骤604),并通过创建一个或多个大小适于固态存储器110的包来封包一个或多个段(步骤606),其中每个包包括包头和来自一个或多个段的数据。
ECC发生器304接收来自封包器302的包并生成一个或多个用于包的ECC块(步骤608)。写入同步缓冲器308在将ECC块写入固态存储器110之前缓冲分布在对应ECC块中的包(步骤610),然后固态存储控制器104在考虑到时钟域差异的合适的时间写入数据(步骤612)。当从固态存储器110请求数据时,包括一个或多个数据包的ECC块被读入读取同步缓冲器328并被缓冲(步骤614)。通过存储I/O总线210接收包的ECC块。由于存储I/O总线210是双向,当读取数据时,写操作、命令操作等被停止。
ECC纠错模块322接收暂存在读取同步缓冲器328中的请求包的ECC块,并在必要时修正每个ECC块中的错误(步骤616)。如果ECC纠错模块322确定在ECC块中存在一个或多个错误并且错误可利用ECC一并修正,ECC纠错模块322修正ECC块中的错误(步骤616)。如果ECC纠错模块322确定探测到的错误不可用ECC修正,则ECC纠错模块322发送中断。
解包器324在ECC纠错模块322修正任何错误之后接收请求包(步骤618)并通过检查和删除每个包的包头解包所述包(步骤618)。对齐模块326接收经过解包的包、删除多余的数据、并采用与请求数据段的设备兼容的形式按对象的数据段重新格式化所述数据(步骤620)。输入缓冲器330接收经过解包的请求包,并在包传送给请求设备之间缓冲包(步骤622),方法600终止于步骤624。
图7是示意性流程图,示出了根据本发明的在固态存储设备102内利用内存库交错管理数据的方法700的一种实施方式。方法600始于步骤602,内存库交错控制器344将一条或多条命令传给两个或多个队列410、412、414、416(步骤604)。通常,代理402、404、406、408根据命令类型将所述命令传给队列410、412、414、416(步骤604)。队列410、412、414、416的每个集包括用于每个命令类型的队列。内存库交错控制器344在内存库214之间协调存储在队列410、412、414、416的所述命令的执行(步骤606),以使得第一类型的命令在一个内存库214a上执行,而第二类型的命令在第二内存库214b上执行,方法600结束于步骤608。
存储空间恢复
图8是示出了根据本发明的用于固态存储设备102中无用存储单元收集的装置800的一种实施方式的示意性框图。装置800包括顺序存储模块802、存储部选择模块804、数据恢复模块806、和存储部恢复模块808,这些模块描述如下。在其他实施方式中,装置800包括无用存储单元标记模块812和擦除模块810。
装置800包括顺序存储模块802,该顺序存储模块802将数据包顺序地写入存储部内的页。无论是新的包还是修改过的包,这些包都按顺序存储。在这种实施方式中,通常不将修改过的包写回其先前存储的位置。在一种实施方式中,顺序存储模块802将包写入存储部的页中的第一位置,然后写入该页中的下一个位置,并继续写入下一个位置和再下一个位置,直到该页被写满。然后,顺序存储模块802开始填充所述存储部中的下一页。这个过程一直持续到所述存储部被写满。
在优选实施方式中,顺序存储模块802开始将包写入内存库(内存库-0214a)的存储元件(如SSS 0.0到SSS M.0 216)中的存储写入缓冲器。当所述存储写入缓冲器写满时,固态存储控制器104使得所述存储写入缓冲器中的数据被编入内存库214a的存储元件216中的指定页。然后,另一个内存库(如内存库-1 214b)被选定,并且当一个内存库-0编程所述指定页时,顺序存储模块802开始将包写入内存库214b的存储元件218的存储写入缓冲器。当内存库214b的存储写入缓冲器写满时,该存储写入缓冲器中的内容被编入每个存储元件218中的另一指定页。这个过程是有效率的,这是因为当一个内存库214a编程页时,可填充另一个内存库214b的存储写入缓冲器。
存储部包括固态存储设备102中的固态存储器110的一部分。通常,存储部是擦除块。对于闪存来说,擦除块上的擦除操作通过充电每个单元来将一写入擦除块中的每个位。相比于以都是1的位置开始的编程操作,这是冗长的过程,并且随着数据写入,通过放电用0写入的单元将某些位改变为0。然而,在固态存储器110不是闪存或具有其中擦除周期花费与其他操作,例如读取或编程类似的时间量的闪存的情况下,可能不需要擦除存储部。
正如此处所使用的,存储部在大小上与擦除块等同,但可(或可不)被擦除。当在此处使用擦除块时,擦除块可指存储元件(如SSS 0.0 216a)内指定大小的特定区域,并通常包括一定数量的页。当“擦除块”与闪存结合使用时,擦除块通常是在写入之前被擦除的存储部。当“擦除块”与“固态存储器”一起使用时,擦除块可(或可不)被擦除。正如此处所使用的,擦除块可包括一个擦除块或擦除块组,存储元件(如SSS 0.0到SSS M.0 216a-n)的每一行都具有该擦除块组中的一个擦除块,擦除块或擦除块组在此处还可被称为虚拟擦除块。当擦除块指与所述虚拟擦除块关联的逻辑构建时,所述擦除块在此处可被称为逻辑擦除块(“LEB”)。
通常,按照处理的顺序顺序地存储所述包。在一种实施方式中,当使用写入数据管道106时,顺序存储模块802按照包从写入数据管道106出来的顺序存储包。这种顺序可能是由于下述原因:来自请求设备155的数据段与读取自另一存储部的有效数据包(正如在下述的恢复操作期间从存储部恢复数据一样)混合。将恢复的、有效的数据包重路由到写入数据管道可包括如上文中相对于图3的固态存储控制器104描述的垃圾收集器旁路316。
装置800包括选择恢复的存储部的存储部选择模块804。选择恢复的存储部可以使顺序存储模块802将所述存储部重新用于写入数据,因此将所述恢复的存储部添加到存储池中,或者所述存储部被重新用于在确定下述条件后从所述存储部中恢复有效数据:所述存储部失效、不可靠、应该被刷新、或其他将所述存储部暂时地或永久地移出所述存储池的理由。在另一种实施方式中,存储部选择模块804通过识别具有大量无效数据的存储部或擦除块来选择恢复的存储部。
在另一种实施方式中,存储部选择模块804通过识别具有低额损耗的存储部或擦除块来选择恢复的存储部。例如,识别具有低额损耗的存储部或擦除块可包括识别无效数据少、擦除重复的次数少、位出错率低或程序计数低(缓冲器中一页数据写入所述存储部中的页的次数少;程序计数可从下列情况开始被测量:制造设备时、所述存储部最近一次被擦除时、其他任意事件发生时及这些情况的组合)的存储部。存储部选择模块804还可使用上述参数中的任意组合或其他参数以确定具有低额损耗的存储部。通过确定具有低额损耗的存储部来选择恢复的存储部可有助于发现未充分利用的存储部,还可由于损耗均衡而被恢复,等等。
在另一种实施方式中,存储部选择模块804通过识别具有高额损耗的存储部或擦除块来选择恢复的存储部。例如,识别具有高额损耗的存储部或擦除块来选择恢复的存储部包括识别擦除重复次数多、位出错率高、具有不可恢复的ECC块或程序计数高的存储部。存储部选择模块804还可使用上述参数的任意组合或其他参数以确定具有高额损耗的存储部。通过确定具有高额损耗的存储部来选择恢复的存储部可有助于发现被过度使用的存储部,还可通过利用擦除周期刷新所述存储部而被恢复等等,或者使所述存储部像不能使用那样不提供服务。
装置800包括数据恢复模块806,该数据恢复模块806从选定为恢复的存储部中读取有效数据包、将所述有效数据包与其他将要由顺序存储模块802顺序地写入的数据包排队并更新具有由顺序存储模块802写入的有效数据的新物理地址的索引。通常,所述索引为对象索引,该对象索引将对象的数据对象标识符映射到形成包的位置的物理地址,所述数据对象存储在固态存储器110中。
在一种实施方式中,装置800包括存储部恢复模块808,该存储部恢复模块808为使用或再使用而准备所述存储部并将所述存储部标记为对顺序存储模块802可用,以在数据恢复模块806完成从所述存储部中复制有效数据之后顺序地写入数据包。在另一种实施方式中,装置800包括存储部恢复模块808,该存储部恢复模块808将选定为恢复的存储部标记为无法存储数据。通常,这是由于存储部选择模块804识别具有高额损耗的存储部或擦除块来选择恢复的存储部,从而使得所述存储部或擦除块没有条件被用于可靠的数据存储。
在一种实施方式中,装置800位于固态存储设备102的固态存储设备控制器202内。在另一种实施方式中,装置800控制固态存储设备控制器202。在另一种实施方式中,装置800的一部分位于固态存储设备控制器202内。在另一种实施方式中,由数据恢复模块806更新的对象索引也位于固态存储设备控制器202内。
在一种实施方式中,所述存储部为擦除块,并且装置800包括擦除模块810,该擦除模块810在数据恢复模块806完成从所述选定的擦除块中复制有效数据包之后并在存储部恢复模块808将所述擦除块标记为可用之前,擦除选定为恢复的擦除块。对于闪存和其他擦除操作消耗的时间比读取或写入操作消耗的时间长得多的固态存储器来说,在使数据块可以写入新数据之前擦除所述数据块有助于高效的操作。当固态存储器110布置在内存库214内时,擦除模块810的擦除操作可在一个内存库上执行,而另一个内存库可执行读取、写入或其他操作。
在一种实施方式中,装置800包括垃圾标记模块812,该垃圾标记模块812将存储部中的数据包识别为无效,以响应指示所述数据包不再有效的操作。例如,如果数据包被删除,垃圾标记模块812可将所述数据包识别为无效。读-修改-写操作是用于将数据包识别为无效的另一种方法。在一种实施方式中,垃圾标记模块812可通过更新索引将所述数据包识别为无效。在另一种实施方式中,垃圾标记模块812可通过存储另一数据包将所述数据包识别为无效,所述另一数据包指示无效的数据包已经被删除。这种方法是有利的,这是由于在固态存储器110中存储所述数据包已被删除的信息允许对象索引重建模块262或类似模块重建具有项的对象索引,所述项指示所述无效的数据包已经被删除。
在一种实施方式中,装置800可被用于在清洗命令之后填充数据的虚拟页中的剩余部分,以提升整体的性能,其中,所述清洗命令使数据停止流入写入数据管道106,直到写入数据管道106为空且所有的包已被永久地写入非易失性固态存储器110。这具有以下好处:降低了需要的垃圾收集的量、减少了用于擦除存储部的时间并减少了编程虚拟页所需的时间。例如,可仅在准备将一个小包写入固态存储器100的虚拟页内时,接收清洗命令。编程这个几乎为空的页可能会引起下述结果:需要立即恢复浪费的空间;导致所述存储部内的有效数据被当作垃圾不必要的收集;及擦除、恢复所述存储空间并将所述存储空间返回到可用空间池以被顺序存储模块802写入。
将所述数据包标记为无效而不是实际上擦除无效的数据包是有效率的,这是因为,如上所述,对于闪存和其他类似存储器来说,擦除操作消耗相当长的时间。允许垃圾收集系统(如装置800中所述的)在固态存储器110内自主地运行提供了一种将擦除操作与读取、写入或其他更快的操作分开的方法,从而使得固态存储设备102能比其他许多固态存储系统或数据存储设备运行得快得多。
图9是示意性流程图,示出了根据本发明的用于存储恢复的方法900的一种实施方式。方法900始于步骤902,顺序存储模块802将数据包顺序地写入存储部(步骤904)。所述存储部是固态存储设备102中的固态存储器110的一部分。通常,存储部为擦除块。所述数据包源于对象,而且所述数据包按处理的顺序被顺序地存储。
存储部选择模块804选择恢复的存储部(步骤906),并且数据恢复模块806从选定为恢复的存储部中读取有效的数据包(步骤908)。通常,有效的数据包为未被标记为擦除、删除或其他一些无效数据标识符的数据包,所述数据包被视为有效或“好”的数据。数据恢复模块806将有效的数据包与其他预定由顺序存储模块802顺序地写入的数据包排队(步骤910)。数据恢复模块806更新具有由顺序存储模块802所写入的数据的新物理地址的索引(步骤912)。所述索引包括从数据包的物理地址到对象标识符的映射。这些数据包存储在固态存储器110中,并且所述对象标识符对应于所述数据包。
在数据恢复模块806完成从所述存储部复制有效数据后,存储部恢复模块将选定为恢复的存储部标记为对顺序存储模块802可用(步骤914),以顺序地写入数据包,方法900结束于步骤916。
前端分布式RAID
传统的RAID系统被配置为与RAID控制器一起使用,所述RAID控制器具有如下功能:接收数据、为所述数据计算条带模式、将所述数据分割为数据段,计算奇偶校验条带、将所述数据存储在存储设备上、更新所述数据段等等。当一些RAID控制器允许一些功能成为分布式的功能时,由RAID控制器管理的存储设备不直接与客户端通信以存储在RAID中条带化的数据。用于RAID过程的替代存储请求和数据通过所述存储控制器。
要求所述RAID控制器接触所有将要被存储在RAID中的数据是没有效率的,这是因为这种方法产生了数据流瓶颈。这个问题在读-修改-写处理期间尤为突出,其中,RAID群组中的全部驱动器的带宽和性能被消耗,而实际上仅更新了子集。此外,被指定用于由所述RAID控制器管理的数据的存储设备中的区域通常用于RAID群组并且不能独立地被访问。通过客户端访问存储设备150通常通过分区存储设备150来实现。当使用分区时,支持普通存储访问的分区不用于RAID,而分配给RAID群组的分区不支持普通数据存储访问。为全域性地优化效用而超额预定分区的方案不仅复杂而且更加难以管理。此外,分配给一个RAID群组的存储空间不能通过多于一个的RAID控制器访问,除非一个被指定为主控制器,而其他RAID控制器作为从机,除非主RAID控制器未被激活、丧失功能等等。
典型的RAID控制器还在RAID群组的存储设备150之外生成奇偶校验数据段。这可能是无效率的,这是因为奇偶校验数据段通常在生成之后被发送给存储设备150以便于存储,这需要RAID控制器的计算能力。追踪奇偶校验数据段的位置和更新信息还必须在RAID控制器内完成而不是在自主地在存储设备150上完成。
如果独立的RAID控制器断开连接,当有必要确保所述数据保持在可用状态时,RAID控制器通常互相交叉连接并交叉连接至驱动器,和/或像成套设备一样镜像化,但这样使数据可用性管理的花费昂贵且难以管理,还显著地降低了存储子系统的可靠性。
需要一种用于前端分布式RAID系统、装置和方法,所述前端分布式RAID允许在每个数据段、每个对象、每个文件或类似基础上使用RAID,所述前端分布式RAID无需RAID控制器和位于客户端和存储设备之间的RAID控制器对。在这种系统、装置和方法中,RAID群组可被创建用于一个数据段、对象或文件,该RAID群组还可在一个存储设备群组中由一个RAID控制器管理,而第二RAID控制器可被创建用于包含第一RAID群组的一些相同的存储设备的另一个数据段、对象或文件。RAID控制功能可分布在客户端114、第三方RAID管理设备之间,或分布在多个存储设备150之间,前端分布式RAID系统、装置和方法还可将命令发送给RAID群组的存储设备150并可允许存储设备150通过直接存储器存取(“DMA”)或远程DMA(“RDMA”)直接访问和复制数据。
图10是示意性框图,示出了根据本发明的可被前端分布式RAID访问的系统1600的一种实施方式。上文中对图16中相对于渐进式RAID描述的组件进行的说明也可应用到前端分布式RAID。对于前端分布式RAID,存储设备集1604形成RAID群组并包括自主运行且能够独立地通过网络116或一个或多个冗余网络116接收和服务来自客户端114的存储请求的存储设备150。
在存储设备集1604中的存储设备150之中,一个或多个存储设备150被指定为用于条带的奇偶校验-镜像存储设备1602。通常,一个或多个奇偶校验-镜像存储设备1602的功能大体上类似于其他存储设备150。在典型的配置中,指定的奇偶校验-镜像存储设备1602在存储设备集1604的存储设备150之间变更,奇偶校验-镜像存储设备1602实质上具有与其他存储设备150一样的特点,这是由于奇偶校验-镜像存储设备1602也必须像非奇偶校验-镜像存储设备一样运行。类似的特点是关于上述的RAID群组内的操作和用于客户端114独立通信的自主操作。在不同的实施方式中,存储设备集1604的存储设备150可在其他方面(不涉及所述RAID环境下的功能)不同。
存储设备集1604的存储设备150可以是独立的、可以是在一个或多个服务内成组的、可每一个驻留在一个服务器112内、可通过一个或多个服务器112被访问,等等。一个或多个客户端114可驻留在包括一个或多个存储设备150的服务器112内、可驻留在独立的服务器112内、可驻留在通过一个或多个计算网络116访问存储设备150的计算机、工作站、笔记本电脑等设备内,或位于类似设备内。
在一种实施方式中,网络116包括系统总线,并且存储设备集1604中的一个或多个存储设备150、1602通过所述系统总线通信。例如,系统总线可以是PCI-e总线、串行高级技术附件(“串行ATA”)总线、并行ATA或类似总线。在另一种实施方式中,所述系统总线是外部总线,如小型计算机系统接口(“SCSI”)、火线、光纤通道、USB、PCIe-AS、无限带宽或类似总线。本领域技术人员会意识到具有存储设备150的其他系统1600配置,其中,存储设备150不仅自主运行,还能够独立地通过一个或多个网络116接收和服务来自客户端114存储请求。
图11是示意性框图,示出了根据本发明的用于前端分布式RAID的装置2100的一种实施方式。在不同的实施方式中,装置2100包括存储请求接收器模块2102、条带化关联模块2104、奇偶校验-镜像关联模块2106、存储请求发送器模块2108、前端奇偶校验生成模块2110、奇偶校验更替模块2112、数据段恢复模块2114、数据重建模块2116、奇偶校验更替模块2118和对等通信模块2120,这些模块在下文中描述。在不同的实施方式中,装置2100可被包括在下列设备中:存储设备150(如固态存储设备102)、存储设备控制器152(如固态存储控制器104)、服务器112、第三方RAID管理设备等等,或者装置2100分布在不止一个的组件之间。
装置2100包括存储请求接收器模块2102,该存储请求接收器模块2102接收将数据存储在存储设备集1604中的存储请求。所述数据可以是文件或对象的一部分,或者可以是整个文件或对象。文件可包括任意信息块或用于存储信息的源,其中,这些块或源可用于计算机程序。文件可包括由处理器访问的任意数据结构。文件可包括数据库、文本串、计算机编码等等。对象通常是用于面向对象的编程的数据结构并且可包括具有(或不具有)数据的结构。在一种实施方式中,对象是文件的子集。在另一种实施方式中,对象独立于文件。在任何情况下,对象和文件在此处被定义为包括数据、数据结构、计算机编码和其他存储在存储设备上的信息的全部集。
存储设备集1604包括形成RAID群组的自主存储设备150,存储设备150自主地通过一个或多个网络116接收来自客户端114的存储请求。存储设备集1604的自主存储设备150中一个或多个被指定为用于条带的奇偶校验-镜像存储设备1602。来自其他客户端的其他存储请求可存储在第二存储设备集上,其中,所述第二存储设备集可像第一存储设备集1604一样包括一个或多个相同的存储设备150(和奇偶校验-镜像存储设备1602)。为两个存储设备集1604所共用的存储设备150可在其内具有分配为存储空间的重叠部分。
装置2100包括为所述数据计算条带模式的条带化关联模块2104。所述条带模式包括一个或多个条带。每个条带包括N个数据段的集。条带的N个数据段还可包括一个或多个空数据段。条带化关联模块2104将N个数据段中的一个数据段与被分配给所述条带的存储设备集1604中的N个存储设备150a-n中的一个关联。在一种实施方式中,条带化关联模块2104利用将要被发送给存储设备150的存储请求将数据段与存储设备150关联,该存储请求指令存储设备获取对应于来自发送所述存储请求的客户端114的数据段的数据。
在另一种实施方式中,所述存储请求大体上与所述数据段的数据无关。大体上与数据无关意味着所述存储请求一般来说不包括作为所述存储请求的主题的数据,但可包括可能是数据的一部分的字符、字符串等等。例如,如果所述数据包括一串重复的、相同的字符(如一串0字符),所述存储请求可包括所述数据包括一串0字符的指示而并不包括所述数据中的所有零字符。本领域技术人员会认识到发送存储请求而不发送数据的主体但同时仍然允许少量的或单个实例的某些字符或字符串存在于所述存储请求中的其他方法。所述存储请求包括命令,该命令允许N个存储设备150a-n利用DMA或RDMA操作或类似操作检索所述数据。
在另一种实施方式中,条带化关联模块2104通过在将要被发送给存储设备150的存储请求中识别数据段的数据将所述数据段与存储设备150关联。识别所述数据段的数据可包括数据段标识符、数据段位置或地址、数据段长度或其他允许存储设备150判定哪个数据包括所述数据段的信息。
在一种实施方式中,条带化关联模块2104在存储请求中将数据段与存储设备150关联,以使得客户端114能够在广播中发送包括所述数据段的数据,从而每个存储设备150能够存储关联的数据段并丢弃对应于未被分配给存储设备150的数据段的数据。在另一种实施方式中,条带化关联模块2104在存储请求中可能是通过为每个数据段分配地址将数据段与存储设备150关联,以使得客户端114可在组播中发送包括所述数据段的数据,从而每个存储设备150能够存储关联的数据段并丢弃对应于未被分配给存储设备150的数据段的数据。本领域技术人员会认识到用于条带化关联模块2104将数据段与存储设备150关联,从而将一个或多个数据段通过下述方式传给一个或多个存储设备的其他方法:广播、组播、单播、任意播等。
在一种相关的实施方式中,条带化关联模块2104在存储请求中将数据段与存储设备150关联,以使得客户端114能够广播、组播、单播(等)所述存储请求,并且每个存储设备150能够接收来自客户端114的涉及与存储设备150关联的所述数据段的存储请求的一部分,还能够丢弃不涉及与存储设备150关联的一个或多个数据段的存储请求的那部分。
在另一种实施方式中,由存储请求接收器模块2102接收的所述存储请求包括作为所述存储请求主题的数据,并且条带化关联模块2104通过准备用于包括数据段的存储设备150的存储请求将数据段与存储设备150关联。条带化关联模块2104可运行在下列设备内:客户端114、第三方RAID管理设备、存储设备150、1602,等等。
装置2100包括奇偶校验-镜像关联模块2106,该奇偶校验-镜像关联模块2106将N个数据段的集与存储设备集1604中的一个或多个奇偶校验-镜像存储设备1602关联。一个或多个奇偶校验-镜像存储设备1602是除N个存储设备150a-n之外的设备。在一种实施方式中,奇偶校验-镜像关联模块2106将N个数据段的集与每个奇偶校验-镜像存储设备1602关联,从而每个奇偶校验-镜像存储设备1602能够为了生成奇偶校验数据段而接收并存储条带的N个数据段。在另一种实施方式中,奇偶校验-镜像关联模块2106将条带的数据段与每个奇偶校验-镜像存储设备1602关联,从而奇偶校验-镜像存储设备1602a-m充当存储在N个存储设备150a-n中的N个数据段的镜像。
在不同的实施方式中,奇偶校验-镜像关联模块2106利用单个存储请求、多个存储请求或上文中相对于条带化关联模块2104描述的其他关联技术(如为了DMA、RDMA、广播、组播而设立奇偶校验-镜像存储设备1602的存储请求,或将N个数据段包括在存储请求中)将N个数据段的集与一个或多个奇偶校验-镜像存储设备1602关联。奇偶校验-镜像关联模块2106可运行在下列设备内:客户端114、第三方RAID管理设备、存储设备150、1602,等等。
装置2100包括存储请求发送器模块2108,该存储请求发送器模块2108将一个或多个存储请求发送给存储设备集1604中的每个存储设备,每个存储请求能够将与接收所述存储请求的存储设备150、1602关联的一个或多个数据段存储在存储设备150、1602上。在一种实施方式中,每个存储请求不包括作为所述存储请求的主题的数据。在另一种实施方式中,每个存储请求使得存储设备集1604的N个存储设备150和奇偶校验-镜像存储设备1602能够利用DMA或RDMA下载关联的数据段的数据。在另一种实施方式中,存储请求包含足够的信息以从来自客户端114的广播中挑选用于关联的数据段的相关存储请求或相关数据。在另一种实施方式中,存储请求包括关联的数据段的数据。
在一种实施方式中,每个存储请求识别作为条带的存储设备集1604的一部分的存储设备150、1602。通过包括识别存储设备集1604的存储设备150、1604的步骤,如果充当主机的存储设备150出现故障,另一个存储设备150可接管主机以管理RAID数据。在另一种实施方式中,当存储设备断开连接时,识别存储设备集1604使得自主存储设备150、1602能够恢复数据,并当替代存储设备被附加到存储设备集1604内时,使得自主存储设备150、1602能够独立于客户端重建数据。在另一种实施方式中,识别存储设备集1604的存储设备150、1602代表了用于传送数据段或存储请求的组播组。识别信息可与存储在存储设备集1604的存储设备150、1602上的、用于对象或文件的元数据一起存储。
在一种实施方式中,装置2100包括前端奇偶校验生成模块2110,当奇偶校验-镜像关联模块2106将N个数据段的集与一个或多个奇偶校验-镜像存储设备1602中的每一个关联时,该前端奇偶校验生成模块2110独立于客户端114为所述条带计算奇偶校验数据段,并将所述奇偶校验数据段存储在奇偶校验-镜像存储设备1602上。由提供给奇偶校验-镜像存储设备1602的N个数据数据段的集计算所述奇偶校验数据段。当存储设备集1604包括了不止一个奇偶校验-镜像存储设备1602时,前端奇偶校验生成模块2110通常生成不同的奇偶校验数据段,从而存储设备集1604中的两个或更多个存储设备150、1602可出现故障,并且奇偶校验数据段信息允许恢复不可用的数据段或奇偶校验数据段。
在另一种实施方式中,当运行在存储设备集1604的存储设备150中和/或第三方RAID管理设备中时,前端奇偶校验生成模块2110计算所述奇偶校验数据段。例如,独立于客户端114的、发送所述存储请求的服务器112可计算所述奇偶校验数据段。在另一种实施方式中,前端奇偶校验生成模块2110运行在奇偶校验-镜像存储设备内以计算所述奇偶校验数据段。例如,奇偶校验-镜像存储设备1602中的存储控制器152可充当用于由存储设备集1604形成的RAID群组的主存储控制器。
在另一种实施方式中,前端奇偶校验生成模块2110计算所述奇偶校验数据段并将计算出的奇偶校验数据段发送给开成镜像的第二存储设备集中的一个或多个附加奇偶校验-镜像存储设备1604。这种实施方式是有利的,这是因为与计算奇偶校验数据段有关的开销只需要一次,而不需要为每个存储设备集1604执行开销,这样做的额外好处是减少了网络116的数据流量。
在一种实施方式中,装置2100还可包括数据段恢复模块2112,如果存储设备150不可用并且接收到读取不可用数据段或包括不可用数据段的数据的请求,数据段恢复模块2112恢复存储在存储设备集1604的存储设备150上的数据段。利用存储设备集1604的可用存储设备150上的数据段、奇偶校验数据段和存储设备集1604的可用存储设备150、1602上的数据段的结合恢复所述数据段,或者从包括所述数据段的拷贝的镜像存储设备中恢复所述数据段。通常,镜像存储设备是存储N个数据段的拷贝的存储设备集的一个存储设备150。数据段恢复模块2112可运行并恢复来自下述设备中的不可用数据段:存储设备150、奇偶校验-镜像存储设备1602、第三方RAID管理设备、镜像存储设备等等。
在另一种实施方式中,装置2100包括数据重建模块2114,该数据重建模块2114在重建操作中将恢复的数据段存储在替代存储设备150上。例如,如果存储设备150由于出现故障、失去同步性等原因而变得不可用,数据重建模块2114可重建存储设备150以替换不可用的存储设备150。在一种实施方式中,重建的存储设备150是已经可用的源存储设备150。
所述恢复的数据段与存储在存储设备集1604的不可用存储设备150上的不可用数据段匹配。所述重建操作通常将一个或多个数据段和奇偶校验数据段恢复到替代存储设备150上,从而使其与先前存储在不可用存储设备150上的数据段和奇偶校验数据段相匹配。
在一种实施方式中,所述恢复的数据段利用存储设备集1604的可用存储设备150上的可用数据段被恢复用于重建操作。在另一种实施方式中,所述恢复的数据段利用来自一个或多个奇偶校验-镜像存储设备1602的奇偶校验数据段和存储设备集1604的可用存储设备150上的可用数据段的结合被恢复用于重建操作。在另一种实施方式中,所述恢复的数据段利用读取自奇偶校验-镜像存储设备1602的匹配数据段被恢复用于重建操作。在又一种实施方式中,所述恢复的数据段利用来自镜像存储设备的匹配数据段被恢复用于重建操作。数据重建模块2114能够运行并存储接收自下述设备的数据段:客户端114、第三方RAID管理设备、存储设备150、1602、镜像存储设备等等。
在另一种实施方式中,装置2100包括奇偶校验重建模块2116,该奇偶校验重建模块2116在重建操作中在替代存储设备1602上重建恢复的奇偶校验数据段。重建操作大体上与上文中相对于数据重建模块2114描述的重建操作类似。奇偶校验重建模块2116类似于数据重建模块2114运行,除了奇偶校验重建模块2116重建奇偶校验数据段。恢复的奇偶校验数据段与存储在分配给条带的不可用奇偶校验-镜像存储设备1602上的不可用奇偶校验数据段相匹配。
在不同的实施方式中,通过下述方法恢复所述奇偶校验数据段:复制存储在镜像存储设备集的奇偶校验-镜像存储设备1602上的所述奇偶校验数据段、从存储设备集1604的奇偶校验-镜像存储设备1602复制所述奇偶校验数据段(如果与不可用奇偶校验数据段一致)、利用存储在存储设备集1604的可用存储设备150、1602和包含数据段的拷贝的镜像存储设备上的N个数据段中的一个或多个和奇偶校验数据段生成所述奇偶校验数据段,等等。数据重建模块2116可驻留在下列设备上并运行和存储恢复的数据段::客户端114、第三方RAID管理设备、存储设备150、镜像存储设备等等。
有利地是,装置2100并不限于在存储设备150、1602中将数据存储至用于此处描述的前端分布式RAID操作的分区。作为替代的是,自主存储设备(如150a)可独立地接收来自客户端114的将经RAID或未经RAID的数据存储在存储设备150a的一个或多个区域中,存储设备150a依然可被条带化关联模块2104、奇偶校验-镜像关联模块2106和前端奇偶校验生成模块2110用于存储数据。
在一种实施方式中,由存储请求接收器模块2102接收的或由存储请求发送器模块2108发送的一个或多个存储请求识别包括条带的存储设备集1604的存储设备150。有利地是,如果主控制器丧失功能,在存储请求中识别存储设备集1604的存储设备150有助于备份RAID控制器运行。例如,如果存储设备集1604的存储设备150在存储请求中被识别并且位于奇偶校验-镜像存储设备1602中的所述主控制器不可用,另一个奇偶校验-镜像存储设备1602或N个存储设备150a-n中的另一个可以成为所述主控制器。
在一种实施方式中,装置2100包括奇偶校验更替模块2118,该奇偶校验更替模块2118为每个条带变更被分配为用于所述条带的奇偶校验-镜像存储设备1602的存储设备集1604中的存储设备150。奇偶校验更替模块2118的优点已在上文中描述。在另一种实施方式中,存储设备集1604的存储设备150形成对等群组,并且装置2100包括对等通信模块2120,该对等通信模块2120在存储设备集1604的存储设备150、1602内发送并接收存储请求。对等通信模块2120还可在存储设备集1604外部的对等设备中发送并接收存储请求。
在一种优选实施方式中,所述存储请求是通过利用装置2100的模块2102-2120在存储设备1604的存储设备150、1602之间条带化对象的数据来存储对象的对象请求。在另一种实施方式中,存储设备集1604的自主存储设备150、1602中的一个或多个被分配到第一RAID群组中用于第一对象或文件的至少一部分,并被分配到第二RAID群组中用于第二对象或文件的至少一部分。例如,一个存储设备150a可以是用于一个或多个条带的存储设备集1604的主RAID控制器,而第二存储设备150b可以是用于包括了存储设备集的一些或全部存储设备150的RAID群组的主RAID控制器。有利地是,装置2100允许灵活的分组存储设备150、1602以形成不同客户端114的RAID群组。
图12是示意性流程图,示出了根据本发明的用于前端分布式RAID的方法2200的一种实施方式。方法2200始于步骤2202,存储请求接收器模块2102接收将数据存储在存储设备集1604的存储设备150a-n中的存储请求(步骤2204)。条带化关联模块2104计算用于所述数据的条带模式(步骤2206)并将N个数据段中的每一个数据段与N个存储设备150a-n中的一个关联(步骤2208)。
奇偶校验-镜像关联模块2106将N个数据段的集与一个或多个偶校验-镜像存储设备1602关联(步骤2210)。存储请求发送器模块2108将一个或多个存储请求发送给存储设备集1604中的每一个存储设备150、1602(步骤2212)。每个存储请求足以将与接收所述存储请求的存储设备150关联的一个或多个数据段存储在存储设备150上。然后,所述数据的数据段像被所述存储请求指令一样利用DMA、RDMA、广播、组播等技术被传送给存储设备集1604的存储设备150、1602。可选择地,前端奇偶校验生成模块2110为条带计算奇偶校验数据段(步骤2214),方法2200结束于步骤2216。
共享的、前端、分布式RAID
传统的RAID利用磁盘或其他存储设备的阵列,其中,所述存储设备中的每一个的至少一部分被用于RAID并形成RAID群组。RAID控制器管理传送到所述RAID群组的存储语法。对于冗余系统来说,RAID控制器具有备用RAID控制器,如果主RAID控制器出现故障或不可用,该备用RAID控制器准备好接管主RAID控制器。来自试图访问存储在RAID中相同数据的多个客户端的存储请求按到达的顺序被顺序地执行。
前端、分布式的RAID系统包括自主存储设备,所述自主存储设备中的每一个都包括起分布式RAID控制器作用的存储控制器,并且所述存储设备均能被配置在多个、重叠的、服务多个客户端的RAID群组中。必要的时候,两个客户端可试图访问相同的数据。如果一个存储请求先到达并执行,通常就不会出现数据的不一致。另一方面,如果用于同一数据的两个或更多个存储请求同时到达或几乎同时到达,数据可能会被损坏。
例如,如果数据存储在RAID群组中的四个存储设备中,其中,所述存储设备中的一个被指定为奇偶校验-镜像存储设备,第一客户端将存储请求发送给作为RAID控制器的第一存储控制器,第二客户端将第二存储请求发送给作为第二RAID控制器的第二存储设备,并且这两个存储请求访问相同的数据,所述第一存储设备可开始在所述第一存储设备上执行所述存储请求,然后,在RAID群组中的另一个存储设备上执行所述存储请求。同时,第二存储设备上的所述第二RAID控制器可开始在另一个存储设备上执行所述第二存储请求,然后,在RAID群组中余下的存储设备中执行所述第二存储请求。这种执行上的不匹配可能是由于下述原因:存储设备之间的物理距离、执行时间不一致,等等。这种方法可能会损坏数据。
需要一种用于处理访问相同数据的并发存储请求的共享的、前端、分布式RAID的系统、装置和方法。有利地是,这种系统、装置和方法可控制访问数据,使得执行完一个存储请求后再执行第二存储请求。
图10是示意性框图,示出了根据本发明的充当用于共享的、前端分布式RAID(除了渐进式RAID和前端分布式RAID之外)的系统1600的一种实施方式。上文中对图16中相对于渐进式RAID和前端分布式RAID描述的组件的说明同样适用于共享的前端分布式RAID。正如前端分布式RAID一样,存储设备集1604形成RAID群组并包括存储设备150,存储设备自主运行并能够独立地通过网络116接收并服务来自客户端114的存储请求。
对于共享的、前端分布式RAID,系统1600包括两个或更多个客户端114,从而两个或更多个客户端114中的每一个发送涉及相同数据的存储请求。所述存储请求是并发的,这是由于所述存储请求的到达使得在另一个存储请求到达之前,一个存储请求还没有完成。存储设备集1604的存储设备150之中的一个或多个被指定为用于条带的奇偶校验-镜像存储设备1602。通常,一个或多个奇偶校验-镜像存储设备1602的功能大体上类似于其他存储设备150。
在典型的配置中,指定的奇偶校验-镜像存储设备1602在存储设备集1604的存储设备150之间轮换,奇偶校验-镜像存储设备1602实质上具有与其他存储设备150相同的特点,这是因为奇偶校验-镜像存储设备1602也必须像非奇偶校验-镜像存储设备一样运行。类似的特点是相对于上述的RAID群组内的操作和用于客户端114独立通信的自主操作。在不同的实施方式中,存储设备集1604的存储设备150可在其他方面(不涉及所述RAID环境下的功能)不同。
存储设备集1604的存储设备150可以是独立的、可以是在一个或多个服务内成组的、可每一个驻留在一个服务器112内、可通过一个或多个服务器11被访问,等等。一个或多个客户端114可驻留在包括一个或多个存储设备150的服务器112内、可驻留在独立的服务器112内、可驻留在通过一个或多个计算网络116访问存储设备150的计算机、工作站、笔记本电脑等设备内,或位于类似设备内。
在一种实施方式中,网络116包括系统总线,并且存储设备集1604中的一个或多个存储设备150、1602通过所述系统总线通信。例如,系统总线可以是PCI-e总线、串行高级技术附件(“串行ATA”)总线、并行ATA或类似总线。在另一种实施方式中,所述系统总线是外部总线,如小型计算机系统接口(“SCSI”)、火线、光纤通道、USB、PCIe-AS、无限带宽或类似总线。本领域技术人员会意识到具有存储设备150的其他系统1600配置,其中,存储设备150自主运行,并能够独立地通过网络116接收和服务来自客户端114存储请求。
图13是示意性框图,示出了根据本发明的用于共享的、前端分布式RAID的装置2300的一种实施方式。在不同的实施方式中,装置2300包括多存储请求接收器模块2302、条带化模块2304、奇偶校验-镜像模块2306、定序器模块2308、主验证模块2310、主确定模块2312、主错误模块2314、奇偶校验生成模块2316和奇偶校验更替模块2318,这些模块在下文中描述。
装置2300包括多存储请求接收器模块2302,该多存储请求接收器模块2302接收来自至少两个客户端114的至少两个存储请求,以将数据存储在存储设备集1604的存储设备150中。所述数据包括文件的数据或对象的数据。与装置有关的存储请求中的每一个至少具有一部分共有数据,此外,所述存储请求是并发存储请求,这是由于所述存储请求的到达使得在另一个存储请求到达之前,一个存储请求还没有完成。这些并发的存储请求具有损坏前端分布式RAID系统1600的共有数据的风险。在一种实施方式中,所述并发的存储请求可来自一个客户端114。在另一种实施方式中,所述并发的存储请求来自两个或更多个客户端114。
多存储请求可更新存储在存储设备集1602的存储设备150上的一个或多个数据段,其中,条带化模块2304将预先存储的数据条带化为存储在存储设备集1604的存储设备150上的数据段。在一种实施方式中,存储请求将所述数据第一次写入RAID群组。在这种情况下,所述数据通常会存在于其他位置,并可通过一个或多个服务器114访问,然后,一个存储请求将所述数据复制到RAID群组,而另一个存储请求同时访问所述数据。
多存储请求可包括一个更新存储在存储设备集1604的存储设备150上的一个或多个数据段的请求,还可包括目标为至少一部分共有数据的的一个或多个读取请求。如果更新请求没有完成,则存储设备集1604的存储设备150返回的读取请求可由预先存在和损坏所述数据的已更新数据的结合组成。
装置2300包括条带化模块2304,该条带化模块2304计算(为每个并发存储请求)用于所述数据的条带模式,并将N个数据段写入存储设备集1604的N个存储设备150a-n。所述条带模式包括一个或多个条带,每个条带包括N个数据段的集。N个数据段中的每一个被写入存储设备集1604中的不同的存储设备150并被分配给所述条带。装置2300包括奇偶校验-镜像模块2306,该奇偶校验-镜像模块2306(为每个并发存储请求)将所述条带的N个数据段的集写入被指定为奇偶校验-镜像存储设备1602的存储设备集1604中的存储设备150。奇偶校验-镜像存储设备1602是除N个存储设备150a-n之外的设备。
条带化模块2304还用于计算一个或多个存储设备150a-n的一致性,其中,一个或多个作为文件或对象的一部分的数据段读取自一个或多个存储设备150a-n。
装置2300包括定序器模块2308,该定序器模块2308确保来自第一客户端114的第一存储请求完成之后才执行来自第二客户端的第二存储请求,其中,至少两个并发存储请求包括第一和第二存储请求。在其他实施方式中,定序器模块2308确保所述第一存储请求完成之后才执行两个或多个其他并发存储请求。有利地是,定序器模块2308有助于并发存储请求的顺序执行,从而避免损坏数据。在一种实施方式中,定序器模块2308通过下述方法协调并发存储请求的执行:利用所述的存储请求必须访问所述数据的主控制器、利用锁止系统、两阶段提交或本领域技术人员熟知的其他方法。下文描述了定序器模块2308使用的一些方法。
在一种实施方式中,定序器模块2308通过下述方法确保所述第一存储请求完成之后才执行并发存储请求:接收来自存储设备集1602的存储设备150中的每一个的应答,其中,存储设备150在执行第二存储请求之前与一起接收第一存储请求和存储请求。通常,应答确认存储请求已完成。在一种实施方式中,存储设备150中受所述存储影响的每一个设备被写入,且在定序器模块2308开始执行第二存储请求之前从每个存储设备150接收应答。
在一种实施方式中,完成存储请求可包括执行单个存储设备(如150a)上的等待中的第二存储请求的一部分之前,完成指令单个存储设备(如150a)的第一存储请求的一部分。定序器模块2308可独立地验证存储设备150上的存储请求的一部分是否完成。在这种实施方式中,写入涉及第一存储请求的数据段直到所述第一存储请求的所有数据段被完成后才需要被延迟。定序器模块2308可协调发生在存储设备集1604的存储设备150上的不同请求的执行以确保所述数据不被损坏。
在一种实施方式中,在条带化模块2304和奇偶校验-镜像模块2306都将与存储请求有关的所述数据段写入存储设备集1604的存储设备150后,接收存储请求完成的应答。在另一种实施方式中,在条带化模块2304和奇偶校验-镜像模块2306都将与存储请求有关的所述数据段写入存储设备集1604的存储设备150且存储设备150、1602中的每一个都确认所述数据段已经被写入后,接收存储请求完成的应答。
在一种实施方式中,定序器模块2308通过在首先到达的并发请求之间选择存储请求选择用于执行的第一存储请求。在另一种实施方式中,定序器模块2308通过选择具有较早的时间戳的存储请求选择用于执行的第一存储请求。在另一种实施方式中,定序器模块2308通过使用一些选择标准选择存储请求选择用于执行的第一存储请求。例如,定序器模块2308可选择以某种方式被请求客户端114标记为高优先级的存储请求、可选择来自优先客户端114的存储请求,等等。本领域技术人员会认识到定序器模块2308可利用一些选择标准选择第一存储请求的其他方法。
在一种实施方式中,存储请求接收器模块2302、条带化模块2304、奇偶校验-镜像模块2306和定序器模块2308是主控制器(未示出)的部分,该主控制器控制并服务所述并发存储请求。所述主控制器的全部或部分可驻留并运行在下述设备内:客户端114、第三方RAID管理设备、存储设备集1604的存储设备150或存储设备150的存储控制器152。通过使用主控制器用于为所述数据执行服务请求,定序器模块2308可获悉指令所述数据的存储请求并可随后识别并发存储请求,然后还可将所述并发存储请求按下述要求排序:存储在存储设备集的存储设备150上的数据不会被损坏。本领域技术人员会认识到控制服务指令所述数据的存储请求的主控制器的其他实现方式。
在另一种实施方式中,所述主控制器是两个或更多个能够服务来自一个或多个客户端114的所述并发存储请求的主控制器的群组的一部分,其中,所述存储请求是指令存储在存储设备集1604的存储设备150上的所述数据。例如,主控制器可为第一客户端114服务存储请求,而第二主控制器可为第二客户端114服务存储请求。第一和第二客户端114都可访问存储在存储设备集1604的存储设备150上的数据,因此允许并发存储请求。一个主控制器可以是存储设备150a的一部分,而其他主控制器可以的第二存储设备150b的一部分。在另一种实施方式中,第一主控制器可以是第一存储设备集1604a一部分,而第二主控制器可以是镜像存储设备集1604b的一部分。
在主控制器是访问存储设备集1604的存储设备150的主控制器群组的一部分的情况下,装置2300可包括主验证模块2310,该主验证模块2310在执行接收到的存储请求之前确认服务所述接收到的存储请求的主控制器正在控制先于一个或多个并发存储请求的执行的所述存储请求的执行。在这种实施方式中,其他主控制器接收所述并发存储请求,并且服务请求至少有一部分数据与其他主控制器接收到的并发存储请求相同。
例如,主控制器可接收存储请求,然后,主验证模块2310可在所述存储请求执行前轮询其他主控制器以验证所述主控制器仍然是用于所述存储请求的数据的主控制器。验证的一部分包括验证所述主控制器之间能够通信,从而指定的主控制器在所述存储请求执行之前被验证。这种方法可在一个前端RAID控制器被指定为主控制器而另一个前端RAID控制器被指定为备用控制器的情况下是有利的。在另一个实例中,主控制器可接收从文件或对象读取数据段的存储请求,然后主验证模块2310可轮询其他主控制器,从而验证没有进行中的文件或对象的更新。在另一个实例中,主控制器可使用主验证模块以获取控制用于所述存储请求的数据。
一种验证所述主控制器仍然是用于执行所述存储请求的主控制器的方法是:使用三路轮询方案,其中两个设备/控制器必须能够用于投票选出用于存储请求的主控制器,以便于继续轮询。这种方案使用对竞争成为主控制器的控制来说是第三方的设备(未示出),并且保留哪一个控制器被分配为主控制器的记录。这个主验证设备可以是另一个控制器、服务器上的客户端114等等,并能够与群组中可充当主控制器的控制器通信。然后,主验证模块2310的一部分可驻留在所述主验证设备内,而主验证模块2310的一部分位于每个控制器内。
在一个实例中,系统1600包括第一前端分布式RAID控制器(“第一控制器”)、第二前端分布式RAID控制器(“第二控制器”),其中的每一个控制器都可以是主控制器和分享的主验证设备。第一和第二控制器和主验证设备之间都可相互通信。主验证模块2310可将第一控制器指定为主控制器而把第二控制器指定为用于存储在存储设备集1604的存储设备150上的数据的备用控制器,并且主验证模块2310可将主控制器的信息存储在控制器和主验证设备上。只要保持第一控制器、第二控制器和主验证设备之间的通信,主验证模块2310就能够确认第一控制器为主控制器。
如果第一(主)控制器接收存储请求,第二(备用)控制器变得不可用或与第一控制器和主验证设备的通信丢失,主验证模块2310能够通过主验证设备和第一(主)控制器之间的通信验证所述第一控制器仍然是主控制器,并且由于第一控制器和主验证设备都确认所述第控制器确实是主控制器,主验证模块2310可允许存储请求继续进行。由第二(备份)控制器接收的存储请求不会继续进行,这是由于第二控制器通过主验证模块2310识别到其不是主控制器。
另一方面,如果第一(主)控制器不可用或不能与第二(备份)控制器和主验证设备通信,并且第二(备份)控制器接收存储请求,主验证模块2310能够识别到第二控制器和主验证模块不能与第一控制器通信,并且主验证模块2310能够指定第二(备份)控制器为主控制器,存储请求也得以继续进行。然后,主控制器指定的改变被记录在第二控制器上。
如果第一控制器是操作性的,并与第二控制器和所述主验证设备完全断开通信,用于第一控制器接收的数据的任何存储请求将不会被执行。如果通信恢复,第一控制仍然不会执行存储请求,这是由于所述第二控制器和所述主验证模块都将第二控制器识别为主控制器。当然,这种主控制器指定可以被重置。本领域技术人员会认识到分配和重新分配主控制器指定给主控制器中的一个。
如果主验证设备不可用且第一存储控制器接收存储请求,主验证模块2310运行在第一和第二控制器上的部分能够验证所述第一控制器是主控制器,并且存储请求可继续进行。如果所述第二控制器接收存储请求,主验证模块2310运行在第一和第二控制器上的部分能够验证所述第一控制器是主控制器,并且存储请求不会再继续进行。在其他实施方式中,不止两个的控制器是轮询方案的一部分。本领域技术人员会认识到主验证模块2310能够在执行存储请求之前验证控制器是主控制器的其他方法。
在另一种实施方式中,装置2300包括主确定模块2312。在发送存储请求之前,主确定模块2312将主确定请求发送给主控制器群组。然后,主控制器群组识别哪一个控制器被指定为用于存储请求的主控制器,并将标识主控制器的响应发回主确定模块2312。主确定模块2312为所述存储请求接收主控制器的标识符并指令所述请求设备将存储请求发送给指定的主控制器。在一种实施方式中,主确定模块2312位于并运行在客户端114内。在另一种实施方式中,主确定模块2312位于第三方RAID管理设备内并在其内执行请求。在另一种实施方式中,主确定模块2312位于存储设备150内。在另一种实施方式中,主确定模块2312分布在两个或更多个存储设备150之间。
在又一种实施方式中,装置2300包括返回错误指示的主错误模块2314。在一种实施方式中,如果由主控制器控制的多存储请求接收器模块2302接收到不由主控制器控制的存储请求,主错误模块2314返回错误指示。
在另一种实施方式中,如果主确定模块2312或主验证模块2310在所述存储请求执行完成时确定主控制器不再是确定的主控制器,主错误模块2314返回错误指示。这种实施方式通常发生在当主控制器开始执行存储请求并与群组中的其他主控制器的通信丢失时,或者发生在轮询方案中的与其他主控制器和主验证设备的通信丢失时。在另一种实施方式中,如果由主控制器控制的多存储请求接收器模块2302接收不由所述主控制器控制的存储请求,主错误模块2314返回错误指示。
在另一种实施方式中,主控制器控制传送给一个或多个次级主控制器的存储请求。每个所述次级主控制器控制用于存储在存储设备集1604的存储设备150、1602上的数据的存储请求。在另一种实施方式中,控制所述次级主控制器的主控制器也是用于指令存储在存储设备集1604的存储设备150、1602上的数据的存储请求的次级主控制器。
在另一种实施方式中,主控制器控制传送给一个或多个次级主控制器的存储请求,并且每个所述次级主控制器控制用于存储在对所述次级主控制器来说唯一的存储设备集的存储设备150上的数据的存储请求。装置2300是灵活的,从而任何主控制器都能够成为相对于其他作为次级主控制器的控制器的主控制器。一些次级主控制器能够存储设备集1604,而其他次级主控制器能够控制不同的存储设备集。在另一种实施方式中,主控制器可以是奇偶校验-镜像存储设备1602或N个存储设备150a-n中的一个。
在另一种实施方式中,当所述主控制器离线或不能确定其是指定的主控制器时,次级主控制器可以成为主控制器。本领域技术人员会认识到用于在一个或多个次级主控制器之间分配或重新分配主控制器指定的各种静态和动态的方法。
在一种优选实施方式中,装置2300包括奇偶校验生成模块2316,该奇偶校验生成模块2316为所述条带计算奇偶校验数据段并将所述奇偶校验数据段存储在奇偶校验-镜像存储设备1602上。由奇偶校验-镜像存储设备1602上的N个数据段的集计算奇偶校验条带。这种实施方式通常通过RAID5、RAID6或其他RAID级别(但通常不包括RAID0、RAID1、RAID10等等)实现。
在另一种优选实施方式中,装置2300包括奇偶校验更替模块2318,该奇偶校验更替模块2318为每个条带变更被分配为一个或多个用于所述条带的奇偶校验-镜像存储设备1602的存储设备集1604中的存储设备150。轮换每个条带的奇偶校验数据段提升了性能。奇偶校验更替模块2318可与条带化模块2304一起使用,以计算一个或多个存储设备150a-n之间的一致性,作为文件或对象的一部分的一个数据段从一个或多个存储设备150a-n中读取、写入或更新。
不同的模块2302-23018的功能可一起在单个主控制器中实现,或者可分布在下述设备之间:一个或多个客户端114、第三方RAID管理设备和一个或多个存储设备150、1602。本领域技术人员会认识到此处描述的功能是分布式的不同的实施方式。
图14是示意性流程图,示出了根据本发明的用于共享的、前端分布式RAID的方法2400的一种实施方式。方法2400始于步骤2402,多存储请求接收器模块2302接收来自至少两个客户端114的至少两个存储请求(步骤2404),以读取数据或将数据存储在存储设备集1604中的存储设备150。所述数据来自文件,或者是对象的数据,并且每个所述存储请求具有至少一部分共有的数据,并且,所述存储请求是并发存储请求,这是由于所述存储请求的到达使得在一个存储请求到达之前,两个存储请求中的另一个存储请求还没有完成。条带化模块2304为所述数据计算条带模式(步骤2406),其中,所述条带模式包括一个或多个条带并且每个条带包括N个数据段的集。条带化模块2304还读取条带的N个数据段,或将条带的N个数据段写入存储设备集1604中的N个存储设备150a-n(步骤2408),其中,N个数据段中的每一个都被写入或读取自独立的存储设备150。
当所述存储请求是写入操作时,奇偶校验-镜像模块2306将所述条带的N个数据段的集写入存储设备集1604中的一个或多个奇偶校验-镜像存储设备1602(步骤2306),其中,奇偶校验-镜像存储设备1602是除N个存储设备150a-n之外的设备。奇偶校验-镜像模块2306还读取存储在奇偶校验-镜像存储设备1602中的数据段或奇偶校验数据段(2410)。定序器模块2308确保来自第一客户端114的第一存储请求完成后才执行来自第二客户端114的存储请求。方法2400结束于步骤2416。第一和第二存储请求是并发存储请求。
本发明可采用其他指定形式实施而不脱离本发明的宗旨或本质特点。描述的实施方式在各个方面被视为仅仅是示例性而不是限制性的。因此,本发明的范围由附属的权利要求确定,而不是由上述说明书确定。在本发明的权利要求的含义和等价范围内的所有改变被包含在本发明的保护范围内。
在多个独立主机之间共享的设备
传统上,例如网络接口(网络接口卡或者“NIC”)、存储设备、图形卡等等之类的计算机元件通过系统总线连接于主计算机的处理器上。传统的系统总线受限于可被连接的设备的数目,其作用有点类似于物理上连接到有限设备上的一组导线。例如小型计算机系统接口(“SCSI”)、电气与电子工程师协会(“IEEE”)1394(FireWire)、光纤信道、通用串行总线(“USB”)、外设组件互连表示(“PCI-e”)总线、串行高级技术附件(“serial ATA”)总线等等之类的一部分系统总线协议允许连接外部设备。
诸如PCIe之类的许多现代系统总线采用点到点连接性和开关芯片以互连多个设备,同时保留传统系统总线的功能。然而,当连接到系统总线的诸如存储设备、网络接口(网络接口卡或者“NIC”)等等之类的设备在多个设备之间共享时,共用设备通常通过单个主机来控制。试图访问共享设备的、来自其它主机的数据和命令经由该主机传递给共享设备,以及来自共享设备的数据和命令通过控制主机传回其他主机。这样一来效率很低,因为请求主机没有能力直接与共享设备相通信以进行数据传送。这个妨碍了在请求主机和共享设备之间进行直接存储器存取(“DMA”)传送和远程DMA(“RDMA”)传送。
根据上述讨论,显然需要一种装置、系统和方法,其允许在多个主机之间共享设备,其中经由系统总线在主机和共享设备之间传送数据,所述系统总线独立于连接到系统总线的其它主机。有利地是,这种装置、系统和方法允许命令代理主机在共享设备和请求主机之间建立数据路径、并且此后担当用于建立数据传输的选择命令的代理。
图15是示意性框图,示出了根据本发明的用于在多个主机之间共享的设备的系统2500的一种实施方式。该系统包括命令代理主机2502、一个或多个其他主机2504、和经由系统总线2508连接的共享设备2506,如下所述。该系统还包括计算机网络116、服务器112、客户机114和存储设备150,其基本与如上所述类似。
每一个命令代理主机2502和其他主机2504通常都包括操作系统的独立映像,因此每一个主机2502、2504都独立于其他主机2502、2504地执行操作系统。在一个实施方式中,一个或多个主机包括独立的虚拟计算机,所述虚拟计算机具有在虚拟机层上运行的一个或多个操作系统。主机2502、2504包括一个或多个处理器且被包括于服务器112、计算机或者能够运行操作系统的其它设备中。在一个实施方式中,一个或多个主机2502、2504在一台计算机中,例如大型计算机中。在另一个实施方式中,至少一个主机2502、2504物理上与其他主机2502、2504分离。
在一个实施方式中,命令代理主机2502包含根端口(root port)。在另一个实施方式中,命令代理主机2502运行在两个或多个主机2504中之一上。在另一个实施方式中,命令代理主机2502运行在第三方元件中,所述第三方元件用于管理到独立于主机2504的共享设备2506的命令。在又一个实施方式中,命令代理主机2502运行在组合了根端口、一个主机2602、共享设备2506和用于管理命令的第三方元件的设备中。根和根端口此处可互换使用,以及根和根端口包括根端口和相关处理、处理器等等。所属领域技术人员应当承认由系统总线2508连接到共享设备2506的两个或多个主机2502、2504的其它组成。
对于特定的共享设备2506,主机2502、2504之一被指定为能够与其他主机2504和共享设备2506都进行通信的命令代理主机2502。通常,命令代理主机2502能够为来自共享设备2506的中断提供服务。在所属领域技术人员公知的许多组成上都可采用中断。在一个实施方式中,中断包括表示共享设备2506具有要传送给主机2504的数据或者已经向主机2504传送了数据的信息。命令代理主机2052能够与主机2504和共享设备2506通信。通信可以是控制请求和/或数据传输。所属领域技术人员应当承认对指定的命令代理主机2502所共有的其它特性和功能。
系统2500包括连接到系统总线2508的至少一个共享设备2506。共享设备2506可以是存储设备150、网络接口156、图形显示驱动器、输入/输出(“I/O”)适配器、或者能够连接到系统总线2508且能够在主机2502、2504之间共享的其它设备。除了共享设备2506之外,其它设备也可连接到系统总线2508。
在一个实施方式中,共享设备2506是连接到计算机网络116和其它设备的网络接口156,诸如客户机114、服务器112、存储设备150等等。作为网络接口156,共享设备2506通常在主机2502、2504与诸如客户机114、服务器112或者存储设备150之类的另一个设备之间传送数据和控制请求,以及共享设备2506通常担任运行在计算机网络116上的网络协议与系统总线2508之间的桥。所属领域技术人员应当承认其它适当的共享设备2506和配置。
系统2500包括连接到主机2502、2504和共享设备2508的系统总线2508。系统总线2508可以是单个系统总线2508或者多条总线。系统总线2508能够在主机2502、2504之间以及在主机2502、2504与共享设备2506之间发送控制命令,以及能够允许在主机2504与独立于命令代理主机2502的共享设备2506之间进行直接数据传送。可以使用先进系统总线协议,诸如PCI-e、PCI-e先进切换(“PCIe-AS”)、Infiniband等等。其中系统总线2508是PCI-e总线,在一个实施方式中,共享设备2506支持PCI-e输入/输出虚拟化(“PCIe-IOV”)。其中共享设备2506支持PCIe-IOV,主机2602、2604可在一个或多个环境中的单个环境内共享共享设备2506。所属领域技术人员应当承认其它系统总线2508配置和类型,其允许控制请求且允许在主机2504与独立于命令代理主机2502的共享设备2506之间进行直接数据传送。
在一个实施方式中,共享设备2506是第一存储设备150a,指定的命令代理主机2502是第一服务器112a,其他主机2504是运行在服务器112a或者其它客户机114上的客户机114a。在另一个实施方式中,共享设备2506是第一网络接口156a,命令代理主机2502是第一存储设备150a,其他主机2504是包括第一存储设备150a的第一服务器112a、或者另一个客户机114a、114或者第二存储设备150b。这些实施方式可被配置成类似于相对于图1C的如上所述的in-server SAN系统103。如上所述,第一存储设备150a是具有固态存储控制器104的固态存储设备102,或者是硬盘驱动器、光盘驱动器等等。
图16是示意性框图,示出了根据本发明的用于在多个主机之间共享的设备的命令代理主机中的装置2600的一种实施方式。在各个实施方式中,装置2600包括代理请求接收模块2602、代理请求命令模块2604、中断接收模块2606、中断发送模块2608、通信路径模块2610、标准设备仿真模块2612,如下所述。
在一个实施方式中,装置2600的全部或者一部分模块2602-2612包含于所描述的命令代理主机2502中。在另一个实施方式中,装置2600的全部或者一部分模块2602-2612在用于控制命令代理主机2502的另一个计算机、主机2604、服务器112、设备等等中。
装置2600包括代理请求接收模块2602,其接收来自请求主机(例如2504a)的代理请求。代理请求包括要由共享设备2506执行的控制请求。控制请求包括足够的信息,以便命令代理主机2502能够配置共享设备2506以在发送该代理请求的请求主机2504a与共享设备2506之间进行数据传送。该信息包括请求主机2504a或者共享设备2506的地址信息、数据标识符、数据长度、数据源和目标信息、中间缓冲器标识或者其它相关设备,以便允许命令代理主机2502配置共享设备2506以进行数据传送。代理请求可采用完全或者在某种程度上包括代理请求的中断请求的形式。
在一个实施方式中,代理请求包括足够的信息以便在共享设备2506与请求主机2504a之间建立DMA或者RDMA传送。在另一个实施方式中,代理请求包括足够的信息以建立数据的广播或者组播。所属领域技术人员应当承认代理请求中的其它相关信息以设置共享设备2506以便进行数据传送。代理请求包括足够的信息以便使命令代理主机2502设置共享设备2506,以便进行独立于命令代理主机2502而执行的数据传送。
代理请求接收模块2602使用代理请求中的信息,以便产生要被发送给共享设备2506并在共享设备2506上执行的控制请求以便建立数据传送。控制请求基本上不含有要在主机和共享设备之间传送的数据,而是通常包括要在共享设备2506上执行的控制信息。在一个实施方式中,由共享设备2506执行控制请求一次,以便共享设备2506成为与请求主机2504a进行一个以上的数据传送的一部分。例如,控制请求在初始化处理期间被执行,其允许共享设备2506和请求主机2504a随意参与到独立于命令代理主机2502的数据传送中。
在另一个实施方式中,必须为与数据传送有关的每一个代理请求发送控制请求。例如,系统总线2508具有比共享设备2506上的可用虚拟端口更多的设备,所以发送给共享设备2506的控制请求配置或者验证共享设备2506与请求主机2504a在的通信路径以便进行每一次数据传送。所属领域技术人员应当承认可以为要由共享设备2506执行的代理请求产生其它控制请求,以便允许在共享设备2506与请求主机2504a之间进行数据传送。
装置2600包括代理请求命令模块2604,其响应于接收该控制请求的代理请求接收模块2602而将该控制请求发送给共享设备。代理请求命令模块2604通常根据用于标识该共享设备2506的、代理请求中的地址信息或者其它标识信息来发送该控制请求。代理请求接收模块2602和代理请求命令模块2604合作设置共享主机2506以进行由请求主机2504a发起的数据传送。
中断接收模块2606和中断发送模块2608合作以允许在共享设备2506与主机2504之间进行由共享设备2506通过中断方式发起的直接数据传送。中断接收模块2606接收来自共享设备2606的中断。该中断包括表示共享设备具有要发送到主机2504的数据和/或已经将数据发送给主机2504的信息。例如,如果共享设备2506收到了要传送给主机2504的数据或者发起了到主机2504的数据传送,则共享设备2506会具有要传送的数据。在另一个例子中,如果主机2504正在期待数据,或者由于主机2504所发起的数据请求的关系,共享设备2506将数据传送给主机2504中的指定存储缓冲区,以及共享设备2506在表示传送结束的数据传送之后发送中断。
中断发送模块2608将包含于该中断中的信息发送给主机2504。该信息足以使收到该信息的主机2504继续进行收到该数据传输的处理。在一个实施方式中,该信息允许主机2504准备接收数据传送的数据。在另一个实施方式中,该信息允许主机2504识别出来自请求设备2506的数据传送已经完成、然后根据需要来使用该数据。在一个实施方式中,该信息使得主机2504识别出新存储缓冲区位置并将其直接或间接地经由命令代理主机传递给共享设备2506。在一个实施方式中,该信息源自于中断且被发送给主机2504。在另一个实施方式中,中断被转送给主机2504。所属领域技术人员应当承认包含于由中断发送模块2608所发送的中断以继续接收数据传输的处理的信息。
命令代理主机2502能够为中断提供服务。在一个实施方式中,命令代理主机2502可为来自共享设备2506的中断提供服务,而其他主机2504不能为来自共享设备2506的中断提供服务。在另一个实施方式中,命令代理主机2502能够为中断提供服务,但命令代理主机2502还被指定为来自共享设备2506的中断提供服务。
在优选实施方式中,主机2504与共享设备2506之间的数据传送与命令代理主机2502无关。在一个实施方式中,数据传送是主机2504与共享设备2506之间的DMA传送。在另一个实施方式中,主机2504和共享设备2506利用RDMA传送来传送数据。在一个实施方式中,数据传送由主机2504发起以便直接传送数据到共享设备2506中或从共享设备2506中传送数据或者建立DMA或者RDMA。在其他实施方式中,数据传送属于广播或者组播。在任何情况下,数据传送都与命令代理主机2502无关。
在一个实施方式中,装置2600包括路径模块2610,其用于确定通信路径是否存在于主机2504与共享设备2506之间。通信路径可以是数据路径或者命令路径或者二者皆是。如果不存在通信路径,则路径模块2610还创建通信路径。例如,如果系统总线2508具有比虚拟端口更多的连接设备,那么路径模块2610首先确定期望的通信路径是否存在于主机2504与共享设备2506之间,并且如果系统总线2508端口在主机2504与共享设备2506之间不配有通信路径就创建通信路径。
通常,路径模块2610响应于代理请求接收模块2602收到来自请求主机2504a的代理请求或者收到来自共享设备2506的中断来确定是否存在通信路径。由路径模块2610创建的通信路径足以在主机2504与共享设备2506之间进行数据传送或者进行请求控制或者二者皆有。在另一个实施方式中,路径模块2610收到代理请求或者中断并且在初始化期间一次创建通信路径。在另一个实施方式中,模块2610在每一次代理请求或者中断之后都要确定是否存在通信路径。所属领域技术人员应当承认路径模块2610确定是否存在通信路径然后若其不存在则创建该通信路径的其它时间。
在一个实施方式中,装置2600包括标准设备仿真模块2612,其在向主机2504加载专用于设备的操作的代码之前、将设备仿真成一个或多个的主机2504作为附接于系统总线2508的标准设备。标准设备由工业标准BIOS支持。在优选实施方式中,由标准设备仿真模块2612仿真的设备是共享设备2506。例如,如果共享设备2506包括由主机2504所支持的标准驱动器并不支持的功能,那么在初始化时、或者在标准设备仿真模块2612加载专用于共享设备2506的功能的驱动器之前,标准设备仿真模块2612仿真由主机2504支持的标准设备。在共享设备2506的驱动器加载到主机2504中之前,这个引导指令操作允许主机2504以一种有限的方式查看并访问共享设备2506。在一个实施方式中,标准设备仿真模块2612支持I/O虚拟化。
系统总线2508包括不透明端口。不透明端口能够在初始化期间阻断附着于该不透明端口的设备以及阻断设备发现操作,以便执行该发现/初始化的设备无法访问连接到该不透明端口的设备。在一个实施方式中,系统总线2508包括具有不透明端口的系统总线开关。在这个实施方式中,执行在主机2504上的第一初始化处理至少会发现对主机2504而言的命令代理主机2502,但不能发现共享设备2506。在该实施方式中,所发现的命令代理主机2602被标识为至少可与用于执行第一初始化处理的主机2504进行通信,以作为第一初始化处理的结果。
在另一个实施方式中,执行在命令代理主机2502上的第二初始化处理至少发现对于命令代理主机2502而言的共享设备2506,其中共享设备2506被标识为至少可与命令代理主机2602相通信,以作为该初始化处理的结果。
例如,其中存储设备150访问独立于服务器112的网络接口156,不透明端口在由服务器112(担当命令代理主机2502)进行初始化处理期间隐藏网络接口156,但允许存储设备150被发现以进行通信。在这种情况下,存储设备150充当对于第一服务器112a而言的共享设备2506,而其它服务器112能够根据由第一服务器112a完成的发现来访问存储设备150。
在第二初始化处理中,网络接口156充当共享设备2506,存储设备150充当命令代理主机2502,因此在由充当命令代理主机2502和根的存储设备150进行的第二初始化处理中,存储设备150因而发现网络接口156以进行通信。然后存储设备150与独立于服务器112的网络接口156进行通信。在另一个例子中,服务器112充当命令代理主机2502以允许在存储设备150与网络接口156之间进行直接通信。
图17是示意性框图,示出了根据本发明的与用于在多个主机2502、2504之间共享的设备的共享设备2506有关的装置2700的一种实施方式。在各个实施方式中,装置2700包括共享设备控制请求接收模块2702、控制请求响应模块2704、和中断发送模块2706,如下所述。装置2700的全部或者一部分的每一个模块2702-2706都可以在共享设备2506中执行、或者在用于控制共享设备2506的另一个设备中执行。
装置2700包括共享设备控制请求接收模块2702,其在命令代理主机2502收到来自请求主机2504a的代理请求之后收到来自命令代理主机2502的控制请求。控制请求响应模块2704配置共享设备2506以进行请求主机2504a与共享设备2506之间的数据传送。控制请求不包括数据传送的数据,但可以包括足以在主机2504a与共享设备2506之间建立DMA或者其它数据传送操作的信息。控制请求可在共享设备2506中设置控制寄存器,或者可在共享设备2506与请求主机2504a之间配置通信路径。
装置2700包括中断发送模块2706,其向命令代理主机2502发送中断。然后中断被发送给主机2504,以及中断包括足够的信息以便主机2504继续接收数据传送的数据的处理。在一个实施方式中,在共享设备2506接收来自诸如存储设备150或者客户机114之类的另一个设备的数据之后,中断发送模块2706发送中断。在另一个实施方式中,中断发送模块2706发送中断以传送共享设备2506上的数据,例如其中共享设备2506是存储设备150。在另一个实施方式中,中断发送模块2706响应于来自主机2504的请求而发送中断。主机2504可请求数据、然后继续其它作业,然后当所请求的数据准备要发送时共享设备2506命令中断发送模块2706发送中断。所属领域技术人员应当承认中断发送模块2706发送中断的其它原因。
图18是示意性框图,示出了根据本发明的用于与在多个之间共享的设备的请求主机2504a相连接的装置2800的一种实施方式。装置2800包括代理请求发送模块2802、主机数据发送模块2804、主机中断接收模块2806、和主机数据接收模块2808,如下所述。装置2800的全部或者一部分的每一个模块2802-2808都可以在主机2504中执行、或者在用于控制主机2504的另一个设备中执行。
装置2800包括代理请求发送模块2802,其用于将来自请求主机2504a的代理请求发送给指定的命令代理主机2502。然后命令代理主机2502根据该代理请求将控制请求发送给共享设备2506。控制请求在共享设备2506上执行以设置共享设备2506在请求主机2504a与共享设备2506之间进行直接数据传送。
装置2800包括执行在请求主机2504a上的数据发送模块2804,其发起请求主机2504a与共享设备2506之间的数据传送。该数据传送与命令代理主机2502无关地执行。请求主机2504a可传送数据,或者直接或通过代理请求建立DMA或者RDMA传送。数据传送可以是对共享设备2506的,或者是对可通过共享设备2506访问的另一个设备的。所属领域技术人员应当承认请求主机2504a发起数据传送的其它方式,其中数据与命令代理主机2502无关地被传送。
在一个实施方式中,装置2800包括执行在主机上的主机2504中断接收模块2806,其接收来自命令代理主机2502的信息,即表示共享设备2506具有要发送给主机2504的数据和/或已经向主机2504发送了数据的信息。该信息源自于由命令代理主机2502从共享设备2506中接收的中断。然后主机数据接收模块2808继续进行接收数据传送的处理。该数据传送与命令代理主机2506无关地执行。其中共享设备2506具有要传送的数据,主机数据接收模块2808可设置缓冲区、向共享设备2506发送表示主机2504准备好进行数据传送等等的信号以继续进行数据传送处理。其中共享设备2506已经传送了数据,主机数据接收模块2808可发出表示传送结束的信号、可移动数据等等以继续并完成数据传送。
图19是示意性流程图,示出了根据本发明的用于在多个主机之间共享的设备的方法2900的第一种实施方式。方法2900开始于步骤2902,在步骤2904,代理请求接收模块2602接收来自请求主机2504a的代理请求。在步骤2906,代理请求命令模块2604向共享设备2506发送控制请求,方法2900结束于2908。控制请求由共享设备2506执行。从代理请求中产生控制请求,代并且控制请求足以配置共享设备2506以在共享设备2506和请求主机2504a之间进行数据传送。该数据传送与命令代理主机2502无关地执行。
图20是示意性流程图,示出了根据本发明的用于在多个主机之间共享的设备的方法3000的第二种实施方式。方法3000开始于步骤3002,在步骤3004共享设备控制请求模块2702接收来自命令代理主机2502的控制请求。在命令代理主机2502处从自请求主机2504a中接收到的代理请求中产生控制请求。在步骤3006,控制请求响应模块2704配置共享设备2506以在请求主机2504a和共享设备2506之间进行数据传送,方法3000结束于步骤3008。控制请求不包含数据传送的数据,数据传送独立于命令代理主机2502地执行。
图21是示意性流程图,示出了根据本发明的用于在多个主机之间共享的设备的方法3100的第三种实施方式。方法3100开始于步骤3102,在步骤3104,代理请求发送模块2802将来自请求主机2504a的代理请求发送到指定的命令代理主机2502。然后命令代理主机2502将从代理请求中产生的控制请求发送到共享设备2506。在步骤3106主机数据发送模块2804独立于命令代理主机2502地发起请求主机2504a和共享设备2506之间的数据传送,方法3100结束于步骤3108。代理请求不包括数据传送的数据。
能够RDMA的固态存储设备
数据存储设备可以处于计算机内部或者外部,通常用系统总线与计算机相连接。其中,存储设备在内部,系统总线可以是外围组件互连express(“PCI-e”)总线、串行高级技术附件(“串行ATA”)总线等等。其中存储设备是外部的,系统总线可以是通用串行总线(“USB”)连接、电气与电子工程师协会(“IEEE”)1394总线(“FireWire”)、等等。由客户机存取存储设备一般会经由计算机来实现。因为由客户机存取存储设备需要经由各种网络协议及软件层来进行导航,所以效率很低。
需要一种用于远程直接存储器存取(“RDMA”)固态存储设备的系统、装置及方法。有益地是,该系统、装置及方法允许在经由网络连接到固态存储设备的客户机存储器之间进行直接存取。
图22是示意性框图,示出了根据本发明的用于对固态存储设备102进行远程直接存储器存取(“RDMA”)的装置3200的一种实施方式。装置3200包括具有固态控制器104的固态存储设备102,所述固态控制器104用于通过存储器输入/输出(“I/O”)总线210来控制固态存储器110,基本上类似于如上所述那样。装置3200还包括RDMA建立模块3202、RDMA执行模块3204、具有RAID模块3208的分布式存储模块3206,如下所述。装置3200的模块3202-3208在固态存储控制器104中被描述,然而全部或一部分的每一个模块3202-3208可位于另一个位置并且可与固态存储控制器104相协作。
装置3200包括RDMA建立模块3202,其准备固态存储控制器104以进行RDMA操作,以便响应于存储请求在固态存储控制器104与请求设备155之间传送文件或对象的数据。存储请求基本上不含该存储请求中所指定的数据。请求设备155通过计算机网络116连接到固态控制器104。RDMA执行模块3204执行RDMA操作以在请求设备155和固态存储控制器104之间传送数据。
存储请求可以是对象请求、文件请求等等,以及通常包括足够的信息以使RDMA建立模块3202在请求设备155的内存与固态存储设备102之间建立RDMA操作。存储请求包括写入请求以将数据写入到固态存储器110中。在写入请求的情况下,RDMA操作直接从请求设备155的内存中接收存储请求中指定的数据。在优选实施方式中,RDMA操作从请求设备155的内存中取出数据以便存储在固态存储设备102上。
存储请求也包括读取请求以从固态存储器110中读取数据。在读取请求的情况下,RDMA操作直接将读取请求中指定的数据发送给请求设备155的内存。在优选实施方式中,RDMA操作将数据推入到请求设备155的内存中。
在一个实施方式中,固态存储控制器104管理存储在固态存储器中的一个或多个对象,以便将该对象对请求设备来说看作是对象文件系统或对象文件服务器中的对象。由固态存储控制器104进行的对象管理在上文已经进行了详细地描述。
在一个实施方式中,接收存储请求的固态存储控制器104是固态存储控制器104组中的第一控制器,其中第一控制器与其他固态存储控制器104相通信。控制器之间的通信基本上与相对于图1C中所描述的系统103中的in-serverSAN和相对于图2B中描述的实施方式201以及其他之处相类似。在实施方式中,装置3200包括分布式存储模块3206,其将存储请求中指定的数据的数据段与组中的每一个固态存储控制器104相关联,以及将存储子请求发送给组中的每一个固态控制器104。每个存储子请求都包括使接收固态控制器104在用于接收存储子请求的固态控制器104与请求设备155的内存之间以RDMA操作来传送相关数据段的信息。例如,存储请求包括数据段的位置和长度、文件或对象标识符、通信路径数据等等。
在另一个实施方式中,第一控制器104是冗余阵列独立驱动(“RAID”)控制器。在实施方式中,分布式存储模块3206包括RAID模块3208,其产生数据的数据条模式并且按照RAID级别将数据划分成每个数据条N个数据段。RAID模块3208根据数据条的N个数据段产生每一个数据条的校验数据段。在一个实施方式中,RAID控制器起一部分前端分布式RAID装置的作用,如由David Flynn等人在2007年12月6日提交的、名称是““Apparatus,System,andMethod for a Front-End,Distributed RAID”的美国专利申请11/952,116(在下文中称作“前端分布式RAID申请”)中所描述的,其通过参考引入于此。在一个实施方式中,存储请求来自such as另一个存储设备150、客户机114等等之类的第三方设备,以及然后在请求设备155与固态存储器110之间建立RDMA。在该前端分布式RAID申请中描述了这个实施方式。在另一个实施方式中,请求设备155发送存储请求以在固态存储器110与诸如客户机114,另一个存储设备150等等之类的第三方设备之间进行RDMA操作。
在一个实施方式中,固态存储器110是被分成两个或多个内存库214的非易失性存储元件阵列216、218、220,如上所述。在另一个实施方式中,固态存储器102和固态存储控制器104是配置于双列直插式内存模块(“DIMM”)中的固态存储器102的一部分,如上所述。在另一个实施方式中,固态存储器110是nano随机存取存储器(“nano RAM”或“NRAM”)、磁阻RAM(“MRAM”)、动态RAM(“DRAM”)、相变RAM(“PRAM”)、闪速存储器等等。
在另一个实施方式中,由固态存储控制器104所管理的固态存储器110充当数据存储设备150的高速缓冲存储器,诸如另一个固态存储器110、硬盘驱动器、光盘驱动器、以及磁带存储器、光盘(“CD”)存储器等等。在另一个实施方式中,数据存储设备150或者连接到固态存储控制器104或者与固态存储控制器104和固态存储器110集成在一起。
固态控制器104可通过系统总线连接到主机。主机可存取固态控制器104,以及独立于该存储控制器104的RDMA能力而将数据直接存储器存取(“DMA”)到存储控制器104。系统总线是外围组件互连express(“PCI-e”)总线、串行高级技术附件(“串行ATA”)总线、以太网总线、通用串行总线(“USB”)、电气与电子工程师协会(“IEEE”)1394总线,或其组合。固态控制器104可与网络接口156搭配,所述网络接口156允许通过计算机网络116与请求设备155相连接。
图23是示意性流程图,示出了根据本发明的用于对固态存储设备进行RDMA的方法3300的一种实施方式。方法3300开始于步骤3302,在步骤3304,RDMA建立模块3202准备固态存储控制器104以进行RDMA操作,以便响应于存储请求在固态存储控制器104与请求设备155之间传送文件或对象的数据。存储请求通常不包括文件或对象的数据。在步骤3306,RDMA执行模块3204执行RDMA操作以在请求设备155与固态存储控制器104之间传送数据,方法3300结束于步骤3308。
有利地是,RDMA创建通信路径方式,其与其中要横越全部软件层来存储数据相比更快、即占用更少的时间来存储或检索数据。虽然可利用快速路径将数据传送到固态存储器110,但是由存储请求沿着以建立RDMA的控制路径也可以相对于RDMA操作的速度而言是慢速路径。
为了实现在客户机114与一个或多个存储设备150、110之间进行高性能的数据传送,通常很重要的是将快速路径或数据路径与控制路径或慢速路径分开。采用RDMA的快速路径的基本目的是通过除去只要可能的特别是由软件进行的任何数据的复制、变换、分段、打包或其它操作,来降低等待时间并提高端对端带宽。为此,以尽可能直接的方式将数据从客户机114内存移动到存储器110、150中的对象存储系统,例如此处描述的装置3200,可以实现这些目的。
这例如与iSCSI相反,其中将对象或文件分段成块、封包到SCSI包中、进一步封包到IP信息包/数据包中、进一步封包到以太网信息包中、转送给网络并且在接收器处发生相反的处理。另外,在某种程度上按照这种方式,当数据经过一条或多条系统总线从内存或存储器移动到NIC中时数据(以任何的协议形式)被封包一次或多次时会发生附加的封包。通常,许多封包都在软件中发生。其中性能是要点,有可能通过具有一个或多个专门的控制器或者每个设备有一个业务卸载引擎(TOEs)而对处理器进行卸载。这些是对于仅去除数据的不必要处理的相对成本较大的替换方案。
最低要求的理想方法是使用由支持DMA的系统总线和支持RDMA的系统总线网络总线扩展(例如Infiniband)所采用本地封包作为数据的唯一操作。这需要更少的软件、更少的硬件,以及通常可能会提供最高的带宽和最小的等待时间。历史上,存储设备不处理这件事,因为存储设备的如此地不与系统总线的性能相匹配(相差很多数量级)。利用高性能固态存储器110,可消除这种不匹配,并且不利用系统总线和系统总线扩展的原理也不再保留。
虽然命令路径还能够从利用RDMA协议进行传送中获益,但它通常不象传送数据那样关键。更重要的是将控制路径与数据路径分离,以便硬件能够独立于软件控制地管理数据传送。为此,固态存储设备102能够利用RDMA在读取时推入数据并在写入时取出数据,这能够避免缓冲区管理问题,这一问题是许多存储器协议控制处理的基础。
在合理地假定当与拥有或将要拥有数据的客户机114处的内容空间相比时存储设备处的缓冲区空间很有限的基础上,使存储设备硬件管理缓冲器,数据的传送是理想的。这允许结合了一个或多个系统总线硬件和网络硬件的DMA/RDMA功能的存储设备硬件可独立于控制路径来处理数据的传送,同时保证缓冲区永不溢出、且数据在可行的理想时刻被移动。
本发明可采用其他指定形式实施而不脱离本发明的宗旨或本质特点。描述的实施方式在各个方面被视为仅仅是示例性而不是限制性的。因此,本发明的范围由附属的权利要求确定,而不是由上述说明书确定。在本发明的权利要求的含义和等价范围内的所有改变被包含在本发明的保护范围内。

Claims (17)

1.一种对固态存储设备进行远程直接存储器存取(“RDMA”)的装置,该装置包括:
RDMA建立模块,其准备固态存储控制器以进行RDMA操作、以便响应于存储请求在固态存储控制器与请求设备之间传送文件或对象的数据,存储请求基本上不含数据,固态存储控制器经由存储器输入/输出(“I/O”)总线控制固态存储器,固态控制器控制在固态存储器中存储数据,请求设备通过计算机网络连接到固态控制器;以及
RDMA执行模块,其执行RDMA操作以在请求设备和固态存储控制器之间传送数据。
2.如权利要求1所述的装置,其中,RDMA执行模块利用本地RDMA来执行RDMA操作。
3.如权利要求1所述的装置,其中,当存储请求包括写入请求时,RDMA操作直接从请求设备中的内存中接收数据,以及其中,当存储请求包括读取请求时,RDMA操作直接向请求设备中的内存发送数据。
4.如权利要求3所述的装置,其中,对于包括写入请求的存储请求来说,RDMA执行模块从请求设备的内存中取出数据,以及对于包括读取请求的存储请求,RDMA执行模块将数据推入到请求设备的内存中。
5.如权利要求1所述的装置,其中,固态存储控制器管理存储在固态存储器中的一个或多个对象其中管理对象对于请求设备来说看作是对象文件系统和对象文件服务器之一中的对象。
6.如权利要求1所述的装置,其中用于接收存储请求的固态存储控制器包括一组固态存储控制器中的第一控制器,该第一控制器与其他固态存储控制器相通信,以及进一步包括分布式存储器模块,其将数据的数据段与该组中的每一个固态存储控制器相关联并将存储子请求发送给组中的每一个固态控制器,每个存储子请求包括使接收固态控制器以RDMA操作的方式在用于接收存储子请求的固态控制器与请求设备的内存之间传送相关数据段的信息。
7.如权利要求6所述的装置,其中第一控制器包括冗余阵列独立驱动(“RAID”)控制器,分布式存储器模块进一步包括RAID模块,其产生数据的数据条模式并按照RAID级别将数据分成每个数据条N个数据段以及根据该数据条的N个数据段为每个数据条产生校验数据段。
8.如权利要求1所述的装置,其中,固态存储器包括被分成两个或更多存储体的非易失性、固态数据存储元件阵列。
9.如权利要求8所述的装置,其中固态存储器和固态存储控制器是被配置在双列直插式内存模块内(“DIMM”)的固态存储设备的一部分。
10.如权利要求8所述的装置,其中固态存储器包括闪速存储器。
11.如权利要求1所述的装置,其中由固态存储控制器管理的固态存储器进一步充当数据存储设备的高速缓冲存储器,数据存储设备包括一个或多个固态存储器、硬盘驱动器、光盘驱动器和磁带存储器。
12.如权利要求11所述的装置,其中数据存储设备是连接到固态存储控制器的一个设备并且与固态存储控制器和固态存储器集成在一起。
13.如权利要求1所述的装置,进一步包括连接系统总线上的系统总线连接,所述系统总线与主机相连接。
14.如权利要求13所述的装置,其中系统总线包括一个或多个外围组件互连express(“PCI-e”)总线、串行高级技术附件(“串行ATA”)总线、以太网总线、通用串行总线(“USB”)以及电气与电子工程师协会(“IEEE”)1394总线。
15.一种对固态存储设备进行远程直接存储器存取(“RDMA”)的系统,该系统包括:
固态存储设备,包括固态存储控制器和固态存储器,存储请求基本上不含数据,固态存储控制器经由存储器输入/输出(“I/O”)总线控制固态存储器,固态控制器控制在固态存储器中进行数据存储;
RDMA建立模块,其准备固态存储控制器以进行RDMA操作、以便响应于存储请求在固态存储控制器与请求设备之间传送文件或对象的数据,请求设备通过计算机网络连接到固态存储设备,存储请求基本上不含数据;以及
RDMA执行模块,其执行RDMA操作以在请求设备和固态存储控制器之间传送数据。
16.如权利要求15所述的系统,进一步包括与固态存储设备协作的网络接口,所述固态存储设备连接到固态存储控制器和计算机网络。
17.一种包括具有计算机可用程序代码的计算机可读介质的计算机程序产品,所述计算机可用程序代码可被执行以对固态存储设备进行远程直接存储器存取(“RDMA”)的操作,所述计算机程序产品的操作包括:
准备固态存储控制器以进行RDMA操作、以便响应于存储请求在固态存储控制器与请求设备之间传送文件或对象的数据,存储请求基本上不含数据,固态存储控制器经由存储器输入/输出(“I/O”)总线控制固态存储器,固态控制器控制在固态存储器中存储数据,请求设备通过计算机网络连接到固态控制器;以及
执行RDMA操作以在请求设备和固态存储控制器之间传送数据。
CN200780050983A 2006-12-06 2007-12-06 用于远程直接存储器存取固态存储设备的装置、系统及方法 Pending CN101657802A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US87311106P 2006-12-06 2006-12-06
US60/873,111 2006-12-06
US60/974,470 2007-09-22

Publications (1)

Publication Number Publication Date
CN101657802A true CN101657802A (zh) 2010-02-24

Family

ID=39492874

Family Applications (7)

Application Number Title Priority Date Filing Date
CN200780050983A Pending CN101657802A (zh) 2006-12-06 2007-12-06 用于远程直接存储器存取固态存储设备的装置、系统及方法
CN200780050969.8A Active CN101646993B (zh) 2006-12-06 2007-12-06 恢复固态存储器内的存储空间的装置、系统和方法
CN200780050989A Pending CN101622595A (zh) 2006-12-06 2007-12-06 用于服务器内的存储区域网络的装置、系统和方法
CN200780051027.1A Active CN101646994B (zh) 2006-12-06 2007-12-06 利用内存库交错管理固态存储器的命令的装置、系统及方法
CN200780050973.4A Active CN101622606B (zh) 2006-12-06 2007-12-06 用于作为大容量、非易失性存储器的高速缓存的固态存储器的装置、系统和方法
CN200780051034.1A Expired - Fee Related CN101636712B (zh) 2006-12-06 2007-12-06 在存储控制器内服务对象请求的装置、系统和方法
CN200780051020A Pending CN101622596A (zh) 2006-12-06 2007-12-06 使用空数据令牌指令管理存储设备中的数据的装置、系统和方法

Family Applications After (6)

Application Number Title Priority Date Filing Date
CN200780050969.8A Active CN101646993B (zh) 2006-12-06 2007-12-06 恢复固态存储器内的存储空间的装置、系统和方法
CN200780050989A Pending CN101622595A (zh) 2006-12-06 2007-12-06 用于服务器内的存储区域网络的装置、系统和方法
CN200780051027.1A Active CN101646994B (zh) 2006-12-06 2007-12-06 利用内存库交错管理固态存储器的命令的装置、系统及方法
CN200780050973.4A Active CN101622606B (zh) 2006-12-06 2007-12-06 用于作为大容量、非易失性存储器的高速缓存的固态存储器的装置、系统和方法
CN200780051034.1A Expired - Fee Related CN101636712B (zh) 2006-12-06 2007-12-06 在存储控制器内服务对象请求的装置、系统和方法
CN200780051020A Pending CN101622596A (zh) 2006-12-06 2007-12-06 使用空数据令牌指令管理存储设备中的数据的装置、系统和方法

Country Status (3)

Country Link
US (2) US7778020B2 (zh)
CN (7) CN101657802A (zh)
WO (1) WO2008070175A2 (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102223394A (zh) * 2010-04-02 2011-10-19 英特尔公司 远程直接存储设备访问
CN103034559A (zh) * 2012-12-18 2013-04-10 无锡众志和达存储技术股份有限公司 基于rdma架构设计的pq检验模块及检验方法
CN103440202A (zh) * 2013-08-07 2013-12-11 华为技术有限公司 一种基于rdma的通信方法、系统及通信设备
CN103699340A (zh) * 2013-12-16 2014-04-02 华为数字技术(苏州)有限公司 一种请求处理方法及设备
CN103970690A (zh) * 2014-05-19 2014-08-06 浪潮电子信息产业股份有限公司 一种基于通道绑定的高性能高容错存储设计方法和装置
CN106776815A (zh) * 2016-11-24 2017-05-31 上海交通大学 基于多模式切换的rdma友好的sparql查询方法
CN107608914A (zh) * 2017-09-29 2018-01-19 锤子科技(北京)股份有限公司 一种多路存储设备的访问方法、装置及移动终端
CN108140009A (zh) * 2015-10-13 2018-06-08 微软技术许可有限责任公司 分布式自主式基于rdma的b树键值管理器
CN109815170A (zh) * 2017-11-22 2019-05-28 纬颖科技服务股份有限公司 数据冗余的处理方法及其相关电脑系统
CN111149166A (zh) * 2017-07-30 2020-05-12 纽罗布拉德有限公司 基于存储器的分布式处理器架构
CN114868117A (zh) * 2020-11-20 2022-08-05 西部数据技术公司 通过控制总线进行的对等存储设备消息传送

Families Citing this family (117)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102004056243A1 (de) * 2004-11-22 2006-05-24 Abb Patent Gmbh Modulares Automatisierungssystem
US8498309B2 (en) * 2005-05-18 2013-07-30 Intel Corporation Data transport module
US20080140724A1 (en) 2006-12-06 2008-06-12 David Flynn Apparatus, system, and method for servicing object requests within a storage controller
CN101657802A (zh) * 2006-12-06 2010-02-24 弗森多系统公司(dba弗森-艾奥) 用于远程直接存储器存取固态存储设备的装置、系统及方法
US7896702B2 (en) 2008-06-06 2011-03-01 Apple Inc. Compact power adapter
US20110093572A1 (en) * 2008-06-20 2011-04-21 Koehler Loren M Low level initializer
US20100070653A1 (en) * 2008-09-18 2010-03-18 Vedran Degoricija IO Card Receiving Unit
US8021183B2 (en) 2008-10-31 2011-09-20 Apple Inc. Cold headed electric plug arm
US8208253B1 (en) * 2008-11-18 2012-06-26 Force10 Networks, Inc. Modular chassis arrangement with separately cooled logic and logic power modules
US8934261B2 (en) * 2008-12-23 2015-01-13 Apple Inc. Compact device housing and assembly techniques therefor
US9497039B2 (en) 2009-05-28 2016-11-15 Microsoft Technology Licensing, Llc Agile data center network architecture
US8972601B2 (en) * 2009-10-09 2015-03-03 Microsoft Technology Licensing, Llc Flyways in data centers
DE102009057273A1 (de) * 2009-12-08 2011-06-09 Diehl Bgt Defence Gmbh & Co. Kg Elektronische Baugruppe
US9391716B2 (en) 2010-04-05 2016-07-12 Microsoft Technology Licensing, Llc Data center using wireless communication
EP2391195A3 (en) * 2010-05-31 2015-03-18 Caswell Inc. High-density computer system with high-performance CPU card sharing structure
US8441793B2 (en) 2010-07-21 2013-05-14 Birchbridge Incorporated Universal rack backplane system
US8410364B2 (en) 2010-07-21 2013-04-02 Birchbridge Incorporated Universal rack cable management system
US8441792B2 (en) 2010-07-21 2013-05-14 Birchbridge Incorporated Universal conduction cooling platform
US8259450B2 (en) 2010-07-21 2012-09-04 Birchbridge Incorporated Mobile universal hardware platform
US20120020349A1 (en) * 2010-07-21 2012-01-26 GraphStream Incorporated Architecture for a robust computing system
US8411440B2 (en) 2010-07-21 2013-04-02 Birchbridge Incorporated Cooled universal hardware platform
CN101944185A (zh) * 2010-09-03 2011-01-12 深圳市江波龙电子有限公司 一种智能存储设备读写方法、装置及智能存储设备
US8850114B2 (en) 2010-09-07 2014-09-30 Daniel L Rosenband Storage array controller for flash-based storage devices
US20120106052A1 (en) * 2010-10-29 2012-05-03 Odineal Robert D Twin-mate cpu assembly
US9092149B2 (en) 2010-11-03 2015-07-28 Microsoft Technology Licensing, Llc Virtualization and offload reads and writes
US8601311B2 (en) * 2010-12-14 2013-12-03 Western Digital Technologies, Inc. System and method for using over-provisioned data capacity to maintain a data redundancy scheme in a solid state memory
US9703706B2 (en) * 2011-02-28 2017-07-11 Oracle International Corporation Universal cache management system
US9146765B2 (en) 2011-03-11 2015-09-29 Microsoft Technology Licensing, Llc Virtual disk storage techniques
US9417894B1 (en) 2011-06-15 2016-08-16 Ryft Systems, Inc. Methods and apparatus for a tablet computer system incorporating a reprogrammable circuit module
US20120324143A1 (en) 2011-06-15 2012-12-20 Data Design Corporation Methods and apparatus for data access by a reprogrammable circuit module
CN102323901A (zh) * 2011-07-28 2012-01-18 张岭 一种提高固态存储系统纠错码使用效率的方法
CN102955502B (zh) * 2011-08-25 2017-05-17 赛恩倍吉科技顾问(深圳)有限公司 背板接口电路、硬盘背板及服务器系统
CN102521389A (zh) * 2011-12-23 2012-06-27 天津神舟通用数据技术有限公司 一种混合使用固态硬盘和传统硬盘的postgresql数据库集群系统及其优化方法
CN103186195A (zh) * 2011-12-29 2013-07-03 鸿富锦精密工业(深圳)有限公司 服务器空盘组合及具有该服务器空盘组合的机柜组合
CN102520890B (zh) * 2011-12-30 2014-10-22 北京天地云箱科技有限公司 基于gpu的rs-draid系统及存储设备数据控制方法
US9817582B2 (en) 2012-01-09 2017-11-14 Microsoft Technology Licensing, Llc Offload read and write offload provider
US20130238851A1 (en) * 2012-03-07 2013-09-12 Netapp, Inc. Hybrid storage aggregate block tracking
US8832158B2 (en) * 2012-03-29 2014-09-09 International Business Machines Corporation Fast predicate table scans using single instruction, multiple data architecture
US8804313B2 (en) * 2012-06-22 2014-08-12 Microsoft Corporation Enclosure power distribution architectures
US9078375B1 (en) * 2012-06-25 2015-07-07 Google Inc. Hardware plane providing improved cooling air flow
US9712373B1 (en) * 2012-07-30 2017-07-18 Rambus Inc. System and method for memory access in server communications
US9304828B2 (en) * 2012-09-27 2016-04-05 Hitachi, Ltd. Hierarchy memory management
CN103714091B (zh) * 2012-10-09 2020-01-21 创新先进技术有限公司 一种生成对象识别符及从其中提取属性信息的方法及装置
US9229497B2 (en) * 2012-11-08 2016-01-05 Silicon Graphics International Corp. On-blade cold sink for high-density clustered computer system
US9071585B2 (en) 2012-12-12 2015-06-30 Microsoft Technology Licensing, Llc Copy offload for disparate offload providers
US9360908B2 (en) * 2012-12-12 2016-06-07 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Sequential power up of devices in a computing cluster based on device function
US9251201B2 (en) 2012-12-14 2016-02-02 Microsoft Technology Licensing, Llc Compatibly extending offload token size
CN103914395B (zh) * 2013-01-06 2017-02-08 北京忆恒创源科技有限公司 用于存储设备的地址映射方法
CN103207894A (zh) * 2013-03-14 2013-07-17 深圳市知正科技有限公司 一种多路实时视频数据存储系统及其进行缓存控制的方法
US9335950B2 (en) * 2013-03-15 2016-05-10 Western Digital Technologies, Inc. Multiple stream compression and formatting of data for data storage systems
US9448738B2 (en) * 2013-03-15 2016-09-20 Western Digital Technologies, Inc. Compression and formatting of data for data storage systems
CN104216837A (zh) * 2013-05-31 2014-12-17 华为技术有限公司 一种内存系统、内存访问请求的处理方法和计算机系统
US9430412B2 (en) * 2013-06-26 2016-08-30 Cnex Labs, Inc. NVM express controller for remote access of memory and I/O over Ethernet-type networks
US9898410B2 (en) * 2013-09-10 2018-02-20 Intel Corporation Hybrid main memory using a fine-grain level of remapping
CN103558995B (zh) * 2013-10-15 2016-09-28 华为技术有限公司 一种存储控制芯片及磁盘报文传输方法
CN103530237B (zh) * 2013-10-31 2016-02-17 厦门大学 一种固态盘阵列的垃圾回收方法
CN104932981B (zh) * 2014-03-20 2018-05-25 宏达国际电子股份有限公司 移动电子装置与清理存储区块的方法
US9730355B2 (en) * 2014-06-11 2017-08-08 Dell Products, L.P. Provisioning of lightweight configurable servers with chassis base and cover designed for nested stacking
US20160088772A1 (en) * 2014-09-04 2016-03-24 Avalanche Technology, Inc. Method and apparatus to reduce thermal resistance in a server chassis
US9582201B2 (en) * 2014-09-26 2017-02-28 Western Digital Technologies, Inc. Multi-tier scheme for logical storage management
US9678677B2 (en) * 2014-12-09 2017-06-13 Intel Corporation Determining adjustments to the spare space in a storage device unavailable to a user based on a current consumption profile of a storage device
US10681835B2 (en) * 2015-01-20 2020-06-09 Hewlett Packard Enterprise Development Lp Latch assembly for a computing device
US10025747B2 (en) * 2015-05-07 2018-07-17 Samsung Electronics Co., Ltd. I/O channel scrambling/ECC disassociated communication protocol
WO2016186583A1 (en) * 2015-05-21 2016-11-24 Agency For Science, Technology And Research Cache architecture and algorithms for hybrid object storage devices
US20160350002A1 (en) * 2015-05-29 2016-12-01 Intel Corporation Memory device specific self refresh entry and exit
US9954751B2 (en) 2015-05-29 2018-04-24 Microsoft Technology Licensing, Llc Measuring performance of a network using mirrored probe packets
KR20170012629A (ko) * 2015-07-21 2017-02-03 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
US10188016B2 (en) 2015-10-30 2019-01-22 Hewlett Packard Enterprise Development Lp Node blind mate liquid cooling
US10237999B2 (en) 2015-10-30 2019-03-19 Hewlett Packard Enterprise Development Lp Configurable node expansion space
US10437480B2 (en) * 2015-12-01 2019-10-08 Futurewei Technologies, Inc. Intelligent coded memory architecture with enhanced access scheduler
CN105389248A (zh) * 2015-12-02 2016-03-09 英业达科技有限公司 非易失性内存固态硬盘的灯号控制系统
CN105550097A (zh) * 2015-12-02 2016-05-04 英业达科技有限公司 非易失性内存固态硬盘的灯号控制系统
US10437483B2 (en) 2015-12-17 2019-10-08 Samsung Electronics Co., Ltd. Computing system with communication mechanism and method of operation thereof
TWI571745B (zh) * 2016-01-26 2017-02-21 鴻海精密工業股份有限公司 緩存管理方法及使用該方法的電子裝置
US10621041B2 (en) 2016-03-25 2020-04-14 Intel Corporation Methods and apparatus to assign indices and relocate object fragments in distributed storage systems
US10346044B2 (en) * 2016-04-14 2019-07-09 Western Digital Technologies, Inc. Preloading of directory data in data storage devices
KR102635134B1 (ko) 2016-06-30 2024-02-08 에스케이하이닉스 주식회사 메모리 컨트롤러, 비동기식 메모리 버퍼칩 및 이를 포함하는 메모리 시스템
US11861188B2 (en) * 2016-07-19 2024-01-02 Pure Storage, Inc. System having modular accelerators
CN108089814B (zh) * 2016-11-23 2021-04-06 中移(苏州)软件技术有限公司 一种数据存储方法及装置
CN106598730B (zh) * 2016-11-24 2020-06-12 上海交通大学 基于非易失性内存的可在线恢复对象分配器设计方法
JP2018088137A (ja) 2016-11-29 2018-06-07 東芝メモリ株式会社 半導体記憶装置
CN106598742B (zh) * 2016-12-26 2020-01-03 湖南国科微电子股份有限公司 一种ssd主控内部负载均衡系统及方法
CN106708441B (zh) * 2016-12-29 2019-06-21 至誉科技(武汉)有限公司 一种用于降低固态存储读延迟的操作方法
CN106959828A (zh) * 2017-03-31 2017-07-18 山东超越数控电子有限公司 一种基于国产平台的硬件raid系统及其实现方法
CN107506138B (zh) * 2017-08-11 2020-12-18 东莞记忆存储科技有限公司 一种固态硬盘提升寿命的方法
CN107688442B (zh) * 2017-09-04 2020-11-20 苏州浪潮智能科技有限公司 一种用于固态硬盘的虚拟块管理方法
US20190121402A1 (en) * 2017-10-24 2019-04-25 Intel Corporation Computer chassis with parallel backplanes
CN111666043A (zh) * 2017-11-03 2020-09-15 华为技术有限公司 一种数据存储方法及设备
CN110058792B (zh) * 2018-01-18 2022-08-30 伊姆西Ip控股有限责任公司 扩大存储空间的方法、设备以及计算机程序产品
EP3562283A1 (de) * 2018-04-25 2019-10-30 Siemens Aktiengesellschaft Modulare backplaneanordnung
CN110568992A (zh) * 2018-06-06 2019-12-13 华为技术有限公司 一种数据处理装置及方法
CN108763589B (zh) * 2018-06-20 2021-12-07 程慧泉 一种分布式文件系统的目录系统及其实现方法
CN110659226A (zh) * 2018-06-28 2020-01-07 晨星半导体股份有限公司 用以存取数据的方法以及相关电路
KR102516584B1 (ko) * 2018-11-21 2023-04-03 에스케이하이닉스 주식회사 메모리 시스템
KR102549346B1 (ko) 2018-07-24 2023-06-28 삼성전자주식회사 솔리드 스테이트 드라이브 및 그의 메타 데이터 액세스 방법
CN109062511B (zh) * 2018-07-26 2021-12-17 浪潮电子信息产业股份有限公司 一种数据读取的方法以及相关装置
WO2020026030A2 (en) * 2018-08-03 2020-02-06 Mobileye Vision Technologies Ltd. Accessing a dynamic memory module
US11099778B2 (en) * 2018-08-08 2021-08-24 Micron Technology, Inc. Controller command scheduling in a memory system to increase command bus utilization
CN110837479B (zh) * 2018-08-17 2023-09-01 华为云计算技术有限公司 数据处理方法、相关设备及计算机存储介质
US10909012B2 (en) * 2018-11-12 2021-02-02 H3 Platform, Inc. System having persistent memory
CN109656479B (zh) * 2018-12-11 2022-03-25 湖南国科微电子股份有限公司 一种构建存储器命令序列的方法及装置
KR20200076923A (ko) * 2018-12-20 2020-06-30 에스케이하이닉스 주식회사 저장 장치, 컨트롤러 및 저장 장치의 동작 방법
TWM577125U (zh) * 2019-01-04 2019-04-21 華碩電腦股份有限公司 電子設備及其主機
CN109902035B (zh) * 2019-02-03 2023-10-31 成都皮兆永存科技有限公司 复合存储器
WO2020177017A1 (en) * 2019-03-01 2020-09-10 Alibaba Group Holding Limited Method and apparatus for managing non-volatile memory and flash as computational object interfaced solid-state drive
CN109992212B (zh) * 2019-04-10 2020-03-27 苏州浪潮智能科技有限公司 一种数据写入方法和一种数据读取方法
CN111857539B (zh) * 2019-04-25 2024-04-12 伊姆西Ip控股有限责任公司 用于管理存储系统的方法、设备和计算机可读介质
US10888012B2 (en) * 2019-05-16 2021-01-05 Hewlett Packard Enterprise Development Lp Printed circuit board orientations
US10958003B2 (en) * 2019-08-09 2021-03-23 Intel Corporation Interleaved card/riser connection assembly for compact card integration
CN111208882B (zh) * 2020-01-03 2023-07-07 英业达科技有限公司 一种gpu及机箱硬件架构
CN111813340A (zh) * 2020-07-10 2020-10-23 杭州海康威视数字技术股份有限公司 基于固态硬盘的指令响应方法、系统、装置及电子设备
CN112083881B (zh) * 2020-08-24 2022-10-18 云南财经大学 一种基于持久化内存的一体化天文数据采集与存储系统
JP2022048601A (ja) 2020-09-15 2022-03-28 キオクシア株式会社 ストレージ装置及び鍵配送方法
CN112187760B (zh) * 2020-09-22 2022-11-08 宏图智能物流股份有限公司 一种基于数据拆分的网络请求防篡改方法
US11593021B2 (en) * 2020-11-06 2023-02-28 Hewlett Packard Enterprise Development Lp Writing a container index to persistent storage
CN113934697B (zh) * 2021-10-21 2022-04-08 中孚安全技术有限公司 一种基于内核文件过滤驱动提升io性能方法及系统
CN114153649B (zh) * 2021-12-09 2023-04-14 合肥康芯威存储技术有限公司 一种数据存储设备及其控制方法与电子设备

Family Cites Families (63)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SE347103B (zh) * 1964-10-30 1972-07-24 Olivetti & Co Spa
US4858070A (en) * 1987-04-24 1989-08-15 Racal Data Communications Inc. Modular expandable housing arrangement for electronic apparatus
US5261068A (en) 1990-05-25 1993-11-09 Dell Usa L.P. Dual path memory retrieval system for an interleaved dynamic RAM memory unit
IL99978A0 (en) * 1990-11-16 1992-08-18 Graphico Corp Improved parallel processing system
US5122691A (en) * 1990-11-21 1992-06-16 Balu Balakrishnan Integrated backplane interconnection architecture
US5438671A (en) 1991-07-19 1995-08-01 Dell U.S.A., L.P. Method and system for transferring compressed bytes of information between separate hard disk drive units
US5335146A (en) * 1992-01-29 1994-08-02 International Business Machines Corporation High density packaging for device requiring large numbers of unique signals utilizing orthogonal plugging and zero insertion force connetors
US5352123A (en) * 1992-06-08 1994-10-04 Quickturn Systems, Incorporated Switching midplane and interconnection system for interconnecting large numbers of signals
US5845329A (en) 1993-01-29 1998-12-01 Sanyo Electric Co., Ltd. Parallel computer
US6002411A (en) 1994-11-16 1999-12-14 Interactive Silicon, Inc. Integrated video and memory controller with data processing and graphical processing capabilities
US6170047B1 (en) 1994-11-16 2001-01-02 Interactive Silicon, Inc. System and method for managing system memory and/or non-volatile memory using a memory controller with integrated compression and decompression capabilities
US5701434A (en) 1995-03-16 1997-12-23 Hitachi, Ltd. Interleave memory controller with a common access queue
DE69615278T2 (de) 1995-06-06 2002-06-27 Hewlett Packard Co SDRAM-Datenzuweisungsanordnung und -verfahren
JP3732869B2 (ja) * 1995-06-07 2006-01-11 株式会社日立製作所 外部記憶装置
US6330688B1 (en) 1995-10-31 2001-12-11 Intel Corporation On chip error correction for devices in a solid state drive
US6385710B1 (en) 1996-02-23 2002-05-07 Sun Microsystems, Inc. Multiple-mode external cache subsystem
US5960462A (en) 1996-09-26 1999-09-28 Intel Corporation Method and apparatus for analyzing a main memory configuration to program a memory controller
US5754567A (en) 1996-10-15 1998-05-19 Micron Quantum Devices, Inc. Write reduction in flash memory systems through ECC usage
JP3459868B2 (ja) 1997-05-16 2003-10-27 日本電気株式会社 メモリ障害時におけるグループ入れ替え方式
US6418478B1 (en) 1997-10-30 2002-07-09 Commvault Systems, Inc. Pipelined high speed data transfer mechanism
US6185654B1 (en) 1998-07-17 2001-02-06 Compaq Computer Corporation Phantom resource memory address mapping system
US6412080B1 (en) 1999-02-23 2002-06-25 Microsoft Corporation Lightweight persistent storage system for flash memory devices
TW443083B (en) * 1999-06-23 2001-06-23 Asustek Comp Inc Printed circuit board structure
US6983350B1 (en) * 1999-08-31 2006-01-03 Intel Corporation SDRAM controller for parallel processor architecture
KR100577380B1 (ko) 1999-09-29 2006-05-09 삼성전자주식회사 플래시 메모리와 그 제어 방법
US6850408B1 (en) 1999-10-26 2005-02-01 Rackable Systems, Inc. High density computer equipment storage systems
US6496366B1 (en) 1999-10-26 2002-12-17 Rackable Systems, Llc High density computer equipment storage system
US6671757B1 (en) 2000-01-26 2003-12-30 Fusionone, Inc. Data transfer and synchronization system
US6785785B2 (en) 2000-01-25 2004-08-31 Hewlett-Packard Development Company, L.P. Method for supporting multi-level stripping of non-homogeneous memory to maximize concurrency
USD475705S1 (en) 2000-02-18 2003-06-10 Rackable Systems, Inc. Computer chassis for dual, opposing main boards
US6240040B1 (en) * 2000-03-15 2001-05-29 Advanced Micro Devices, Inc. Multiple bank simultaneous operation for a flash memory
US6523102B1 (en) 2000-04-14 2003-02-18 Interactive Silicon, Inc. Parallel compression/decompression system and method for implementation of in-memory compressed cache improving storage density and access speed for industry standard memory subsystems and in-line memory modules
US7089391B2 (en) 2000-04-14 2006-08-08 Quickshift, Inc. Managing a codec engine for memory compression/decompression operations using a data movement engine
US6525926B1 (en) 2000-07-11 2003-02-25 Racklogic Technologies, Inc. Multinode high density computing apparatus
US6411506B1 (en) * 2000-07-20 2002-06-25 Rlx Technologies, Inc. High density web server chassis system and method
JP4397109B2 (ja) 2000-08-14 2010-01-13 富士通株式会社 情報処理装置及びクロスバーボードユニット・バックパネル組立体の製造方法
US6883079B1 (en) 2000-09-01 2005-04-19 Maxtor Corporation Method and apparatus for using data compression as a means of increasing buffer bandwidth
US6625685B1 (en) 2000-09-20 2003-09-23 Broadcom Corporation Memory controller with programmable configuration
US6779088B1 (en) 2000-10-24 2004-08-17 International Business Machines Corporation Virtual uncompressed cache size control in compressed memory systems
US6957313B2 (en) 2000-12-01 2005-10-18 Hsia James R Memory matrix and method of operating the same
US6824393B2 (en) * 2001-05-29 2004-11-30 International Business Machines Corporation Fragmented backplane system for I/O applications
US6839808B2 (en) 2001-07-06 2005-01-04 Juniper Networks, Inc. Processing cluster having multiple compute engines and shared tier one caches
US6556440B2 (en) * 2001-07-26 2003-04-29 Dell Products L.P. Dishrack shroud for shielding and cooling
US7245632B2 (en) 2001-08-10 2007-07-17 Sun Microsystems, Inc. External storage for modular computer systems
JP4583755B2 (ja) * 2001-08-30 2010-11-17 富士通株式会社 プリント板ユニット及び電子機器
US6938133B2 (en) 2001-09-28 2005-08-30 Hewlett-Packard Development Company, L.P. Memory latency and bandwidth optimizations
US6715046B1 (en) * 2001-11-29 2004-03-30 Cisco Technology, Inc. Method and apparatus for reading from and writing to storage using acknowledged phases of sets of data
CN1278239C (zh) 2002-01-09 2006-10-04 株式会社瑞萨科技 存储系统和存储卡
US6724640B1 (en) 2002-02-15 2004-04-20 Steve Cooper Blade armor shielding
JP2003281071A (ja) 2002-03-20 2003-10-03 Seiko Epson Corp データ転送制御装置、電子機器及びデータ転送制御方法
JP4050548B2 (ja) 2002-04-18 2008-02-20 株式会社ルネサステクノロジ 半導体記憶装置
US7043599B1 (en) 2002-06-20 2006-05-09 Rambus Inc. Dynamic memory supporting simultaneous refresh and data-access transactions
US6822878B2 (en) * 2002-10-09 2004-11-23 Hewlett-Packard Development Company, L.P. Circuit board support arrangement, method, and method for using the same
US7165824B2 (en) 2002-12-02 2007-01-23 Silverbrook Research Pty Ltd Dead nozzle compensation
JP2004348818A (ja) 2003-05-20 2004-12-09 Sharp Corp 半導体記憶装置の書込制御方法及びシステム並びに携帯電子機器
US7035111B1 (en) 2003-05-23 2006-04-25 Hewlett-Packard Development Company, L.P. Circuit board orientation with different width portions
US7243203B2 (en) 2003-06-13 2007-07-10 Sandisk 3D Llc Pipeline circuit for low latency memory
CA2544063C (en) 2003-11-13 2013-09-10 Commvault Systems, Inc. System and method for combining data streams in pilelined storage operations in a storage network
JP4524120B2 (ja) * 2004-02-03 2010-08-11 富士通株式会社 ブレード型光伝送装置
US7045717B2 (en) * 2004-06-30 2006-05-16 International Business Machines Corporation High speed cable interconnect to a computer midplane
US7716387B2 (en) 2005-07-14 2010-05-11 Canon Kabushiki Kaisha Memory control apparatus and method
US7344439B2 (en) * 2006-03-06 2008-03-18 International Business Machines Corporation System, method, and apparatus for distributing air in a blade server
CN101657802A (zh) * 2006-12-06 2010-02-24 弗森多系统公司(dba弗森-艾奥) 用于远程直接存储器存取固态存储设备的装置、系统及方法

Cited By (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102223394B (zh) * 2010-04-02 2014-08-06 英特尔公司 用于提供远程直接存储设备访问的方法、服务器
CN102223394A (zh) * 2010-04-02 2011-10-19 英特尔公司 远程直接存储设备访问
CN103034559A (zh) * 2012-12-18 2013-04-10 无锡众志和达存储技术股份有限公司 基于rdma架构设计的pq检验模块及检验方法
CN103034559B (zh) * 2012-12-18 2016-06-08 无锡众志和达数据计算股份有限公司 基于rdma架构设计的pq检验模块及检验方法
CN103440202A (zh) * 2013-08-07 2013-12-11 华为技术有限公司 一种基于rdma的通信方法、系统及通信设备
CN103440202B (zh) * 2013-08-07 2016-12-28 华为技术有限公司 一种基于rdma的通信方法、系统及通信设备
CN103699340A (zh) * 2013-12-16 2014-04-02 华为数字技术(苏州)有限公司 一种请求处理方法及设备
CN103699340B (zh) * 2013-12-16 2016-12-07 华为数字技术(苏州)有限公司 一种请求处理方法及设备
CN103970690A (zh) * 2014-05-19 2014-08-06 浪潮电子信息产业股份有限公司 一种基于通道绑定的高性能高容错存储设计方法和装置
WO2015176490A1 (zh) * 2014-05-19 2015-11-26 浪潮电子信息产业股份有限公司 一种基于通道绑定的高性能高容错存储设计方法和装置
CN108140009A (zh) * 2015-10-13 2018-06-08 微软技术许可有限责任公司 分布式自主式基于rdma的b树键值管理器
CN108140009B (zh) * 2015-10-13 2022-06-24 微软技术许可有限责任公司 分布式自主式基于rdma的b树键值管理器
CN106776815A (zh) * 2016-11-24 2017-05-31 上海交通大学 基于多模式切换的rdma友好的sparql查询方法
CN106776815B (zh) * 2016-11-24 2020-07-14 上海交通大学 基于多模式切换的rdma友好的sparql查询方法
CN111149166A (zh) * 2017-07-30 2020-05-12 纽罗布拉德有限公司 基于存储器的分布式处理器架构
CN111149166B (zh) * 2017-07-30 2024-01-09 纽罗布拉德有限公司 基于存储器的分布式处理器架构
CN107608914B (zh) * 2017-09-29 2020-09-29 北京字节跳动网络技术有限公司 一种多路存储设备的访问方法、装置及移动终端
CN107608914A (zh) * 2017-09-29 2018-01-19 锤子科技(北京)股份有限公司 一种多路存储设备的访问方法、装置及移动终端
CN109815170A (zh) * 2017-11-22 2019-05-28 纬颖科技服务股份有限公司 数据冗余的处理方法及其相关电脑系统
CN109815170B (zh) * 2017-11-22 2022-08-19 纬颖科技服务股份有限公司 数据冗余的处理方法及其相关电脑系统
CN114868117A (zh) * 2020-11-20 2022-08-05 西部数据技术公司 通过控制总线进行的对等存储设备消息传送

Also Published As

Publication number Publication date
CN101622606A (zh) 2010-01-06
CN101646993B (zh) 2017-04-12
US20080137284A1 (en) 2008-06-12
CN101636712B (zh) 2016-04-13
CN101622596A (zh) 2010-01-06
CN101646994B (zh) 2016-06-15
WO2008070175A3 (en) 2008-12-18
CN101636712A (zh) 2010-01-27
CN101646993A (zh) 2010-02-10
CN101622595A (zh) 2010-01-06
US20080225474A1 (en) 2008-09-18
WO2008070175A2 (en) 2008-06-12
US7778020B2 (en) 2010-08-17
CN101622606B (zh) 2014-04-09
US7713068B2 (en) 2010-05-11
CN101646994A (zh) 2010-02-10

Similar Documents

Publication Publication Date Title
CN101689131B (zh) 用于共享的、前端、分布式raid的装置、系统和方法
CN101622606B (zh) 用于作为大容量、非易失性存储器的高速缓存的固态存储器的装置、系统和方法
JP2010512584A5 (zh)
CN103098034A (zh) 用于条件和原子存储操作的装置、系统和方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1141870

Country of ref document: HK

C12 Rejection of a patent application after its publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20100224

REG Reference to a national code

Ref country code: HK

Ref legal event code: WD

Ref document number: 1141870

Country of ref document: HK