存储设备中用于功率减小管理的装置、系统及方法

文档序号:6351075阅读:159来源:国知局
专利名称:存储设备中用于功率减小管理的装置、系统及方法
技术领域
本发明涉及电能损坏期间的有效用电,以及更具体地,涉及在功率故障或显著功率减小期间防止存储设备中的功率损失。
背景技术
在多种不同情景中,用电对于计算设备非常重要。在一种情景中,在丢失外部电源的情况下电能是个问题。例如,诸如快闪存储单元之类的固态存储设备(SSD)是非易失性存储器。然而,在一些SSD设备中,在接收到数据之后,SSD在易失性存储单元(例如,DRAM、SRAM、寄存器、缓冲器等)中保持数据,以对数据执行多种操作。在功率故障的情况下,可以不保留在易失性存储单元中保持的数据。

发明内容
通过前述讨论,显然应该存在对数据存储设备中管理功率减小的装置、系统及方法的需求。有益地,即使在功率中断的情况下,这种装置、系统及方法也将在非易失性存储器中存储已肯定应答的数据。响应于现有技术的当前状态,以及具体地,响应于现有技术中当前可用存储设备还没有完全解决的问题和需求,开发了本发明。因此,开发本发明,以提供用于功率减小管理的装置、系统及方法,其克服了以上讨论的现有技术的缺点中的大部分或全部。呈现了一种用于功率损失管理的本发明的方法。在所公开的实施例中,所述方法实质上包括对于执行与所描述的装置和系统的操作相关的以下呈现的功能而言是必要的步骤。在一个实施例中,所述方法包括响应于主电源不能向非易失性数据存储设备提供预定阈值以上的电能,在所述非易失性存储设备中启动功率损失模式。在另一实施例中,所述方法包括在所述功率损失模式期间的至少功率滞留时间内,从辅助电源接受用于所述非易失性存储设备的电能。在另一实施例中,所述方法包括在所述功率损失模式期间,调整所述非易失性数据存储设备上进行中操作的执行,使得在所述功率滞留时间内执行进行中的基本操作。
在一个实施例中,所述方法通过以下步骤来调整进行中操作的执行终止所述非易失性数据存储设备上所述进行中操作中的一个或多个非基本操作。在一个实施例中,所述一个或多个非基本操作包括还没有向所述非易失性数据存储设备的一个或多个客户端肯定应答的写操作以及擦除操作和读操作。在一个实施例中,所述方法包括对所述非易失性数据存储设备断电,而不执行所述一个或多个非基本操作。在另一实施例中,所述方法通过以下步骤调整进行中操作的执行跳过一个或多个命令队列中的一个或多个非基本操作,使得在所述非易失性数据存储设备上不执行所述一个或多个非基本操作。在另一实施例中,所述方法通过以下步骤调整所述进行中操作的执行对进行中操作的选择进行重新排序,以在所述功率滞留时间内执行所述进行中的基本操作。在一个实施例中,所述方法通过以下步骤调整进行中操作的执行复位所述非易失性数据存储设备的一个或多个非易失性存储部件。在另一实施例中,所述方法包括响应于复位所述一个或多个非易失性区域,在一个或多个非易失性存储部件上执行所述进行中的基本操作。在一个实施例中,一个或多个非易失性存储部件实质上包括非易失性数据存储设备的所有非易失性存储部件。在另一实施例中,一个或多个非易失性存储部件包括当前正处理所述进行中操作中的非基本操作的非易失性存储部件的一个或多个存储体。在一个实施例中,每个存储体包括多个非易失性存储管芯。在一个实施例中,当前正处理的非基本操作包括擦除操作。在一个实施例中,所述方法还包括响应于启动所述功率损失模式,停止对所述非易失性数据存储设备的一个或多个子部件的操作。在一个实施例中,停止对所述一个或多个子部件的操作节约了所述辅助电源的能量,以提供所述功率滞留时间。在另一实施例中,所述方法通过以下步骤调整进行中操作的执行将与所述进行中的基本操作相关联的缓冲未完成数据转储到所述非易失性数据存储设备的非易失性存储单器中,使得所述非易失性存储器在功率滞留时间存储所述缓冲未完成数据。在一个实施例中,所述方法包括在所述非易失性数据存储设备上存储标识符,在所述功率损失模式期间启动所述非易失性数据存储设备。在另一实施例中,所述方法包括在所述非易失性数据存储设备上存储标识符,以标识在所述功率滞留时间内完成执行的所述进行中的基本操作。在一个实施例中,存储标识符以用于响应于恢复了对所述非易失性存储设备的供电而从所述非易失性存储设备获取所述标识符。在一个实施例中,所述辅助电源包括一个或多个电容器,该电容器能够存储足够的能量来提供所述功率滞留时间,以执行所述进行中的基本操作。提供了一种用于功率损失管理的装置,具有多个模块,被配置为在存储设备中功能性地执行管理功率损失的必要步骤。所描述实施例中的这些模块包括监视模块、辅助电源及完成模块。在一个实施例中,响应于主电源不能向非易失性数据存储设备提供预定阈值以上的电能,监视模块在所述非易失性存储设备中启动功率损失模式。在一个实施例中,在所述功率损失模式期间的至少所述功率滞留时间内,辅助电源向所述非易失性数据存储设备提供电能。在一个实施例中,完成模块在所述功率损失模式期间调整所述非易失性数据存储设备上的进行中操作的执行,使得在所述功率滞留时间内执行进行中的基本操作。在另一实施例中,所述完成模块通过以下步骤调整进行中操作的执行复位所述非易失性数据存储设备中当前正处理所述进行中操作中的非基本操作的一个或多个非易失性存储部件,以终止所述非基本操作。还呈现了本发明的系统,用于在存储设备中管理功率损失。所述系统通过以下来实现适配器、主电源、至少一个监视模块、至少一个辅助电源及一个或多个完成模块。具体地,在一个实施例中,所述系统包括两个或多个非易失性数据存储设备。在一个实施例中,所述适配器被配置为容纳两个或多个非易失性数据存储设备。在一个实施例中,主电源与所述适配器电耦合,以向所述两个或多个非易失性数据存储设备提供电能。在一个实施例中,响应于所述主电源不能提供预定阈值以上的电能,所述至少一个监视模块在所述非易失性存储设备中启动功率损失模式。在一个实施例中,所述至少一个辅助电源与所述适配器电耦合。在另一实施例中,每个所述辅助电源被配置为在所述功率损失模式期间的至少功率滞留时间内向所述至少一个非易失性数据存储设备提供电能。在一个实施例中,所述一个或多个功率损失模块在所述功率损失模式期间调整所述非易失性数据存储设备上的进行中操作的执行,使得在所述功率滞留时间内执行进行中的基本操作。在一个实施例中,所述一个或多个完成模块包括针对每个非易失性存储设备的独立完成模块,以及每个独立完成模块调整在相关联的非易失性数据存储设备上的进行中操作的执行。在另一实施例中,所述一个或多个完成模块是单系统功率损失模块,其调整在所述两个或多个非易失性数据存储设备上的进行中操作的执行。贯穿本文,对特征、优势或类似语言的引用并非暗示可以利用本发明实现的所有特征和优势应该在或在本发明的任何单个实施例中。此外,涉及特征和优势的语言应该被理解成意为,在本发明的至少一个实施例中包括了结合实施例描述的具体特征、优势或特性。因此,贯穿本文,对特征、优势及类似语言的讨论可以但并非必须指的是相同实施例。此外,在一个或多个实施例中,可以以任何适当的方式结合所描述的本发明的特征、优势及特性。本领域技术人员应该认识到,可以在没有特定实施例的具体特征或优势中的一个或多个具体特征或优势的情况下实践本发明。在其它例子中,附加特征和优势被认为是在一些实施例中,所述附加特征和优势可以不存在于本发明的所有实施例中。通过以下描述和所附权利要求,本发明的这些特征和优势将变得更加显而易见,或者通过如下文所述的对本发明的实践,可以学习本发明的这些特征和优势。


