使用空数据令牌指令管理存储设备中的数据的装置、系统和方法

文档序号:6457081阅读:185来源:国知局
专利名称:使用空数据令牌指令管理存储设备中的数据的装置、系统和方法
技术领域
本发明涉及管理数据存储设备中的数据,具体地,涉及使用空数据段指 令管理存储设备中的数据。
背景技术
通常来说,当数据不再有用时,它将被擦除。在很多文件系统中,擦除 命令删除了文件系统中的目录项,而仍将数据留在了包括该数据的存储设备 中。通常来说,数据存储设备不参与此种类型的擦除操作。另外一种擦除数 据的方法是向数据存储设备写入0、 l或一些其他的无效数据字符,以实际替 代所擦除的文件。然而,这种方法并不高效,因为发送正在被覆盖的数据会 占用宝贵的带宽。此外,存储设备的空间将由用以覆盖无效数据的数据所占 据。
一些存储设备(如本文所描述的固态存储设备102)并不是随机存取存储 设备,由此,更新先前所存储的数据并不会覆盖现有数据。尝试用一串l字符 或一 串0字符覆盖此类设备中的数据会占用宝贵的空间,却无法实现覆盖现有 数据的期望意愿。对于这些非随机存取设备(如固态存储设备102)而言,客户端114一般来说不具备覆盖数据以将其擦除的能力。
当接收一串重复的字符或字符串时,接收到的数据是可高度压缩的,但 是一般来说,是在将数据发往存储设备之前由文件系统进行压缩的。典型的 存储设备无法区分已压缩的数据和未经压缩的数据。存储设备还可接收读取 所擦除的文件的命令,从而所述存储设备就向请求设备发送一串O、 l或无效 字符。同样的,需要带宽来发送代表所擦除的文件的数据。

发明内容
从上述讨论中,显而易见,存在对用于接收数据将被擦除的指令的存储 设备的装置、系统和方法需要,从而使得该存储设备可存储代表空数据段或 具有重复字符或字符串的数据的数据段令牌。该装置、系统和方法还可以擦 除现有数据以使得最终使用的存储空间包括小数据段令牌。本发明提供一种 克服现有技术中部分或所有缺点的装置、系统和方法。
本发明是针对现有技术的现况开发出来的,具体地,是针对现有技术中 通过现有的数据管理系统并未完全解决的问题和需要。因此,本发明已经被
系统和方法。
用于管理数据的装置提供有多个模块,该多个模块包括写入请求接收器 模块和数据段令牌存储模块。该写入请求接收器模块从请求装置接收存储请 求。该数据段包括一连串重复的、相同字符或一连串重复、相同的字符串。 该数据段令牌存储模块将数据段令牌存储在存储设备中。该数据段令牌包括 至少 一数据段标识符和一数据段长度,且该数据段令牌大体上与来自数据段 的数据无关。
在一种实施方式中,该存储请求包括存储该数椐段令牌的令牌指令,其 中该存储请求与数据段的数据无关。在另一实施方式中,该数据段令牌存储 模块在存储该令牌之前生成数据段令牌。该数据段令牌存储模块根据该令牌 指令中的信息生成数据段令牌。该令牌指令与该数据段令牌无关。在另一实 施方式中,该令牌指令包括该数据段令牌,且数据段令牌存储模块识别出该 数据段令牌代表该数据段。
在一种实施方式中,该存储请求包括来自该数据段的数据,且该装置包括根据该数据段产生数据段令牌的令牌生成模块。生成所述数据段令牌以响 应存储所述数据段的所述存储请求。在另一种实施方式中,该令牌生成模块 驻留于该请求设备。
在一种实施方式中,该装置包括安全擦除模块,该安全擦除模块用字符 来覆盖现有数据使得现有数据不可恢复。该现有数据包括之前存储在存储设
备中的数据段的萄:据,使用与所述存储请求中的数据段标识符相同的数据段 标识符来标识所述数据段的数据。在另一种实施方式中,该安全擦除模块进 一步包括擦除确认模块,该擦除确认模块发送指示现有数据已经被覆盖的消 息。发送擦除确认消息以响应所述安全擦除模块覆盖所述现有数据。在另一 实施方式中,该安全擦除模块在存储空间恢复操作期间覆盖该现有数据。在 另一实施方式中,该存储请求包括覆盖该现有数据的请求,其中所述安全擦 除模块覆盖所述现有数据以响应覆盖所述现有数据的请求。
在一种实施方式中,该装置包括读取请求接收器模块,其接收读取该数 据段的存储请求;读取数据段令牌模块,其读取对应于由该存储请求所请求 的数据段的数据段令牌;和读取请求响应模块,其向请求装置发送响应。使 用对应于经请求的数据段的该数据段令牌生成该响应。
在进一步的实施方式中,该读取请求响应模块包括发送数据段令牌模块, 该发送数据段令牌模块将该响应中的消息发送到请求装置。该消息至少包括 该数据段标识符和该数据段长度,且该消息大体上与该数据段的数据无关。 在另一进一步实施方式中,该装置包括重构数据段模块,该重构数据段模块 使用该数据段令牌重构该数据段的数据,且该读取请求响应模块包括发送经 重构的、请求的数据段的发送数据段模块。
在一种实施方式中,该一连串重复的、相同的字符或字符串指示数据段 为空。在另一种实施方式中,该存储请求包括在该存储设备中保留存储空间 的请求。该请求的保留的存储空间包括大体上类似于数据段长度的存储空间 大小。在一种实施方式中,该装置包括存储空间预留模块,该存储空间预留 模块在所述存储设备中预留与预留存储空间的请求相 一致的存储空间大小。
在一种实施方式中,该空数据段令牌包括在索引中的项,其中该索引对 应于存储在存储设备中的信息和数据。在另一种实施方式中,该数据段令牌 包括存储在该存储设备上的对象。在另一种实施方式中,该数据段令牌包括存储在该存储设备上的元数据。在另一实施方式中,该数据段令牌包括数据 段位置指示符、至少一个重复且相同字符的常数和至少一个重复且相同字符 串的常数中的至少一个。
用于管理数据的另 一装置具有多个模块,该多个模块包括读取请求接收 器模块、读取数据段令牌模块和读取请求响应模块。该读取请求接收器模块 接收用于从存储设备读取数据段的存储请求。该数据段由数据段令牌表示在 该存储设备上。该数据段包括一连串重复、相同的字符或一连串重复、相同 的字符串。该数据段令牌包括数据段标识符和数据段长度。该数据段令牌大
体上与该数据段无关。该读取数据段令牌;溪块读取对应于存储请求中所请求 的数据段的数据段令牌。该读取请求响应模块向该请求装置传输一响应。使 用对应于所请求的数据段的数据段令牌来生成该响应。
在一种实施方式中,该读取请求响应模块包括发送数据段令牌模块,该 发送数据段令牌模块将该响应中的消息传输到请求装置。该消息至少包括该 数据段标识符和该数据段长度。该消息大体上与该数据段的数据无关。在另 一种实施方式中,该装置包括在该存储设备处的重构数据段模块,该重构数 据段模块使用该数据段令牌重构该数据段的数据,且该读取请求响应模块包 括传输经重构的、请求的数据段的发送数据段模块。
在另一种实施方式中,该存储请求包括读取该数据段的请求,且该装置 包括驻留于该请求装置处的重构数据段模块,该重构数据段模块使用该数据 段令牌重构该数据段的数据。该读取请求响应模块包括发送数据段模块,该 发送数据段模块在所述重构数据段模块根据至少包括所述数据段标识符和所 述数据段长度的消息重新创建所请求的数据段之前,将所述消息发送给所述 请求设备。
本发明还提出一种用于管理数据的系统。该系统包括存储设备、控制该 存储设备的存储控制器、写入请求接收模块和数据段令牌存储模块。该写入 请求接收模块从请求装置接收存储请求。该存储请求包括在该存储设备中存 储数据段的请求。该数据段包括一连串重复的、相同的字符或一连串重复的、 相同的字符串。该数据段令牌存储模块在该存储设备中存储数据段令牌。该 数据段令牌包括至少数据段标识符和数据段长度。该数据段令牌大体上与该 数据段无关。在一种实施方式中,该系统可包括驻留在该请求设备的驱动器。该驱动
器包括下列模块中的一个或多个中的至少一部分所述写入请求接收器模块、
所述数据段令牌存储模块、所述读取请求接收器模块、所述读取数据段令牌 模块和所述读取请求响应模块。该系统还可包括上述关于该装置的模块和实
施方式。
本发明还提出一种用于管理数据的方法。在实施方式中解释的方法大体 上包括进行与对于所描述的装置和系统的操作有关的功能所必须得步骤。在 一种实施方式中,该方法包括从请求装置接收存储请求。该存储请求包括在 存储设备中存储数据段的请求。该数据段包括一连串重复的、相同的字符或 一连串重复的、相同的字符串。该方法还包括在该存储设备中存储数据段令 牌。该数据段令牌包括数据段标识符和数据段长度。该数据段令牌大体上与 该数据段无关。
在一种实施方式中,该存储请求包括存储该数据段令牌的令牌指令,其 中该存储请求与该数据段的数据无关。在另一实施方式中,该存储请求包括 来自该数据段的数据,且该方法包括产生令牌指令以从该数据段中产生该数
据段令牌。创建所述信息指令以响应存储所述数据^:的所述存储请求。
本说明书全文所提到的特征、优点或者类似措辞并不意味着可在本发明 包含在本发明的任一单独的实施方式中的情况下实现所有的特征和优点。当 然,涉及特征和优点的措辞被理解为意味着与实施方式一起描述的特定的 特征、优点或者特点包括在本发明的至少一种实施方式中。因此,在本说明 书全文中,关于特征、优点和类似措辞的讨论可(但未必)涉及同一实施方 式。
此外,描述的本发明的特征、优点和特点可釆用任何合适的方式与一个 或多个实施方式结合。相关领域的技术人员可意识到本发明可在不具备特定 实施方式的一个或多个具体特征或优点的情况下被实施。在其他例子中,可 意识到附加特征和优点出现在某些实施方式中,而不是在本发明的所有实施 方式中都出现。
通过下面的说明和附加的权利要求,本发明的这些特征和优点将变得更