为了本发明的优势容易被理解,将参考在附图中示出的具体实施例来呈现以上简要描述的本发明的更具体描述。应该理解,这些附图仅描述了本发明的典型实施例,因此不应被认为是限制本发明的范围,将通过使用附图更具体而详细地描述和说明本发明,其中图1是示出了包括存储设备及功率管理装置的系统的一个实施例的示意图,其中在不期望的功率故障的情况下,所述功率管理装置使得能够进行改进的数据处理。图2是示出了用于数据存储设备的固态存储设备控制器的一个实施例的示意图;图3是示出了数据存储设备中具有写数据管道和读数据管道(pipeline)的固态
6存储控制器的一个实施例的示意图;图4是示出了固态存储控制器中存储体交错控制器的一个实施例的示意图;图5A是示出了功率管理装置的一个实施例的示意图;图5B是与数据损坏相关的时间线的一个示例;图6是示出了功率管理装置及与功率管理装置交互的非易失性存储单元的一个实施例的示意图;图7是示出了写数据管道的一个实施例的示意图;图8是示出了在不期望的功率故障的情况下用于改进的数据处理的方法的一个实施例的示意性流程图;以及图9是示出了在不期望的功率故障的情况下用于改进的数据处理的方法的另一个实施例的示意性流程图。
具体实施例方式贯穿本文,对特征、优势或类似语言的引用并非暗示可以利用本发明实现的所有特征和优势应该在或在本发明的任何单个实施例中。此外。涉及特征和优势的语言应该理解成意为,在本发明的至少一个实施例中包括结合实施例描述的具体特征、优势或特性。因此,贯穿本文,对特征、优势及类似语言的讨论可以但并非必须指的是相同实施例。此外,在一个或多个实施例中,可以以任何适当的方式结合所描述的本发明的特征、优势及特性。本领域技术人员应该认识到,可以在没有特定实施例的具体特征或优势中的一个或多个具体特征或优势的情况下实践本发明。在其它例子中,附加特征和优势被认为是在一些实施例中,所述附加特征和优势可以不存在于本发明的所有实施例中。通过以下描述和所附权利要求,本发明的这些特征和优势将变得更加显而易见,或者通过如下文所述的对本发明的实践,可以学习本发明的这些特征和优势。本文中描述的多种功能单元已经被标记为模块,以更特别地强调其实现的独立性。例如,模块可以被实现为包括定制VLSI电路或门阵列的硬件电路,诸如逻辑芯片、晶体管或其它离散部件之类的成品半导体。模块还可以被实现为可编程硬件设备,例如现场可编程门阵列、可编程阵列逻辑、可编程逻辑器件等。模块还可以被实现为由各种类型的处理器执行的软件。例如,可执行代码的标识模块可以包括计算机指令的一个或多个物理或逻辑块,其中所述计算机指令可以被组织成对象、程序或函数。然而标识模块的可执行性不需要物理上在一起,但是可以包括在不同位置中存储的完全不同的指令,其中当将所述不同位置在逻辑上结合到一起时,包括模块,并且实现了模块所声明的目的。事实上,可执行代码的模块可以是单个指令或多个指令,甚至可以分布在若干不同代码片段上、在不同程序中及横跨若干存储设备。类似地,本文可以在模块内标识并示出可操作数据,以及可以以任何适当形式实现可操作数据,并且将可操作数据组织到任何适当形式的数据结构中。可操作数据可以被收集为单数据集合,或者可以分布在包括不同存储设备的不同位置上,并且可以至少部分地,仅作为电信号存在于系统或网络上。在以软件实现模块或模块的一部分的情况下,在一个或多个计算机可读介质上存储软件部分。贯穿本文,对“一个实施例”、“实施例”或类似语言的引用,意味着在本发明的至少一个实施例中包括结合实施例描述的特定特征、结构或特性。因此,贯穿本文,短语“在一个实施例中”、“在实施例中”及类似语言的表象可以但并非必然全部指的是相同实施例。对计算机可读介质的引用可以采取能够将机器可读指令存储在数字处理装置上的任何形式。可以由如下器件实现计算机可读介质,即紧凑型盘、数字视频盘、磁带、Bernoulli驱动器、磁盘、穿孔卡片、快闪存储器、集成电路、或其它数字处理装置存储设备。此外,在一个或多个实施例中,可以以任何适当形式结合所描述的本发明的特性、结构或特性。在以下描述中,提供了许多具体细节来提供对本发明的实施例的全面理解,例如编程的示例、软件模块的示例、用户选择的示例、网络事务的示例、数据库查询的示例、数据结构、硬件模块、硬件电路、硬件芯片等。然而,本领域技术人员应该认识到,可以在没有一个或多个具体细节的情况下,或者利用其它方法、部件、材料等来实践本发明。在其它例子中,没有详细地示出或描述公知结构、材料或操作,以避免混淆本发明的方面。本文包括的示意性流程图一般被阐述为逻辑流程图。因此,所描述的顺序和标记的步骤是指示本方法的一个实施例。其它步骤和方法可以被认为是在功能、逻辑或效果上与一个或多个步骤或者其中的部分等价。此外,采用的格式和符号被提供用于说明方法的逻辑步骤,并且应被理解为并非限制所述方法的范围。尽管在流程图中采用了多种箭头类型和线类型,但是应被理解为并非限制相应方法的范围。事实上,一些箭头或其它连接符可以被用于仅指示方法的逻辑流。例如,箭头可以指示所描述方法的枚举步骤之间的未指定持续时间的等待或监视时间段。此外,在特定方法中出现的顺序可以或者可以不严格地遵守所示相应步骤的顺序。功率减小管理图1描述了系统100的一个实施例,所述系统100用于在功率故障、功率减小或其它功率损失的情况下改进的数据管理。在所描述的实施例中,系统100包括客户端114和存储设备102。客户端114可以是计算机,例如服务器、膝上型、桌上型或本领域已知的其它客户端设备。典型地,客户端114包括部件,例如存储单元、处理器、总线和本领域技术人员已知的其它部件。客户端114在存储设备102中存储数据,并且经由通信连接(未示出)与存储设备102传送数据。存储设备102可以位于客户端114内部或外部。通信连接可以是总线、网络或者允许客户端114与存储设备102之间的数据传输的其它方式的连接。在一个实施例中,存储设备102通过诸如PCI express("PCI-e")之类的PCI连接与客户端114相连。存储设备102可以是插入到客户端114上的PCI-e连接中的卡。存储设备102还具有主功率连接130,将存储设备102与主电源相连,其中主电源向存储设备102提供存储设备102执行诸如读、写、擦除等数据存储操作所需的功率。在正常操作的条件下,存储设备102通过主功率连接130从主电源接收必要的功率。在一些实施例中,例如图1所示的实施例中,主功率连接130将存储设备102连接至客户端114,以及客户端114充当了向存储设备102提供功率的主电源。在一些实施例中,主功率连接130和以上讨论的通信连接是客户端114与存储设备102之间的相同物理连接的一部分。例如,存储设备102可以经由PCI连接接收功率。在其它实施例中,存储设备102可以经由主功率连接130连接至外部电源。例如,主功率连接130可以将存储设备102连接至主电源,其中主电源是功率转换器(通常被称作功率砖(p0wer brick))。本领域技术人员应该意识到,存在存储设备102可以接收电能的多种方式,以及存在可以充当存储设备102的主电源的多种设备。存储设备102为客户端114提供非易失性存储。图1示出了存储设备102,其包括写数据管道106、读数据管道108、非易失性存储单元110、存储控制器104、功率管理装置122和辅助电源124。存储设备102可以包括一些附加部件,其中未示出所述附加部件,以提供存储设备102的简单示图。非易失性存储单元110存储数据,使得即使当没有为存储设备102供电时,也保持数据。非易失性存储单元110的例子包括固态存储单元(例如快闪)、硬盘、带或其它。存储设备102还包括存储控制器104,存储并获取非易失性存储单元110中的数据。存储控制器104可以使用一个或多个索引,以定位并检索数据,以及对在存储设备102中存储的数据执行其它操作。例如,存储控制器104可以包括整理器,用于执行数据整理操作,例如垃圾回收。如所示,在一些实施例中,存储设备102实现了写数据管道106和读数据管道108,以下将参考图3对其例子进行详细描述。当从客户端114传送数据至非易失性存储单元110时,写数据管道106可以对数据执行特定操作。这些操作可以包括,例如纠错码(ECC)生成、加密、压缩及其它。读数据管道108可以对从非易失性存储单元110读出并发送至客户端114的数据执行类似且可能相逆的操作。存储设备102还包括辅助电源124,其在全部或部分功率损坏导致存储设备102没有通过主功率连接130接收足够电能的情况下,提供功率。功率损坏是如下任意事件不期望地使得存储设备102停止经由主功率连接130接收功率,或者使得存储设备102经由主功率连接130接收的功率显著减小。在一个实施例中,功率的显著减小包括功率下降到预定阈值以下。在另一实施例中,选择预定阈值,以允许在来自主功率连接130的功率的级别上正常波动。例如至建筑物(building)的功率,其中在该建筑物中,客户端114和存储设备102可能坏掉了(go out)。用户动作(例如不适当地关闭了向存储设备102提供功率的客户端114)、主功率连接130中的故障或者主电源中的故障,可以使得存储设备102停止接收功率。多种可变功率损坏可能造成存储设备102不期望的功率损失。辅助电源IM可以包括一个或多个电池、一个或多个电容器、一组电容器、到电源的分离连接等。在一个实施例中,在功率损坏或者来自主功率连接130的功率减小期间,辅助电源IM在至少一段功率滞留时间向存储设备102提供功率。在另外的实施例中,辅助电源1 提供足够长的功率滞留时间,以使存储设备102将不在非易失性存储单元110中的数据转储(flush)到非易失性存储单元110中。因此,在功率的缺乏造成存储设备102停止运行之前,存储设备102可以保留在存储设备102中并非永久性存储的数据。在一些实现中,辅助电源1 可以包括能够提供预定功率滞留时间尽可能少的电容器,以保留空间,降低成本,并简化存储设备102。在一个实施例中,因为一般而言,电容器更可靠,需要较少的维护,并且相对于提供辅助电源的其它选项具有更长的使用寿命,所以将一组或多组电容器用于实现辅助电源124。在一个实施例中,辅助电源1 是电路的一部分,其中,在来自主功率连接130的功率部分或全部丢失时,所述电路向存储设备102提供功率。类似地,系统100可以被配置为在部分或全部功率损失时,自动地从辅助电源1 接受或接收电能。例如,在一个实施例中,辅助电源1 可以与主功率连接130并行地电耦合至存储设备102,使得主功率连接130在正常操作期间为辅助电源IM充电,并且响应于功率损失,辅助电源124向存储设备102自动提供功率。在一个实施例中,系统100还包括位于辅助电源IM与主功率连接130之间的二极管或其它反向电流保护,以防止来自辅助电源124的电流到达主功率连接130。在另一实施例中,响应于来自主功率连接130的减小功率,功率管理装置122可以通过使用开关等来使能辅助电源1 至存储设备102,或者将辅助电源IM连接至存储设备102。不在非易失性存储单元110中的数据的例子可以包括在数据移动通过写数据管道106时可能在易失性存储单元中保持的数据。如果在用电期间丢失了写数据管道106中的数据(即,没有写入非易失性存储单元110,或者没有被永久性地存储),则可以导致损坏和数据丢失。在一些实施例中,在存储设备102接收到要在非易失性存储单元110中存储的数据之后的某一时刻,存储设备102向客户端114发送肯定应答。存储设备102的写数据管道106或子部件可以产生肯定应答。这有利地于存储设备102在接收到数据之后尽可能早地发送肯定应答。在一些实施例中,在非易失性存储单元110中实际存储数据之前,写数据管道106发送肯定应答。例如,当仍然在通过写数据管道106将数据发送至非易失性存储单元110时,写数据管道106可以发送肯定应答。在该实施例中,非常期望的是,在辅助电源124失去足够功率之前,存储设备102将存储控制器104已经针对其发送肯定应答的所有数据转储到非易失性存储单元110中,以防止数据损坏,并且保持所发送的肯定应答的完整性。此外,在一些实施例中,作为功率损坏的结果,可能损坏写数据管道106内的一些数据。功率损坏可以包括功率故障以及所提供的功率级别方面的不期望变化。功率级别方面的不期望改变可以将处于存储设备102中但还未处于非易失性存储单元110中的数据置于危险中。甚至在功率管理装置122知道(或者被通知)已经存在功率上的损坏时,可能已经开始出现数据损坏了。例如,PCI-e规范示出了,在发信号通知功率损坏的情况下,应该假定,数据被损坏了且未被存储在特定环境中。对于使用其它连接类型(例如,PCI、串行高级技术附件("serial ATA,^“SATA”)、并行 ΑΤΑ(“PATA”)、小计算机系统接口(“SCST”)、ΙΕΕ1394(“火线”)、光纤通道、通用串行总线(“USB”)、PCIe-AS等)与客户端114相连的存储设备102而言,可能发生类似的潜在损坏。当功率损坏发生了(意味着可以假定从该时刻至当前时刻接收的数据被损坏了),一段时间过去了,感测到损坏并发信号通知这种损坏,而功率管理装置12接收该信号,变得知道该功率损坏时,可能会出现复杂情况。功率损坏发生与功率管理装置122发现功率损坏之间的间隔时间允许损坏数据进入写数据管道106中。在一些实施例中,应该识别这种损坏数据,并不将其存储在非易失性存储单元110中。备选地,可以在非易失性存储单元110中存储这种损坏数据,并如下所述,将其标记为损坏。为了描述简单,识别损坏数据并且不将该数据存储到非易失性存储单元110被主要用于描述本文的功能和特征。此外,客户端114应该意识到该数据没有被存储,或者备选地,完整性是问题的数据在可以查证该数据完整性之前没有被肯定应答。因此,不应该肯定应答损坏数据。存储设备102还包括功率管理装置122。在一些实施例中,功率管理装置122被实现为存储控制器104的一部分。功率管理装置122可以例如是软件驱动器或者在用于存储设备102的固件中实现。在其它实施例中,可以在软件驱动器、存储控制器104等部分地实现功率管理装置122。在一个实施例中,在存储设备102上将功率管理装置122中的至少一部分实现为存储控制器104等的一部分,使得即使在客户端114不再运行的情况下,在部分或全部功率损失期间,功率管理装置122也通过使用来自辅助电源IM的功率来继续运行。在一个实施例中,响应于来自主功率连接130的功率减小,功率管理装置122在存储设备102中启动功率损失模式。在一个实施例中,在该功率损失模式期间,功率管理装置122将在存储设备102中而还未在非易失性存储单元110中存储的数据转储到非易失性存储单元110中。在一些实施例中,功率管理装置122将已经肯定应答并在存储设备102中而还未存储到非易失性存储单元110中的数据转储到非易失性存储单元110中。在以下描述的一些实施例中,功率管理装置122可以调整对存储设备102上数据操作的执行,以确保在辅助电源124失去足够功率完成基本操作之前,即在辅助电源IM提供的功率滞留时间期间,完成基本操作。在一些实施例中,基本操作包括针对已经被肯定应答为存储了的数据的这些操作,例如已肯定应答的写操作。在其它实施例中,基本操作包括如下这些操作,即针对已经被肯定应答为存储了和擦除了的数据的操作。在其它实施例中,基本操作包括针对已经被肯定应答为存储、读和擦除了的数据的这些操作。功率管理装置122还可以终止非基本操作,以确保这些非基本操作不会非必要地消耗功率和/或防止基本操作执行例如,功率管理装置122可以终止擦除操作、读操作、未肯定应答写操作等。在一个实施例中,终止非基本操作保留了来自辅助电源124的功率,以允许辅助电源1 提供功率滞留时间。在另一实施例中,功率管理装置122在功率损失模式期间停止或关闭对存储设备102的一个或多个子部件的操作,以节约来自辅助电源124的功率。例如,在多种实施例中,功率管理装置122可以停止对与非基本操作相关联的如下部件的操作读数据管道108、直接读取存储器存取(“DMA”)引擎、和/或存储设备102的其它子部件。功率管理装置122还可以用于确定功率损坏损坏了什么数据,以防止损坏数据被存储在非易失性存储单元Iio中,并且确保了客户端114意识到在存储设备102中从未实际存储损坏数据。这防止了功率损坏导致的存储设备102中数据的损坏。在一个实施例中,系统100包括多个存储设备102。在一个实施例中,功率管理装置122管理针对多个存储设备102中的每个存储设备102的功率损失模式,以提供针对所述多个存储设备102的全系统功率损失模式。在另一实施例中,多个存储设备102中的每个存储设备102包括分离的功率管理装置122,其管理针对每个独立存储设备102的分离功率损失模式。在一个实施例中,功率管理装置122可以停止或关闭多个存储设备102中的一个或多个存储设备102,以节约来自辅助电源124的功率,来在一个或多个其它存储设备102上执行基本操作。在一个实施例中,系统100包括一个或多个适配器,用于提供客户端114与多个存储设备102之间的电连接。在多种实施例中,适配器可以包括容纳单个存储设备102的槽或端口,容纳两个或多个存储设备102的扩展卡或子卡等。例如,在一个实施例中,多个存储设备102中的每个存储设备102可以与客户端114的分离端口或槽相耦合。在另一示例实施例中,一个或多个适配器,例如子卡等,可以电耦合至客户端114(即,连接至客户端114的一个或多个槽或端口),以及所述一个或多个适配器中的每个适配器可以提供针对两个或多个存储设备102的连接。在一个实施例中,系统100包括容纳两个或多个适配器的电路板,例如母板等,每个适配器容纳两个或多个存储设备102。在另一实施例中,适配器使用电路板的PCI-e槽耦合至电路板,以及存储设备102使用适配器的PCI-e槽耦合至适配器。在另一实施例中,每个存储设备102包括非易失性固态存储器的双列直插式存储模块(“DIMM”),例如快闪存储单元等。在一个实施例中,电路板、适配器和存储设备102可以在客户端114的外部,并且可以包括分离的主功率连接130。例如,电路板、适配器和存储设备102可以被容纳在具有电源单元(“PSU”)的外部外壳中,并且可以使用如下外部总线与客户端114通信,例如eSATA、eSATAp、SCSI、火线、光纤通道、USB、PCIe-AS等。在另一实施例中,电路板可以是客户端114的母板,以及适配器和存储设备102可以是客户端114的内部存储器。鉴于本公开,本领域技术人员应该意识到,在系统100中使用的适配器和存储设备102的多种配置。例如,每个适配器可以容纳两个存储设备102、四个存储设备102或任何数目的存储设备。类似地,系统100可以包括一个适配器、两个适配器、三个适配器、四个适配器、或任意支持数目的适配器。在一个示例实施例中,系统100包括两个适配器,以及每个适配器容纳四个存储设备102,因此总共是8个存储设备102。在一个实施例中,辅助电源124向多个存储设备102中的每个存储设备102提供电能。例如,辅助电源1 可以被布置在主电路板或母板上的电路中,并且可以向若干适配器提供功率。在另一实施例中,系统100包括多个辅助电源,每个辅助电源向多个存储设备102的子集提供电能。例如,在一个实施例中,每个适配器可以包括用于适配器的存储设备102的辅助电源124。在另一实施例中,每个存储设备102可以包括用于存储设备102的辅助电源124。鉴于本公开,本领域技术人员将意识到,用于向多个存储设备102提供功率的辅助电源124的不同配置。固态存储设备图2是示出了根据本发明的固态存储设备控制器202的一个实施例200的示意性框图,其中固态存储设备控制器202包括固态存储设备102中的写数据管道106和读数据管道108。固态存储设备控制器202可以包括多个固态存储控制器O-N l(Ma-n,每个固态存储控制器控制固态存储器110。在所描述的实施例中,示出了两个固态控制器固态存储控制器0 10 和固态存储控制器N 104η,并且每个固态存储控制器控制固态控制器llOa-n。在所描述的实施例中,固态存储控制器010 控制数据通道,使得所附的固态存储器Ila存储数据。固态存储控制器NlMn控制与存储数据相关联的索引元数据通道,以及相关联固态存储器IlOn存储索引元数据。在备选实施例中,固态存储设备控制器202包括带有单个固态存储器IlOa的单个固态控制器l(Ma。在另一实施例中,存在多个固态存储控制器l(Ma-n及相关联固态存储器llOa-n。在一个实施例中,与其相关联固态存储器IlOa-IlOn-I相耦合的一个或多个固态控制器104a-l(Mn-l控制数据,而与其相关联固态存储器IlOn相耦合的至少一个固态存储控制器104an控制索引元数据。在一个实施例中,至少一个固态控制器104是现场可编程门阵列(“FPGA”)以及控制器功能被编程到FPGA中。在具体实施例中,FPGA是XHiiix FPGA。在另一实施例中,固态存储控制器104包括专门设计为固态存储控制器104的部件,例如专用集成电路(“ASIC”)或定制逻辑解决方案。典型地,每个固态存储控制器104包括写数据管道106和读数据管道108,这将结合图3进一步描述。在另一实施例中,至少一个固态存储控制器104包括组合FPGA、ASIC和定制逻辑部件。固态存储器固态存储器110是按照存储体214进行排列的非易失性固态存储元件216、218、220的阵列,并且通过双向存储输入/输出(“I/O”)总线210并行访问。在一个实施例中,存储I/O总线210能够在任何时刻进行单向通信。例如,当将数据写入固态存储器110时,不能从固态存储器110读数据。在另一实施例中,数据可以同时双向流动。然而,本文使用的关于数据总线的双向,指的是数据路径,其中该数据路径可以使得数据在某一时刻只朝一个方向流动,但是当停止了双向数据总线上的一个方向的数据流动时,数据可以在双向数据总线上以相反的方向流动。典型地,固态存储元件(例如,SSS 0. 0216a)被配置为电路板上的芯片(一个或多个管芯的封装)或管芯(die)。如所述,即使这些若干元件一起被封装为芯片封装、芯片封装的堆叠或一些其它封装元件,固态存储元件(例如,216a)也独立于或半独立于其它固态存储元件(例如,218a)工作。如所描述的,一行固态存储元件216a、216b、216m被指定为存储体214。如所描述的,在固态存储器110中的nxm固态存储元件216、218、220的阵列中,可以存在“η”个存储体2Ha-n以及每个存储体存在“m”个固态存储元件216a-m、218a-m、220a-m。当然,对于η和m,不同实施例可以包括不同值。在一个实施例中,固态存储器IlOa包括8个存储体214,其中每个存储体214中具有20个固态存储元件216、218和220。在一个实施例中,固态存储器IlOa具有8个存储体214,每个存储体214包括M个固态存储元件216、218和220。此外,对于nxm个存储元件216、218、220,还可以对一列或多列附加列(P)与其它固态存储元件216a、216b、216m以一行或多行的方式并行地寻址和操作。在一个实施例中,附加的P列存储用于ECC组块(chuck)(即,ECC代码字)的一部分的奇偶数据,其中ECC组块横跨特定存储体的m个存储元件。在一个实施例中,每个固态存储元件216、218、220包括单层单元(“SLC”)设备。在另一实施例中,每个固态存储元件216、218、220包括多层单元(“MLC”)设备。在一个实施例中,将共享公共存储I/O总线210a (例如,216b、218b、220b)的固态存储元件封装在一起。在一个实施例中,固态存储元件216、218、220可以具有垂直堆叠的一个或多个芯片,每个芯片具有一个或多个管芯,可以独立地访问每个管芯。在另一实施例中,固态存储元件(例如,SSS 0. 0216a)可以具有垂直堆叠的一个或多个芯片、每个芯片具有一个或多个管芯,每个管芯具有一个或多个虚拟管芯,可以独立地访问每个虚拟管芯。在另一实施例中,固态存储元件SSS 0. 0216a可以是每个芯片具有一个或多个管芯,每个管芯具有一个或多个虚拟管芯,其中一个或多个管芯中的一部分或全部管芯垂直堆叠,可以独立地访问每个虚拟管芯。在一个实施例中,垂直堆叠2个管芯,其中每组具有四个堆叠,从而形成8个存储元件(例如,SSS 0. O-SSS 8. 0)216a-220a,每个所述存储元件位于分离的组2Ha-n中。在另一实施例中,M个存储元件(例如,SSS 0. O-SSS 0.M) 216形成逻辑组214a,使得8个逻辑组中的每个逻辑组具有24个存储元件(例如,SSS 0. O-SSS 8. 24)216、218、220。经由存储I/O总线210向固态存储器110中的特定组的存储元件(SSSO. O-SSS 8. 0)216a、218a、
13220a中的所有存储元件发送数据。存储控制总线21 被用于选择特定存储体(例如,存储体0 21 ),使得仅向选定存储体21 写入经由与所有存储体214相连的存储I/O总线210接收的数据。在一个实施例中,存储I/O总线210包括一条或多条独立I/O总线(包括210a.a-m、210n. a-m的“IIOBa-m”),其中每列内的固态存储元件共享独立I/O总线之一,独立I/0总线并行地访问每个固态存储元件216、218、220,以便同时访问所有存储体214。例如,存储I/O总线210的一个通道可以同时访问每个存储体2Ha-n中的第一个固态存储元件216、218、220。存储I/O总线210的第二个通道可以同时访问每个存储体2Ha-n中的第二个固态存储元件216、218、220。同时访问每列固态存储元件216a、216b、216m。在一个实施例中,其中,固态存储元件216、218、220是多层(物理地堆叠),同时访问固态存储元件216,218,220的所有物理层。如本文所使用的,“同时”也包括几乎同时的访问,其中以稍微不同的间隔访问设备,以避免切换噪声。在本上下文中,同时被用于与顺序或连续访问相区分,其中在顺序或连续访问中,一个接一个地独立发送命令和/或数据。典型地,使用存储控制总线212独立地选择存储体2Ha-n。在一个实施例中,使用芯片使能或芯片选择来选择存储体214。在选择芯片和芯片使能是可用的情况下,存储控制总线212可以选择多层固态存储元件216、218、220中的一层。在其它实施例中,存储控制总线212使用其它命令,以独立地选择多层固态存储元件216、218、220中的一层。还可以通过存储I/O总线210与存储控制总线212上传输的控制与地址信息的组合,来选择固态存储元件216、218、220。在一个实施例中,每个固态存储元件216、218、220被划分为擦除块,以及每个擦除块被划分为页。固态存储元件216、218、220上的擦除块可以被称作物理擦除块或“PEB”。典型页是2000字节(“2kB”)。在一个示例中,固态存储元件(例如,SSS 0.0)包括两个寄存器,并且可以对两页进行编程,使得二寄存器固态存储元件216、218、220具有4kB的容量。然后,20个固态存储元件216a、216b、216m的存储体214具有利用相同地址访问的80kB容量的页,其中相同地址经由存储I/O总线210的通道。在80kB的存储体214固态存储元件216a、216b、216m中的这组页可以被称作逻辑页或虚拟页。类似地,可以将存储体21 中的每个存储元件216a-m中的擦除块数据包,以形成逻辑擦除块或虚拟擦除块。在一个实施例中,当在固态存储元件216、218、220内接收到擦除命令时,擦除固态存储元件216、218、220内的页的擦除块。尽管预期随着时间的推移与技术上的进步,擦除块、页、平面(Plane)或者固态存储元件216、218、220内其它逻辑和物理上的分区的尺寸和数目将改变,期望符合新配置的多种实施例是可能的并符合本文的一般描述。典型地,当将数据包写入固态存储元件216、218、220内的特定位置时,其中旨在将数据包写入到特定存储体中特定存储元件的特定物理擦除块的特定页内的位置时,在存储I/O总线210上发送物理地址,并且紧跟着发送数据包。物理地址包括针对固态存储元件216、218、220的足够信息,以将数据包引导到页内的指定位置。因为通过存储I/O总线210a. a内的适当总线同时访问一列存储元件(例如,SSS 0. O-SSS N. 0216a,218a,220a)中的所有存储元件,为了到达适宜页并且避免将数据数据包写入该列存储元件(例如,SSSO. 0-SSSN. 0216a、218a、220a)中的类似寻址页,存储控制总线212同时选择包括固态存储元件SSS 0. 0216a的存储体21 ,其中该固态存储元件SSSO. 0216a具有要写入数据包的
正确页。类似地,在存储I/O总线210上满足读命令需要存储控制总线212上的同时信号,以选择单存储体21 及该存储体21 内的适当页。在一个实施例中,读命令读取整页,因为在存储体214中存在并行的多个固态存储元件216a、216b、216m,利用读命令读取整个逻辑页。然而,如下所说明的,对于存储体交错,可以将读命令分成子命令。也可以在写操作中访问逻辑页。可以经由存储I/O总线210发送擦除块擦除命令及特定擦除块地址来擦除擦除块,以擦除特定擦除块。典型地,可以经由I/O总线210的平行路径上发送擦除块擦除命令,以擦除逻辑擦除块,其中每个逻辑擦除块擦除命令具有特定擦除块地址,以擦除特定擦除块。同时,经由存储控制总线212选择特定存储体(例如,存储体0214a),以防止擦除所有存储体(存储体I-N 214b-n)中类似寻址的擦除块。备选地,没有经由存储控制总线212选择特定存储体(例如,存储体0214a),以使能够同时删除所有存储体(存储体I-N 214b-n)中的类似寻址的擦除块。还可以使用存储I/O总线210和存储控制总线212的组合,来向特定位置发送其它命令。本领域技术人员应该意识到,使用双向存储I/O总线210和存储控制总线212来选择特定存储位置的其它方法。在一个实施例中,将数据包顺序地写入固态存储器110。例如,使数据包成流到存储元件216的存储体21 的存储写缓冲器中,以及当缓冲器满时,将数据包编程到指定逻辑页。然后,数据包再填充存储写缓冲器,以及当满时,将数据包写入下一逻辑页。下一逻辑页可以位于相同存储体21 中或另一存储体(例如,214b)中。该过程按照一个逻辑页接着一个逻辑页继续,典型地直到填充了逻辑擦除块为止。在另一实施例中,在过程继续的状况下,流可以按照一个逻辑擦除块接着一个逻辑擦除块的方式连续横跨逻辑擦除块边界。在读、修改、写操作中,定位与请求的数据相关联的数据包,并在读操作中读取。已经修改的修改后请求数据的数据分段没有被写入到读取其的位置。相反,修改后的数据分段被再次转换为数据包,然后被顺序地写入到当前写入的逻辑页中的下一可用位置。修改针对数据包的相应索引条目,以指向包括了修改后的数据分段的包。针对与还没有修改的相同请求数据相关联的数据数据包的索引中的一个条目或多个条目将包括针对未修改数据数据包的原始位置的指针。因此,如果保持原始请求数据,例如,保持请求数据的在先版本,则原始请求数据将具有在索引中的针对原始写入的所有数据数据包的指针。新请求数据将具有在索引中的针对原始数据数据包中的一部分数据数据包的指针及针对当前写入的逻辑页中修改后的数据数据包的指针。在拷贝操作中,索引包括针对原始请求数据的条目,其中该原始请求数据被映射到在固态存储器110中存储的多个数据包。当进行拷贝时,创建请求数据的新拷贝,以及在索引中创建新条目,以将请求数据的新拷贝映射到原始数据包。还将请求数据的新拷贝写入固态存储器110中,其中请求数据的新拷贝的位置被映射到索引中的新条目。如果改变了还没有被传播成请求数据的拷贝的原始请求数据,并且索引丢失或损坏了,则所请求数据包的新拷贝可以用于识别在原始请求数据内被引用的数据包。有利地,顺序地写入数据包便于更均勻的使用固态存储器110,并允许固态存储设备控制器202监视固态存储器110中的存储热点及对各种逻辑页的层次使用(levelusage)。顺序地写入数据包还便于强大、有效的垃圾回收系统,这将在以下进行描述。本领域技术人员应该意识到数据包的顺序存储的其它益处。固态存储设备控制器在多种实施例中,固态存储设备控制器202还包括数据总线204、局部总线206、缓冲器控制器208、缓冲器O-N 22加-11、主控制器224、直接存储存取(“DMA”)控制器226、存储单元、控制器228、动态存储单元230阵列、静态随机存储单元阵列232、管理控制器234、管理总线236、至系统总线MO的桥238、以及各种逻辑M2,这将在以下描述。在其它实施例中,系统总线240耦合至一个或多个网络接口卡(“NIC”) M4,一个或多个中央处理单元(“CPU”) M8、一个或多个外部存储单元控制器250以及相关联的外部存储单元阵列252、一个或多个存储器控制器254、对等控制器256和专用处理器258,这将在以下进行描述,其中一个或多个网络接口卡中的一些网络接口卡可以包括远程DMA( “RDMA”)控制器M6。与系统总线240相连的部件244-258可以位于客户端114中,或者可以是其它设备。典型地,固态存储控制器104经由存储I/O总线210向固态存储器110传送数据。在如下典型实施例中,以存储体214布置固态存储器,并且每个存储体214包括并行访问的多个存储元件216a、216b、216m,存储I/O总线210是总线的阵列,其中针对每列存储元件216,218,220的一条总线横跨存储体214。如本文所使用的,术语“存储I/O总线”可以指一条存储I/O总线210或者数据独立总线的阵列204。在一个实施例中,访问一列存储元件(例如216a、218a、220a)的每条存储I/O总线210可以包括用于以存储元件216a、218a、220a的列访问的存储分区(例如,擦除块)的逻辑至物理的映射。该映射(或者坏块重映射)允许,如果第一存储分区失效、部分失效、不可访问、或者有一些其它问题,则将映射到存储分区的物理地址的逻辑地址重映射到不同存储分区。还可以通过系统总线M0、桥238、局部总线206、缓冲器222、以及最终通过数据总线204,从请求设备155向固态存储控制器104传送数据。典型地,数据总线204连接至由缓冲器控制器208控制的一个或多个缓冲器22h-n。典型地,缓冲器控制器208控制从局部总线206至缓冲器222的数据的传输,并且控制通过数据总线204至管道输入缓冲器306与输出缓冲器330的数据的传输。典型地,缓冲器控制器208控制如何在缓冲器222中临时存储从请求设备抵达的数据,然后将其传输到数据总线204上,或者反之亦然,以占领(account for)不同块区域,防止数据冲突等。典型地,缓冲器控制器208与主控制器224协作,以协调数据流。当数据到达时,数据将到达系统总线对0,以通过桥238传输至局部总线 206。 典型地,通过主控制器2 与缓冲器控制器208的引导,将数据从局部总线206传输至一个或多个数据缓冲器222。然后,通过固态控制器104使数据从缓冲器222流入数据总线204,进而到达固态存储器110,例如NAND快闪或其它存储介质。在一个实施例中,使用包括一个或多个固态存储控制器104a-l(Mn-l与相关联固态存储器IlOa-IlOn-I的一个或多个数据通道传输数据及与数据一起抵达的相关联带外(out-of-band)元数据(“元数据”),同时至少一个通道(固态存储控制器104η,固态存储器110η)专用于带内(in-band)元数据,例如索引信息及固态存储设备102内部产生的其它元数据。
典型地,局部总线206是双向总线或者总线的集合,其允许在固态存储设备控制器202内部的设备之间以及在固态存储设备102内部的设备与连接至系统总线240的设备244-258之间传输数据。桥238便于局部总线206与系统总线240之间的通信。本领域技术人员应该意识到其它实施例,例如环结构或星形交换配置及总线M0、206、204、210与桥238的功能。典型地,系统总线240是客户端114的总线,或者,安装或连接了固态存储设备102的其它设备的总线。在一个实施例中,系统总线240可以是PCI-e总线、串行高级技术附件(“串行ΑΤΑ”)总线、并行ATA等。在另一实施例中,系统总线240是外部总线,例如小计算机系统接口( “SCST”)、火线、光纤通道、USB、PCIe-AS等。可以封装固态存储设备102,以安装到设备的内部,或者作为外部连接的设备。固态存储设备控制器202包括主控制器224,控制固态存储设备102内较高级别的功能。在多种实施例中,主控制器2Μ通过以下步骤来控制数据流解释对象请求和其它请求,引导创建索引来将与数据相关联的对象标识符映射到相关联数据的物理地址,协调DMA请求等。本文描述的大多数功能受主控制器2M完全地或部分地控制。在一个实施例中,主控制器2 使用嵌入式控制器。在另一实施例中,主控制器224使用局部存储单元,例如动态存储单元阵列230 (动态随机存储存储单元“DRAM”)、静态存储单元阵列232(静态随机存储存储单元(“SRAM”))等。在一个实施例中,使用主控制器2M控制局部存储单元。在另一实施例中,主控制器2M经由存储单元控制器2 访问局部存储单元。在另一实施例中,主控制器2M在Linux服务器上运行,并且可以支持各种普通服务器接口,例如,万维网、超文本标记语言(“HTML”)等。在另一实施例中,主控制器224使用nano处理器。可以使用可编程或标准逻辑,或者以上列出的控制器类型的任何组合,来构建主控制器224。本领域技术人员应该意识到用于主控制器224的多个实施例。在存储设备/固态存储设备控制器202管理多个数据存储设备/固态存储器110a-n的一个实施例中,主控制器2 在诸如固态存储控制器l(Ma-n之类的内部控制器之间划分工作负荷。例如,主控制器2M可以划分要写入数据存储设备(例如,固态存储器110a-n)的对象,使得在每个附着数据存储设备上存储对象的一部分。该特征是性能增强,以允许更快速的存储和访问对象。在一个实施例中,使用FPGA实现主控制器224。在另一实施例中,可以通过管理总线236、经由网络与NIC244或者连接至系统总线240的其它设备相连的系统总线240更新主控制器224内的固件。在一个实施例中,管理对象的主控制器2M枚举块存储器,使得客户端114或者与存储设备/固态存储设备102相连的其它设备,将存储设备/固态存储设备102看作是块存储设备,并且向存储设备/固态存储设备102中的特定物理地址发送数据。然后,主控制器2M分割块,并存储主控制器2M将要面对的数据块。然后,主控制器2M将块及与该块一起发送的物理地址映射到主控制器2M确定的实际位置。在对象索引中存储映射。典型地,对于块枚举,在如下计算机中的驱动器中提供块设备应用程序接口(“API”)例如客户端114、或者希望将存储设备/固态存储设备102用作块存储设备的其它设备。在另一实施例中,主控制器2 与OTC控制器2 和嵌入式RDMA控制器246协调,以提供数据与命令集合的准时RDMA传输。可以将NIC控制器244隐藏在非透明端口的后面,以使能对定制驱动器的使用。此外,客户端114上的驱动器可以通过使用标准栈API以及与NIC244协同操作,来通过I/O存储单元驱动器访问计算机网络116。在一个实施例中,主控制器2 还是独立驱动冗余阵列(“RAID”)控制器。在存储设备/固态存储设备102通过网络与一个或多个其它存储设备/固态存储设备102相连的情况下,主控制器2 可以是用于单层RAID、多层RAID、渐进RAIDbrogressive RAID)等的控制器。主控制器2M还允许在RAID阵列中存储一些对象,以及在不使用RAID的情况下存储其它对象。在另一实施例中,主控制器2M可以是分布式RAID控制器元件。在另一实施例中,主控制器2M可以包括多个RAID、分布式RAID及其它地方描述的其它功能。在一个实施例中,主控制器2M控制在类RAID结构中数据的存储,其中在类RAID结构中,在逻辑页的一个或多个存储元件216、218、220中存储奇偶信息,其中,奇偶信息保护在相同逻辑页的其它存储元件216、218、220中存储的数据。 在一个实施例中,主控制器2 与单个或冗余网络管理器(例如,交换机)协调来建立路由,以平衡带宽利用率、失效转移(failover)等。在另一实施例中,主控制器2M与集成专用逻辑(经由局部总线206)和相关联驱动器软件协调。在另一实施例中,主控制器224与附着应用专用处理器258或逻辑(经由外部系统总线M0)和相关联驱动器软件协调。在另一实施例中,主控制器2 与远程专用处理器258(经由计算机网络116)和相关联驱动器软件协调。在另一实施例中,主控制器224与局部总线206或外部总线附着硬盘驱动(“HDD”)存储器控制器协调。 在一个实施例中,主控制器2M与一个或多个存储器控制器2M通信,其中存储设备/固态存储设备102可以看作是通过SCSI总线、因特网SCSI(“iSCSI”)总线、光纤通道等相连的存储设备。同时,存储设备/固态存储设备102可以自主地管理对象,并且可以看作对象文件系统或分布式对象文件系统。对等控制器256和/或应用专用处理器258也可以访问主控制器224。在另一实施例中,主控制器2M与自主集成管理控制器协调,以周期性地使FPGA代码和/或控制器软件有效,在加电(复位)期间在运行(复位)和/或使控制器软件有效的同时使FGPA代码有效,支持外部复位请求,支持由于看门狗超时而导致的复位请求,并支持电压、电流、功率、温度和其它环境测量及阈值中断(treshold interrupt)的设置。在另一实施例中,主控制器2 管理耗损均衡(wear leveling)。在另一实施例中,主控制器224允许将存储设备/固态存储设备102分为多个逻辑设备,并且允许基于分区的介质加密。在另一实施例中,主控制器2M支持具备高级多比特ECC校正的固态存储控制器104。本领域技术人员应该意识到,存储控制器202中(或者,更具体是固态存储设备102中)的主控制器224的其它特征和功能。在一个实施例中,固态存储设备控制器202包括存储单元控制器228,控制动态随机存储单元阵列230和/或静态随机存储单元阵列232。如上所述,存储单元控制器2 可以独立于主控制器224,或者与主控制器2M集成在一起。典型地,存储单元控制器2 控制一些类型的易失性存储单元,例如DRAM(动态随机存储单元阵列230)和SRAM(静态随机存储单元阵列23 。在其它示例中,存储单元控制器2 还控制其它存储单元类型,例如电可擦除可编程只读存储器(“EEPR0M”)等。在其它实施例中,存储单元控制器2 控制两种或多种存储单元类型,以及存储单元控制器2 可以包括多于一个控制器。典型地,存储单元控制器2 控制尽可能多的SRAM 232,并且通过DRAM 230来补充SRAM 232。在一个实施例中,在存储单元230、232中存储对象索引,然后周期性地卸载到固态存储器IlOn或其它非易失性存储单元的通道中。本领域技术人员应该意识到存储单元控制器228、动态存储单元阵列230和静态存储单元阵列232的其它用途和配置。在一个实施例中,固态存储设备控制器202包括DMA控制器226,其控制存储设备/固态存储设备102与一个或多个外部存储单元控制器250、相关联外部存储单元阵列252和CPU 248之间的DMA操作。应注意,外部存储单元控制器250和外部存储单元阵列252被称作外部,原因在于它们在存储设备/固态存储设备102的外部。此外,DMA控制器226还可以通过NIC 244和相关联RDMA控制器246控制与请求设备的RDMA操作。在一个实施例中,固态存储设备控制器202包括与管理总线236相连的管理控制器234。典型地,管理控制器234管理存储设备/固态存储设备102的环境度量(metrics)和状态。管理控制器234可以经由管理总线236监视设备温度、风扇转速、电源设置等等。管理控制器234可以支持对用于存储FPGA代码和控制器软件的可擦除可编程只读存储器(“EEPR0M”)的读取和编程。典型地,管理总线236连接至存储设备/固态存储设备102内的各种部件。管理控制器234可以经由局部总线206传输警告、中断等,并且可以包括至系统总线240或其它总线的独立连接。在一个实施例中,管理总线236是集成间电路(“I2C”)总线。本领域技术人员应该意识到,通过管理总线236连接至存储设备/固态存储设备102的部件的管理控制器234的其它相关功能和用途。在一个实施例中,固态存储设备控制器202包括可以针对具体应用来定制的各种逻辑M2。典型地,使用FPGA或其它可配置控制器来配置固态存储设备控制器202或主控制器224,可以包括基于特定应用、客户需求、存储需求等的定制逻辑。数据管道图3是示出了根据本发明实施例的固态存储设备102中的固态存储控制器104及写数据管道106和读数据管道108的一个实施例300的示意性框图。实施例300包括数据总线204、局部总线206和缓冲器控制208,这些实质上与参考图2的固态存储设备控制器202描述的那些相类似。写数据管道106包括打包器302和纠错代码(“ECC”)产生器304。在其它实施例中,写数据管道106包括输入缓冲器306、写同步缓冲器308、写程序模块310、压缩模块312、加密模块314、垃圾回收器旁路316 (具有在读数据管道108内的一部分)、介质加密模块318和写缓冲器320。读数据管道108包括读同步缓冲器3^、ECC校正模块322、解包器324、分配模块3 和输出缓冲器330。在其它实施例中,读数据管道108可以包括介质解密模块332、垃圾回收器旁路316的一部分、解密模块334、解压缩模块336和读程序模块338。固态存储控制器104还可以包括控制和状态寄存器340和控制队列、存储体交错控制器344、同步缓冲器346、存储总线控制器348和多路复用器(“MUX”) 350。以下描述固态控制器104与相关联写数据管道106和读数据管道108的部件。在其它实施例中,可以使用同步固态存储介质110,并且可以去除缓冲器308、328。写数据管道写数据管道106包括打包器302,其通过其他写数据管道106级直接地或间接地接收要写入固态存储器的数据或元数据分段,并且按照用于固态存储介质110的尺寸创建一个或多个数据包。典型地,数据或元数据分段是诸如对象之类的数据结构的一部分,但是也可以包括整个数据结构。在另一实施例中,数据分段是数据块的一部分,但是也可以是整个数据块。典型地,从诸如客户端114之类的计算机或其它计算机或设备接收诸如数据结构之类的数据集合,以及以流化至固态存储设备102中的数据分段的形式向固态存储设备102发送数据集合。数据分段还可能已知为其它名称,例如数据包,但是如本文所引用的,包括数据结构或数据块的全部或一部分。将每个数据结构存储为一个或多个数据包。每个数据结构可以具有一个或多个容器数据包。每个数据包包括报头。报头可以包括报头类型字段。类型字段可以包括数据、属性、元数据、数据分段定界符(多数据包)、数据结构、数据联接(linkage)等。报头还可以包括关于数据包大小的信息,例如在数据包中包括的数据的字节的数目。数据包的长度可以由数据包类型来建立。报头可以包括建立了数据包与数据结构之间的关系的信息。例子可以是,在数据包报头中使用偏移量,以标识数据结构内的数据分段的位置。本领域技术人员应该意识到可以在由打包器302向其添加数据的报头中包括的其它信息,以及可以添加到数据数据包中的其它信息。每个数据包包括报头和来自数据或元数据分段的可能数据。每个数据包的报头包括将数据包与该数据包所属的数据结构相关联的相关信息。例如,报头可以包括对象标识符或者其它数据结构标识符及偏移量,其中偏移量指示了数据分段、对象、数据结构、或形成数据包的数据块。报头还可以包括存储总线控制器348使用的逻辑地址,以存储数据包。报头还可以包括关于数据包大小的信息,例如在数据包中包括的字节的数目。报头还可以包括序号,其中当重构数据分段或数据结构时,该序号标识了属于数据结构内的其它数据包的数据分段所处的位置。类型字段可以包括数据、数据结构属性、元数据、数据分段定界符(多数据包)、数据结构类型、数据结构联接等。本领域技术人员应该意识到可以在由打包器302向其添加数据的报头中包括的其它信息,以及可以添加到数据包中的其它信息。写数据管道106包括ECC产生器304,其针对从打包器302接收的一个或多个包产生一个或多个纠错代码(“ECC”)。典型地,ECC产生器304使用纠错算法来产生与一个或多个数据包一起存储的ECC校验比特。由ECC产生器304产生的ECC代码以及与ECC代码相关联的一个或多个数据包包括ECC组块。与一个或多个数据包一起存储的ECC数据被用于检测和校正由传输或存储引入到数据中的错误。在一个实施例中,数据包被流化到ECC产生器304中,作为长度N+S的未编码块。N和S的值取决于ECC算法的特征,其中选择ECC算法,以实现特定性能、效率和鲁棒性度量。在一个实施例中,ECC块与数据包之间不存在固定关系;数据包可以包括多于一个的ECC块;ECC块可以包括多于一个数据包;第一包可以在ECC块内的任何位置结束,第二包可以在相同ECC块内第一包的结束位置之后开始。在一个实施例中,没有动态修改ECC算法。在一个实施例中,与数据包一起存储的ECC数据足够鲁棒来校正多于两个的比特中的错误。有利地,通过使用允许多于单比特校正或者甚至双比特校正的鲁棒ECC算法来延长固态存储介质110的使用寿命。例如,如果快闪存储单元被用作固态存储介质110中的存储介质,则快闪存储单元可以被写入约100,000次,而在每个擦除周期没有错误。可以通过使用鲁棒ECC算法来延长这种使用限制。通过使ECC产生器304和相应ECC校正模块322载于固态存储设备102上,固态存储设备102可以内部校正错误,并且与使用不太鲁棒的ECC算法(例如单比特校正)的情况相比,固态存储设备102具有更长的使用寿命。然而,在其它实施例中,ECC产生器304可以使用不太鲁棒的算法,并且可以校正单比特或双比特错误。在另一实施例中,固态存储设备110可以包括不太可靠的存储器,例如多层单元(“MLC”)快闪,来提高容量,其中该多层单元(“MLC”)快闪在没有更鲁棒ECC算法的情况下可能不足够可靠。在一个实施例中,写数据管道106包括输入缓冲器306,其接收要写入固态存储介质110的数据分段并存储输入数据分段,直到写数据管道106的下一级(例如打包器302(或者用于更复杂写数据管道106的其它级))准备好处理下一数据分段为止。典型地,输入缓冲器306允许写数据管道106使用适当大小的数据缓冲器来接收并处理速率数据分段(rate data segment)之间的差异。输入缓冲器306还允许数据总线204以大于数据总线204可以支持的速率向写数据管道106传输数据,以改善对数据总线204的操作的效率。典型地,当写数据管道106没有包括输入缓冲器306时,在其它地方执行缓冲功能,例如在固态存储设备102中但是在写数据管道106之外,在客户端114中执行,例如在网络接口卡(“NIC”)内或者当使用远程直接存储存取(“RDMA”)时,在另外的设备处执行。在另一实施例中,写数据管道106还包括写同步缓冲器308,其在将数据包写入固态存储介质110之前缓冲从ECC产生器304接收的数据包。写同步缓冲器308位于局部时钟域与固态存储时钟域之间的边界,并且提供缓冲以计算时钟域差。在其它实施例中,可以使用同步固态存储介质110,并且可以去除同步缓冲器308、328。在一个实施例中,写数据管道106还包括介质加密模块318,其从打包器302直接或间接地接收一个或多个数据包,并且在向ECC产生器304发送数据包之前使用对于固态存储设备102而言是唯一的加密密钥来加密一个或多个数据包。典型地,加密包括报头的整个数据包。在另一实施例中,不加密报头。在本文档中,加密密钥被理解成表示固态存储控制器104外部管理的秘密加密密钥。介质加密模块318和相应介质解密模块332向在固态存储介质110中存储的数据提供了一定级别的安全性。例如,在使用介质加密模块318加密数据的情况下,如果固态存储介质110与不同的固态存储控制器104、固态存储设备102或服务器相连,则典型地,在不使用在将数据写入固态存储介质110期间使用的相同加密密钥的情况下,不通过明显的努力不能读取固态存储介质110的内容。在典型实施例中,固态存储设备102没有将加密密钥存储在非易失性存储器中,并且不允许对加密密钥进行外部访问。在初始化期间向固态存储控制器104提供加密密钥。固态存储设备102可以使用并存储与加密密钥一起使用的非秘密密码一次性数(cryptographic nonce) 0不同的一次性数可以与每个数据包一起存储。为了改善由加密算法进行的保护,可以利用唯一的一次性数在多个数据包之间分开数据分段。可以从客户端114、服务器、密钥管理器或者管理由固态存储控制器104使用的加密密钥的其它设备接收加密密钥。在另一实施例中,固态存储介质110可以具有两个或多个分区,以及固态存储控制器104表现得如同两个或多个固态存储控制器104且每个固态存储控制器104工作在固态存储介质110内的单个分区。在本实施例中,每个分区可以使用唯一的介质加密密钥。在另一实施例中,写数据管道106还包括加密模块314,其在向打包器302发送数据分段之前,直接地或间接地加密从输入缓冲器306接收的数据或元数据分段,其中通过使用与数据分段一道接收的加密密钥来加密数据分段。加密模块314用于加密数据的加密密钥可以不是固态存储设备102中存储的所有数据公有的,而是可以基于每个数据结构而改变,并且如以下描述的,与数据包一同接收。例如,可以一起接收针对加密模块314要加密的数据分段的加密密钥与该数据分段,或者可以将加密密钥作为针对写数据分段所属的数据结构的命令的一部分来接收。固态存储设备102可以使用并存储每个数据结构数据包中的非秘密密钥一次性数,其中非秘密密钥一次性数要结合加密密钥来使用。可以将不同一次性数与每个数据包一起存储。为了改善由加密算法进行的保护,可以利用唯一的一次性数在多个数据包之间分开数据分段。可以从客户端114、另一计算机、密钥管理器、或者持有用于加密数据分段的加密密钥的其它设备接收加密密钥。在一个实施例中,可以从固态存储设备102、客户端114、计算机、或者有能力执行工业标准方法来安全地传送并保护私有和公共密钥的其它外部代理之一向固态存储控制器104传送加密密钥。在一个实施例中,加密模块314利用与数据包一起接收的第一加密密钥来加密第一数据包,以及利用与第二数据包一起接收的第二加密密钥来加密第二数据包。在另一实施例中,加密模块314利用与数据包一起接收的第一加密密钥来加密第一数据包,以及在没有加密的情况下将第二数据数据包传送到下一级。有利地,在固态存储设备102的写数据管道106中包括的加密模块314允许逐数据结构的或逐分段的数据加密,而不用单文件系统或其它外部系统保持对用于存储相应数据结构或数据分段的不同加密密钥进行跟踪。每个请求设备155或相关密钥管理器独立地管理用于只加密由请求设备155发送的数据结构或数据分段的加密密钥。在一个实施例中,加密模块314可以使用对于固态存储设备102而言是唯一的加密密钥来加密一个或多个数据包。加密模块314可以独立地执行这种介质加密,或者除了以上描述的加密之外,还执行这种介质加密。典型地,加密包括报头的整个数据包。在另一实施例中,不加密报头。加密模块314执行的介质加密向在固态存储介质110中存储的数据提供了一定级别的安全性。例如,在利用对于特定固态存储设备102而言是唯一的介质加密来加密数据的情况下,如果固态存储介质110与不同固态存储控制器104、固态存储设备102或客户端114相连,则典型地,在不使用在将数据写入固态存储介质110期间使用的相同加密密钥的情况下,不通过明显的努力将不能够读取固态存储介质110的内容。在另一实施例中,写数据管道106包括压缩模块312,其在向打包器302发送数据分段之前压缩元数据分段的数据。典型地,压缩模块312使用本领域技术人员已知的压缩例程来压缩数据或元数据分段。例如,如果数据分段包括512个零的字符串,则压缩模块312可以利用指示512个零的代码或记号来替代512个零,其中相比于512个零占用的空间,该代码紧凑得多。在一个实施例中,压缩模块312利用第一压缩例程来压缩第一分段,以及在没有压缩的情况下传送第二分段。在另一实施例中,压缩模块312利用第一压缩例程来压缩第一分段,并且利用第二压缩例程来压缩第二分段。在固态存储设备102内具有这种灵活性是有益的,这使得要将数据写入到固态存储设备102中的客户端114或其它设备可以分别指定压缩例程,或者使得某个设备可以指定压缩例程,而另一设备没有指定压缩。还可以根据基于每种数据结构类型或数据结构类别的默认设置,来选择压缩例程的选择。例如,特定数据结构的第一数据结构可能不考虑默认压缩例程设置,相同数据结构类别和数据结构类型的第二数据结构可以使用默认压缩例程,以及相同数据结构类别和数据结构类型的第三数据结构可以不使用压缩。
22
在一个实施例中,写数据管道106包括垃圾回收器旁路316,其作为垃圾回收系统中的数据旁路的一部分,从读数据管道108接收数据分段。典型地,垃圾回收系统对不再有效的数据包进行标记,原因在于基于删除而标记数据包或者数据包已经被修改,并且修改后的数据被存储在不同位置。从某一点来说,垃圾回收系统确定,存储器的特定部分可以被恢复。这种确定可以是由于可用存储容量的缺乏、达到了阈值的被标记为无效的数据的百分比、有效数据的合并、针对存储器中达到了阈值的这部分的错误检测率、或者基于数据分布提高了性能等。垃圾回收算法可以考虑许多因素,以确定存储器的一部分何时被恢复。一旦已经将存储器的一部分标记为恢复,则典型地,必须重新定位该部分中的有效数据包。垃圾回收器旁路316允许数据包被读入读数据管道108,然后直接被传送至写数据管道106,而不用从固态存储控制器104路由。在一个实施例中,垃圾回收器旁路316是在固态存储设备102中工作的自主垃圾回收器系统的一部分。这允许固态存储设备102管理数据,使得通过固态存储介质110系统地布置数据,以改善性能、数据可靠性,并且避免对固态存储介质110的任何一个位置或区域的过度使用和不当使用,以及延长固态存储介质110的使用寿命。垃圾回收器旁路316对分段及客户端114或其它设备写入的其它分段到写数据管道106的插入进行协调。在所描绘的实施例中,垃圾回收器旁路316在写数据管道106中的打包器302之前,并且在读数据管道108中的解包器3M之前,但是还可以位于读数据管道和写数据管道106、108中的其它位置。在写管道108的转储期间,可以使用垃圾回收器旁路316,来按照顺序填充虚拟页的剩余部分,以改善固态存储介质110内存储的效率,从而减少垃圾回收的频率。在一个实施例中,写数据管道106包括写缓冲器320,该写缓冲器320为了有效写操作而缓冲数据。典型地,写缓冲器320包括针对数据包的足够容量,以填充固态存储介质110中的至少一个虚拟页。这允许写操作在没有中断的情况下向固态存储介质110发送整个页的数据。通过使写数据管道106的写缓冲器320和读数据管道108内缓冲器的容量等于或大于固态存储介质110内存储器写缓冲器,写和读数据将更加有效,原因在于可以精密地制作单个写命令,来向固态存储介质110发送完整的虚拟页的数据,而非多个命令。当填充写缓冲器320时,固态存储介质110可以被用于其它读操作。这是有利的,原因在于当数据被写入存储器写缓冲器并且流入该存储器写缓冲器的数据停滞(stall)时,具有较小写缓冲器或者没有写缓冲器的其它固态设备可以绑定(tie up)固态存储器。读操作将被阻止,直到填充了整个存储器写缓冲器并对其进行编程为止。对于没有写缓冲器或具有较小写缓冲器的系统,另一方法是,转储没有满的存储器写缓冲器,以使能够进行读取。此外,由于需要多个写/编程周期来填充页,这样效率较低。对于所描述的写缓冲器320的大小大于虚拟页的实施例,则可以在包括许多子命令的单个写命令之后紧跟单个编程命令,以向每个固态存储元件216、218、220内的指定页传送来自每个固态存储元件216、218、220中的存储器写缓冲器的一页数据。这种技术具有消除部分页编程的优点,已知分页编程降低了数据的可靠性和耐久性,并且当填充缓冲器时冻结了写或其它命令针对的目的地存储体。在一个实施例中,写缓冲器320是乒乓缓冲器,其中填充缓冲器的一侧,然后当在适当时刻指定该侧用于传送,同时填充该乒乓缓冲器的另一侧。在另一实施例中,写缓冲器320包括先进先出(“FIFO”)寄存器,该先进先出寄存器具有大于数据分段的虚拟页的容量。本领域技术人员应该意识到允许在将数据写入固态存储介质110之前存储数据的虚拟页的其它写缓冲器320配置。在另一实施例中,写缓冲器320的大小小于虚拟页,使得少于一页的信息可以被写入固态存储介质110的存储器写缓冲器中。在实施例中,为了防止写数据管道106中的停滞(stall)延迟读操作,作为垃圾回收过程的一部分,使用垃圾回收系统对需要从一个位置移动到另一位置的数据排队。在写数据管道106中的数据停滞的情况下,可以通过垃圾回收器旁路316向写缓冲器320填充数据,然后将该数据提供给固态存储介质110中的存储器写缓冲器,以在对数据编程之前填充若干页的虚拟页。按照这种方式,写数据管道106中的数据停滞将不停止(stall)从固态存储设备102的读取。在另一实施例中,写数据管道106包括写程序模块310,该写程序模块310具有写数据管道106内的一个或多个用户可定义功能。写程序模块310允许用户定制写数据管道106。用户可以基于特定数据需求或应用来定制写数据管道106。在固态存储控制器104是FPGA的情况下,用户可以利用定制命令和功能相对容易地对写数据管道106编程。用户还可以使用写程序模块310,以包括具备ASIC的定制功能,然而,定制ASIC可能比定制FPGA更困难。写程序模块310可以包括缓冲器和旁路机制,以允许在写程序模块310中执行第一数据分段时,第二数据分段可以继续通过写数据管道106。在另一实施例中,写程序模块310可以包括处理器核心,其中可以通过软件对处理器核心编程。应该注意,在输入缓冲器306和压缩模块312之间示出了写程序模块310,然而,写程序模块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校正模块322不能校正的损坏ECC块或损坏ECC块的一部分由主控制器2M读出、校正并返回ECC校正模块322,以由读数据管道108进行进一步的处理。在一个实施例中,向请求数据的设备发送所请求的数据包的损坏ECC块或损坏ECC块的一部分。请求设备155可以校正ECC块,或者使用例如备份或镜像拷贝之类的另一拷贝来替代该数据,然后可以使用所请求的数据包的替代数据,或者将其返回读数据管道108。请求设备155可以使用错误所请求数据包的报头信息,来识别替代损坏所请求的数据包或替代该数据包所属数据结构所需的数据。在另一实施例中,固态存储控制器104使用一些类型的RAID来存储数据,并且能够恢复损坏数据。在另一实施例中,ECC校正模块322发送中断和/或消息,并且接收设备进行的与所请求的数据包相关联的读操作没有成功。本领域技术人员应该意识到作为ECC校正模块322的其它选项和动作,其中ECC校正模块322确定所请求数据包的一个或多个ECC块被损坏并且ECC校正模块322不能校正错误。读数据管道108包括解包器324,其从ECC校正模块322直接或间接地接收所请求数据包的ECC块,并且检查和去除一个或多个数据包报头。解包器3M可以通过检查报头内的数据包标识符、数据长度、数据位置等,来验证数据包报头。在一个实施例中,报头包括散列代码,该散列代码可以用于验证向读数据管道108传送的数据包是所请求数据包。解包器3 还去除由打包器302添加的请求数据包的报头。可以命令解包器3 不对一些数据包进行操作,而在不修改的情况下将其向前传送。例子可以是重建过程的进展期间所请求的容器标签,其中在重建过程的进展中,需要报头信息用于索引重构。另外的例子包括,指定用于固态存储设备102的各种类型的数据包的传输。在另一实施例中,解码器3M操作可以是由数据包类型决定的。读数据管道108包括对齐模块326,其从解包器3M接收数据,并去除不希望的数据。在一个实施例中,发送至固态存储介质110的读命令获取数据的数据包。请求数据的设备可能不需要所获取数据包内的所有数据,对齐模块3 去除不希望的数据。如果所获取页内的所有数据是所请求的数据,则对齐模块3 不去除任何数据。对齐模块3 在将数据分段转发至下一级之前,将数据重新格式化为与请求数据分段的设备相兼容形式的数据结构的数据分段。典型地,因为由读数据管道108处理数据,数据分段或数据包的大小在各个级处变化。对齐模块3 使用接收到的数据,以将数据格式化为适于发送至请求设备155的数据分段,并联合该数据分段以形成响应。例如,可以将来自第一数据数据包的一部分的数据与来自第二数据数据包的一部分的数据相结合。如果数据分段大于请求设备155请求的数据,则对齐模块3 可以丢弃不想要的数据。在一个实施例中,读数据管道108包括读同步缓冲器328,其缓冲在由读数据管道108处理之前从固态存储介质110读出的一个或多个请求数据包。读同步缓冲器3 处于固态存储时钟域和局部总线时钟域之间的边界处,并提供缓冲以计算时钟域差。在另一个实施例中,读数据管道108包括输出缓冲器330,其接受来自对齐模块326的所请求的数据包并在传送到请求设备155之前存储该数据包。输出缓冲器330计算在从数据管道108的级接收数据分段时与向固态存储控制器104的其它部分或请求设备155传送数据分段时的差异。输出缓冲器330还允许数据总线204以大于读数据管道108可以支持的速率从读数据管道108接收数据,以改善数据总线204的操作的效率。在一个实施例中,读数据管道108包括介质解密模块332,其从ECC校正模块322接收一个或多个加密后的所请求数据包,并且在向解包器3M发送一个或多个请求数据包之前使用对于固态存储设备102而言是唯一的加密密钥来解密所述一个或多个请求数据包。典型地,介质解密模块332用于解密数据的加密密钥与介质加密模块318使用的加密密钥相同。在另一实施例中,固态存储介质110可以具有一个或多个分区,以及固态存储控制器104如同分别在固态存储介质110的单个分区上工作的两个或多个固态存储控制器104。在该实施例中,每个分区可以使用唯一的介质加密密钥。在另一实施例中,读数据管道108包括解密模块334,其在向输出缓冲器330发送数据分段之前解密由解包器3M格式化的数据分段。可以使用与读请求一起接收的加密密钥来解密数据分段,其中该读请求启动读同步缓冲器3 接收的所请求数据包的获取。解密模块334可以使用与针对第一数据包的读请求一起接收的加密密钥来解密第一数据包,然后利用不同的加密密钥解密第二数据包,或者可以将第二数据包传送到读数据管道108的下一级中,而不进行解密。当将数据包与非秘密密码一次性数一起存储时,结合加密密钥使用随机数,以解密数据数据包。可以从客户端114、计算机、密钥管理器或管理由固态存储控制器104使用的加密密钥的其它设备接收加密密钥。在另一实施例中,读数据管道108包括解压缩模块336,其解压缩由解包器3M格式化的数据分段。在一个实施例中,解压缩模块336使用在数据包报头和容器标签中的一个或两者中存储的压缩信息,以选择补充例程,该补充例程针对用于通过压缩模块312压缩数据的压缩信息。在另一实施例中,解压缩模块336使用的解压缩例程由请求待压缩数据分段的设备来指示。在另一实施例中,解压缩模块336根据基于每个数据结构类型或数据结构类别的默认设置来选择解压缩例程。第一对象的第一数据包可以不考虑默认解压缩例程,相同数据结构类别和数据结构类型的第二数据结构的第二数据包可以使用默认解压缩例程,以及相同数据结构类别和数据结构类型的第三数据结构的第三数据包可以不使用解压缩。在另一实施例中,读数据管道108包括读程序模块338,其包括读数据管道108内的一个或多个用户可定义功能。读程序模块338具有与写程序模块310相似的特性,并且允许用户向读数据管道108提供定制功能。读程序模块338可以位于图3所示的位置,可以位于读数据管道108内的另一位置,或者可以包括读数据管道108内多个位置中的多个部分。此外,在读数据管道108内的多个位置内可以存在独立操作的多个读程序模块338。本领域技术人员应该意识到,读数据管道108内的其它形式的读程序模块338。如同写数据管道106 —样,读数据管道108的级可以被重新排列,以及本领域技术人员应该意识到,读数据管道108内级的其它顺序。固态存储控制器104包括控制和状态寄存器340及相应的控制队列342。控制和装置寄存器340及控制队列342便于与在写和读数据管道106、108中处理的数据相关联的控制和定序命令和子命令。例如,打包器302中的数据分段可以具有与ECC产生器304相关联的控制队列342中的一个或多个相应控制命令或指令。当打包数据分段时,可以在打包器302内执行一部分执行或命令。当根据数据分段创建的新形成的数据数据包被传送到下一级时,可以通过控制和状态寄存器340将其它命令或指令传送到下一控制队列342。对于要转发至写数据管道106的数据包,可以同时将命令或指令加载到控制队列342中,其中当每个管道级执行相应数据包时,由该级抽出适当命令或指令。对于从读数据管道108请求的数据包,可以同时将命令或指令加载到控制队列342中,其中当每个管道级执行相应数据包时,由该级抽出适当命令或指令。本领域技术人员应该意识到,控制和状态寄存器340与控制队列342的其它特征和功能。固态存储控制器104和/或固态存储设备102还可以包括存储体交错控制器344、同步缓冲器346、存储总线控制器348及多路复用器(“MUX”) 350,这将结合图4进行描述。存储体交错图4是示出了根据本发明的固态存储控制器104中存储体交错控制器344的一个实施例400的示意性框图。存储体交错控制器344与控制和状态寄存器340相连,并通过MUX 350、存储总线控制器348和同步缓冲器346与存储I/O总线210和存储控制总线212相连,这将在下文进行描述。存储体交错控制器344包括针对固态存储介质110中的存储体214的读代理402、写代理404、擦除代理406、管理代理408、读队列410a-n、写队列41加-11、擦除队列4Ha-n和管理队列416a-n、存储体控制器418a-n、总线仲裁器420及状态MUX 422,这将在下文进行描述。存储总线控制器348包括具有重新映射模块430的映射模块424、状态捕获模块4 和NAND总线控制器428,这将在下文进行描述。存储体交错控制器344将一个或多个命令引导到存储体交错控制器104中的两个或多个队列中,并且协调在队列中存储的命令在固态存储介质110的存储体214中的执行,使得当第一类型的命令在存储体21 上执行时,第二类型的命令在第二存储体214b上执行。一个或多个命令被命令类型分为队列。固态存储介质110的每个存储体214具有存储体交错控制器344内的相应队列集合,以及每个队列集合包括针对每种命令类型的队列。存储体交错控制器344协调在队列中存储的命令在固态存储介质110的存储体214之间的执行。例如,当第一类型的命令在存储体21 上执行时,第二类型的命令在第二存储体214b上执行。典型地,命令类型和队列类型包括读和写命令及队列410、412,还可以包括特定于存储介质的其它命令和队列。例如,在图4描述的实施例中,包括擦除和管理队列414、416,并且该擦除和管理队列414、416适于快闪存储单元、NRAM、MRAM、DRAM、PRAM寸。对于其它类型的固态存储介质110,可以在不背离本发明的范围的情况下,包括其它类型的命令及相应的队列。FPGA固态存储控制器104的灵活本质允许存储介质方面的灵活性。如果将快闪存储单元改变为另一种固态存储器类型,则可以改变存储体交错控制器344、存储总线控制器348和MUX 350来适应介质类型,而不会显著地影响数据管道106、108和其它固态存储控制器104的功能。在图4描绘的实施例中,对于每个存储体214,存储体交错控制器344包括用于从固态存储介质110读数据的读队列410、用于将命令写入固态存储介质110的写队列412、用于擦除固态存储器中擦除块的擦除队列414、用于管理命令的管理队列416。存储体交错控制器344还包括相应的读、写、擦除和管理代理402、404、406、408。在另一实施例中,在没有存储体交错控制器;344的情况下,控制和状态寄存器340及控制队列342或者类似部件将针对数据的命令排队,其中该数据要被发送至固态存储介质110的存储体214。在一个实施例中,代理402、404、406、408将指定用于特定存储体21 的适当类型的命令引导针对存储体21 的正确队列中。例如,读代理402可以接收针对bank-1 214b的读命令,并将其指引到bank-1的读队列410b中。写代理404可以接收写命令,以将数据
27写入固态存储介质110 Wbank-O 21 中的某一位置,然后将写命令发送至bank-Ο的写队列41 中。类似地,擦除代理406可以接收擦除命令来擦除存储体-1214b中的擦除块,然后将该擦除命令传送至bank-Ι的擦除队列414b中。典型地,管理代理408接收管理命令、状态请求等,例如复位命令或读取存储体214(例如bank-0 214a)的配置寄存器的请求。管理代理408向bank-Ο的管理队列416a发送管理命令。典型地,代理402、404、406、408还监视队列410、412、414、416的状态,并且当队列410、412、414、416满、几乎满、无功能等时,发送状态、中断或其它消息。在一个实施例中,代理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、416按照匹配数据的顺序、重要性顺序或者其它标准来存储命令。典型地,存储体控制器418从队列410、412、414、416接收命令,并产生适当的子命令。例如,bank-Ο写队列41 可以接收命令,以将一页数据数据包写入bank-0 214a。bank-Ο控制器418a可以在适当的时间接收写命令,并且可以针对在写缓冲器320中存储的要写入到bank-02Ha中的页的每个数据数据包产生一个或多个写子命令。例如,bank-0控制器418a可以产生命令,以验证bank 021 和固态存储器阵列216的状态,选择用于写入一个或多个数据数据包的适当位置,清除固态存储阵列216内的输入缓冲器,向输入缓冲器传送所述一个或多个数据数据包,将输入缓冲器编程(program)到指定位置,验证数据被正确地编程,以及如果编程失败发生了,则进行以下操作中的一项或多项中断主控制器224,重试写入相同的物理位置,以及重试写入不同的物理位置。此外,通过结合示例写命令,存储总线控制器348将使所述一个或多个指令针对存储I/O总线210a-n中的每条总线而成倍增加,其中如下进一步描述的,命令的逻辑地址被映射到了存储I/O总线210a的第一物理地址,以及被映射到了存储I/O总线210b的第二物理地址等。典型地,总线仲裁器420从存储体控制器418中选择,并且从存储体控制器418内的输出队列抽出子命令,以及将这些子命令按照优化存储体214的性能的顺序将这些子命令转发至存储总线控制器348。在另一实施例中,总线仲裁器420可以响应高级别中断,并修改正常选择准则。在另一实施例中,主控制器2 能够通过控制和状态寄存器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。例如,在bank-Ο上进行写操作期间,总线仲裁器420选择bank-Ο控制器418a,该bank-Ο控制器418a可以在其队列的顶部具有写命令或写子命令串,使得存储总线控制器348执行以下序列。总线仲裁器420将写命令转发至存储总线控制器348,存储总线控制器348通过以下操作建立写命令通过存储控制总线212选择bank-0 214a,发送命令以清除与bank-0 214a相关联的固态存储元件110的输入缓冲器,以及发送命令来验证与bank-021 相关联的固态存储元件216、218、220的状态。然后,存储总线控制器348在存储I/O总线210上传送包括物理地址的写子命令,其中物理地址包括从逻辑擦除块地址映射而来的针对每个独立物理擦除固态存储元件216a-m的逻辑块的地址。然后,存储总线控制器348使从写缓冲器320,经由写同步缓冲器308,MUX 350到达存储I/O总线210,并且将写数据流化到适当页。当页满时,存储总线控制器348使与bankO 21 相关联的固态存储元件216a-m将输入缓冲器编程到固态存储元件216a-m内的存储单元中。最后,存储总线控制器348验证状态,以确保页被正确地编程。读操作与上述写例子相似。在读操作期间,典型地,存储体交错控制器344的总线仲裁器420接收数据及相应状态信息,并且在发送控制和状态寄存器340上的状态信息时向读数据管道108发送数据。典型地,从总线仲裁器420转发至存储总线控制器348的读数据命令将使得MUX350将存储I/O总线210上的读数据门(gate)到读数据管道108,并且通过状态MUX 422向适当的控制和状态寄存器340发送状态信息。总线仲裁器420协调各种命令类型及数据访问模式,使得在任何给定时刻仅一种适当命令类型或相应数据在总线上。如果总线仲裁器420已经选择了写命令,并且写子命令和相应数据被写入了固态存储介质110,则总线仲裁器420将不允许其它命令类型在存储I/O总线210上。有利地,总线仲裁器420使用诸如预定命令执行时间的时限信息及关于存储体214状态的接收到的状态信息,来协调对各种命令在总线上的执行与最小化或消除总线的空闲时间的目标。典型地,主控制器224至总线仲裁器420使用在队列410、412、414、416中存储的期望的命令完成时间及状态信息,使得当在存储体21 上执行与命令相关的子命令时,在其它存储体214b-n上执行其它命令的其它子命令。当在存储体21 上完全地执行了一个命令时,总线仲裁器420将另一命令引导到存储体21 中。总线仲裁器420还可以协调在队列410、412、414、416中存储的命令与在没有在队列410、412、414、416中存储的其它命令。例如,可以发出擦除命令,以擦除固态存储介质110内的一组擦除块。与写或读命令相比,擦除命令可以占用多达10倍至1000倍的时间来执行,或者与编程命令相比,擦除命令可以占用多达10倍至100倍的时间来执行。对于N个存储体214,存储体交错控制器344可以将擦除命令分为N个命令,每个命令用于擦除存储体21 的虚拟擦除块。当Bank0 214a执行擦除命令时,总线仲裁器420可以选择用于在其它存储体214b_n上执行的其它命令。总线仲裁器420还可以与存储总线控制器348、主控制器2 等其它部件工作,以协调命令在总线之间的执行。通过使用总线仲裁器420、存储体控制器418、队列410、412、414,416及存储体交错控制器344的代理402、404、406、408来协调命令的执行可以在没有存储体交错功能的情况下动态地改善其它固态存储系统上的性能。
在一个实施例中,固态控制器104包括存储体交错控制器344,其服务于固态存储介质110的所有存储元件216、218、220。在另一实施例中,固态控制器104包括针对存储元件216a-m、218a-m、220a-m的每列的存储体交错控制器344。例如,存储体交错控制器344服务于一列存储元件SSS 0. O-SSS N.0216a、218a、…220a,第二存储体交错控制器344服务于第二列存储元件 SSS 0. I-SSS N. 1216b,218b, ...220b 等。特定存储器的部件固态存储控制器104包括同步缓冲器346,其缓冲发送至固态存储介质110及从固态存储介质110接收的命令和状态消息。同步缓冲器346位于固态存储器时钟域与局部总线时钟域之间的边界处,并且提供缓冲以计算时钟域差。同步缓冲器346、写同步缓冲器308和读同步缓冲器3 可以是独立的或者可以协同来缓冲数据、命令、状态信息等。在一个实施例中,同步缓冲器346位于横跨时钟域存在最少数目的信号的位置处。本领域技术人员应该意识到,可以将时钟域之间的同步任意地移动到固态存储设备102内的其它位置,以优化设计实现的一些方面。固态存储控制器104包括存储总线控制器348,其基于固态存储介质110的类型,来解释并翻译针对发送至固态存储介质110的数据以及从固态存储介质110读出的数据的命令以及从固态存储介质110接收的状态信息。例如,对于不同类型的存储器、具有不同性能特性的存储器、来自不同制造商的存储器等,存储总线控制器348可以具有不同的定时需求。存储总线控制器348还向存储控制总线212发送控制命令。在一个实施例中,固态存储控制器104包括MUX 350,该MUX 350包括多路复用器350a-n的阵列,每个多路复用器专用于固态存储器阵列110中的一行。例如,多路复用器350a与固态存储元件216a、218a、220a相关联。MUX 350将来自写数据管道106的数据以及来自存储总线控制器348的命令经由存储I/O总线210路由至固态存储介质110,将来自固态存储介质110的数据及状态消息经由存储I/O总线210路由至读数据管道108,以及经由存储总线控制器348、同步缓冲器346和存储体交错控制器344路由至控制和状态寄存器340。在一个实施例中,固态存储控制器104包括针对每列固态存储元件(例如,SSS0.0216a、SSS 1. 0218a、SSS N. 0220a)的 MUX 350。MUX350 经由存储 I/O 总线 210 结合来自写数据管道106的数据以及发送至固态存储介质100的命令,并且将由读数据管道108处理的数据与命令相分离。将在写缓冲器320中存储的数据包从写缓冲器320,经由针对每列固态存储元件(SSS 0. χ至SSS N. χ 216,218,220)的写同步缓冲器308、针对每列固态存储元件(SSS 0. χ至SSS N. χ 216,218,220)的MUX 350引导到总线。由MUX350从存储I/O总线210接收命令和读数据。MUX 350还将状态信息引导到存储总线控制器348。存储总线控制器348包括映射模块424。映射模块似4将擦除块的逻辑地址映射到擦除块的一个或多个物理地址。例如,具有每存储体21 20个存储元件阵列(例如,SSS0.0至SSS 0.M 216)的固态存储介质110可以具有针对特定擦除块的逻辑地址,其中该逻辑地址被映射到了该擦除块的20个物理地址,每个存储元件一个物理地址。因为并行地存取存储元件,一列存储元件216a、218a、220a中的每个存储元件的相同位置处的擦除块将共享物理地址。为了选择一个擦除块(例如,存储元件SSS 0.0216a中)而不是行中所有的擦除块(例如,存储元件SSSO. 0,1. O、…、N. 0216a.218a.220a中),则选择一个存储体(在这种情况下,存储体0214a)。针对擦除块的这种逻辑至物理的映射是有利的,原因在于,如果一个擦除块变坏或变得不可访问时,可以改变映射,以映射到另一擦除块。当一个元件的擦除块存在缺陷时,这减轻了失去整个虚拟擦除块的损失。重新映射模块430改变从擦除块的逻辑地址至虚拟擦除块的一个或多个物理地址(散布在存储元件的阵列上)的映射。例如,虚拟擦除块1可以被映射到存储元件SSS 0.0 216a的擦除块1、存储元件SSS 0.1 216b的擦除块1、…以及存储元件0. M 216m,虚拟擦除块2可以被映射到存储元件SSS 1.0 218a的擦除块2、存储元件SSS 1.1 218b的擦除块2、…以及存储元件l.M 218m。备选地,虚拟擦除块1可以被映射到来自阵列的每个存储元件的一个擦除块,使得虚拟擦除块1包括存储元件SSSO. 0216a的擦除块1、存储元件SSS 0.1 21 的擦除块1至存储元件SSS O.M216m的擦除块1,并且包括存储元件SSS1. 0 218a的擦除块1、存储元件SSS 1. 1 218b的擦除块1至存储元件SSS l.M 218m的擦除块1,直到存储元件N. M 220m的擦除块1的队列中的每个存储元件的擦除块1。如果由于破损等而使存储元件SSSO. 0 216a的擦除块1损坏、发生错误,或者由于一些原因而不可以使用存储元件SSSO.O 216a的擦除块1,则重新映射模块430可以改变针对指向虚拟擦除块1的擦除块1的逻辑地址的逻辑至物理的映射。如果存储元件SSS0. 0216a的备用擦除块(将其称作擦除块221)可用,并且当前没有映射,则重新映射模块430可以改变虚拟擦除块1的映射,以指向存储元件SSSO. 0 216a的擦除块221,同时继续指向存储元件SSSO. 1 216b的擦除块1、存储元件SSS 0. 2的擦除块1 (未示出)…,至存储元件SSS 0.M 216m的擦除块1。映射模块4M或重新映射模块430可以以预定顺序映射擦除块(虚拟擦除块1到存储元件的擦除块1,虚拟擦除块2到存储元件的擦除块2等)或者可以按照基于一些其它标准的另一顺序来映射存储元件216、218、220的擦除块。在一个实施例中,可以根据访问时间来对擦除块分组。根据访问时间(意为执行命令的时间,例如将数据编程(写入)到特定擦除块的页)来进行分组,可以对命令完成分级,使得在虚拟擦除块的擦除块上执行的命令不受最慢擦除块的限制。在其它实施例中,可以根据磨损程度、健康等来对擦除块分组。本领域技术人员应该意识到,当映射或重新映射擦除块时考虑的其它因素。在一个实施例中,存储总线控制器348包括状态捕获模块426,其从固态存储介质110接收状态信息,并且向状态MUX422发送状态消息。在另一实施例中,当固态存储介质110是快闪存储单元时,存储总线控制器348包括NAND总线控制器428。NAND总线控制器4 将来自读和写数据管道106、108的命令引导固态存储介质110中的正确位置,基于快闪存储单元的特性协调命令执行的定时等。如果固态存储介质110是另一种固态存储器类型,则可以由特定于存储器类型的总线控制器来替代NAND总线控制器428。本领域技术人员将意识到NAND总线控制器428的其它功能。功率故障管理图5A示出了功率管理装置122的一个实施例。在一个实施例中,功率管理装置122可以包括监视模块510和功率损失模块520。在另一实施例中,功率损失模块520包括识别模块512、终止模块514、损坏模块516和完成模块518。在一个实施例中,响应于主电源通过主功率连接130不能提供预定阈值以上的电能,监视模块510在非易失性存储设备中启动功率损失模式。在一个实施例中,功率损失模式是功率管理装置准备在辅助电源IM提供的功率滞留时间内关闭存储设备102的模式。在一个实施例中,功率损失模块520在功率损失模式期间调整非易失性存储设备102上的进行中操作的执行,以允许执行进行中的基本操作。在一个实施例中,大于预定阈值的功率对于存储设备102而言是足够的。在一个实施例中,足够的功率是满足了存储设备102进行适当工作所需的功率。在另一实施例中,将预定阈值设置为存储设备102的不足功率级别,或者设置为在存储设备102的不足功率级别以上。不足功率是不满足存储器102的需求的功率。如下功率是不足功率的例子当期望DC时,高AC或谐波分量与过低的电压或电流电平之间的功率。在一个实施例中,如上所述,存储设备102被配置为当来自主电源的功率下降到预定阈值以下时,自动接收或汲取来自辅助电源124的功率。在一个实施例中,预定阈值是由辅助电源IM和相应电路的特性确定的工程设计阈值。在一个实施例中,主电源是非易失性存储设备102在正常操作期间使用的电源,其提供了在正常操作期间不期望被中断的实质上连续的电源。例如,在典型实施例中,存储设备102所附着的计算机系统(即,客户端114等)是主电源,并且通过母板提供功率,例如通过总线或插槽连接,例如PCI、PCIe, AGP等,或者通过外部接口,例如USB端口、火线端口等。在另一实施例中,主电源是标准电插座。在一个实施例中,监视模块510直接监视主功率连接130,以确定来自主电源的电能何时下降到预定阈值以下。例如,监视模块510可以包括功率传感器、电流传感器、和/或用于确定是否非易失性存储设备102接收到足够外部功率的另外的适当传感器。在其它实施例中,在非易失性存储设备102失去外部功率的情况下,可以由非易失性存储设备102的另一部件通知监视模块510。在一个实施例中,监视模块510包括模拟电路,其对来自主功率连接130的功率的损耗作出响应。例如,主功率连接130与辅助电源IM可以被并行地放置,使得主功率连接130保持辅助电源IM被完全充电(例如,当辅助电源124由电容器构成时),并且还向存储设备102提供功率。在并行配置中,辅助电源IM在主功率连接130故障的情况下自然地开始提供功率,并且存储设备102自然地接收来自辅助电源124的功率。监视模块510电路还可以提供适当的隔离,以确保向存储设备102发送来自辅助电源124的功率;例如,二极管可以被用于确保在主电源故障的情况下,功率从辅助电源1 流向存储设备102,而不是流向故障主电源。本领域技术人员鉴于本公开应意识到适当隔离的方法。在这种实施例中,监视模块510仍然可以包括检测部件(例如电流传感器、电压传感器等),以感测功率损坏,作为响应,启动功率损失模式来触发功率管理装置122中的其它模块的操作。在另一实施例中,监视模块510可以感测功率损坏信号,并且激活开关等,其中开关将从主功率连接130汲取用于存储设备102的功率改变为从辅助电源IM汲取用于存储设备102的功率。在一个实施例中,监视模块510可以通过与功率损失模块510和/或存储设备102中已经进入功率损失模式的另一模块直接或间接地通信,来启动功率损失模式。例如,在多种实施例中,监视模块122可以设置状态寄存器、发送功率损失模式命令、发送功率损失信号、发送功率损失中断、启动功率损失模式功能或过程,将存储设备置于功率损失状态,和/或向功率损失模块520通知功率损失模式。在一个实施例中,功率损失模块520在功率损失模式期间调整存储设备102上的进行中操作的执行,以确保在功率滞留时间执行基本操作,例如向客户端114肯定应答的操作等。在一个实施例中,进行中操作(in-process operation)包括存储设备102当前执行的操作。在另一实施例中,进行中操作包括如下操作,例如,排队等待在存储设备102上执行的操作、在写数据管道106和/或读数据管道108中正在进行的操作等。在所描绘的实施例中,功率损失模块520包括识别模块512、终止模块514和损坏模块516。在一个实施例中,响应于监视模块510确定已经失去的外部功率在预定阈值以下或者不足够并且进入了功率损失模式,识别模块512识别非易失性存储设备102上的一个或多个非基本操作。非基本操作可以被终止、停止或暂停而不会造成存储设备102上的数据损坏或数据丢失的操作。基本操作是必须被执行以避免存储设备102上的数据损坏、数据丢失或者存储设备102与客户端114之间的不一致通信(即,针对数据向客户端114发送肯定应答,而稍后没有按照与肯定应答一致的方式适当地处理数据)的操作。识别模块512还可以确定是否非基本操作正在执行,或者是否非基本操作排队且正在等待执行。在一个实施例中,终止模块514终止由识别模块512识别的非基本操作。在多种实施例中,终止模块514可以通过擦除排队的非基本操作、命令和指令和/或通过中断当前在存储设备102上正执行的非基本操作,来终止非基本操作。在一个实施例中,终止模块514允许存储设备102断电(即,一旦功率滞留时间期满且耗尽了辅助电源124)而不用执行非基本操作。在另一实施例中,终止模块514按照如下方式终止非基本操作,即不执行非基本操作,或者在功率损失之后,一旦再次为存储设备102供电,则非基本操作重新开始。例如,在一个实施例中,终止模块514终止非基本操作而没有留下终止的非基本操作的记录,使得存储设备102加电而不用执行或重新开始终止的非基本操作。在一个实施例中,在存储设备102在辅助电源IM上工作的同时,识别模块512还管理存储设备102的功率预算。识别模块512可以例如确定多少功率可用、存储设备102上的所有暂停操作将需要多少功率,并且区分暂停操作的优先级。因此,可以按照优先级的顺序对操作进行重新排序和执行,以在功率滞留时间内至少执行进行中的基本操作。在一个实施例中,如果识别模块512确定可能由于错误或故障而不存在足够的功率来执行所有的写操作(即,非易失性固态存储设备上的编程操作),则识别模块512可以将该消息记录日志,从而可以在恢复功率之后,向用户或系统提供一部分或全部写操作已经丢失的通知。在一个实施例中,非基本操作包括擦除非易失性存储设备102上的非易失性存储单元Iio的擦除操作和/或读非易失性存储设备102上的数据的读操作。例如,可以产生作为垃圾回收操作的一部分的擦除操作,其中垃圾回收操作恢复诸如快闪存储设备之类的固态存储设备上的空间。非基本操作还可以包括如下操作,例如产生针对非易失性存储设备102中的数据的散列密钥、解压缩从存储器读取的数据、或其它操作。在另一实施例中,非基本操作可以包括非易失性存储设备102还没有针对其向客户端114发送肯定应答的写(或编程)操作。在一个实施例中,用户或系统设计者指定哪些操作是基本的,以及哪些操作是非基本的。在一些实施例中,终止模块514基于非基本操作需要多少功率,来终止非基本操作。例如,固态存储设备中的擦除操作倾向于消耗相当多的功率。终止模块514可以快速地终止擦除操作,以节约功率。相反,读操作需要相对少的功率。终止模块514可以仅在终止了擦除操作之后等,才开始终止读操作。在一个实施例中,识别模块512利用基于执行操作的重要性的优先级来区分操作的优先级。例如,可以给予针对已经被肯定应答的数据的编程操作最高优先级,而给予擦除操作最低优先级。终止模块514可以首先终止最低优先级操作并上移操作的优先级列表,而不终止任何基本操作。因此,终止模块514从最低优先级操作作为开始,确定操作是否是基本的。如果否,则终止这个操作。如果操作是基本的,则不终止操作,并且终止模块514移动到要考虑的下一操作。在一些实施例中,识别模块512还可以基于完成非基本操作所需的能量的数量,来区分处于执行过程中的非基本操作的优先级。例如,与完成了 5%的擦除操作相比,可以给予完成了 90%的擦除操作针对终止的更低优先级;因此,可以允许完成90%的擦除操作,而当检测到功率损坏时,停止完成了 5%的擦除操作。在一个实施例中,操作所需的能量的数量可以随执行操作的时间而改变。在一个实施例中,终止模块514终止由识别模块512识别的非基本操作。如上所述,终止模块514可以在其它操作之前终止由识别模块512区分了优先级的一些类别的操作(例如,功率加强的擦除操作或自主整理操作(grooming operation)).在一个实施例中,终止模块514通过如下操作终止非基本操作识别操作工作/执行的存储区域或部件,并复位该存储区域或部件,将结合图6对此进行更详细地讨论。如本文所使用的,存储区域或部件指的是非易失性存储单元110的物理部分,其中可以利用命令或信号复位、终止、停止、暂停或暂停在该物理部分上执行的操作。通过终止非基本操作,功率管理装置122可以确保功率被用于基本写操作及其它基本操作,使得基本操作可以在功率滞留时间内执行。此外,功率管理装置122可以因而降低辅助电源1 需要提供的功率总量。因此,许可了设计者例如选择使用较小电容器来提供功率,这可以节约存储设备102中的空间、降低成本并且改善可靠性,同时保持了这些能力,以确保了保持且保护所有接收且肯定应答的数据免受不期望的功率损坏。在一个实施例中,终止模块514确定是否对特定非基本操作进行排队或者正在执行。终止模块514可以通过将排队的非基本操作从队列中去除来删除所述排队的非基本操作,以确保没有执行所述排队的非基本操作。备选地或者附加地,终止模块514可以取消正在执行的操作,以防止正在执行操作消耗额外的功率。在一些实施例中,如上所述,终止模块514终止进行中的一些非基本操作,而允许完成其它非基本操作。在一个实施例中,损坏模块516识别由存储设备102接收的要写入非易失性存储单元110的数据,其中非易失性存储单元110被认为是损坏的,或者被肯定认为是损坏的。这种数据可以例如是写数据管道106中的数据。损坏模块516确保了被认为是损坏的数据不被存储到非易失性存储单元110中,并且还确保了使客户端114意识到数据没有被存储,或者确保了客户端114没有被告知损坏数据已经成功存储。在一些实施例中,损坏模块516和终止模块514将监视模块510检测到功率损坏时采取的动作记入日志。终止模块514可以将如下内容记入日志在非基本操作开始执行之前取消了哪些非基本操作,以及在执行期间终止了哪些非基本操作。损坏模块516可以将关于损坏模块516确定的什么数据是损坏的信息记入日志。类似地,功率管理装置122中的其它模块可以将其活动或者活动的子集记入日志,以有助于存储设备102、客户端114 或其它感兴趣实体确定在不期望断电期间发生了什么。在一个实施例中,损坏模块516预期在监视模块510接收到功率损坏信号之前过去的(例如,5微秒)某一指定时刻开始由存储设备102接收的所有数据是损坏的,并且不应该被存储在非易失性存储器110中。这种规范可以通过例如PCI、PCI-e等标准来规定, 或者通过客户端114、存储设备102、厂家、制造商等来规定。在另一实施例中,损坏模块516 将写数据管道106中预定级之前进行中的数据当作是损坏的。图5B示出了与数据损坏相关的时间线的一个示例。在时刻0处,发生功率障碍。 该时间点被称作障碍时刻。存在一种结果时间段,其中该结果时间段是发生了功率障碍与监视模块510接收到功率障碍信号的时刻、监视模块510检测到功率障碍的时刻等之间经过的时间。本文将该时间段称作损坏时间段。尽管规范可以提供示例损坏时间段(例如以上提及的5微秒),但是损坏时间段不限于此,并且可以基于标准以及开发者、制造商、设计者等的假定而改变。损坏时间段是用于如下事项的必要时间的结果检测功率障碍(5微秒处所示事件)、产生对存在功率障碍加以指示的信号(在3微秒处所示事件)、以及监视模块510接收功率障碍信号(在5微秒处所示事件)。总体上,一旦确定已经存在功率障碍,就应认为该新数据损坏的,则损坏模块516防止新数据进入写数据管道106。然而,在损坏时间段期间,损坏数据可以移动到写数据管道106中。因此,在损坏时间之后接收的所有数据被认为是损坏的,并且不应该存储。例如, 损坏模块516可以确定监视模块510在时刻t接收到功率障碍信号,并且损坏模块516可以始终将损坏时间设置为t-5微秒。因此,损坏模块516可以得出结论,在损坏时间t-5微秒之后接收的所有数据是损坏的。在该实施例中,损坏模块516识别在t-5微秒之后接收到的所有写操作(即,针对快闪存储单元的编程操作等),确定其在写数据管道106中所处的位置,并且跳过写操作。在多种实施例中,损坏模块516可以通过取消写操作、跳过写操作、清除写操作、中断写操作或者未能执行写操作来跳过写操作。在一个实施例中,功率管理装置122还包括完成模块518。在一些实现中,与写数据管道106中的级相关联的一些操作将不执行或者不允许数据连续流动通过管道,直到与该级相关联的缓冲器被填充满为止。例如,例如图3的ECC产生器304等ECC级可能在产生ECC值之前需要满缓冲器。类似地,在将数据从输出缓冲器移出到非易失性存储器110 之前,可能必须填充例如写缓冲器320、写同步缓冲器308等输出缓冲器。在一个实施例中, 如果部分地填充了缓冲器,则在正常条件下,在执行与该缓冲器相关联的操作之前,与该缓冲器相关联的级将等待,直到填充了该缓冲器为止。本文涉及的缓冲器可以是物理缓冲器、 或者可以仅仅是临时性存储位置,例如寄存器、DRAM位置等。在另一实施例中,打包器302 可以不将数据包传送到写数据管道106中的其它级,直到数据包完成、一组数据包完成为止等等。类似地,在一些实施例中,写缓冲器320可以不向存储设备102发送数据,直到页、 逻辑页、一组页或逻辑页等完成为止。在功率损坏的情况下,可能有用的是,即使在一个或多个级处没有填充缓冲器、数据包或页,也通过写数据管道106移动数据,将数据转储至非易失性存储单元110等。完成模块518通过写数据管道106转储部分填充数据缓冲器中的数据,并到达非易失性存储单元110。在一个实施例中,完成模块518识别将不利用填塞数据进行填充和填塞的部分填充缓冲器、数据包和/或页,使得数据被移出缓冲器,并通过写数据管道106。在一个实施例中,完成模块518确保了填塞物可被识别为填塞数据,以确保存储设备102和/或客户端114可以识别填塞物并知道填塞数据不是实际数据的一部分。在一个实施例中,完成模块518使用唯一的报头、记号、标记、图样或其它标识符,来标识填塞数据。在另外的实施例中,完成模块518转储缓冲器、数据包和/或页,而不用添加填塞数据, 使用缓冲器中未填充空间中的现有数据来填写部分填充缓冲器、数据包和/或页。例如,处于未填充或空状态的缓冲器可以存储所有二进制1、所有二进制0、垃圾或垃圾数据、来自在先事务的数据等。在一个实施例中,完成模块518将处于缓冲器的未填充区域的现有数据标识为填塞数据。鉴于本公开,完成模块518可以使用唯一图样、标志或其它指示符、或者本领域技术人员已知的其它方法。在一个实施例中,完成模块518使用唯一的报头、脚注、记号、标记、图样或其它标识符来标识,在功率损失模式期间,功率管理装置122已经成功地完成了基本操作。在一个实施例中,成功地完成了基本操作意味着,完成模块518成功地转储了来自写操作的写数据,使其通过写数据管道106,并到达非易失性存储单元110等。在一个实施例中,指示符是用于标识填充数据的以上描述的相同指示符。在另外的实施例中,完成模块518使用分离的指示符来标识功率损失模式期间的基本操作的成功执行。图6示出了功率管理装置122和非易失性存储单元110的一个实施例600。如上所述,功率管理装置122可以是存储控制器104的一部分。功率管理装置122和非易失性存储单元110可以物理上是同一存储设备102的一部分。功率管理装置122可以执行结合图5A描述的操作。在所描述的实施例中,功率管理装置122包括监视模块510和功率损失模块520。在另外的实施例中,功率损失模块520可以包括识别模块512、终止模块514、损坏模块516和/或完成模块518。功率管理装置122还与非易失性存储单元110通信,使得功率管理装置122向非易失性存储单元110直接地或间接地传输信号。例如,功率管理装置122可以向非易失性存储单元110发送控制信号。图6示出了非易失性存储单元110的体系结构的一个实施例。非易失性存储单元 110可以包括通道63 和632b。通道可以包括多个存储体;例如,通道63 包括存储体 630a和630b,以及通道632b包括存储体650a和650b。在一些实施例中,芯片和 654a-c包括多个管芯636a-f和656a_f。在一些实施例中,每个芯片634a_c和654a_c上的一个管芯被用于形成存储体。如所示,存储体630a包括管芯636a、636c和636e。存储体 630b包括管芯636b、636d和636f。类似地,存储体650a和650b由芯片654a_c上的一个管芯构成。在一个实施例中,图6的非易失性存储单元110实质上与以上描述的图2的固态存储介质110类似。本领域技术人员应该意识到,图6中所示的实施例仅仅是诸如快闪之类的非易失性存储单元Iio的体系结构的一个示例,并且多种其它体系结构也是可能的。图6示出了简化版本的非易失性存储单元110,从而有助于理解本发明的方式关注非易失性存储单元 110的特征。可以在David Flynn等人2007年12月6日提交的发明名称为“Apparatus, System, and Method for Managing Commands of Solid-State Storage Using Bank Interleave"的美国专利申请No. 11/952,095中找到关于非易失性存储单元110实现的更多细节,在此并入其作为参考(在下文中,称作“存储体交错应用,,)。如上所述,终止模块514可以通过以下步骤来终止由识别模块512识别的非基本操作确定操作执行的存储区域或部件,并且复位该存储区域或部件。如本文所使用的,存储区域或部件指的是非易失性存储单元110的物理部分,可以利用复位命令复位非易失性存储单元110的物理部分。复位命令是使针对存储区域执行的所有操作(例如,写、擦除和读)终止的命令。在一个实施例中,可以独立地复位每个管芯636a-f和656a-f,使得每个独立管芯636a-f和656a-f构成唯一的存储区域或部件。复位操作使得作为复位操作对象的特定管芯上的操作终止处理。在一些实施例中,如本文所描述的,发生基于存储体的操作。在一个实施例中,例如,在逻辑擦除块上执行擦除操作,其中逻辑擦除块横跨构成存储体的多个管芯。在这种实施例中,存储区域或部件可以是存储体,以及在实质上相同的时刻向存储体中的所有管芯发送复位操作。复位操作自身可以是一个命令或多个命令;在这种实施例中,复位存储体中的每个管芯,这停止了针对逻辑擦除块的每个管芯中的每个物理擦除块的擦除操作。在另一实施例中,终止模块514可以实质上同时复位所有非易失性存储单元110。 例如,在一个实施例中,存储设备102可以同时调度每个存储体630a、630b、650a、650b上的擦除操作,并且终止模块514可以向非易失性存储单元110中的每个存储体630a、630b、 650a、650b发送复位命令,以终止这些调度的擦除操作。在这种实施例中,终止模块514可以经由总线向特定管芯636a_f和656a_f发送复位命令。这允许在终止模块514复位执行非基本操作(例如擦除)的存储区域,同时允许其它存储区域上的编程操作(即,数据存储写操作)继续。在一个实施例中,终止模块514 通过发出复位信号来终止执行操作,并且通过从命令队列中去除操作或跳过操作来终止暂停操作(即,命令队列中还没有启动的这些操作)。可以在不使用复位命令的情况下终止一些非基本操作。例如,如上所述,可以在从不启动非基本操作的情况下通过如下方式跳过命令队列中的非基本操作删除、清除、标记以防止执行、或去除非基本操作。因为这些操作从未启动,没有管芯636a-f或656a-f需要被复位来终止操作。类似地,即使当没有在管芯636a-f和656a-f上执行的其它非基本操作正在执行,也可以在没有复位命令的情况下终止所述没有在管芯636a-f和656a-f上执行的其它非基本操作;例如,如果当检测到功率损坏时,写数据管道106中的级产生了针对数据的散列密钥,则可以在没有向管芯636a-f和656a-f发送复位操作的情况下,终止散列产生操作。在一些实施例中,利用复位命令仅终止在特定管芯636a-f和656a-f上正在执行的编程/写、读及擦除操作。在一些实施例中,终止模块514可以停止或关闭存储设备102的特定区域/部分/ 模块/子部件。例如,终止模块514可以关闭实现读数据管道108的所有物理设备/部件和/或逻辑模块。在另外的实施例中,终止模块514可以停止或关闭读DMA引擎或者与非基本操作相关联的其它子部件。终止模块514还可以关闭在存储设备102上操作的一个或多个CPU ;例如,存储设备102可以具有多核CPU。在这种实施例中,终止模块514可以关闭没有使用功率管理装置122的CPU上的一个或多个核。终止模块514还可以监视并确保在支持功率管理装置122的核上没有发生与功率管理装置122的操作不相关的活动。在一些实施例中,可以在与CPU分离的硬件上实现功率管理装置122,使得终止模块514可以仅仅关闭CPU来保持功率。终止模块514可以通过停止相应的时钟来关闭读数据管道108和CPU。本领域技术人员应该意识到,关闭读数据管道108、读DMA引擎、CPU、和/或存储设备102的其它子部件的其它方法。在一些实施例中,如存储体交错应用中所描述的,可以发生存储体级别的一些操作;例如,在影响存储体630a的编程操作期间将数据编程(即,写或存储)到管芯636a、 636c和636e。可以组织存储体630a_b和650a_b,使得其提供逻辑擦除块(当在存储体中存在η个管芯时,由η个物理擦除块构成)、逻辑页(当在存储体中存在N个管芯时,由N个物理擦除块构成)等等。因此,在图6中,存储体630a可以呈现由(来自管芯636a、636c 和636e的)三个物理擦除块构成的逻辑擦除块,以及由来自管芯636a、636c和636e的三个物理页构成的数据的逻辑页。在该实施例中,终止模块514可以经由总线向在存储体630a中并行运行的管芯 (例如,636a、636c和636e)发送复位命令。在该实施例中,可以同时复位该组管芯636a、 636c和636e,以有效地停止在每个管芯636a、636c和636e上发生的操作。因此,由于在包括三个物理管芯636a、636c和636e上的物理擦除块的逻辑擦除块上发生了擦除操作,可以同时向管芯636a、636c和636e上的三个物理擦除块物理地发送复位操作,以停止该针对该逻辑擦除块的正在进行的擦除操作。类似地,在另外的实施例中,终止模块514可以向所有管芯636a、636c和636e发送复位操作,以同时复位整个非易失性存储单元110。在一个可能示例中,监视器模块510可以确定存储设备102已经丢失功率。识别模块512确定在非易失性存储单元110上发生了针对存储体650a上的逻辑擦除块的擦除操作。终止模块514向存储体650a发送复位命令,这使得管芯656a、656c和656e复位,因而终止了擦除操作。对于其它擦除操作及在存储设备102失去功率之后而暂停的针对非易失性存储单元110的读操作而言,可以发生类似模式。此外,存储体可以彼此独立,使得可以终止或停止针对存储体的操作,而不会影响存储设备102中的其它存储体的操作。在一些实施例中,不发生如上所描述的存储体级别的编程、擦除和读操作;在一些体系结构中,在每个管芯636a-f和656a-f上独立地发生编程、擦除及读操作。在这种实施例中,可以向受影响的管芯发送复位操作;例如,可以通过终止模块514向管芯636b发送复位命令来终止对管芯636b上的物理擦除块的擦除。可以采用其它方法来终止由识别模块512识别的正在执行的非基本操作。在一个实施例中,终止模块514通过暂停非基本操作,来终止正在进行的或组队等待执行的非基本操作。一些非易失性存储设备110可以允许暂停正执行的操作。在这种实施例中,终止模块514可以发送命令来暂停非基本操作,而不用发送后续命令来重新开始非基本操作, 以有效地促使取消操作。在其它实施例中,终止模块514可以发送命令来暂停非基本操作, 等待直到所有基本编程操作都完成之后,然后才向各种暂停操作发送一个或多个重新开始命令。图7示出了存储设备102的功率管理装置122和写数据管道106的一个实施例 700。在一个实施例中,写数据管道106与以上描述的关于图3的写数据管道106实质上类似。在所描述的实施例700中,写数据管道106包括输入缓冲器306、压缩模块312、加密模块314、打包器302、ECC产生器304及写缓冲器320。在其它实施例中,写数据管道106可以包括其它级或模块,例如写程序模块310、垃圾回收器旁路316、介质加密模块318、写同步缓冲器308和/或其它级。如图3所示,写数据管道106可以被实现为固态存储(SSQ控制器104的一部分。 在一个实施例中,功率管理装置122还可以被实现为SSS控制器104的一部分。在一个实施例中,可以分离地实现功率管理装置122,但是功率管理装置122可以与SSS控制器104 通信。在另外的实施例中,功率管理装置122可以与SSS控制器104集成。如上所述,在一些实施例中,损坏模块516识别经由PCI-e连接(或其它连接,取决于实现)接收的数据,其中在功率损坏之后接收到该数据,并且被认为是损坏的(在下文中,一般称作损坏数据)。在一个实施例中,损坏模块516还确保了客户端114可以或者应该知道,认为是损坏的数据没有被存储在存储设备102中。在一个实施例中,损坏模块516 确定写数据管道106中最旧的一块损坏数据的位置。最旧的一块损坏数据处于损坏时间段开始之后接收的数据的起始处。从最旧的一块损坏数据后退至写数据管道106的开始(例如,输入缓冲器306)的所有数据被认为是损坏的,并且将其从写数据管道106中去除。在一个实施例中,损坏模块516可以使得存储设备102延迟向客户端114发回肯定应答,直到用于计算损坏时间的时间段过去之后为止。如上所述,在取决于存储设备102 和写数据管道106的体系结构的一些实施例中,损坏模块516可以假定在监视模块510检测到功率损坏之后的5微秒或更迟些接收的所有数据是损坏的。因此,5微秒是用于计算损坏时间的时间段。因此,损坏模块516可以指定直到存储设备102接收到数据之后的5微秒之后才向客户端114发送肯定应答。因此,在一些实施例中,由于已经被存储,数据从未被肯定应答,直到存储设备102可以保证还没有被检测到的功率损坏和/或还没有与存储设备102通信的功率损坏没有损坏数据为止。 在一个实施例中,一旦数据离开由缓冲器208管理的缓冲器,损坏模块516就发送肯定应答,但是要在数据进入写数据管道106之前。例如,可以由直接存储存取(“DMA”) 引擎将数据到传输存储设备102上的缓冲器,然后由一个或多个缓冲器管理器208将该数据移动到写数据管道106。在一个实施例中,缓冲器控制器208允许从DMA引擎接收数据的缓冲器进行填充, 等待损坏时间期满,然后向客户端114发送肯定应答。一旦填充缓冲器之后的一段时间过去了,就知道是否功率损坏已经损坏了缓冲器中的所有或部分数据,并且知道是否数据可以被安全地肯定应答。如果功率损坏已经发生了,则可以从缓冲器中去除数据,而不用向写数据管道106发送。此外,如果功率损坏已经发生了,则可以不向客户端114发送肯定应答来肯定应答数据被存储。因此,根据最佳实践,客户端114应该假定数据没有被存储。在另一实施例中,写数据管道106中的数据损坏的潜在风险是可接受的,所以缓冲器控制器208 允许缓冲器填充,不对损坏时间施加延期,然后存储设备102向客户端114发送肯定应答。 在一些实施例中,存储设备102默认插入了损坏避免延期,并且该损坏避免延期是可配置的,从而允许不插入该损坏避免延期。因此,在这种实施例中,损坏模块516可以防止被功率损坏损坏的数据进入写数据管道106,并且在存储设备102可以保证在功率损坏期间数据没有被损坏之前,损坏模块 516还防止存储设备102发送肯定应答。在另一实施例中,损坏模块516在阻塞点停止写数据管道106内的损坏数据。阻塞点是写数据管道106中的位置,其中,在检测到功率损坏的情况下,阻塞点以上的任何数据(即,阻塞点与输入缓冲器306之间,包括输入缓冲器306中的数据)被认为是损坏的。 阻塞点的位置可以由数据移动通过写数据管道106的速率以及用于确定损坏时间的一段时间来确定。例如,损坏模块516可以假定,自损坏时间之后的5微秒中,最远的数据可能已经被移动到通往ECC产生器304的写数据管道106。因此,在示例实施例中,ECC产生器 304是写数据管道106中的阻塞点。在检测到功率损坏的情况下,损坏模块516可以防止 ECC产生器304内的数据以及写数据管道中更远位置(即,在写数据管道106中的介质加密模块314、打包器302等中)中的任何数据移动通过写数据管道106,并到达非易失性存储单元110。在一些实施例中,损坏模块516中止在写数据管道106中的阻塞点以上发生的操作。在另一实施例中,阻塞点的位置可以由写数据管道106具有足够信息将数据写入非易失性存储单元110的位置来确定。例如,在一个实施例中,一旦打包器302将报头元数据添加到了完整数据包中,则写数据管道106就具有足够信息来进一步处理数据包(即,将该数据包传送至ECC产生器304等),并且将该数据包写入非易失性存储单元110。在一个实施例中,数据包是写数据管道106中最小可写数据单元。在该示例实施例中,打包器302 是阻塞点。在另外的实施例中,ECC组块或代码字是写数据管道106中的最小可写数据单元,并且ECC产生器304可以是阻塞点。在一个实施例中,选择辅助电源124的特性,以为数据提供足够长的延期时间,来使其从阻塞点开始传输通过写数据管道106,并写入非易失性存储单元110。在一些实施例中,一旦数据已经完整地移动通过了写数据管道106中的阻塞点, 则损坏模块516发送针对数据的肯定应答。因此,在发送肯定应答之前,可以停止损坏数据,并且可以中止对损坏数据有影响的操作。因此,在存储的或者在管道中即将存储的数据是好的、未损坏数据之前,并不给予客户端114肯定应答。在一些实施例中,可以将数据组织到原子数据单元中。例如,原子数据单元可以是数据包、页、逻辑页、逻辑数据包、块、逻辑块、与一个或多个逻辑块地址(逻辑块地址可以是连续的或非连续的)相关联的数据集合、文件、文档、或其它相关数据组。在这种实施例中,损坏模块516可以延期发送肯定应答,直到整个原子数据单元已经传输通过阻塞点为止。例如,文件的一部分可能已经传输通过了阻塞点,因而被认为是未损坏数据;然而,文件的后一半还没有传输通过阻塞点,因而可能包括损坏数据。在发送肯定应答之前,损坏模块516可以等待,直到整个原子数据单元已经传输通过阻塞点为止。这与仅原子数据单元的一部分移动通过时发送肯定应答相反。在一个实施例中,损坏模块516部分地丢弃损坏的原子数据单元。在另一实施例中,损坏模块516允许原子数据单元的未损坏部分或者原子数据单元的未损坏部分和损坏部分传输通过写数据管道106,并写入非易失性存储单元 110。在一些实施例中,在原子数据单元可以包括部分数据或损坏的数据的情况下,功率管理装置122可以包括与存储数据一起的指示符,以指示原子数据单元的适当状态。损坏模块516还可以负责在检测到功率损坏之后使数据停止流入写数据管道 106。因此,无论是在写数据管道106的外部还是在写数据管道106的内部处理损坏数据, 损坏模块516都可以防止在检测到功率损坏之后任何数据进入写数据管道106。完成模块518还可以结合写数据管道106工作,以确保未损坏且已被肯定应答的数据被移动通过写数据管道106并被存储在了非易失性存储单元110中。写数据管道106中的模块/级可以使用缓冲器来支持其工作。在一些实施例中,一旦填充了相关缓冲器,则模块(例如模块302-314)仅执行操作。例如,ECC产生器304可以等待,直到缓冲器满为止,然后产生针对整个缓冲器的ECC值。在一个实施例中,缓冲器控制器208管理数据流动通过写数据管道106中的缓冲器。类似地,如以上参考图3描述的,写数据管道106可以包括针对写数据管道106中级的一个或多个控制队列342。在正常操作期间,写数据管道106使数据连续流化通过写数据管道106,使得总是填充缓冲器。然而,在功率损坏的情况下,当写数据管道106中的一个或多个缓冲器仅是部分满时,可以停止数据流入写数据管道106。例如,如上所述,损坏模块516可以从写数据管道106去除损坏数据,并且防止新数据流入存储设备102。因此,可以允许写数据管道106 中的一个或多个缓冲器是部分满的。如果数据没有被移动通过写数据管道106,则一旦辅助电源IM耗尽,就将在功率滞留时间的结束丢失数据。在一些实施例中,在功率损失模式期间,完成模块518转储数据,使其通过写数据管道106中的部分填充的缓冲器。在一个实施例中,完成模块518利用填塞数据填充部分填充的缓冲器。在其它实施例中,如上所述,完成模块518可以通过将在缓冲器的未填充部分中存储的现有值用作填塞数据等来转储数据,而不用添加填塞数据。因此,操作所述数据和填充,以将其从缓冲器移出,并移动通过写数据管道106。在写数据管道106中使用的缓冲器可以不全是相同大小;在这种实施例中,当数据移动通过写数据管道106时,完成模块 518可以监视数据,并且在部分填充了缓冲器的任何位置转储附加缓冲器。在一些实施例中,完成模块518使用唯一标记、指示符或报头,来标识填塞数据, 以防止填塞数据在将来被误认为是实际数据。在一些实施例中,填塞序列由值1组成,原因在于值“1”是对单元的编程发生之前非易失性存储单元110的状态。例如,在快闪存储单元中,编程操作将1转换为0。通过使用由1构成的填塞序列,可以节约将1转换为0所必需的功率。在相关实施例中,在启动编程操作之前,不需要传输构成填塞数据的1,原因在于单元已经处于1的状态。在一些实施例中,当将数据从写数据管道106移出,经由存储I/O总线210进入了非易失性存储单元110时,可以将指示符插入数据包中,以指示是否数据被适当地写入了。在一些实施例中,指示符被插入到针对数据的数据包的报头中,并且指示是否在具有指示符的数据包之前的数据包中的数据被适当地写入了。因此,如果数据包被成功地编程,则将利用指示符对后续数据包的报头编程,其中该指示符声明最后的编程数据包被成功地编程。在其它实施例中,指示符被置于尾部数据包的结尾处,并且指示是否适当地写入包括了指示符的数据包。在一个实施例中,这通过将数据向前移位一个比特以使数据进入报头空间来完成。因此,如果报头是64比特的报头,则移位将报头空间减少到63个比特, 并将1个比特添加到了尾部。这将可以被用作指示符的一个比特留在了数据包的尾部。该方法允许每个数据包指示其自身的状态,同时保持适当对齐,其中在实施例中,其可以对边界对齐敏感。指示符可以被用于标识数据包包括填塞,以及因而标识数据不完整,并且数据可能是系统不可使用的。在一些实施例中,当在故障之后再次为存储设备102加电时,指示符被用于辅助重新构造针对非易失性存储单元110的索引及有效性映射。
在一些实施例中,对于每个原子数据单元,插入一个指示符。如上所述,指示符可以被置于原子数据单元中的最后一个数据包的尾部。因此,指示符可以指示是否适当地写入了整个原子数据单元的数据。例如,如果功率损坏使得仅写入原子数据单元的一部分, 并且如上所述地填塞最后一个数据包,则指示符将指示整个原子数据单元没有被适当地写入。此外,如上所讨论的,在一些实施例中,没有向客户端114发送肯定应答。在一个实施例中,允许损坏数据在写数据管道106中前进,以将进行中的已肯定应答的好数据转储到非易失性存储单元110中。可以通过设置以上描述的指示符来标识损坏数据,其中该指示符将数据标记为无效/损坏。在相关实施例中,诸如专用数据包、报头、 唯一字符流、标记及本领域技术人员已知的类似方法等其它形式的指示符可以替换以上描述的指示符,来使在非易失性存储单元110中存储的损坏数据无效。在所有这些情况中,应该从未向客户端114肯定应答损坏数据。如以上参考图5描述的,在一个实施例中,完成模块518使用唯一报头、脚注、记号、标记、图样或其它标识符来标识在功率损失模式中功率管理装置122已经成功地完成了基本操作,例如,成功地转储了写数据而使其通过写数据管道106等,以及在功率滞留时间期间,成功地将数据存储到了非易失性存储单元110中。在一个实施例中,指示符是与以上描述相同的指示符,以标识损坏数据、填充数据等。在另外的实施例中,完成模块518使用分离的指示符来标识功率损失模式期间基本操作的成功执行。在一个实施例中,原子数据单元与多个非连续和/或无序的逻辑块地址或者写数据管道106将其作为单个原子数据单元来处理的其它标识符相关联。如本文所使用的,在单个写操作中写入非连续或无序逻辑块被称作原子写。在一个实施例中,硬件控制器按照接收的顺序处理操作,并且客户端114的软件驱动向硬件控制器一起发送单个原子写的操作,使得写数据管道106可以正常地处理原子写操作。因为硬件按照顺序处理操作,这保证了不同逻辑块地址或针对给定原子写的其它标识符一起移动通过写数据管道106,到达非易失性存储单元110。在一个实施例中,因为终止模块514没有终止已肯定应答的写操作, 肯定应答的原子写被成功地存储到了非易失性存储单元110中,如果客户端114没有接收到肯定应答,则客户端114可以检测到,由于功率损失等导致原子写失败。在一个实施例中,一旦已经恢复了功率,则客户端114可以在恢复时退出、重新处理或者处理失败的原子写和/或其它失败的或终止的操作。在一个实施例中,客户端114上的软件驱动可以利用对特定块是否是原子写的一部分加以指示的元数据标志,来标记原子写的块。一种示例元数据标记依赖于非易失性存储单元110的log write/append only protocol及元数据等。对用于存储数据及防止交错存储体的添加唯一日志的使用,使原子写成员关系元数据是单个比特。在一个实施例中, 如果块不是原子写的成员,则标志比特可以是0,以及如果块是原子写的成员,则比特可以是1。在一个实施例中,如果块是原子写的成员,并且是原子写的最后一块,则元数据标志可以是零,以指示该块是原子写的最后一块。在另一实施例中,可以发送不同的硬件命令,来为原子写标记不同报头,例如原子写中的第一块、原子写的中间块、原子写的尾部块等等。在一个实施例中,当从客户端114或存储设备102的功率损失或其它故障中恢复过来时,存储控制器104、功率管理装置122等按照确定性的方向(例如,在一个实施例中, 日志的起始是尾部,以及日志的结束是头部,并且总是在头部添加数据)扫描非易失性存储单元110上的日志。在一个实施例中,功率管理装置122从日志的头部向日志的尾部扫描。在其它实施例中,功率管理装置122可以从日志的尾部向日志的头部扫描,一次从尾到头且一次从头到尾的扫描,或者基于恢复目的而扫描日志。对于原子写恢复,在一个实施例中,当扫描从头到尾时,如果元数据标志比特是0,则块是单块原子写块或者非原子写块。在一个实施例中,一旦元数据标志比特从0变为1,则被扫描的在前块与被扫描的当前块可能是原子写的成员。在一个实施例中,功率管理装置122继续扫描日志,直到元数据标志变回到零为止,在日志中的该点处,被扫描的在前块是原子写的最后一个成员及针对原子写存储的第一块。在一个实施例中,非易失性存储单元110使用基于日志的添加唯一写结构的写系统(log-based, append only write structured writing system),其中新写入去往了曰志的前方(即,日志的头部)。在另外的实施例中,存储控制器104通过使用垃圾回收系统、 整理器、清洁器代理等来回收日志中已删除的、陈旧的和/或无效的块。在另外的实施例中,存储控制器104使用正向映射将逻辑块地址映射到物理地址,以促进对添加唯一写结构(append only write structre)与垃圾回收的使用。在另一实施例中,存储控制器104通过使用诸如未完成树(in-flight tree)等数据结构来跟踪在存储设备102的正常操作期间的正在进行的写操作。在一个实施例中,未完成树是一种保持存储设备102已经接收到但还没有完成的块存储请求(尤其是写请求) 的记录的数据结构。在一个实施例中,功率管理装置122确保了对于单块写而言,即使失去了电能,也保证完成写入。在所描绘的实施例700中,打包器302包括未完成数据包702和完成数据包704。 在一个实施例中,如果未完成数据包702处于原子数据单元的结尾处,则损坏模块516可以向客户端114发送针对未完成数据包702和完成数据包704中的数据的肯定应答。在一个实施例中,在功率损失模式期间,完成模块518转储来自打包器302的未完成数据包702。 如上所描述的,在一些实施例中,完成模块518可以将对未完成数据包702中有效数据的结尾加以指示的标记及填塞数据添加到数据包702中,和/或转储来自打包器302的未完成数据包702。在另一实施例中,如果完成数据包704处于原子数据单元的结束处,并且未完成数据包702来自未完成的不同原子数据单元,则损坏模块516向客户端114发送针对完成数据包702中的数据的肯定应答,但是没有向客户端114肯定应答未完成数据包702的数据。在一个实施例中,在功率损失模式期间,终止模块514可以丢弃作为未肯定应答数据的未完成数据包702,跳过与未完成数据包702相关的作为非基本操作的一个或多个操作等寸。在所描绘的实施例中,写缓冲器320包括一个未完成页708及两个完成页710、 712。在一个实施例中,如上所描述的,页708、710、712包括逻辑页。在一个实施例中,在功率损失模式期间,完成模块518转储来自打包器302的数据包702、704中的一个或两个,通过ECC产生器304,并到达写缓冲器320。在一个实施例中,即使在功率损失模式期间,实质上写缓冲器320也将完成页 710、712正常地写入非易失性存储单元110。在另外的实施例中,终止模块514可以终止和 /或复位非易失性存储单元110上的一个或多个非基本操作,使得写缓冲器320可以将完成页710、712写入非易失性存储单元110。在一个实施例中,完成模块518将未完成页708 从写缓冲器320转储到非易失性存储单元110中,使得非易失性存储单元110在功率损失滞留时间内存储未完成页708。如上所述,在各种实施例中,完成模块518可以在未完成页 708中添加对有效数据的结束加以指示的标记、向未完成页708添加填塞数据、和/或更新来自写缓冲器320的未完成页708.图8描述了用于存储设备102中的功率损失管理的方法800的一个实施例。方法 800开始,监视模块510确定802来自主功率连接130的功率是否在预定阈值以下。在所描述的实施例中,如果监视模块510确定802来自主功率连接130的功率没有在预定阈值以下,则监视模块510继续监视802来自主功率连接130的功率的量。在所描绘的实施例中,如果监视模块510确定802来自主功率连接130的功率在预定阈值以下,则监视模块510在存储设备102中启动功率损失模式。在功率损失模式期间,存储设备102在至少功率滞留时间内从辅助电源IM接收806功率。在所描绘的实施例中,在功率损失模式期间,功率损失模块520调整存储设备102上的进行中操作的执行, 使得在功率支持时间内执行基本的进行中操作,并且方法800结束。图9示出了在功率故障期间用于改进的存储设备操作的方法900的一个实施例。 方法900开始于监视902至存储设备102的功率。在一个实施例中,监视模块510监视至存储设备102的功率。方法900还包括确定904至存储设备102的功率是否已经被中断、 下降到预定阈值以下等等。如果存储设备102的功率没有被中断,则监视模块510针对中断继续监视存储设备102的功率。在中断的情况下,所述方法包括识别906存储设备102上未完成的操作。在一个实施例中,识别模块512识别906未完成操作。在一些实施例中,识别模块512仅处理擦除操作、读操作及编程操作。在一些实施例中,还可以识别其它类型的操作。在所示实施例中,如果未完成操作是读操作或擦除操作,则识别模块512可以确定908当前正在执行哪些读操作和擦除操作(S卩,非易失性存储单元110上,当前正在发生的读操作和擦除操作)以及暂停了哪些读操作和擦除操作。在一个实施例中,对于当前正在执行的那些读操作和擦除操作,终止模块514发送复位命令,以复位910受影响的存储区域并取消相关操作。如上所讨论的,终止模块514可以根据优先级系统执行这些动作,并且备选地,还可以进行选择以允许将接近完成的一些操作完成。如果当前没有执行未完成读/擦除操作,则终止模块514可以仅仅使操作914被取消或跳过。例如,操作可以在一个或多个命令队列中排队,并等待执行。终止模块514可以从队列中去除读和擦除操作,使得其不被执行。备选地,终止模块514可以使操作被忽略或跳过;即,让操作留在队列中,但是不选择用于执行。在另外的实施例中,终止模块514可以忽略持有非基本操作的一个或多个非基本命令队列,并且从持有基本操作的一个或多个基本命令队列中选择操作来执行等。如果未完成操作是编程操作,则识别模块512可以确定912是否向客户端114发送了肯定应答。如果还没有发送肯定应答,则如上所描述的,终止模块514可以选择取消排队的操作,或者复位受影响的存储区域。在其它实施例中,如果编程操作处于存储设备102 中,则无论是否已经发送了肯定应答,也可以允许完成编程操作。如果已经发送了肯定应答,则允许完成编程操作916。因此,向客户端114报告,与编程操作相关联的数据被移入了非易失性存储单元110。如上所讨论的,作为方法900的一部分,损坏模块516可以清除来自写数据管道106的损坏数据。类似地,完成模块518可以转储部分填充的缓冲器,以确保要编程的数据被移动通过数据写管道106。如上所讨论的, 损坏模块516和/或完成模块518可以设置指示符,该指示符标识到达存储设备102的损坏数据。在功率故障期间,通过减少由非易失性存储设备102执行的操作的数目,可以减小辅助电源124的大小、成本及复杂性。在一些实施例中,关注功率渴求/昂贵的操作上, 例如擦除,其不太重要,但是消耗相当大的功率。系统100还可以区分基本编程(针对其已经向客户端114发送了肯定应答的这些编程)与非基本编程(针对其还没有向客户端114 发送了肯定应答的这些编程)。可以在不背离本发明的精神或实质特性的情况下,以其它具体形式实现本发明。 在所有方面,所描述的实施例被认为是举例说明,而非限制。因此,本发明的范围由所附权利要求来指示,而非通过前述描述来指示。进入权利要求的等同物的意思和范围内的所有改变被包含在其范围内。
权利要求
1.一种用于在存储设备中进行功率损失管理的方法,所述装置包括响应于主电源不能向非易失性数据存储设备提供预定阈值以上的电能,在所述非易失性存储设备中启动功率损失模式;在所述功率损失模式期间,在至少功率滞留时间内,从辅助电源接收用于所述非易失性存储设备的电能;以及在所述功率损失模式期间,调整所述非易失性数据存储设备上的进行中操作的执行,使得在所述功率滞留时间内执行进行中的基本操作。
2.如权利要求1所述的方法,其中,调整进行中操作的执行包括终止所述非易失性数据存储设备上所述进行中操作之中的一个或多个非基本操作。
3.如权利要求2所述的方法,其中,所述一个或多个非基本操作包括还没有向所述非易失性数据存储设备的一个或多个客户端肯定应答的写操作、以及擦除操作和读操作。
4.如权利要求2所述的方法,还包括对所述非易失性数据存储设备断电,而不执行所述一个或多个非基本操作。
5.如权利要求1所述的方法,其中,调整进行中操作的执行包括跳过一个或多个命令队列中的一个或多个非基本操作,使得在所述非易失性数据存储设备上不执行所述一个或多个非基本操作。
6.如权利要求1所述的方法,其中,进行中的基本操作包括已经向所述非易失性数据存储设备的所述一个或多个客户端肯定应答的写操作。
7.如权利要求1所述的方法,其中,调整进行中操作的执行包括复位所述非易失性数据存储设备的一个或多个非易失性存储部件。
8.如权利要求7所述的方法,其中,调整进行中操作的执行还包括响应于复位一个或多个非易失性存储区域,执行所述一个或多个非易失性存储部件上的进行中的基本操作。
9.如权利要求7所述的方法,其中,所述一个或多个非易失性存储部件包括所述非易失性数据存储设备的实质上所有非易失性存储部件。
10.如权利要求7所述的方法,其中,所述一个或多个非易失性存储部件包括当前正处理所述进行中操作之中的非基本操作的非易失性存储部件的一个或多个存储体,每个存储体包括多个非易失性存储管芯。
11.如权利要求10所述的方法,其中,所述非基本操作包括擦除操作。
12.如权利要求1所述的方法,其中,调整进行中操作的执行包括,对所述进行中操作的选择重新排序,以在所述功率滞留时间内执行进行中的基本操作。
13.如权利要求1所述的方法,还包括响应于启动所述功率损失模式,停止对所述非易失性数据存储设备的一个或多个子部件的操作,其中所述停止对所述一个或多个子部件的操作节约了所述辅助电源的能量,以提供所述功率滞留时间。
14.如权利要求1所述的方法,其中调整进行中操作的执行包括,将与进行中的基本操作相关联的未完成的缓冲数据转储到所述非易失性数据存储设备的非易失性存储器中,使得所述非易失性存储器在所述功率滞留时间内存储所述未完成的缓冲数据。
15.如权利要求1所述的方法,还包括在所述非易失性数据存储设备上存储标识了所述非易失性数据存储设备已启动所述功率损失模式的标识符,其中存储所述标识符,以响应于恢复对所述非易失性存储设备的供电而从所述非易失性存储设备获取所述标识符。
16.如权利要求1所述的方法,还包括在所述非易失性数据存储设备上存储标识了在功率滞留时间内进行中的基本操作已完成执行的标识符,其中存储所述标识符,以响应于恢复对所述非易失性存储设备的供电而从所述非易失性存储设备获取所述标识符。
17.如权利要求1所述的方法,其中,所述辅助电源包括一个或多个电容器,能够存储足够的能量来提供所述功率滞留时间,以执行进行中的基本操作。
18.一种用于在存储设备中进行功率损失管理的装置,所述装置包括监视模块,响应于主电源不能向非易失性数据存储设备提供预定阈值以上的电能,在所述非易失性存储设备中启动功率损失模式;辅助电源,在所述功率损失模式期间,在至少功率滞留时间内向所述非易失性数据存储设备提供电能;以及功率损失模块,在所述功率损失模式期间调整所述非易失性数据存储设备上的进行中操作的执行,使得在所述功率滞留时间内执行进行中的基本操作。
19.如权利要求18的装置,其中,所述功率损失模块如下调整进行中操作的执行复位所述非易失性数据存储设备中当前正处理所述进行中操作之中非基本操作的一个或多个非易失性存储部件,以终止所述非基本操作。
20.一种用于在存储设备中进行功率损失管理的系统,所述系统包括适配器,被配置为容纳两个或更多个非易失性数据存储设备;主电源,与所述适配器电耦合,以向所述两个或更多个非易失性数据存储设备提供电能;至少一个监视模块,响应于所述主电源不能提供预定阈值以上的电能,在所述非易失性存储设备中启动功率损失模式;至少一个辅助电源,与所述适配器电耦合,每个所述辅助电源被配置为在所述功率损失模式期间,在至少功率滞留时间内向至少一个非易失性数据存储设备提供电能;以及一个或多个功率损失模块,在所述功率损失模式期间调整所述非易失性数据存储设备上的进行中操作的执行,使得在所述功率滞留时间内执行进行中的基本操作。
21.如权利要求20所述的系统,其中所述一个或多个功率损失模块包括针对每个非易失性存储设备的独立功率损失模块,每个独立功率损失模块被配置为调整相关联的非易失性数据存储设备上的进行中操作的执行。
22.如权利要求20所述的系统,其中所述一个或多个功率损失模块包括单个系统功率损失模块,被配置为调整所述两个或更多个非易失性数据存储设备上的进行中操作的执行。
全文摘要
公开了一种用于在非易失性存储设备102中进行功率损失管理的装置、系统及方法。响应于主电源130不能向非易失性数据存储设备102提供预定阈值以上的电能,监视模块510在非易失性数据存储设备102中启动功率损失模式。在功率损失模式期间,辅助电源124在至少功率滞留时间内向非易失性数据存储设备102提供电能。功率损失模块520在功率损失模式期间调整非易失性数据存储设备102上进行中操作的执行,使得在所述功率延迟时间内执行基本的进行中操作。
文档编号G06F1/26GK102597910SQ201080050702
公开日2012年7月18日 申请日期2010年9月9日 优先权日2009年9月9日
发明者乔纳森·希尔达, 兰斯·史密斯, 大卫·弗林, 杰瑞米·弗林吉姆, 比尔·英斯克普, 约翰·斯特拉瑟 申请人:弗森-艾奥公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1