为了使本发明的优点更加容易理解,会参考附图中示出的特定实施方式 给出上面简要描述的本发明的更具体的说明。在理解到这些附图仅描述了本 发明的一般实施方式并且并不因此认为本发明限于此范围的情况下,将通过
使用附图并结合更多的具体特征和细节描述和解释本发明,附图中
理的系统的一种实施方式;
图1 B是示意性框图,示出了根据本发明的用于存储设备内的对象管理的 系统的一种实施方式;
图2A是示意性框图,示出了根据本发明的用于存储设备内的对象管理的 装置的一种实施方式;
图2B是示意性框图,示出了根据本发明的位于固态存储设备内的固态存 储设备控制器的 一种实施方式;
图3是示出了根据本发明的位于固态存储设备内的固态存储设备控制器 的一种实施方式的示意性框图,该固态存储设备控制器具有写入数据管道和 读取数据管道;
图4A是示意性框图,示出了根据本发明的位于固态存储控制器内的内存 交错控制器的 一 种实施方式;
图4B是示意性框图,示出了根据本发明的位于固态存储控制器内的内存 交错控制器的另 一种实施方式;
图5是示意性流程图,示出了根据本发明的使用数据管道来管理固态存储 设备中的数据的方法的一种实施方式;
图6是示意性流程图,示出了根据本发明的使用数据管道来管理固态存储 设备中的数据的方法的另一种实施方式;
图7是示意性流程图,示出了根据本发明的使用内存交错来管理固态存储 设备中的数据的方法的一种实施方式;
图8是示意性框图,示出了根据本发明的用于对固态存储设备进行垃圾收 集的装置的一种实施方式;
图9是示意性流程图,示出了根据本发明的用于对固态存储设备进行垃圾 收集的装置的一种实施方式;图IO是示意性框图,示出了根据本发明的包括用以生成令牌指令的装置
的系统的一种实施方式;
图ll是示意性流程图,示出了根据本发明的用于生成并发送令牌指令的 方法的实施方式;
图12是示意性流程图,示出了根据本发明的用于读取数据段令牌的方法 的实施方式;
图13是示意性流程图,示出了根据本发明的包括用以管理数据段令牌的 装置的系统的 一 种实施方式;
图14是示意性流程图,示出了根据本发明的用于存储数据段令牌的方法 的实施方式;
图15是示意性流程图,示出了根据本发明的用于读取数据段令牌的方法 的实3fe方式。
具体实施例方式
为了更显著地强调功能性单元运行的独立性,在本说明书中描述的许多 功能性单元已被标示为模块。例如,模块可作为硬件电路来实施,所述硬件 电路包括自定义VLSI电路、门阵列或成品半导体(例如逻辑芯片、晶体管或 其他分立元件)。模块也可在可编程硬件设备(如现场可编程门阵列、可编 程阵列逻辑、可编程逻辑设备或类似设备)内实施。
-溪块还可在由不同类型的处理器运行的软件中实施。例如,可执行代码 的识别模块可以包括一个或多个计算机指令物理块或逻辑块,该计算机指令 被作为对象、程序或函数来组织。然而,识别模块的可执行文件不必在物理 上位于一起,但是可包括存储在不同位置的不同命令,当这些命令在逻辑上 连接在一起时,所述命令包括所述模块并实现所述模块的指定目标。
当然,可执行代码的模块可以为一个或许多指令,并且甚至可以分布在 若干不同的代码段中、分布在不同的程序中并可分布在多个存储设备中。类 似地,可以在此在才莫块内识别并示出运算数据,并且可以以任何合适的形式 体现所述运算数据并在任意合适类型的数据结构中组织所述运算数据。所述 运算数据可作为单数据集收集,或者可以分布在不同的位置(包括不同的存 储设备),并且可在系统或网络中至少部分地仅作为电信号存在。当模块或模块的部分在软件中实施时,软件部分被存储在一个或多个计算机可读媒体 上。
本说明书全文所提到的"一种实施方式"、"实施方式"或类似的措辞意味着 与实施方式一起描述的特定的特征、结构或特点包括在本发明的至少一种实
施方式中。因此,在本"i兌明书全文中,短语"在一种实施方式中"、"在实施方
式中"及类似措辞的出现可(但未必)涉及同一实施方式。
提及信号承载媒介可采取任何能够生成信号、导致信号生成或者导致在 数字处理设备上执行机器可读命令程序的形式。信号承载媒介可通过下述设
备体现传输线、光盘、数字视频光盘、磁带、伯努利驱动器、磁盘、穿孔 卡、闪存、集成电路或其他数字处理装置存储设备。
此外,描述的本发明的特征、结构或特点可以以任何合适的方式合并在 一种或多种实施方式中。在下文的说明中,提供了大量的具体细节以全面理 解本发明的实施方式,所述具体细节比如编程、软件;漠块、用户选择、网络 事务、数据库查询、数据库结构、硬件模块、硬件电路、硬件芯片等等的实 例。然而,相关技术领域的技术人员可认识到本发明在可在不具备一个或 多个具体实施方式
的具体细节的情况下被实施,或者本发明可结合其他方法、
组件、材料等实施。在其他例子中,并没有显示或描述公知的结构、材料或 操作以使本发明变得清晰。
此处包括的示意性流程图大体上是作为逻辑流程图来列举的。就这点而 言,描述的顺序和标记的步骤是本方法的一种实施方式的指示性说明。可设 想其他在功能上、逻辑上或效果上与图示方法的一个或多个步骤(或其中部 分)相同的步骤和方法。此外,使用的格式和符号被用于解释方法的逻辑歩 骤并被理解为不限制本方法的范围。尽管在流程图中可使用不同的箭头类型 和线条类型,但这些箭头类型和线条类型被理解为不限制相应方法的范围。 的确, 一些箭头或其他连接器可用于仅表示方法的逻辑流程。例如,箭头可 表示描述的方法的列举的步骤之间的未指明间期的等待或监测时期。此外, 特定方法的步骤的顺序可或可不严格依照所示的对应步骤的顺序。
固态存储系统
图1 A是示意性框图,示出了根据本发明的用于固态存储设备内的数据管 理的系统100的一种实施方式。系统100包括固态存储设备102、固态存储控制器104、写入数据管道106、读取数据管道108、固态存储器IIO、计算机112、 客户端114和计算机网络116,这些装置描述如下。
系统100包括至少一个固态存储设备102。在另一种实施方式中,系统IOO 包括两个或更多个固态存储设备102,每个固态存储设备102可包括非易失性 的、固态的存储器IIO,所述非易失性的、固态的存储器例如纳米随机存取存 储器("纳米RAM"或者"NRAM")、磁电阻式RAM ("MRAM")、动态RAM
("DRAM")、相变RAM ( "PRAM")闪存等等。结合图2和图3更详细地描述 了固态存储设备102。固态存储设备102被描述成位于通过计算机网络n6与客 户端114相连的计算机112内。在一种实施方式中,固态存储设备102位于计算 机112内部并且采用系统总线连接,所述系统总线例如快速外围组件互连
("PCI-e")总线、串行高级技术附件("串行ATA")总线或类似总线。在另 一种实施方式吧,固态存储设备102位于计算机112外部,并且通过通用串行 总线("USB")、电气与电子工程师协会("正EE") 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和一个或多个数据存储设备]54 )和一个或多个 请求设备155。存储设备152联网在一起并与一个或多个请求设备155连接。请求设备l55将对象请求发给存储设备l50a。对象请求可以是创建对象的请求、 向对象写入数据的请求、从对象读取数据的请求、删除对象的请求、检查对 象的请求、复制对象的请求及类似请求。本领域技术人员会认识到其他对象 请求。
在一种实施方式中,存储控制器152和数据存储设备154是分离的设备。 在另一种实施方式中,存储控制器152和数据存储设备154集成到一个存储设 备150上。在另一种实施方式中,数据存储设备154为固态存储器110,而存储 控制器为固态存储设备控制器202。在其他实施方式中,数据存储设备154可 以为硬盘驱动器、光驱动器、磁带存储器或类似存储设备。在另一种实施方 式中,存储设备150可包括两个或更多个不同类型的数据存储设备154。
在一种实施方式中,数据存储设备154为固态存储器110,并且被布置为 固态存储元件216、 218、 220的阵列。在另一种实施方式中,固态存储器UO 被布置在两个或更多个内存库(bank)214a-n内。下文结合图2B更详细地描述 了固态存储器110。
存储设备l 50a-n可联网在一起并且可作为分布式存储设备运行。与请求设 备155连接的存储设备150a控制发送到所述分布式存储设备的对象请求。在一 种实施方式中,存储设备150和关联的存储控制器152管理对象并对请求设备 155来说表现为分布式对象文件系统。在这种情况下, 一类分布式对象文件系 统的实例是并行对象文件系统。在另一种实施方式中,存储设备150和关联的 存储控制器152管理对象并对请求设备155来说表现为分布式对象文件服务器。 在这种情况下, 一类分布式对象文件服务器的实例是并行对象文件服务器。 在这些和其他实施方式中,请求设备155可只管理对象或者与存储设备150结 合而参与管理对象,这通常并不将存储设备150的功能限制在为其他客户端 114充分管理对象的范围内。在退化情况下,每个分布式存储设备、分布式对 象文件系统和分布式对象文件服务器能作为单个设备独立运行。联网的存储 设备150a-n可作为分布式存储设备、分布式对象文件系统、分布式对象文件服 务器和它们的任意组合运行,所述组合具有一个或多个为一个或多个请求设 备155配置的这些功能。例如,存储设备150可配置为为第一请求设备55a 作为分布式存储设备运行,而请求设备155b作为分布式存储设备和分布式对 象文件系统为运行。当系统101包括一个存储设备150a时,存储设备150a的存储控制器152a管理对象并对请求设备155来说表现为对象文件系统或对象文 件服务器。
在一种实施方式中,其中,存储设备150作为分布式存储设备联网在一起, 存储设备150充当由一个或多个分布式存储控制器152管理的独立驱动器冗余 阵列("RAID")。例如,写入对象数据段的请求导致所述数据段根据RAJD 级别在数据存储设备154a-n中被条带化为具有奇偶校验条带的条带。这种布置 的一个好处是这种对象管理系统可在单独的存储设备150 (无论是存储控制器 152、数据存储设备154或存储设备150的其他组件)出现故障时继续使用。
当冗余网络用于互连存储设备150和请求设备155时,所述对象管理系统 可在出现网络故障的情况下(只要网络中的一个仍在运行)继续使用。具有 一个存储设备150a的系统101还可包括多个数据存储设备154a,而存储设备 150a的存储控制器152a可作为RAID控制器运行并在存储设备150a的数据存储 设备l54a间分割数据段,存储设备l50a的存储控制器152a可包括根据RAID级 别的奇偶校验条带。
在一种实施方式中,其中, 一个或多个存储设备150a-n是具有固态存储设 备控制器202和固态存储器110的固态存储设备102,固态存储设备102可配置 为DIMM配置、子卡、微型模块等,并保留在计算机112内。计算机112可以是 服务器或具有固态存储设备102的类似设备,固态存储设备102联网在一起并 作为分布式RATD控制器运行。有利地是,存储设备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群组可与存储 设备l 50内的多个分区相关联。可同时在各种RAID群组间支持RAID0 、 RAID 1 、 RAID5、 RAID6和复合RAID类型10、 50、 60,所述RAID群组包括数据存储设 备154a-n。本领域技术人员可认识到还可同时支持的其他RA1D类型和配置。
而且,由于存储控制器152像RAID控制器一样自主运行,所述RAID控 制器能够执行渐进RAID并能够将在数据存储设备154间条带化的具有一个 RAID级别的对象或对象的某些部分转换为另一 RAID级别,转换时请求设备 155不受影响、不参与或者甚至不探测RAID级别的变4t在优选实施方式中, 促进RAID配置从一个级别变为另一级别可在对象或甚至在包基上自主实 现,并且可由运行在存储设备150或存储控制器152中的一个上的分布式 RAID控制模块初始化。通常,.RAID渐进是从高性能和低效率的存储配置(如 RAID])转换为低性能和高存储效率的存储配置(如RA1D5),其中,转换是 基于读取频率一皮动态地初始化。但是,可以发现,从RAID5到RAID1的渐进 也是可能的。可配置其他用于初始化RAID渐进的进程,或者可由客户端或 外部代理(如存储系统管理服务器请求)请求该进程。本领域技术人员可认 识到具有存储控制器152的存储设备102的其他特征和优点,该存储控制器 152自主管理对象。
用于存储控制器管理的对象的装置
图2A是示意性框图,示出了根据本发明的用于存储设备内的对象管理的 装置200的一种实施方式。装置200包括存储控制器l52,该存储控制器I52具 有对象请求接收器模块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,该解析^t块262将所述对象请求解析为 一条或 多条命令。通常,解析模块262将所述对象请求解析为一个或多个緩存。例如, 所述对象请求中的一条或多条命令可被解析为命令缓存。通常,解析模块262 准备对象请求,以使得所述对象请求中的信息可以被存储控制器152理解并执 行。本领域技术人员会认识到将对象请求解析为一条或多条命令的解析模块 262的其他功能。
装置200包括命令执行模块264 ,该命令执行模块264执行从所述对象请求 解析出的命令。在一种实施方式中,命令执行模块264执行一条命令。在另一 种实施方式中,命令执行模块264执行多.条命令。通常,命令执行模块264解 释解析自所迷对象请求的命令(如写入命令),然后创建、排列并且执行子 命令。例如,解析自对象请求的写入命令可指令存储控制器152存储多个数据 段。所述对象请求还可包括必要属性(如加密、压缩等)。命令执行模块264 可命令存储控制器152压缩所述数据段、加密所述数据段、创建一个或多个数 据包并为每个数据包关联包头、使用J 某体加密密钥加密所述数据包、添加错 误修正码并将所述数据包存储在指定位置。在指定位置存储所述数据包,并且其他子命令还可被分解为其他更低级别的子命令。本领域技术人员会认识
到命令执行模块264能执行一条或多条解析自对象请求的命令的其他方法。
装置200包括对象索引模块266,该对象索引模块266在对象索引中创建对 象项,以响应创建对象或存储所述对象数据段的存储控制器152。通常,存储 控制器152从所述数据段中创建数据包,并且在存储所述数据段时,所述数据 包存储的位置即被指定。同数据段一起接收的或作为对象请求的一部分接收 的对象元数据可采用类似方法存储。
建进入对象索引的对象项。所述对象项包括所述对象的逻辑标识符和一个或 多个物理地址之间的映射,所述一个或多个物理地址对应于存储控制器]52存 储一个或多个数据包和任何对象元数据包的位置。在另一种实施方式中,在 存储所述对象的数据包之前在所述对象索引中创建项。例如,如果存储控制 器152较早地确定存储所述数据包的物理地址,则对象索引模块266可较早地 在所述对象索引中创建项。
通常,当对象请求或对象请求组导致对象或数据段被修改时(可能在读 修改写操作期间),所述对象索引模块266更新所述对象索引中的项以符合修 改的对象。在一种实施方式中,所述对象索引创建新对象并在所述对象索引 为所迷修改的对象创建新项。通常,当仅有对象的一部分被修改时,所述对 象包括修改过的数据包和一些保持不变的数据包。在这种情况下,所述新项 包括到未变的数据包(与最初写入它们的位置相同)的映射和到写入新位置 的修改后的对象的映射。
在另一种实施方式中,对象请求接收器模块260接收对象请求,该对象请 求包括擦除数据块或其他对象元的命令,存储控制器152可至少存储一个包 (如擦除包,该擦除包具有对象的引用、与对象的关系和擦除的数据块的大 小的信息)。此外,这可进一步表明擦除的对象元素被填充为O。因此,擦除 对象请求可用于仿真被擦除的实际的内存或存储器,并且,所述实际的内存 或存储器实际上具有合适的内存/存储器的一部分,所述合适的内存/存储器实 际上以0存储在所述内存/存储器的单元中。
有利地是,创建具有项(该项表明了数据段和对象元数据之间的映射) 的对象索引允许存储控制器152自主的处理和管理对象。这种能力允许在存储设备150中十分灵活地存储数据。 一旦创建了对象的索引项,存储控制器152
可有效地处理后继关于所述对象的对象请求。
在一种实施方式中,存储控制器152包括对象请求排队模块,该对象请求 排队模块在解析模块262解析之前将一个或多个由对象请求接收器模块260接 收到的对象排队。对象请求排队模块268允许在接收对象请求时和在执行所述 对象请时之间的灵活性。
在另一种实施方式中,存储控制器152包括封包器302,该封包器302根据 一个或多个数据段创建一个或多个数据包,其中,数据包的大小适于存储在 数据存储设备154内。在下文中结合图3更详细地描述封包器302。在一种实施 方式中,封包器302包括为每个包创建包头的消息模块270。所述包头包括包 标识符和包长度。所述包标识符把所述包与对象(为该对象生成所述包)联 系起来。
在一种实施方式中,由于包标识符包含足够的信息以确定对象和在对象 内的包含在包内的对象元素之间的关系,因此每个包包括自包含的包标识符。 然而,更有效的优选实施方式是在容器中存储包。
容器是一种数据结构,这种数据结构有助于更有效的存储数据包并帮助 建立对象和数据包、元数据包和其他与存储在容器内的对象有关的包之间的 关系。注意到存储控制器152通常以处理作为对象的一部分^t妻收的对象元数据 的类似方式处理数据段。通常,"包"可指包含数据的数据包、包含元数据的元 数据包或其他包类型的其他包。对象可存储在一个或多个容器中,并且容器 通常包括仅用于一个唯一的对象的包。对象可分布在多个容器之间。容器通 常存储在单个逻辑擦除块内(存储部)并且通常不分"^在逻辑擦除块间。
在一个实例中,容器可分散在两个或更多个逻辑/虚拟页间。通过将容器 与对象关联起来的容器标签确定容器。容器可包含O个到许多个包并且容器内 的这些包通常来自一个对象。包可以有许多对象元素类型(包括对象属性元、 对象数据元、对象索引元和类似的元素类型)。可以创建包括不止一个对象 元类型的混合包。每个包可包含O个到许多个同一类型的元。容器内的每个包 通常都包含标识与对象关系的唯一标识符。
每个包与一个容器相关联。在优选实施方式中,容器被限于擦除块,以 使得在每个擦除块的起始部分或在擦除块的起始部分附近能发现容器包。这有助于将数据丢失限制在具有损坏的包头的擦除块范围内。在这种实施方式 中,如果对象索引不可用并且擦除块内的包头损坏,由于可能没有可靠的机 制确定后继包的位置,从损坏的包头到擦除块尾的内容可能会丢失。在另一 种实施方式中,更可靠的方法是采用限于页的边界的容器。这种实施方式需 要更多包头开销。在另一种实施方式中,容器可流经页面和擦除块边界。这 种方法需要较少的包头开销,但是,如果包头损坏,则有可能会丢失更多部
分的数据。对这些实施方式来说,使用一些类型的RAID以进一步保证数据完
整性是可以预期的。
在一种实施方式中,装置200包括对象索引重建模块272,该对象索引重 建模块272采用来自存储在数据存储设备154中的包头的信息重建所述对象索 引中的项。在一种实施方式中,对象索引重建模块272通过读取包头(以确定 每个包所属的对象)和序列信息(以确定数据或元数据在对象中所属的位置) 来重建所述对象索引的项。对象索引重建^f莫块272采用每个包的物理地址信息 和时间戳或序列信息以创建包的物理地址和对象标识符和数据段序列间的映 射。对象索引重建模块272使用时间戳或序列信息以再现索引变更的顺序并通 常因此重建最近的状态。
在另一种实施方式中,对象索引重建^t块272采用包头信息以及容器包信 息放置包以识别包的物理位置、对象标识符和每个包的序列号,从而在所述 对象索引中重建项。在一种实施方式中,在写入数据包时,擦除块被戳记上 时间,或者赋给擦除块序列号,并且擦除块的时间戳或序列信息和来自容器 头和包头的信息一起使用以重建对象索引。在另一种实施方式中,当擦除块 恢复时,时间戳或序列信息被写入该擦除块。
当对象索引存储在易失性存储器中时,如果不能重建所述对象索引,错 误、失电、或其他导致存储控制器152未存储所述对象索引而停工的因素可能 会成为问题。对象索引重建模块272允许所述对象索引存储在具有易失性存储 体优点(如快速存取)的易失性存储体中。对象索引重建模块272允许自主地 快速重建所述对象索引,而并不需要依靠位于存储设备150外的设备。
在一种实施方式中,易失性存储体中的所述对象索引周期性地存储在数 据存储设备154内。在具体的实例中,所述对象索引或"索引元数据"周期性地 存储固态存储器110中。在另一种实施方式中,所述索引元数据存储在固态存储器110n (与固态存储器110a-110n-l存储包分离)中。独立于数据和对象元 数据管理所述索引元数据,所述数据和对象元数据传送自请求设备155并且由 存储控制器152/固态存储控制器202管理。管理和存储与其他来自对象的数据 和元数据分离的索引元数据允许有效的数据流,同时存储控制器152/固态存储 设备控制器202并不会不必要地处理对象元数据。
在一种实施方式中,其中,由对象请求接收器模块260接收到的对象请求 包括写入请求,存储控制器152通过本地或远程直接存储器存取("DMA"、 "RDMA")操作接收来自请求设备155的内存的一个或多个对象数据段。在优 选实例中,存储控制器152在一次或多次DMA或RDMA操作中从请求设备155 的内存中读取数据。在另一实例中,请求设备155在一次或多次DMA或RDMA 操作中将所述数据段写入存储控制器152。在另一种实施方式中,其中,所述 对象请求包括读请求,存储控制器152在一次或多次DMA或RDMA操作中将对 象的一个或多个数据段传送给请求设备155的内存。在优选实例中,存储控制 器l 52在一次或多次DMA或RDMA操作中将数据写入请求设备l 55的内存。在 另 一 实例中,请求设备在一次或多次DMA或RDMA操作中从存储控制器152 中读取数据。在另一实施方式中,存储控制器152在一次或多次DMA或RDMA 操作中从请求设备155的内存中读取对象命令请求集。在另一实例中,请求设 备155在一次或多次DMA或RDMA操作中将对象命令请求集写入存储控制器 152。
在一种实施方式中,存储控制器152仿真块存储,并且在请求设备155和 存储控制器152之间通信的对象包括一个或多个数据块。在 一种实施方式中, 请求设备155包括驱动器,以使得存储设备150表现为块存储设备。例如请求 设备155可与请求设备155期望数据存储的物理地址一起发送特定大小的一组 数据。存储控制器152接收所述数据块,并将与所迷数据块一起传送的物理块 地址或者将物理块地址的转化形式作为对象标识符。然后,存储控制器152通 过随意地封包所述数据块和存储数据块将所述数据块存储为对象或对象的数 据段。然后,对象索引模块266利用基于物理块的对象标识符和存储控制器152 存储所述数据包的实际物理位置在所述对象索引中创建项,所述数据包包括 来自所述数据块的数据。在另一种实施方式中,存储控制器152通过"l妻收块对象仿真块存储。块 对象可包括块结构中的一个或多个数据块。在一种实施方式中,存储控制器
152像处理任意其他对象一样处理所述块对象。在另一种实施方式中,对象可 代表整个块设备、块设备的分区或块设备的一些其他逻辑子元件或物理子元 件,所述块设备包括磁道、扇区、通道及类似设备。值得特别注意的是将块 设备RAID组重映射到支持不同RAID构建(如渐进RAID )的对象。本领域 技术人员会认识到将传统的或未来的块设备映射到对象的其他方法 固态存储设备
图2B是示出了根据本发明的位于固态存储设备102内的固态存储设备控 制器202的一种实施方式201的示意性框图,该固态存储设备控制器202包括写 入数据管道106和读取数据管道108。固态存储设备控制器202可包括若千固态 存储控制器O-N, 104a-n,每个固态存储控制器都控制固态存储器l 10。在描述 的实施方式中,示出了两个固态控制器固态控制器O 104 a和固态控制器N 104n,并且它们中的每一个都控制固态存储器110a-n。在描述的实施方式中, 固态存储控制器O 104a控制数据通道,以使得附属固态存储器110a存储数据。 固态存储控制器N :104n控制与存储的数据关联的索引元数据通道,以使得关 联的固态存储器liOn存储索引元数据。在替代的实施方式中,固态存储设备 控制器202包括具有单个固态存储器110a的单个固态控制器104a。在另一种实 施方式中,存在大量的固态存储控制器104a-n和关联的固态存储器110a-n。在 一种实施方式中, 一个或多个固态控制器104a-104n-l (与它们的关3关固态存 储器110a-riOn-l连接)控制数据,而至少一个固态存储控制器104n (与其关 联固态存储器110n连接)控制索引元数据。
在一种实施方式中,至少一个固态控制器104是现场可编程门阵列 ("FPGA")并且控制器功能被编入FPGA。在特定的实施方式中,FPGA是 Xilinx⑧公司的FPGA。在另一种实施方式中,固态存储控制器104包括专门 设计为固态存储控制器104的组件(如专用集成电路("ASTC")或自定义逻 辑解决方案)。每个固态存储控制器104通常包括写入数据管道106和读取数 据管道108,结合图3进一步描述了这两个管道。在另一种实施方式中,至少 一个固态存储控制器104由FPGA、 ASIC和自定义逻辑组件的组合组成。
固态存储器固态存储器110是非易失性固态存储元件216、 218、 220的阵列,该阵列 布置在内存库214中并且通过双向存储输入输出(I/O)总线210并行访问。在 一种实施方式中,存储I/O总线210能够在任何一个时刻进行单向通信。例如, 当将数据写入固态存储器110时,不能从固态存储器110中读取数据。在另一 种实施方式中,数据可同时双向地流动。然而,双向(如此处针对数据总线 使用的)指在同一时间数据仅在一个方向流动的数据通路,但是,当在双向 数据总线上流动的数据被阻止时,数据可在所述双向总线上沿相反方向流动。
固态存储元件(如SSS0.0 216a)通常被配置为芯片(一个或多个小片的 封装)或电路板上的小片。正如所描述的那样,固态存储元件(如216a)独 立于或半独立于其他固态存储元件(如218a)运行,即使这些元件被一起封 装在芯片包、芯片包的堆栈或一些其他封包元件内。正如所描述的, 一列固 态存储元件216、 218、 22(^皮指定为内存库214。正如所描述的,可以有"n"个 内存库214a-n并且每个内存库可以有"m,,个固态存储元件216a-m, 218a-m, 220a-m,从而在固态存储器110中成为固态存储元件216、218、220的i^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的每个芯片可具有一个或多个小片, 而一个或多个芯片垂直堆叠且每个小片可被独立存取。在另 一种实施方式中, 固态存储元件(如SSS0.0 216a)的每个小片可具有一个或多个虚拟小片,每 个芯片可具有一个或多个小片,而一个或多个小片中的一些或全部垂直堆叠 且每个虚拟小片可被独立存取。
在一种实施方式中,每组有四个堆,每堆有两个小片垂直堆叠,从而形 成8个存储元件(如SSS0.0-SSS0.8) 216a-220a,每个存储元件位于分离的内 存库214a-n内。在另一种实施方式中,20个存储元件(如SSS O.O-SSS 20.0)216形成虚拟内存库214a,因此八个虚拟内存库中的每一个都具有20个存储元 件(如SSS0.0画SSS20.8) 216、 218、 220。通过存储I/O总线210将数据发送到 固态存储器IIO,并发送到存储元件(SSS O.O-SSS 0.8) 216a、 218a、 220a的 特定组的所有存储元件。存储控制总线212a用于选择特定的内存库(如内存 库-0 214a),从而通过连接到所有内存库214的存储1/O总线210接收到的数据 仅^皮写入选定的内存库214a。
在优选实施方式中,存储I/O总线210由一个或多个独立I/O总线(包括 210a.a-m, 210n.a-m的"IIOBa-m")组成,其中,每一行内的固态存储元件共享 独立T/0总线中的一条,所述独立T/0总线中的一条平行访问每个固态存储元件 216、 218、 220,从而使得同时访问所有的内存库214。例如,存储1/0总线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的页访问容量,同时同 一地址流出存储1/0 27总线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将所述包导 入页内的指定位置。由于存储元件行(如SSS0.0-SSS0.N216a、 218a、 220a) 上的存储元件通过存储T/O总线210a.a内的合适总线同时被访问,为了到达合 适的页并将所述数据包写入在存储元件行(SSS O.O-SSS 0.N216a、 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)以防止擦除所有的内存库(内存库l-N214b-n)中的 具有类似地址的擦除块。还可采用存储T/O总线210和存储控制总线212的结合 将其他命令发送到特定位置。本领域技术人员会认识到采用双向存储I/0总线210和存储控制总线212选择特定存储单元的其他方法。
在一种实施方式中,将包顺序地写入固态存储器IIO。例如,包流到存储 元件216的内存库214a的存储写入缓沖器,并且当所述緩沖器饱和时,所述包 被编程入指定的虚拟页。然后所述包再次填充所述存储写入缓沖器,并且当 所述存储緩冲器再次饱和时,所述包被写入下一虚拟页。所述下一个虚拟页 可位于同一个内存库214a内或可位于另一个内存库(如214b)内。这个过程 (一个虚拟页接一个虛拟页)通常一直持续到虚拟块被填满时。在另一种实 施方式中,当这个过程(一个虚拟擦除块接一个虚拟擦除块)持续时,数据 流可继续越过虚拟擦除块边界。
在读、修改、写操作中,在读操作中定位并读取与所述对象关联的数据 包。已被修改的修改对象的数据段并不写入读取它们的位置。取而代之,修 改的数据段再次被转化为数据包并随后被写入正在被写入的虚拟页中的下一 个可用位置。各个数据包的所述对象索引项被修改为指向包含已修改的数据 段的包。所述对象索引中用于与同一对象(未被修改)关联的数据包的项(或 多个项)会包括指向未被修改的数据包的源位置的指针。因此,如果源对象 保持不变(例如保持所述对象的先前版本不变),所述源对象将在所述对象 索引中具有指向所有与最初写入的一样的数据包的指针。新对象将在所述对 象索引中具有指向一些源数据包的指针和指向正在被写入的虛拟页中的修改 的数据包的指针。
在复制操作中,所述对象索引包括用于源对象的项,该源对象映射到若 干存储在固态存储器110中的包。当复制完拷贝时,创建了新对象并在所述对 象索引中创建将所述新对象映射到源包的新项。还将所述新对象写入固态存 储器IIO,且所述新对象的地址映射到所述对象索引中的新项。新对象包可用 于确定在源对象中的包,该包被引用以防在未复制的源对象中发生改变并以 防对象索引丢失或损坏。
有利地是,顺序地写入包有助于更平滑地使用固态存储器110并允许固态 存储设备控制器202监测固态存储器110内的存储热点和不同虚拟页的层使用 状况。相继地写入包还可有助于建立强大、高效的垃圾收集系统,这将在下 文中详细描述。本领域技术人员会认识到顺序地存储数据包的其他好处。
固态存储设备控制器在不同的实施方式中,固态存储设备控制器202还可包括数据总线204、 局部总线206、緩沖控制器208、缓沖器O-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可位于计算内1 ]2内或者可以为其他设备。
通常,固态存储控制器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并通过网桥23 8传递给局部总线206.通常,数据在主控制器224和緩冲控制器208的控制下从局部总线206传递 给一个或多个数据緩沖器222。然后,所述数据通过固态控制器104从緩冲器 222流向数据总线204并到达固态存储器IIO(如NAND闪存或其他存储媒体)。 在优选实施方式中,数据与与所述数据一起到达的关联的带外元数据("对象 元数据")采用一个或多个的数据通道被送达,所述数据通道包括一个或多个 固态存储控制器104a-104n-l和关联的固态存储器110a-110n-l,而至少一个通 道(固态存储控制器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、 PCTe-As或类似总线。固态存储设备l02可被封装为适于置于设备 内部或^皮封装为外部连4姿设备。
固态存储设备控制器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/固
120中的特定物理地址。然后,主控制器224分配块并像存储对象一样存储数 据块。然后,主控制器224将块和与块一起发送的物理地址映射到由主控制器 224确定的实际位置。映射存储在对象索引中。通常,对于块仿真来说在计算 机112、客户端114或其他希望将存储设备l 52/固态存储设备l 02当成块存储设 备来使用的设备中提供有块设备应用程序接口 ("API")。
在另一种实施方式中,主控制器224与NIC控制器244和嵌入式RDMA控制 器246协同运行以提供准时的RDMA数据和命令集传输。NIC控制器244可隐藏 在非透明端口后以使得能够使用自定义的驱动器。同样地,客户端114上的驱
机网络118。
在一种实施方式中,主控制器224也是独立驱动器冗余阵列("RAID")控 制器。当数据存储设备/固态存储设备120与一个或多个其他数据存储设备/固 态存储设备120联网时,主控制器224可以是用于单层RAID、多层RAID、渐进 RATD等的RAID控制器。主控制器224还允许一些对象存储在RATD阵列内而其 他对象不通过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的级接收将要被写入固态存储器的数据或元数据段,并创建一 个或多个大小适于固态存储器lIO的包。所述数据或元数据段通常是对象的一 部分,但也可包括整个对象。在另一种实施方式中,所述数据段是数据块的 一部分,但也可包括整个数据块。通常,对象接收自计算机112、客户端U4 或其他计算机或设备并被以流向固态存储设备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内使用闪存 作为存储^ 某体,闪存在每个擦除周期内可被写入大约1 OOOOO次不出现错误。 这种使用期限可通过稳健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,该媒体 加密^t块318直接地或间接地从封包器302接收一个或多个包,并在将包发送 给ECC发生器304之前利用对固态存储设备l 02唯一的加密密钥加密所述一个 或多个包。通常,整个包(包括包头)都被加密。在另一种实施方式中,并 不加密包头。在本文中,在一种实施方式中,加密密钥-皮理解为意p未着在外 部管理的秘密加密密钥,这种密钥将固态存储器110和需要加密保护的设备集 成在一起。媒体加密模块318和相应的媒体解密模块332为存储在固态存储器 IIO中数据提供安全等级。例如,当数据利用媒体加密模块加密时,如果固态 存储器l IO连接到不同的固态存储控制器104、固态存储设备102或计算机112,通常,在不使用同一加密密钥(在将数据写入固态存储器110期间使用)时, 如果不经过合理的努力,则不能读取固态存储器l 10的内容。
在典型的实施方式中,固态存储设备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利用与第一包一起接收的第一加密密钥加密第一
包,而将第二数据包传递给下一级(未经加密)。有利地是,包括在固态存
储设备i02的写入数据管道106内的加密模块318允许对象接对象或段接段的 数据加密,而不需要单独的文件系统或其他外部系统来追踪不同的用于存储 相应对象或数据段的加密密钥。每个请求设备155或相关密钥管理器独立地管 理加密密钥,该加密密钥仅用于加密请求设备155发送的对象或数据段。
在另一种实施方式中,写入数据管道106包括压缩模块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以提升性能、数据可靠性并避免过度使用和不充分使用固态
存储器iio的任何一个位置或区域,并且延长了固态存储器no的使用寿命。
垃圾收集器旁路316协调将数据段插入写入数据管道106而其他数据段由 客户端116或其他设备写入。在描述的实施方式中,垃圾收集器旁路316位于 写入数据管道106内的封包器302之前、读取数据管道内的解包器314之后,但 也可位于写入和读取数据管道106、 118内的其他位置。可在清洗写入数据管 道106期间使用垃圾收集器旁路316,以填充虚拟页的剩余部分,从而提升固 态存储器l 10内的存储效率并因此减少垃:圾收集的频率。
在一种实施方式中,写入数据管道106包括写入缓沖器320,该写入缓冲 器320为了高效的写操作而緩沖数据。通常,写入緩沖器320包括用于包的足 够容量,以填充固态存储器110内的至少一个虚拟页。这允许写操作将数据的 整个页没有中断地发送给固态存储器110。通过选择写入数据管道l06的写入 緩冲器320的容量并将读取数据管道108内的緩沖器的容量选为同样大小容量 或比固态存储器110内存储写入缓冲器的容量大,由于单个写入命令可被设计 为将数据的整个虚拟页发送给固态存储器110,从而以单条命令替代多条命 令,写入和读取数据的效率更高。
当填充写入緩冲器320时,固态存储器110可用于其他读操作。这是有利 的,原因是当将数据写入存储写入緩冲器时和注入数据緩冲器的数据失速 时,具有更小容量的写入緩沖器的或不具有写入緩冲器的其他固态设备可绑 定固态存储器。读操作会被拦截直到整个存储写入緩冲器被填充或被编程。 用于不具写入緩沖器或具有小容量的写入緩冲器的系统的另一种方法是清洗 未满的存储写入緩冲器以使得能进行读操作。同样地,由于需要多写入/编程 周期来填充页,因此这种方法的效率低下。对于描述的具有容量比虚拟页容量大的写入緩沖器320的实施方式,单个 的写入命令(包括大量子命令)的后续命令可以是单个程序命令,以将来自
每个固态存储元件216、 218、 220中的存储写入緩沖器的数据页传递给每个固
态存储元件216、 218、 220中的指定页。这种技术带来的好处是减少了部分
页编程,众所周知,这降低了数据的可靠性和稳定性并在当緩沖器填充时, 为读命令和其他命令释放了目标内存库。
在一种实施方式中,写入緩沖器320为交替緩沖器,其中,所迷交替緩沖 器的一侧被填充,然后当所述交替緩冲器的另一侧被填充时,所述交替緩沖 器的一侧被指定为在适当的时间传送数据。在另一种实施方式中,写入緩沖 器320包括先进先出("FIFO")寄存器,该F1F0寄存器的容量比数据段虚拟页 的容量大。本领域技术人员会认识到允许在将数据写入固态存储器110之前存 储数据虚拟页的其他写入緩冲器320配置。
在另一种实施方式中,写入緩沖器320的容量比虛拟页小,从而少于一页 的信息可被写入固态存储器110内的存储写入緩冲器。在这种实施方式中,为 了防止写入数据管道106的失速阻止读操作,采用需要从一个位置移动到另一 个位置的垃圾收集系统将数据排队,这个过程是垃圾收集进程的一部分。为 了防止写入数据管道06中的数据失速,可通过垃圾收集器旁路316将所述数 据供应给写入緩冲器320并然后将所述数据供应给固态存储器110中的存储写 入緩冲器,从而在编程所述数据之前填充虚拟页的页面。这样,写入数据管
在另一种实施方式中,写入数据管道106包括写入程序模块310,该写入 程序^t块310具有写入数据管道106内的一个或多个用户可定义的功能。写入 程序^^块310允许用户自定义写入数据管道106。用户可基于特定数据请求或 应用自定义写入数据管道106。当固态存储控制器104为FPGA时,用户可相对 轻松地编程具有自定义命令和功能的写入数据管道106。用户还可利用写入程 序模块310以使ASIC包括自定义功能,然而自定义ASIC可能比使用FPGA时更 困难。写入程序模块310可包括缓沖器和旁路机制,以允许第一数据段在写入 程序^f莫块310中执行,而第二数据段通过写入数据管道106可继续传送。在另 一种实施方式中,写入程序模块310可包括能通过软件编程的处理器内核。应注意,写入程序模块310被示为位于输入緩沖器306和压缩模块312 之间,然而写入程序模块310可位于写入数据管道106内的任何位置,并且 可分布在不同的级302-320之间。此外,在不同的、已编程的且独立运行的级 302-320之间可分布有多个写入程序模块310。此外,级302-320的顺序可以 改t本领域技术人员会认识到基于特定用户需求的级302-320的顺序的可行 改变。
读取数据管道
读取数据管道108包括ECC纠错模块322,该ECC纠错;漠块322通过使用与 请求包中的每个ECC块一起存储的ECC来确定接收自固态存储器110的请求包 的ECC块中是否存在错误。然后,如果存在任何错误并且所述错误可使用ECC 修正,则ECC纠错模块322修正请求包中的任何错误。例如,如果ECC能够探 测6位的错误但只能修正3位的错误,那么ECC纠错模块322修正具有3位错误 的请求包ECC块。ECC纠错才莫块322通过把出错的位改变为正确的1或O状态来 修正出错的位,从而请求数据包与其被写入固态存储器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添加的包头。解
实例可以是容器标签,当对象索引重建模块272需要包头信息时,该容器标签 在重建进程期间被请求。另外的实例包括传送不同类型的包(预定在固态存 储设备102内使用)。在另一种实施方式中,解包器324操作可以依赖于包的 类型。
读取数据管道326包括对齐;f莫块326,该对齐模块326接收来自解包器324 的数据并删除多余的数据。在一种实施方式中,发送给固态存储器110的读命 令恢复数据包。请求数据的设备可不需要恢复的数据包内的所有数据,并且 对齐模块326删除多余的数据。如果恢复页内的所有数据都是请求的数据,对 齐模块326不删除任何数据。
对齐模块326在数据段传输到下一级之前以与请求数据段的设备兼容的 形式按对象的数据段重新格式化数据。通常,由于数据由读取数据管道]08处 理,数据段或包的大小在不同级间改变。对齐模块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, 这些i殳备相对于图4A和图4B描述。
内存库交错
图4A是根据本发明的位于固态存储控制器104内的内存库交错控制器344 一种实施方式400的示意性框图。内存库交错控制器344连接到控制和状态寄存器340并通过MUX350、存储总线控制器348和同步緩冲器346连接到存储I/0 总线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之间协调存储在队 列中的命令的4丸行。例如,第一类型的命令在在一个内存库241a上执行而第 二类型的命令在第二内存库214b上执行。通常,命令类型和队列类型包括读 取和写入命令和队列410、 412,但是还可包括存储i某介指定的其他命令和队 列。例如,在图4A所描述的实施方式中,擦除和管理队列414、 416被包括在 其中且适于闪存、NRAM、 MRAM、 DRAM、 PRAM等。
对于其他类型的固态存储器l 10,可包括其他类型的命令和相应的队列而 不脱离本发明的范围。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的情况在一种实施方式中,代理402、 404、 406、 408将预定用于特定内存库214a 的合适类型的命令送到内存库214a的修正队列。例如,读取代理402可接收用 于内存库-1 214b的读命令并将所述读命令送到内存库-l读取队列410b。写入 代理404可接收将数据写入固态存储器110的内存库-0 214a的写入命令并然后 会将所述写入命令发送给内存库-0写入队列412a。类似地,擦除代理406可接 收擦除命令以擦除内存库-1 214b中的擦除块并然后会将所述擦除命令传送给 内存库-l擦除队列414b。管理代理408通常接收管理命令、状态请求及其类似 消息,如复位命令或读取内存库214(如内存库-0 214a)的配置寄存器的请求。
代理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")寄存器或以FTFO运行的类似组件。在另一种实施方 式中,队列410、 412、 414、 4166按与数据、重要性或其他标准相匹配的顺序 来存储命令。
内存库控制器418通常接收来自队列410、 412、 414、 416的命令并生成合 适的子命令。例如,内存库-0写入队列412a可接收将数据包的页写入内存库-0 214a的命令。内存库-0控制器418a可在合适的时间接收写入命令并可为每个存 储在写入緩冲器320中的数据包生成一个或多个写入子命令(将要被写入内存 库-0 214a的页中)。例如,内存库-0控制器418a可生成验证内存库-0 214a和固 态存储阵列216状态的命令、选择写入一个或多个数据包的合适位置的命令、 清除位于固态存储阵列216内的输入缓沖器的命令、将一个或多个数据包传送 所述输入緩冲器的命令、将输入緩冲器放到选定位置中的命令、检验数据被 正确编程的命令,并且如果发生程序故障,则一次或多次地中断主控制器、重试写入同一物理地址并重试写入不同的物理地址。此外,与实例中的写入
命令一起,存储总线控制器348会将一条或多条命令乘以每条存储I/0总线 210a-n从而翻倍,而所述命令的逻辑地址映射到用于存储I/O总线210a的第一 物理地址,并映射到用于存储I/O总线210a的第二物理地址,下面将详细描述。
通常,总线仲裁器420选自内存库控制器418并从内存库控制器418的输出 队列提取子命令,并且将这些子命令以最优化内存库214性能的序列形式发给 存储总线控制器348。在另一种实施方式中,总线仲裁器420可响应高级中断 并修改普通选择标准。在另一种实施方式中,主控制器224可通过控制和状态 寄存器340控制总线仲裁器420。本领域技术人员会认识到总线控制器420可控 制和交错从内存库控制器418传送到固态存储器110的命令序列。
通常,总线仲裁器420协调来自内存库控制器418适当的命令和命令类型 所需的相应数据的选择,并将所述命令和数据发送给存储总线控制器348。总
对于闪存或其他具有异步、双向串行的存储T/O总线210的固态存储器ll0而言, 一次只能传送一条命令(控制信息)或数据集。例如,当将写入命令或数据 通过存储I/O总线210传送给固态存储器110时,读取命令、读取的数据、擦除 命令、管理命令或其他状态命令不能在存储I/O总线210上传输。例如,当从存 储1/0总线210读取数据时,不能向固态存储器110写入数据。
例如,在内存库-O的写操作期间,总线仲裁器420选择在其队列顶部具有 写入命令或一连串写入子命令的内存库-0控制器418a,所述一连串写入子命令 使得存储总线控制器348执行后继的序列。总线仲裁器420将写入命令转发给 存储总线控制器348,该存储总线控制器348通过下列方式建立了写入命令 通过存储控制总线212选择内存库-0 214a、发送清除与内存库-0 214a关联的固 态存储元件l IO的输入緩冲器的命令、发送验证与内存库-0 214a关联的固态存 储元件216、 218、 220的状态的命令。然后,存储总线控制器348通过包含了 物理地址存储I/O总线210传送写入命令,该物理地址如同映射自逻辑擦除块地 址一样包括用于每个单独的物理擦除固态存储元件216a-m的逻辑擦除块地址。 然后,存储总线控制器348通过多路转换器350将写入緩冲器经写入同步緩冲 器多路复用到存储T/0总线210并使写入数据流向合适的页。当所述页写满时, 然后,存储总线控制器348促使与内存库-0 214a关联的固态存储元件216a-m将输入緩冲器编入固态存储元件216a-m的内存单元。最终,存储总线控制器348 验证状态以确保所述页纟皮正确编程。
读操作与上文的写操作实例类似。在读操作期间,通常,总线仲裁器420 或内存库交错控制器344的其他组件接收数据和相应的状态信息并将数据发 送给读取数据管道108,同时将状态信息发送给控制和状态寄存器340。通常, 从总线仲裁器420传送给存储总线控制器348的读数据命令会促使多路转换器 350将读数据通过存储I/O总线210传送给读取数据管道108并通过状态多路转 换器422向控制和状态寄存器340发送状态信息。
总线仲裁器420协调不同的命令类型和数据存取^^莫式,使得在任意给定的 时间内,在总线上只有合适的命令类型或对应数据。如果总线仲裁器420已选 择了写入命令,且写入子命令和对应数据正在被写入固态存储器IIO,总线仲 裁器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内的一组擦除块。执行擦除 命令可消耗比执行写入或读取命令多IO到IOOO倍的时间,或消耗比执行程序 命令多10到100倍的时间。对于N个内存库2M,内存库交错控制器可将擦除命 令分割为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 O.O-SSS O.N 216a、 218a、 220a,第二内存库交错控 制器344服务存储元件的第二行SSS l.O-SSS 1.N216b、 218b、 220b,等等。
图4B是示出了根据本发明的位于固态存储设备内的内存库交错控制器的 一种替代实施方式401的示意性框图。图4B所示实施方式中描述的组件210、 212、 340、 346、 348、 350、 402-430大体上与相对于图4A描述的内存库交 错装置400类似,除了下述不同点每个内存库214包括单独的队列432a-n及用 于内存库的(如内存库-0 214a)读取命令、写入命令、擦除命令、管理命令 等被传送给内存库214的单独队列432a。在一种实施方式中,队列432是FIFO。
中提取的命令。在另一种替代实施方式(未示出)中,读取代理402、写入代 理404、擦除代理406和管理代理408可结合成单个代理,所述单个代理将命令 分配给合适的队列432a-n。
在另一种替代的实施方式(未示出)中,命令存储在单独的队列中,其 中,可以以不同于存储的顺序的顺序从队列中提取命令,从而使得内存库交 错控制器344在余下的内存库214b-n上执行。本领域技术人员会轻易地认识到 其他能够在一个内存库214a上执行命令而在其他内存库214b-n上执行其他命 令的队列配置和类型。
特定存储组件
固态存储控制器104包括同步緩沖器346,该同步缓沖器346从固态存储器 1 IO发送和接收的命令和状态消息。同步緩冲器346位于固态存储时钟域和本 地总线时钟域之间的边界上,并提供緩沖以解决时钟域差异。同步緩冲器346、 写入同步緩沖器308和读取同步緩沖器328可独立地或共同运作以緩沖数据、 命令、状态消息等等。在优选实施方式中,同步緩沖器346所处的位置使得跨 越时钟域的信号数量最少。本领域技术人员会认识到时钟域间的同步可任 意运行在固态存储设备102的其他位置,以优化设计实施方案的某些方面。固态存储控制器104包括存储总线控制器348,该存储总线控制器348解释 和翻译用于发送给或读取自固态存储器110的数据的命令并基于固态存储器 IIO的类型接收自固态存储器110的状态消息。例如,存储总线控制器348可针 对不同的存储类型、不同性能特点、不同制造商的存储器等而具有不同的定 时要求。存储总线控制器348还将控制命令发送给存储控制总线212。
在优选实施方式中,固态存储控制器104包括MUX350,该MUX350包括 多路转换器350a-n的阵列,其中,每个多路转换器用于固态存储阵列1 IO的一 行。例如,多路转换器350a与固态存储元件216a、 218a、 220a关联。MUX350 通过存储总线控制器348、同步緩沖器346和内存库交错控制器344将来自写入 数据管道106的数据和来自存储总线控制器348的命令经存储1/O总线210路由 至固态存储器IIO,并将来自固态存储器110的数据和状态消息经存储I/O总线 210路由至读取数据管道108和控制和状态寄存器340。
在优选实施方式中,固态存储控制器104包括用于固态存储元件的每一行 的(如SSS 0.1 216a、 SSS 0.2 218a、 SSS O.N 220a)的固X350。 MUX350将 来自写入数据管道106的数据和发送给固态存储器110的命令通过存储I/O总线 210结合起来,并将需要由读取数据管道108处理的数据从命令中分离出来。 存储在写入緩沖器320中的包通过用于固态存储元件的每一行(SSS x.O to SSS x.N216、 218、 220)的写入緩冲器308由写入緩沖器外的总线传给用于固态存 储元件的每一行(SSSx.Oto SSSx.N216、 218、 220)的MUX350。 MUX350 从存储I/O总线210接收命令和读取数据。MUX350还将状态消息传给存储总线 控制器348。
存储总线控制器348包括映射模块424。映射模块424将擦除块的逻辑地址 映射到擦除块的一个或多个物理地址。例如,每个内存库2:14a具有20个存储 元件的阵列(如SSS O.O至SSS M.O 216)的固态存储器110可具有映射到擦除 块的20个物理地址的特定擦除块的逻辑地址(每个存储元件有一个物理地址)。 由于平行访问存储元件,所以位于存储元件216a、 218a、 220a的行中的每个存 储元件中的同一位置的擦除块会分享物理地址。为了选择一个擦除块(如在 存储元件SSS 0.0 216a中)代替行(如在存储元件SSS 0.0、 0.1, ... O.N 216a、 218a、 220a中)中的所有擦除块,可选择一个内存库(在这种情况下为内存库 画0 214a)。这种用于擦除块的逻辑到物理的映射是有好处的,这是由于如果一个擦 除块已损坏或不可访问,所述映射可改为映射到另一擦除块。当一个元件的 擦除块出错时,这种方法减少了失去整个虛拟擦除块的损失。重映射模块430 将擦除块的逻辑地址的映射改为虚拟擦除块的一个或多个物理地址(遍布存
储元件的阵列)。例如,虚拟擦除块l可映射到存储元件SSS0.0 216a的擦除块 1、映射到存储元件SSS 1.0 216b的擦除块l、...和映射到存储元件M.O 216m, 虚拟擦除块2可映射到存储元件SSS 0.1 218a的擦除块2、映射到存储元件SSS 1.1 218b的擦除块2、...和映射到存储元件M.l 218m,等等。
如果存储元件SSS 0.0 216a的擦除块l损坏、由于损耗遇到错误或由于一些 原因不能^皮使用,重映射^f莫块可将从逻辑到物理的映射改为指向虚拟擦除块l 的擦除块l的逻辑地址的映射。如果存储元件SSS 0.0 216a的空闲擦除块(将其 称为擦除块221)可用且当前并未被映射,重映射模块可改变虛拟擦除块l的 映射为映射到指向存储元件SSS 0.0 216的擦除块221,而继续指向存储元件 SSS 1.0 216b的擦除块l、存储元件SSS2.0 (未示出)的擦除块l、...和指向存 储元件M.O 216m。映射模块424或重映射模块430可按固定顺序映射擦除块(虚 拟擦除块l到存储元件的擦除块l,虚拟擦除块2到存储元件的擦除块2,等等) 或可按基于其他一些标准的顺序映射存储元件216、 218、 220的擦除块。
在一种实施方式中,可按访问时间分组擦除块。按访问时间分组、均衡 命令执行的时间(如将数据编入或写入指定擦除块的页)可平均命令补齐, 从而使得在虚拟擦除块的擦除块之间执行的命令不会由于最慢的擦除块而被 限制。在另一种实施方式中,可按损耗程度、运行状况来分组擦除块。本领 域技术人员会认识到当映射或重映射擦除块时需要考虑的其他问题。
在一种实施方式中,存储总线控制器348包括状态捕捉模块426,该状态 捕捉;溪块426接收来自固态存储器l IO的状态消息并将该状态消息发送给状态 MUX422。在另一种实施方式中,当固态存储器110为闪存时,存储总线控制 器348包括NAND总线控制器428。 NANA总线控制器428将命令从读取和写入 数据管道106、 108传送给固态存储器110中的正确位置,并根据所述闪存的特 点协调命令执行的时间,等等。如果固态存储器110为另一种类型的固态存储 器,则将NAND总线控制器428替换为针对存储类型的总线控制器。本领域技 术人员会认识到NAND总线控制器428的其他功能。流程图
图5是根据本发明的在固态存储设备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块被写入 固态存储器IIO。通常,封包器302接收某个大小的数据段并生成另一大小的 包。这必然需要数据或元数据段或数据或元数据段的部分结合起来,以形成 将段的所有数据捕捉进包的数据包。
图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)。当从固态存储器UO请求数据 时,包括一个或多个数据包的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(步骤604X通常,代理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是示意性框图,示出了根据本发明的在固态存储设备l02中收集垃圾 的装置800的一种实施方式。装置800包括顺序存储模块802、存储部选择模块 804、数据恢复模块806及存储部恢复模块808,这些模块将在下文中描述。在 其他实施方式中,装置800包括垃圾标记模块812和擦除模块810。
装置800包括顺序存储模块802,该顺序存储模块802将数据包顺序地写 入存储部内的页。无论是新的包还是修改过的包,这些包都按顺序存储。在 这种实施方式中,通常不将修改过的包写回其先前存储的位置。在一种实施 方式中,顺序存储^i块802将包写入存储部的页中的第一位置,然后写入该 页中的下一个位置,并继续写入下一个位置和再下一个位置,直到该页被写 满。然后,顺序存储模块802开始填充所述存储部中的下一页。这个过程一 直持续到所述存储部被写满。
在优选实施方式中,顺序存储模块802开始将包写入内存库(内存库-0 214a)的存储元件(如SSSO.O到SSSM.0216)中的存储写入緩沖器。当所 述存储写入緩冲器写满时,固态存储控制器104使得所述存储写入緩冲器中 的数据被编入内存库214a的存储元件216中的指定页。然后,另一个内存库 (如内存库-l 214b)被选定,并且当一个内存库-0编程所述指定页时,顺序 存储模块802开始将包写入内存库214b的存储元件218的存储写入緩沖器。 当内存库214b的存储写入緩沖器写满时,该存储写入緩冲器中的内容被编入 每个存储元件218中的另一指定页。这个过程是有效率的,这是因为当一个 内存库214a编程页时,可填充另一个内存库214b的存储写入緩沖器。
所述存储部包括固态存储设备102中的固态存储器110的一部分。通常, 所述存储部为擦除块。对于闪存来说,擦除块上的擦除操作通过为每个单元 充电将1写入所述擦除块中的每一位。相比于始于全为1的位置的程序操作, 这是一个冗长过程,并且,当数据被写入时, 一些位通过给被写为0的单元 放电而改变为0。然而,当固态存储器110不是闪存时或固态存储器IIO具有 擦除周期消耗的时间和其他操作(如读取或编程)消耗的时间差不多的闪存 时,所述存储部可不需要被擦除。
55正如此处所使用的,存储部在大小上与擦除块等同,但可(或可不)被
擦除。当在此处使用擦除块时,擦除块可指存储元件(如SSS 0.0 216a)内指 定大小的特定区域,并通常包括一定数量的页。当"擦除块"与闪存结合使 用时,擦除块通常是在写入之前被擦除的存储部。当"擦除块"与"固态存 储器" 一起使用时,擦除块可(或可不)被擦除。正如此处所使用的,擦除 块可包括一个擦除块或擦除块组,存储元件(如SSS 0.0到SSS M.O 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为使用或再使用而准备所述存储部并将所述存储部标记为对顺序存储 ^t块802可用,以在数据恢复^t块806完成从所述存储部中复制有效数据之 后顺序地写入数据包。在另一种实施方式中,装置800包括存储部恢复模块 808,该存储部恢复模块808将选定为恢复的存储部标记为无法存储数据。通 常,这是由于存储部选拷一莫块804识别具有高额损耗的存储部或擦除块来选 择恢复的存储部,从而使得所述存储部或擦除块没有条件被用于可靠的数据 存储。
在一种实施方式中,装置800位于固态存储设备102的固态存储设备控 制器202内。在另一种实施方式中,装置800控制固态存储设备控制器202。 在另一种实施方式中,装置800的一部分位于固态存储设备控制器202内。 在另一种实施方式中,由数据恢复模块806更新的对象索引也位于固态存储 设备控制器202内。
在一种实施方式中,所述存储部为擦除块,并且装置800包括擦除模块 810,该擦除模块810在数据恢复模块806完成从所述选定的擦除块中复制有效数据包之后并在存储部恢复;f莫块808将所述擦除块标记为可用之前,擦除 选定为恢复的擦除块。对于闪存和其他擦除操作消耗的时间比读取或写入操 作消耗的时间长得多的固态存储器来说,在使数据块可以写入新数据之前擦
除所述数据块有助于高效的操作。当固态存储器110布置在内存库214内时, 擦除^t块810的擦除操作可在一个内存库上执行,而其他内存库可执行读取、 写入或其他操作。
在一种实施方式中,装置800包括垃圾标记模块812,该垃圾标记模块 812将存储部中的数据包识别为无效,以响应指示所述数据包不再有效的操 作。例如,如果数据包被删除,垃圾标记模块812可将所述数据包识别为无 效。读-修改-写操作是用于将数据包识别为无效的另一种方法。在一种实施方 式中,垃圾标记模块812可通过更新索引将所述数据包识别为无效。在另一 种实施方式中,垃圾标记模块812可通过存储另一数据包将所述数据包识別 为无效,所述另一数据包指示无效的数据包已经被删除。这种方法是有利的, 这是由于在固态存储器110中存储所述数据包已被删除的信息允许对象索引 重建模块262或类似模块重建具有项的对象索引,所述项指示所述无效的数 据包已经被删除。
在一种实施方式中,装置800可被用于在清洗命令之后填充数据的虚拟 页中的剩余部分,以提升整体的性能,其中,所述清洗命令使数据停止流入 写入数据管道106,直到写入数据管道106为空且所有的包已被永久地写入非 易失性固态存储器IIO。这具有以下好处降低了需要的垃圾收集的量、减少 了用于擦除存储部的时间并减少了编程虚拟页所需的时间。例如,可仅在准 备将一个小包写入固态存储器100的虛拟页内时,接收清洗命令。编程这个 几乎为空的页可能会引起下述结果需要立即恢复浪费的空间;导致所述存 储部内的有效数据被当作垃圾不必要的收集;及擦除、恢复所述存储空间并 将所述存储空间返回到可用空间池以被顺序存储模块802写入。
将所述数据包标记为无效而不是实际上擦除无效的数据包是有效率的, 这是因为,如上所述,对于闪存和其他类似存储器来说,擦除操作消耗相当 长的时间。允许垃圾收集系统(如装置800中所述的)在固态存储器110内 自主地运行提供了 一种将擦除操作与读取、写入或其他更快的操作分开的方 法,从而使得固态存储设备102能比其他许多固态存储系统或数据存储设备运行得快得多。
图9是示意性流程图,示出了根据本发明的用于存储恢复的方法900的 一种实施方式。方法900始于步骤902,顺序存储;溪块802将数据包顺序地写 入存储部(步骤904)。所述存储部是固态存储设备102中的固态存储器110 的一部分。通常,存储部为擦除块。所述数据包源于对象,而且所述数据包 按处理的顺序被顺序地存储。
存储部选择模块804选择恢复的存储部(步骤906),并且数据恢复模块 806从选定为恢复的存储部中读取有效的数据包(步骤908)。通常,有效的 数据包为未被标记为擦除、删除或其他一些无效数据标识符的数据包,所述 数据包被视为有效或"好,,的数据。数据恢复模块806将有效的数据包与其 他预定由顺序存储模块802顺序地写入的数据包排队(步骤910 )。数据恢复 模块806更新具有由顺序存储模块802所写入的数据的新物理地址的索引(步 骤912)。所述索引包括从数据包的物理地址到对象标识符的映射。这些数据 包存储在固态存储器10中,并且所述对象标识符对应于所述数据包。
在数据恢复模块806完成从所述存储部复制有效数据后,存储部恢复模 块将选定为恢复的存储部标记为对顺序存储模块802可用(步骤914),以顺 序地写入数据包,方法900结束于步骤916。
空数据段指令
一般来说,当数据不再有用时就会被擦除。在许多文件系统中,擦除命 令删除文件系统中的目录项,而仍将数据保持在包含该数据的存储设备中。 一般来说,数据存储设备并不涉及此类擦除操作。另一种擦除数据的方法是 向数据存储设备写入0、 l或一些其他空数据字符,以实际上替代所擦除的文 件。然而,这样做效率不高,因为在传送将被覆盖的数据时会使用宝贵的带 宽。此外,用来覆盖无效数据的数据会占据存储设备中的空间。
一些存储设备(如本文所描述的固态存储设备102)不是随机存取存储设 备,因此,更新先前所存储的数据并不会覆盖现有数据。尝试在此类设备中 使用一串1字符或一串0字符来覆盖数据会占据宝贵的空间,而且也无法满足 所期望的覆盖现存数据的意愿。对于这些非随机存储设备(诸如固态存储设 备102)而言,客户端114一般来说不具备覆盖数据以擦除数据的能力。
在接收到一串重复的字符或字符串时,所接收到的数据是可高度压缩的,但通常在将所述数据发往存储设备之前先由文件系统来执行压缩。 一般的存 储设备无法区分已经压缩的数据和未经压缩的数据。存储设备还可接收读取 所擦除的文件的命令,从而存储设备能够向请求设备传送一连串的O、 l或空 字符。同样的,需要带宽来传送表示了所擦除的文件的数据。
由上述讨论可知,很明显地存在对使得存储设备接收数据将被擦除的指 令的装置、系统和方法,以使得存储设备能够存储表示了空数据段、具有重 复的字符或字符串的数据的数据段令牌。该装置、系统和方法还可擦除现有 数据,由此产生的使用后的存储空间包括有小的数据段令牌。提出了能够克 服现有技术的一些缺陷或所有缺陷的装置、系统和方法。
图io是示出了根据本发明的具有用于生成令牌指令的装置的系统]ooo的
一种实施方式的示意性框图。该装置包括令牌指令生成模块1002、令牌指 令传输模块1004、读取接收器模块1006、读取请求传输模块1008、读取令牌 指令接收器模块IOIO、请求客户端响应模块1012和数据段重新生成模块1014, 将在下文中描述这些模块。在一种实施方式中,所述装置位于服务器112中, 该服务器112与具有存储控制器152、数据存储设备]54 (大体与上文所描述的 相类似)的存储设备150相连。
在一种实施方式中,该装置包括令牌指令生成模块1002,该令牌指令生 成模块1002用于生成具有令牌指令的存储请求。令牌指令包括在存储设备150 上存储数据段的请求。令牌指令旨在代替待发往存储设备150并作为数据段存 储的(如杲数据段令牌不在其位置发送的话) 一连串的重复的、相同的字符 或一连串的重复的、相同的字符串。在一种实施方式中,所述一连串的重复 的、相同的字符指示所述数据段为空。例如, 一连串的重复的、相同的字符 可以是0也可以是1,都为0或都为1的数据段可被看作是空的。
令牌指令至少包括数据段标识符和数据段长度。数据段标识符一般来说 是设法在存储设^^中存储重复的、相同的字符或字符串的对象ID、文件名称 或其他为文件系统、应用、服务器112所悉知的标识符等等。数据段长度一般 来说是一连串的重复的、相同的字符或字符串所需的存储空间。数据段令牌 和令牌指令一般来说不包括数据段的数据,如一连串重复的、相同的字符。
然而,令牌指令可以包括用于形成数据段令牌的其他相关信息,如所述 重复的、相同的字符或字符串中的至少一个实例。令牌指令还可包括元数据,如数据段位置、自文件系统的地址、对应于数据段的数据存储设备中的位置 等等。本领域的技术人员将会认识到可包括在令牌指令中的其他信息。在一 种实施方式中,指令生成模块1002生成令牌指令以及数据段令牌。
在一种实施方式中,令牌指令生成^t块1002生成令牌指令和安全擦除命 令以响应于覆盖存储设备150中的现存数据的请求。现存数据包括存储设备中 的使用与令牌指令中的数据段标识符相同的数据段标识符来标识的数据。一 般来说,在下列情况下发送覆盖数据的请求仅仅将数据标记为无效的或垃 圾已经不够了;删除指向数据的指针;或者其他典型的删除操作,但是,其 中,需要以不可恢复所述数据的方式来覆盖所述数据。比方说,当认为数据 是敏感信息,为了安全因素的考虑而必须将其删除时,就需要覆盖数据的命 令。
安全擦除命令指令存储设备150覆盖现有数据,由此现有数据是不可恢复 的。存储设备150随后创建数据段令牌,并对现有数据执行覆盖、恢复、擦除 等操作。由此,现有数据是不可恢复的,数据段令牌存储在存储设备150中, 其中,数据段令牌所占据的存储空间比现有数据小得多。
在另一种实施方式中,所述装置包括擦除确认模块1016,该擦除确认模 块1016用于接收确认,即,存储设备中的现有数据已经由字符覆盖了,从而 现有数据是不可恢复的。该确认可被转发至请求设备或客户端114,并可用于 验证现有数据已经处于不可恢复的状况中。在其他实施方式中,安全擦除命 令可指令存储设备150使用特定的字符、字符串来覆盖现有数据,或者可执行 多次执行命令。本领域的技术人员将会认识到用于配置一个或多个安全擦除 命令以确保现有数据不可恢复的其他方式。
可以对数据进行加密并随后将其存储在存储设备150中,其中,使用存储 设备l50在存储所述数据时接收到的加密密钥来完成加密过程。在另 一种实施 方式中,在存储现有数据之前先使用该接收到的加密密钥来加密现有数据的 情况下,令牌指令生成模块1002生成令牌指令以及加密擦除命令,以响应接 收了覆盖现有数据的请求。所述加密擦除命令擦除用于存储现有数据的加密 密钥,由此,加密密钥不可恢复。
在一种实施方式中,擦除加密密钥包括擦除来自于请求设备的加密密钥。 在另一种实施方式中,擦除加密密钥包括擦除来自服务器、密钥金库(keyvault)或存储加密密钥的其他位置的加密密钥。擦除加密密钥可包括使用其 他数据或使用 一连串的字符来替代加密密钥,以使得用任何方式都无法恢复 该加密密钥。
一般来说,在使用足够稳健以至于能够阻挠对解密现有数据的
尝试的加密程序来加密现有数据的情况下,擦除加密密钥会使得存储设备150
中的现有数据不可恢复。在如下情况下,覆盖现有数据的请求可以是安全擦
除指令(由于安全因素的原因而覆盖数据);覆盖数据以擦除数据的请求; 设法将现有数据替换为重复的、相同的字符或字符串的请求等等。在一种实 施方式中,安全擦除指令使得设备能够安全地擦除加密密钥以及能够安全地 擦除现有数据。在一种实施方式中,擦除加密密钥可允许安全地擦除存储设 备中的数据得以延迟,直到垃圾收集进程(存储空间恢复进程的一部分)擦 除了数据为止。本领域的技术人员将会认识到擦除加密密钥的其他方法和接 收覆盖现有数据的请求的其他方法。
在一种实施方式中,令牌指令包括数据段令牌,令牌指令传输模块1004 发送令牌指令以及数据段令牌。在另一种实施方式中,令牌指令不包括数据 段令牌,而包括使得存储设备150生成数据段令牌的命令。在该实施方式中, 令牌指令传输模块1004发送命令以及令牌指令以生成数据段令牌,但并不发 送数据段令牌。
所述装置包括令牌指令传输模块1004,后者用于向存储设备150发送令牌 指令。 一般来说,令牌指令传输模块1004发送作为存储请求的一部分的令牌 指令。存储请求可以是对象请求的形式、数据请求的形式或本领域的技术人 员所知的其他形式。在令牌指令生成模块1002生成了安全擦除指令的情况下, 令牌指令传输才莫块1004将所述安全擦除指令发送给存储设备150。在令牌指令 生成模块1002生成了擦除加密密钥命令的情况下,当需要时,擦除加密密钥 命令被发往另 一个设备来执行该命令。
在一种实施方式中,令牌指令传输^t块1004发送不包括数据段令牌的令 牌指令。在这种实施方式中,令牌指令包括可由存储设备150用来产生数据段 令牌的指令和信息。在另一种实施方式中,令牌指令传输模块1004发送包括 数据段令牌的令牌指令。在这种实施方式中,存储设备150能够识别出与令牌 指令接收的数据段令牌表示了数据段,存储设备150采取适当的操作来存储数 据段令牌,以使得数据段令牌表示了数据段,而不仅仅是将数据段令牌作为普通数据来存储。
在特定的实施方式中,所述装置包括读取接收器模块1006,用于接收 来自存储设备150的读取数据段的存储请求;读取请求传输模块008,用于向 存储设备150发送存储请求。 一般来说,存储请求是从请求客户端114 (如外 部客户端114)、服务器112内部的客户端114 (如在服务器112上运行的应用 或文件服务器等等)接收的。本领域的技术人员将会认识到可作为读取接收 器模块1006能从其接收存储请求的请求客户端114的其他设备以及软件。
存储请求包括读取对应于数据段令牌的数据段的请求,其中,数据段 令牌被请求存储在由令牌指令传输模块1004发往存储设备150的令牌指令中。 在一种实施方式中,请求客户端114不知道已经以数据段令牌的形式存储了数 据段。在另一种实施方式中,请求设备知道已经以数据段令牌的形式存储了 数据段,但并不清楚存储于数据段令牌中的信息。
在一种特定的实施方式中,装置还可包括读取令牌指令接收器模块IOIO, 该令牌指令接收器模块1010用于从存储设备接收对应于所请求的数据段令牌 的消息,其中,所述消息至少包括数据段标识符和数据段长度。 一般来说, 所述消息并不包括数据段中的数据。所述消息还包括存储在数据段令牌中的 其他信息,如数据段位置或重复的、相同的字符或字符串。在这种特定的实 施方式中,装置包括请求客户端响应模块1012,该客户端响应模块1012用于 向请求客户端113发送根据从存储设备150接收的消息而形成的响应。
在一种实施方式中,读取令牌指令接收器模块1010还接收消息中的有关 现有数据已经被字符覆盖从而现有数据不可恢复的确认,其中,所述现有数 据预先存储在存储设备中并且使用来自在消息中接收的数据段令牌的相同的 数据段标识符来标记。确认还可以独立于任何读取数据段的存储请求从存储 设备150接收到。
在另一种实施方式中,其中,请求客户端114需要数据段,所述装置包括 数据段重新生成模块1014,该数据段重新生成模块1014用于使用包含在消息 中的信息来重构数据段中的数据。在这种情况下,发往请求客户端的响应包 括经重构的数据段。在另一种实施方式中,发往请求客户端的响应包括包含 在从存储设备l50接收到的消息中的信息。请求客户端114随后重构数据段或 以一些其他的方式来使用该信息。在另一种实施方式中,所述消息包括数据段令牌。数据段重新生成模块1014使用该数据段令牌以在将数据段令牌向请
求客户端114转发之前重构数据段,或者,请求客户端响应模块1012可以简单 地转发该数据段令牌。
在一种实施方式中,具有令牌指令的存储请求还包括在存储设备150预留 存储空间的请求,其中,所请求的预留存储空间的存储空间大小与数据段长 度大致相同。在另一种实施方式,所请求的预留存储空间的存储空间大小不 同于数据段长度。例如,如果存储设备150是固态存储设备102,固态存储设 备102可以连接到硬驱动器或其他的长期、廉价存储器,而固态存储器I10则 被配置为长期存储器的緩存。预留存储空间的请求使得固态存储设备l02将一 部分緩存清洗到长期存储器以准备向固态存储设备102写入数据。本领域的技 术人员将会认识到期望请求预留存储空间的其他情况。
在一种实施方式中,装置可具有读取接收器^t块1006、读取请求传输模 块1008、读取令牌指令接收器模块IOIO、请求客户端响应模块1012,这些模 块大体类似于上文所描述的那些模块。在这种实施方式中,模块1006-1012独 立于包括有令牌生成模块1002或令牌指令传输模块1004的装置。在一种实施 方式中,所述装置包括大体类似于上文所描述的数据段重新生成模块1014的 数据段重新生成模块1014。
图ll是示意性框图,示出了根据本发明的用于生成和发送令牌指令的方 法1100的实施方式。方法1100始于步骤1102,令牌指令生成;f莫块1002生成包 括令牌指令的存储请求(步骤1104),其中,令牌指令包括在存储设备50中 存储数据段令牌的请求。令牌指令传输模块1004向存储设备150发送令牌指令 (步骤1106),方法1100在1108结束。在一种实施方式中,存储请求包括令 牌指令以存储数据段令牌,其中,存储请求大体上与数据段中的数据无关。
在另一种实施方式中,存储请求包括来自于数据段的数据。在优选实施方式 中,软件应用程序使用令牌指令创建存储请求,从而避免了创建数据段。在 另一种实施方式中,软件应用程序请求生成令牌指令。
图12是示意性流程图,示出了根据本发明的用于读取数据段令牌的方法 1200的实施方式。方法1200始于步骤1202,读取接收器才莫块1006从请求客户 端114接收从存储设备150读取数据段的存储请求(步骤1204 )。读取请求传 输模块1008将存储请求发往存储设备150 (步骤1206)。读取令牌指令接收器模块1008从存储设备150接收对应于所请求的数据 段令牌的消息(步骤1208 ),其中,所述消息至少包括数据段标示符和数据 段长度。所述消息大体上与数据段中的数据无关。请求客户端响应模块1012 向请求客户端发送响应(步骤1210),其中,该响应是根据从存储设备150接 收到的消息而形成的,方法1200结束于步骤1212 。
置的系统1300的实施方式。系统1300包括具有写入请求接收器模块1302和数 据段令牌存储模块1304的装置,在多个实施方式中,所述系统还包括具有令 牌指令生成模块1306、读取请求接收器模块1308、读取数据段令牌模块1310、 读取请求响应模块1312 (具有发送数据段令牌模块1314和发送数据段模块 1316)、重构数据段模块1318、安全擦除模块1320 (具有擦除确认模块1322 ) 和存储空间预留模块1324,下文将描迷这些模块。系统1300包括具有存储控 制器152和数据存储设备154的存储设备150(与上文所描述的设备大体类似)。 系统1300包括与存储设备150进行通信的请求设备1326 (下文将描述)。
在所描述的实施方式中,模块1302-1324被包括在存储设备150或存储控制 器152中。在另一种实施方式中,^t块1302-1324中的一个或多个模块的至少一 部分位于存储设备150之外。在又一种实施方式中,请求设备1326以驱动器、 软件或模块1302-1324中的 一 个或多个模块的其他功能形式包括模块 1302-1324的一部分。例如,在请求设备1326中示出了令牌生成模块1306和重 构数据段模块1318。本领域的技术人员将会认识到用以分布和实现模块 1302-1324的功能的其他方式。
所述装置包括写入请求接收器模块1302,该写入请求接收器模块1302用 于接收来自请求设备1326的存储请求,其中,所述存储请求包括将数据段存 储到存储设备150的请求。数据段包括一连串的重复的、相同的字符或字符串。 一般来说,所述一连串的重复的、相同的字符表明数据段为空。当一连串的 重复的、相同的字符为1或0的时候,尤为如此。所述装置包括用于在存储设 备150中存储数据段令牌的数据段令牌存储模块1304。数据段令牌至少包括数 据段标识符和数据段长度。数据段令牌大体上与数据段中的实际数据无关。
可以以多种方式存储数据段令牌。在一种实施方式中,数据段令牌包括 索引中的项,其中,所述索引对应于存储在存储设备150中的信息和数据。比方说,索引可以是上文结合图2所描绘的装置200而描述的对象索引。索引还
可以是文件系统索引、块存储索引或本领域技术人员所知的其他索引。在另
一种实施方式中,数据段令牌包括存储在存储设备150中的元数据,或是采用 了存储在存储设备150中的元数据的形式。在另一种实施方式中,数据段令牌 作为元数据存储在存储设备中,并且数据段令牌包括索引中的项。本领域技 术人员将会认识到存储数据段令牌的其他方式。
在一种实施方式中,存储请求包括用以存储数据段令牌的令牌指令,其 中,存储请求本质上与数据段中的数据无关。令牌指令包括数据段令牌或用 以生成数据段令牌的命令。其中,令牌指令不包括数据段令牌,数据段令牌 存储模块1304根据令牌指令中的信息生成数据段令牌。如果令牌指令包括数 据段令牌,那么数据段令牌存储模块1304执行如下操作将数据段令牌辨识 为表示了令牌指令中的数据段标识符所标识的数据段的数据结构;适当地存 储数据段令牌。
一般来说,在数据段令牌存储模块1304辨识出了数据段令牌的情况下,
求设备1326可以仅仅压缩数据并发送经压缩的对象、文件或数据段,从而存 储设备150不将经压缩的数据段与通过其他存储请求而接收到的其他数据相 区分。
在数据段令牌存储模块1304辨识出了接收到的数据段令牌是数据段令牌 的情况下,数据段令牌存储^t块i304以如下方式存储数据段令牌使得当读 取时,该数据段令牌表现为数据段而非数据段令牌。本领域的技术人员将会 认识到数据段令牌存储模块1304在辨识出所接收到的数据段令牌是数据段令 牌而非数据段之后可存储数据段令牌的其他方式。
在另一种实施方式中,存储请求包括来自数据段的数据。在该实施方式 中,所述装置包括用于根据数据段生成数据段令牌的令牌生成模块1306,其 中,为响应存储数据段的存储请求而创建所述数据段令牌。在又一种实施方 式中,令牌生成模块1306 (可能以驱动器的形式)位于请求设备1326中。
在一种实施方式中,装置包括安全擦除模块1320,该安全擦除模块1320 用于使用字符覆盖现有数据,以使得现有数据不可恢复,其中,所述现有数 据包括先前存储在存储设备中的数据段中的数据,所述数据段是使用与标识的。在该实施方式中,数据段令牌与数据段标识符一起存储,并且通过覆盖 现有数据擦除了数据段长度和由存储在数据段令牌中的相同的数据段标识符 来标识的现有数据。 一般来说,现有的字符由0、 l或一些其他的字符串来覆 盖,从而使得现有数据被破坏且不可恢复。
在又一种实施方式中,安全擦除模块还包括擦除确认模块1322,用于发 送指示了现有数据已被覆盖的消息。 一般来说,消息是发往请求设备1326的。 擦除确认消息在安全擦除模块1320覆盖了现有数据之后发送。所述消息可以 与存储请求在相同的交易过程中发送,也可以在与存储请求不同的交易过程 中发送。
在另一种实施方式中,安全擦除模块1320在存储空间恢复操作期间覆盖 现有数据。例如,如上文所述,如果存储设备150是固态存储设备102,那么 存储空间恢复操作与结合图8中描绘的装置800而描述的垃圾收集相关。然而, 通常会加快涉及覆盖现有数据的请求的存储空间恢复操作,以便在擦除确认 模块1322发送任何确认消息之前先必要地恢复存储现有数据的存储位置。在 一种实施方式中,标记或是标识现有数据以指示已经请求了安全擦除。 一般 来说,直到标记为要擦除的现有数据已经被覆盖并已不可恢复时才发送确认 消息。在另一种实施方式中,安全擦除模块1320仅仅将现有数据标记为无效, 以便随后的存储空间恢复。在另一种实施方式中,安全擦除操作更新索引, 以指示现有数据无效且在随后的存储空间恢复期间防止在数据被覆盖之前访 问该数据。
在一种实施方式中,安全擦除模块1320在每次存储数据段令牌时都覆盖 现有数据。在另一种实施方式中,存储请求具体包括覆盖现有数据的请求, 安全擦除模块1320覆盖现有数据以响应于覆盖现有数据的请求。在另一种实 施方式中,安全擦除模块1320存储与确认现有数据已经被擦除相关的元数据 信息,从而随后的读取能够指示该擦除。
在其他实施方式中,当未接收到安全擦除时,则删除现有数据。在一种 实施方式中,删除数据包括删除索引项和地址等等。在优选实施方式中,在 存储了数据段令牌时,相应的现有数据被标记为无效或已可进行存储恢复。 所述数据可随后在存储恢复操作、垃圾收集操作等操作中恢复。在特定的实施方式中,所述装置包括读取请求接收器模块1308,用于 接收读取数据段的存储请求;读取数据段令牌模块1310,用于读取对应于存 储请求所请求的数据段的数据段令牌;读取请求响应模块1312,用于向请求 设备1326发送响应。所述响应是使用对应于所请求的数据段的数据段令牌生 成的。
在一种实施方式中,读取数据段的请求与存储请求相关联并用于确认存 储请求已经成功。在另一种实施方式中,读取数据段的请求独立于存储请求, 所述请求可由生成所述存储请求的请求设备1326发起,也可由另外的不同的 请求i殳备1326发起。
在一种实施方式中,在请求设备能够接收来自数据段令牌的信息而不是 实际的数据的情况下,读取请求响应模块1312包括发送数据段令牌模块1314, 该数据段令牌模块1314用于向请求设备1326发送响应中的消息。所述消息至 少包括数据段标识符和数据段长度,但还可包括数据段位置;重复的、相 同的字符或字符串的至少一个例子;或其他相关信息。 一般来说,所述消息 并不包括数据段中的实际数据,而是包括数据段令牌所包括的其他信息。
在另一种实施方式中,在请求设备1326期望接收数据段的情况下,所述 装置包括重构数据段模块1318,该重构数据段模块1318用于使用数据段令牌 重构数据段中的数据。读取请求响应模块1312还包括用于向请求设备1326发 送经重构的请求的数据段的发送数据段模块1316。在另一种实施方式中,重 构数据段模块1318 (可能以驱动器的形式)位于请求设备1326中,发送数据 段令牌模块1314向请求设备1326发送包括数据段令牌信息的消息。请求设备 1326的重构数据段模块1318根据消息重构所请求的数据段。
在一种实施方式中,系统1300包括一个独立的装置,该装置包括读取 请求接收器模块1308、读取数据段令牌模块1310、读取请求响应模块1312, 这些模块大体上类似于上文所描述的那些模块。所述装置独立于包括写入请 求接收器模块1302和数据段令牌存储模块1304的装置。在一种实施方式中, 读取请求响应模块1312包括发送数据段令牌模块1314和/或发送数据段模块 1316,所述装置包括重构数据段模块1318,其中,模块1314、 1316和1318大 体上类似于上文所描述的那些模块。
图14是示意性流程图,示出了根据本发明的用于存储数据段令牌的方法1400的实施方式。方法1400始于步骤1402,写入请求接收器模块1302从请求 设备1326接收存储请求(步骤1404 ),其中,所述存储请求包括将数据段存 储到存储设备150的请求。数据段包括一连串重复的、相同的字符或字符串。 数据段令牌存储模块1304在存储设备150处存储数据段令牌(步骤1406),方 法1400结束于步骤1408。数据段令牌至少包括数据段标识符和数据段长度, 在大部分情况下,数据段令牌不包括数据段中的数据。
图15是示意性流程图,示出了根据本发明的用于读取数据段令牌的方法 1500的实施方式。方法1500始于步骤1502,读取请求接收器模块1308接收从 存储设备150中读取数据段的存储请求(步骤1504 )。所迷数据段以数据段令 牌的形式存在于存储设备中,所述数据段包括一连串重复的、相同的字符或 字符串。所述数据段令牌至少包括数据段标识符和数据段长度,数据段令牌 不包括数据段中的数据。读取数据段令牌模块1310读取对应于存储请求所请 求的数据段的数据段令牌(步骤1506 ),读取请求响应模块1312向请求设备 150发送响应(步骤1508 ),方法1500在1510结束。所述响应是使用对应于所 请求的数据段的数据段令牌生成的。
本发明可采用其他指定形式实施而不脱离本发明的宗旨或本质特点。描
明的范围由附属的权利要求确定,而不是由上述说明书确定。在本发明的权 利要求的含义和等价范围内的所有改变被包含在本发明的保护范围内。
权利要求
1、一种用于管理数据的装置,该装置包括写入请求接收器模块,用于从请求设备接收存储请求,所述存储请求包括在存储设备中存储数据段的请求,所述数据段包括一连串重复的、相同的字符或一连串重复的、相同的字符串;和数据段令牌存储模块,用于在所述存储设备中存储数据段令牌,所述数据段令牌包括数据段标识符和数据段长度,所述数据段令牌大体上与来自所述数据段的数据无关。
2、 如权利要求l所述的装置,其中,所述存储请求包括存储所述数据 段令牌的令牌指令,所述存储请求与所述数据段的数据无关。
3、 如权利要求2所述的装置,其中,所述数据段令牌存储模块在存储 所述令牌之前生成所述数据段令牌,其中,所述数据段令牌存储模块根据 所述令牌指令中的信息生成所述数据段令牌,所述令牌指令与所述数据段 令牌无关。
4、 如权利要求2所述的装置,其中,所述令牌指令包括所述数据段令 牌且所述数据段令牌存储模块识别出所述数据段令牌表示所迷数据段。
5、 如权利要求l所述的装置,其中,所述存储请求包括来自所述数据 段的数据,且所述装置进一步包括根据所述数据段生成数据段令牌的令牌 生成模块,生成所述数据段令牌以响应存储所述数据段的所述存储请求。
6、 如权利要求5所述的装置,其中,所述令牌生成模块驻留于所述请 求设备中。
7、 如权利要求l所述的装置,进一步包括安全擦除模块,所述安全擦 除模块使用字符覆盖现有数据,从而使得现有数据不可恢复,所述现有数 据包括先前存储在所述存储设备中的数据段的数据,使用与所述存储请求 中的数据段标识符相同的数据段标识符来标识所述数据段的数据。
8、 如权利要求7所述的装置,其中,所述安全擦除模块进一步包括擦 除确认模块,所述擦除确认模块发送指示所述现有数据已经被覆盖的消 息,发送擦除确认消息以响应所述安全擦除模块覆盖所述现有数据。
9、 如权利要求7所述的装置,其中所述安全擦除模块在存储空间恢复操作期间覆盖所述现有数据。
10、 如权利要求7所述的装置,其中,所述存储请求进一步包括覆盖 所述现有数据的请求,并且,其中所述安全擦除模块覆盖所述现有数据以 响应覆盖所述现有数据的请求。
11、 如权利要求l所述的装置,进一步包括 读取请求接收器模块,用于接收读取所述数据段的存储请求; 读取数据段令牌;模块,用于读取对应于由所述存储请求所请求的所述数据段的所述数据段令牌;和读取请求响应模块,用于向所述请求设备发送响应,使用对应于所请 求的数据段的所述数据段令牌生成所述响应。
12、 如权利要求ll所述的装置,其中,所述读取请求响应模块进一步 包括向所述请求设备发送响应中的消息的发送数据段令牌模块,所述消息 至少包括所述数据段标识符和所述数据段长度,所述消息大体上与所述数 据段的数据无关。
13、 如权利要求ll所述的装置,进一步包括重构数据段模块,该重构 数据段模块使用所述数据段令牌重构所述数据段的数据,并且,其中所述 读取请求响应模块进一 步包括发送经重构的、请求的数据段的发送数据段 模块。
14、 如权利要求l所述的装置,其中,所述一连串重复的、相同的字 符或字符串指示所述数据段为空。
15、 如权利要求l所述的装置,其中,所述存储请求进一步包括在所 述存储设备中预留存储空间的请求,所请求预留的存储空间包括大体上类 似于所述数据段长度的存储空间大小,并且所述装置进一步包括存储空间 预留模块,所述存储空间预留模块在所述存储设备中预留与预留存储空间 的请求相一致的存储空间大小。
16、 如权利要求l所述的装置,其中,所述空数据段令牌包括在索引 中的项,所述索引对应于存储在所述存储设备中的信息和数据。
17、 如权利要求l所述的装置,其中,所述数据段令牌包括存储在所述存储设备中的对象。
18、 如权利要求l所述的装置,其中,所述数据段令牌包括存储在所 述存储设备中的元数据。
19、 如权利要求l所述的装置,其中,所述数据段令牌进一步包括至 少一个数据段位置指示符、所述重复的、相同的字符的至少一个实例和所 述重复的、相同的字符串的至少一个实例。
20、 一种用于管理数据的装置,该装置包括读取请求接收器模块,用于接收从存储设备读取数据段的存储请求, 所述数据段在所述存储设备中由数据段令牌来表示,所述数据段包括一连 串重复的、相同的字符或一连串重复的、相同的字符串,所述数据段令牌 包括数据段标识符和数据段长度,所述数据段令牌大体上与来自所述数据 段的数据无关;和读取数据段令牌模块与,用于读取对应于在所述存储请求中所请求的 所述数据段的所述数据段令牌;和读取请求响应模块,用于向所述请求设备发送响应,使用与所请求的 数据段对应的所述数据段令牌生成所述响应。
21、 如权利要求20所述的装置,其中,所迷读取请求响应模块进一步 包括向所述请求设备发送响应中的消息的发送数据段令牌模块,所述消息 至少包括所述数据段标识符和所述数据段长度,所述消息大体上与所述数 据段的数据无关。
22、 如权利要求20所述的装置,进一步包括所述存储设备中的重构数 据段模块,用于使用所述数据段令牌重构所述数据段的数据,并且,其中 所述读取请求响应^t块进一步包括发送经重构的、请求的数据段的发送数 据段模块。
23、 如权利要求20所述的装置,其中,所述存储请求包括读取所述数 据段的请求,且进一步包括驻留在所述存储设备中的重构数据段模块,所 述重构数据段模块使用所述数据段令牌重构所述数据段的数据,并且,其 中所述读取请求响应模块进一步包括发送数据段模块,该发送数据段模块 在所述重构数据段模块根据至少包括所述数据段标识符和所述数据段长度的消息重新创建所请求的数据段之前,将所述消息发送给所述请求设 备。
24、 一种用于管理数据的系统,所述系统包括 存储设备;控制所述存储设备的存储控制器;写入请求接收器模块,用于从请求设备接收存储请求,所述存储请求 包括在由所述存储控制器控制的所述存储设备中存储数据段的请求,所述 数据段包括一连串重复的、相同的字符或一连串重复的、相同的字符串;和数据段令牌存储模块,用于在所述存储设备中存储数据段令牌,所述 数据段令牌包括数据段标识符和数据段长度,所述数据段令牌大体上与来 自所述数据段的数据无关。
25、 如权利要求24所述的系统,进一步包括 读取请求接收器模块,用于接收读取所述数据段的存储请求; 读取数据段令牌模块,用于读取对应于由所述存储请求所请求的所述数据段的所述数据段令牌;和读取请求响应模块,用于将响应发送给所述请求设备,使用对应于所请求的数据段的所述数据段令牌生成所述响应。
26、 如权利要求24所述的系统,其进一步包括驻留在所述请求设备中 的驱动器,所述驱动器包括下列模块中的一个或多个中的至少一部分所 述写入请求接收器模块、所述数据段令牌存储模块、所述读取请求接收器 模块、所述读取数据段令牌模块和所述读取请求响应模块。
27、 一种包括计算机可读介质的计算机程序制品,所述计算机可读介 质具有可运行用以执行管理数据的操作的计算机可用程序代码,所述计算 机程序制品的所述操作包括从请求设备接收存储请求,所述存储请求包括在由存储控制器控制的 存储设备中存储数据段的请求,所述数据段包括一连串重复的、相同的字 符或一连串重复的、相同的字符串;和在所述存储设备中存储数据段令牌,所述数据段令牌包括数据段标识符和数据段长度,所述数据段令牌大体上与来自所述数据段的数据无关。
28、 如权利要求27所述的计算机程序制品,其进一步包括 接收读取所述数据段的存储请求;读取对应于由所述存储请求所请求的所述数据段的所述数据段令牌;和将响应发送给所述请求设备,使用对应于所请求的数据段的所述数据 段令牌生成所述响应。
29、 如权利要求27所述的计算机程序制品,其中所述存储请求包括存 储所述数据段令牌的令牌指令,所述存储请求与所述数据段的数据无关。
30、 如权利要求27所述的计算机程序制品,其中所述存储请求包括来 自所述数据段的数据,所述计算机程序制品的操作进一步包括根据所述数 据段生成创建所述数据段令牌的令牌指令,创建所述信息指令以响应存储 所述数据段的所述存储请求。
全文摘要
本发明公开了在存储设备(150)中使用空数据段指令管理数据的装置、系统和方法。用于管理数据的所述装置、系统和方法包括写入请求接收器模块(1302)和数据段令牌存储模块(1304)。该写入请求接收器模块(1302)接收来自请求设备(1326)的存储请求。该存储请求包括在存储设备(150)中存储数据段的请求。该数据段包括一连串重复的、相同的字符或一连串重复的、相同的字符串。该数据段令牌存储模块(1304)在存储设备(150)中存储数据段令牌。数据段令牌至少包括数据段标识符和数据段长度。该数据段令牌大体上与所述数据段无关。
文档编号G06F3/06GK101622596SQ200780051020
公开日2010年1月6日 申请日期2007年12月6日 优先权日2006年12月6日
发明者乔纳森·撒切尔, 大卫·弗林, 迈克尔·扎佩 申请人:弗森多系统公司(dba弗森-艾奥)
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1