用于检测和替代失效的数据存储器的装置、系统和方法

文档序号:6768199阅读:213来源:国知局
专利名称:用于检测和替代失效的数据存储器的装置、系统和方法
技术领域
本发明涉及数据存储,并且更具体地,涉及检测和替代存储设备的阵列中失效的 数据存储器。
背景技术
固态存储器和其他形式的数据存储媒体容易受到固态存储器内的具体区域中的 失效或数据错误的影响。在其他例子中,整个设备或芯片发生故障并丧失功能。通常,使用 多个存储器设备或存储元件,例如在分布式独立驱动器冗余阵列(RAID)或其他冗余数据 系统中。存储器设备的阵列(例如RAID系统)提供了防止数据错误和设备故障的一定程 度的保护,这是由于存储在阵列中的奇偶校验数据可被用于替换失效的数据。然而,当存储在阵列中的数据未与任意具体的物理硬件边界对齐时,确定产生错 误的存储器设备或存储元件是困难的。

发明内容
如上所述,显而易见,存在对用于检测和替代失效的数据存储器的装置、系统和方 法的需求。有利地是,这种装置、系统和方法单独地测试阵列的存储设备以检测数据错误。本发明是针对现有技术的现况开发出来的,具体地,是针对现有技术中现有的可 用数据存储系统并未完全解决的问题和需要。因此,本发明已经被开发出来以提供一种用 于检测和替代失效的数据存储器的装置、系统和方法,克服现有技术中的上述多数或全部 缺陷。用于检测和替代失效的数据存储器的装置具有多个配置为功能性的执行下述必 要步骤的模块从存储设备的阵列读取数据,利用纠错码(ECC)确定测试的数据是否存在 一个或多个错误以及错误是否可用ECC修正,从存储设备的阵列选定存储设备和替代读取 自选定的存储设备的数据。在描述的实施方式中,这些模块包括读取模块、ECC模块和隔离 模块。读取模块从存储设备的阵列读取数据。该阵列包括两个或多个存储设备和一个或 多个额外存储设备。额外存储设备存储来自存储设备的奇偶校验信息。在一种实施方式中, 读取模块从逻辑页的至少一部分读取数据。逻辑页遍及存储设备的阵列。存储设备的阵列 包括N+P个存储元件的阵列。存储元件的阵列包括N个每个存储ECC组块的一部分的存储 元件和P个存储奇偶校验数据的存储元件。ECC组块包括存储的数据和生成自存储的数据 的纠错码(ECC),其中ECC遍及存储的数据。P个存储元件存储生成自存储在N个存储元件中的ECC组块的奇偶校验数据。在某些实施方式中,每个存储设备包括非易失性固态存储
οECC模块利用纠错码(ECC)确定测试的数据是否存在一个或多个错误以及错误是 否可用ECC修正,测试的数据包括由读取模块读取的数据。隔离模块响应于ECC模块确定错误存在于由读取模块读取的数据中且该错误不 可用ECC修正而从存储设备的阵列选定存储设备。隔离模块还利用包括生成自奇偶校验数 据的数据(替代数据)和读取自未被选定的存储设备的数据(可用数据)的数据替代读 取自选定的存储设备的数据,奇偶校验数据存储在一个或多个额外存储设备上,其中由ECC 模块测试的数据还包括结合有替代数据的可用数据。在一种实施方式中,隔离模块响应于 ECC模块确定结合有替代数据的可用数据包含不可用ECC修正的错误而选定用于测试的下 一存储设备。下一存储设备选自存储设备的阵列。隔离模块选定每个隔离模块用于测试, 直到ECC 1004模块确定结合有替代数据的可用数据不包含错误或包含可用ECC修正的错 误。在一种实施方式中,该装置包括引退模块,其响应于ECC模块确定结合有替代数 据的可用数据不包含错误或包含可用ECC修正的错误而基于引退策略引退选定的存储设 备和选定的存储设备上的一个或多个存储区域中的一个。一个或多个存储区域包括一个或 多个错误。存储区域包括选定的存储设备的至少一部分。在另一种实施方式中,引退模块引退擦除块并响应于下述情况用来自一个或多个 额外存储设备的替代数据替代来自擦除块的数据存储错误恢复模块擦除擦除块,顺序地 将额外数据写入擦除块,读取模块顺序地读取额外数据和使用ECC模块和隔离模块确定擦 除块包括不可修正的错误,其中通过结合替代数据和可用数据,不可修正的错误是可修正 的。在一种实施方式中,该装置包括存储设备重新配置模块,其响应于ECC模块确定 结合有替代数据的可用数据不包含错误或包含可用ECC修正的错误而识别选定的存储设 备,从而为将来的操作生成数据以替代来自选定的存储设备的读取数据。在一种实施方式中,装置包括记录模块,其响应于ECC模块确定结合有替代数据 的可用数据不包含错误或包含可用ECC修正的错误,进行下述操作中的一个或多个记录 选定的存储设备的标识;和记录指明包括一个或多个错误的一个或多个存储区域的存储位 置数据。该区域包括选定的存储设备的至少一部分。在一些实施方式中,记录模块记录选定的存储设备的标识而不记录包括具有一个 或多个错误的存储区域的存储位置数据。在另一种实施方式中,记录模块记录包括一个或 多个错误的一个或多个存储区域,并且还记录指明选定的存储设备中包括一个或多个错误 的一个或多个存储区域的存储位置数据。记录模块还响应于读取模块进行的后续读取和使 用ECC模块和隔离模块确定具有不可修正的错误的存储区域,记录一个或多个存储区域和 额外存储区域,其中结合替代数据和可用数据,不可修正的错误是可修正的。在又一种实施方式中,后续读取包括由存储区域测试模块初始化的读取和来自读 取请求的读取中的一个。在一种实施方式中,存储区域包括下述中的一个或多个一个或多 个ECC组块、一个或多个物理页、一个或多个逻辑页、一个或多个物理擦除块、一个或多个 逻辑擦除块、芯片、芯片的一部分、一个或多个芯片块的一部分和一个或多个芯片块。
在一种实施方式中,装置包括存储区域测试模块,其识别选定的存储设备内包括 错误的一个或多个存储区域。记录模块还记录包括由存储区域测试模块识别的一个或多个 存储区域的存储位置数据。在又一种实施方式中,存储区域测试模块利用后续读取并使用 ECC模块和隔离模块确定具有不可修正的错误的存储区域来识别具有一个或多个错误的存 储区域,后续读取由读取模块进行,通过结合替代数据和可用数据,不可修正的错误是可修 正的。在一种实施方式中,装置包括区重新配置模块,其为了将来的操作,用来自一个或 多个额外存储设备的替代数据替代选定的存储设备中一个或多个存储区域的数据,从而选 定的存储设备中一个或多个存储区域外的数据不被替代。在又一种实施方式中,区重新配 置模块用来自一个或多个额外存储设备的替代数据替代来自选定的存储设备上的一个或 多个存储区域的数据,并用来自相相同的一个或多个额外存储设备的替代数据替代来自相 同选定的存储设备或不同选定的存储设备上的一个或多个额外存储区域的数据,一个或多 个额外存储区域中的每一个包括一个或多个错误,其中,一个或多个存储区域和一个或多 个额外存储区域不共享共同的逻辑页。在另一种实施方式中,区重新配置模块用来自一个或多个额外存储设备的替代数 据替代来自选定的存储设备上的一个或多个存储区域的数据,并用来自一个或多个不同额 外存储设备的替代数据替代一个或多个额外存储区域。一个或多个额外存储区域中的每一 个包括一个或多个错误,其中,一个或多个存储区域和一个或多个额外存储区域共享共同 的逻辑页。在一种实施方式中,装置包括分析模块,其分析记录以确定下述中的一项或多项 选定的存储设备中具有数据错误的区和错误类型。在一种实施方式中,装置包括错误存储恢复模块,其响应于ECC模块确定结合有 替代数据的可用数据不包含错误或包含可用ECC修正的错误而擦除具有一个或多个错误 的擦除块以将擦除块准备用于将来的数据存储。在一种实施方式中,该装置包括修正数据模块,其响应于ECC模块确定结合有替 代数据的可用数据不包含错误或包含可用ECC修正的错误而返回修正的数据。本发明也提了一种用于检测和替代失效的数据存储器的系统。该系统可被实施 为存储设备的阵列,控制阵列的存储控制器和相对于装置描述的类似模块。具体地,在一 种实施方式中,该系统包括读取模块、ECC模块和隔离模块。读取模块从存储设备的阵列读 取数据。该阵列包括两个或多个存储设备和一个或多个额外存储设备。额外存储设备存储 来自存储设备的奇偶校验信息。ECC模块利用纠错码(ECC)确定测试的数据是否存在一个或多个错误以及错误是 否可用ECC修正,测试的数据包括由读取模块读取的数据。隔离模块响应于ECC模块确定 错误存在于由读取模块读取的数据中且数据不可用ECC修正而从存储设备的阵列选定存 储设备。隔离模块还利用包括生成自奇偶校验数据的数据(替代数据)和读取自未被选定 的存储设备的数据(可用数据)的数据替代读取自选定的存储设备的数据,奇偶校验数据 存储在一个或多个额外存储设备上,本发明还提出了一种包括计算机可读媒体的计算机程序制品,该计算机可读媒体 具有计算机可读的程序代码,可执行该程序代码以实现检测和替代失效的数据存储器的操作。该计算机程序制品包括从存储设备的阵列读取数据。该阵列包括两个或多个存储设备 和一个或多个额外存储设备。额外存储设备存储来自存储设备的奇偶校验信息。该计算机 程序制品还包括利用纠错码(ECC)确定测试的数据是否存在一个或多个错误以及错误是 否可用ECC修正,测试的数据包括由读取模块读取的数据。该计算机程序制品包括响应于ECC模块确定错误存在于数据中且该错误不可用 ECC修正而从存储设备的阵列选定存储设备。该计算机程序制品还包括利用包括生成自奇 偶校验数据的数据(替代数据)和读取自未被选定的存储设备的数据(可用数据)的数据 替代读取自选定的存储设备的数据,奇偶校验数据存储在一个或多个额外存储设备上。该 计算机程序制品还包括确定测试的数据是否不包含错误或包含可用ECC修正的错误,测试 的数据还包括结合有替代数据的可用数据。本说明书全文所提到的特征、优点或者类似措辞并不意味着可利用本发明实现的 所有的特征和优点应该是或本来就包含在本发明的任一单独的实施方式中。当然,涉及特 征和优点的措辞被理解为意味着与实施方式一起描述的特定的特征、优点或者特点包括 在本发明的至少一种实施方式中。因此,在本说明书全文中,关于特征、优点和类似措辞的 讨论可(但未必)涉及相同种实施方式。此外,描述的本发明的特征、优点和特点可采用任何合适的方式与一个或多个实 施方式结合。相关领域的技术人员可意识到本发明可在不具备特定实施方式的一个或多个 具体特征或优点的情况下被实施。在其他例子中,可意识到附加特征和优点出现在某些实 施方式中,而不是在本发明的所有实施方式中都出现。通过下面的说明和附加的权利要求,本发明的这些特征和优点将变得更加充分的 显而易见,或者可以通过按下文所阐述的本发明的实施而获悉。


为了更容易地理解本发明的优点,将参考附图中示出的具体实例方式详细说明上 文中简述的本发明的实施方式。应当理解,这些附图仅描绘了本发明的典型实施方式,因此 不能将其理解为对本发明的范围的限制,将结合附图具体且详细地描述和解释本发明,附 图中图1是示意性方框图,示出了根据本发明的用于固态存储设备中的数据管理的系 统的一种实施方式;图2是示意性方框图,示出了根据本发明的固态存储设备中的固态存储设备控制 器的一种实施方式;图3是示意性方框图,示出了根据本发明的固态存储设备中的具有写入数据管道 和读取数据管道的固态存储控制器的一种实施方式;图4A是示出了根据本发明的存储元件的阵列的一种实施方式的示意性方框图;图4B是示出了根据本发明的存储元件的阵列的另一种实施方式的示意性方框 图;图5是示意性框图,示出了根据本发明的增强冗余存储系统中的数据完整性的装 置的一种实施方式;图6是示意性框图,示出了根据本发明的增强冗余存储系统中的数据完整性的装置的另一种实施方式;图7是示意性流程图,示出了根据本发明的增强冗余存储系统中的数据完整性的 方法的一种实施方式;图8是示意性流程图,示出了根据本发明的增强冗余存储系统中的数据完整性的 方法的另一种实施方式;图9A是示意性框图,示出了根据本发明的检测和替代失效数据存储器的装置的 一种实施方式;图9B是示意性框图,示出了根据本发明的检测和替代失效数据存储器的装置的 另一种实施方式;图10是示意性框图,示出了根据本发明的检测和替代失效数据存储器的装置的 又一种实施方式;图11是示意性框图,示出了根据本发明的检测和替代失效数据存储器的装置的 再一种实施方式;图12是示意性流程图,示出了根据本发明的检测和替代失效数据存储器的方法 的一种实施方式;图13是示意性流程图,示出了根据本发明的检测和替代失效数据存储器的方法 的另一种实施方式;图14是示意性流程图,示出了根据本发明的检测和替代失效数据存储器的方法 的又一种实施方式;图15A是示意性流程图,示出了根据本发明的记录具有错误的存储区域的方法的 一种实施方式;图15B是示意性流程图,示出了根据本发明的记录具有错误的存储区域的方法的 另一种实施方式;图16是示意性流程图,示出了根据本发明的引退擦除块的方法的一种实施方式;图17是示意性方框图,示出了根据本发明的使用奇偶校验数据重新配置受保护 的固态存储元件阵列的装置的一种实施方式;图18是示意性方框图,示出了根据本发明的使用奇偶校验数据重新配置受保护 的固态存储元件阵列的装置的另一种实施方式;图19是示意性流程图,示出了根据本发明的使用奇偶校验数据重新配置受保护 的固态存储元件阵列的方法的一种实施方式;图20是示意性流程图,示出了根据本发明的用于确定额外不可用存储元件的方 法的一种实施方式。
具体实施例方式为了更显著地强调功能性单元运行的独立性,在本说明书中描述的许多功能性单 元已被标示为模块。例如,模块可作为硬件电路来实施,所述硬件电路包括自定义VLSI电 路或门阵列、成品半导体(例如逻辑芯片、晶体管或其他分立元件)。模块也可在可编程硬 件设备(如现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备或类似设备)内实施。模块还可在由不同类型的处理器运行的软件中实施。例如,可执行代码的识别模块可以包括一个或多个计算机指令物理块或逻辑块,该计算机指令可以例如被作为对象、 程序或函数来组织。然而,识别模块的可执行文件不必在物理上位于一起,但是可包括存储 在不同位置的不同命令,当这些命令在逻辑上连接在一起时,所述命令包括所述模块并实 现所述模块的指定目标。当然,可执行代码的模块可以为一个或许多指令,并且甚至可以分布在若干不同 的代码段中、分布在不同的程序中并可分布在多个存储设备中。类似地,可以在此在模块内 识别并示出运算数据,并且可以以任何合适的形式体现所述运算数据并在任意合适类型的 数据结构中组织所述运算数据。所述运算数据可作为单数据集收集,或者可以分布在不同 的位置(包括不同的存储设备),并且可仅作为电信号至少部分地存在于系统或网络中。当 模块或模块的部分在软件中实施时,软件部分被存储在一个或多个计算机可读媒体上。本说明书全文所提到的“一种实施方式”、“实施方式”或类似的措辞意味着与实施 方式一起描述的特定的特征、结构或特点包括在本发明的至少一种实施方式中。因此,在本 说明书全文中,短语“在一种实施方式中”、“在实施方式中”及类似措辞的出现可(但未必) 涉及相同实施方式。提及的计算机可读媒体可采取任何能够将机器可读指令存储在数字处理设备上 的形式。计算机可读媒体可通过下述设备体现传输线、光盘、数字视频光盘、磁带、伯努利 驱动器、磁盘、穿孔卡、闪存、集成电路或其他数字处理装置存储设备。此外,描述的本发明的特征、结构或特点可以以任何合适的方式合并在一种或多 种实施方式中。在下文的说明中,提供了大量的具体细节以全面理解本发明的实施方式,所 述具体细节比如编程、软件模块、用户选择、网络事务、数据库查询、数据库结构、硬件模块、 硬件电路、硬件芯片等等的实例。然而,相关技术领域的技术人员可认识到本发明可在不 具备一个或多个具体细节的情况下实施,或者本发明可结合其他方法、组件、材料等实施。 在其他例子中,为了避免使本发明的多个方面模糊,并没有详细地显示或描述公知的结构、 材料或操作。此处包括的示意性流程图大体上是作为逻辑流程图来列举的。就这点而言,描述 的顺序和标记的步骤是本方法的一种实施方式的指示性说明。可设想其他在功能上、逻辑 上或效果上与图示方法的一个或多个步骤(或其中部分)等效的步骤和方法。此外,使用 的格式和符号被用于解释方法的逻辑步骤并被理解为不限制本方法的范围。尽管在流程图 中可使用不同的箭头类型和线条类型,但这些箭头类型和线条类型被理解为不限制相应方 法的范围。实际上,一些箭头或其他连接器可用于仅表示方法的逻辑流程。例如,箭头可表 示所描述方法的列举步骤之间的未指明间期的等待或监测时期。此外,特定方法的步骤的 顺序可以或可以不严格依照所示的对应步骤的顺序。固态存储系统图1是示意性框图,示出了根据本发明的用于固态存储设备内的数据管理的系统 100的一种实施方式。系统100包括固态存储设备102、固态存储控制器104、写入数据管道 106、读取数据管道108、固态存储器110、计算机112、客户端114和计算机网络116,这些装 置描述如下。此外,在不同的实施方式中,系统100还包括缩减装置116、检测装置118和重 构装置120。系统100包括至少一个固态存储设备102。在另一种实施方式中,系统100包括两个或多个固态存储设备102。每个固态存储设备102可包括非易失性、固态存储器110,所述 非易失性、固态存储器例如闪存、纳米随机存取存储器(“纳米RAM”或者“NRAM”)、磁电阻式 RAM( "MRAM")>sj]^RAM( “DRAM,,)、相变 RAM( “PRAM,,)、赛道存储器(Racetrack memory), 忆阻存储器(Memristor memory)等等。固态存储设备102被描述成位于通过计算机网 络116与客户端114相连的计算机112内。在一种实施方式中,固态存储设备102位于计 算机112内部并且采用系统总线连接,所述系统总线例如快速外围组件互连(peripheral componentinterconnect express) ( “PCI_e”)总线、串行高级技术附件(“串行 ΑΤΑ”)总 线或类似总线。在另一种实施方式中,固态存储设备102位于计算机112外部,并且通过 通用串行总线(“USB”)、电气与电子工程师协会("IEEE") 1394总线(“火线”)或类似 总线连接。在其他实施方式中,固态存储设备102采用下述方式与计算机112相连接PCI express总线、外部电或光总线扩展或者总线网络解决方案,所述总线网络解决方案例如无 限带宽或快速PCI高级交换(“PCIe-AS”)或类似技术。在不同的实施方式中,固态存储设备102可以是双列直插式内存模块(“DMM”)、 子卡或微型模块的形式。在另一种实施方式中,固态存储设备102是位于机架式刀片 (rack-mounted blade)内的元件。在另一种实施方式中,固态存储设备102包含在直接集 成到高级集成装置(如主板、笔记本电脑、图形处理器)上的封装内。在另一种实施方式中, 包括固态存储设备102的单独元件直接集成到高级集成装置上而不经过中间封装。固态存储设备102包括一个或多个固态存储控制器104,每个固态存储控制器104 可包括写入数据管道106和读取数据管道108,而且,每个固态存储设备102包括固态存储 器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还可包括来自IEEE 802系列网络技术中的网络,如以太网、令牌环网、 WiFi, WiMax及类似网络。计算机网络116可包括服务器、交换机、路由器、电缆、无线电和其他用于促进计 算机112和客户端114的网络连接的设备。在一种实施方式中,系统100包括通过计算机网络116进行对等通信的多台计算机112。在另一种实施方式中,系统100包括通过计算机 网络116进行对等通信的多个固态存储设备102。本领域技术人员可认识到其他计算机网 络116可包括一个或多个计算机网络116以及相关设备,所述相关设备具有在一个或多个 客户端114或其他计算机或与一台或多台计算机112相连的一个或多个固态存储设备102 之间的单个或冗余连接,所述其他计算机具有一个或多个固态存储设备102。在一种实施 方式中,系统100包括两个或多个通过计算机网络118连接到客户端116的固态存储设备 102,而不包括计算机112。系统100包括缩减装置116。在图1中,缩减装置116被描述为位于固态存储设备 102中,但也可位于固态控制器104、固态存储器110、计算机108等中。缩减装置116可位 于一起,或者可以是分布式的。本领域技术人员会认识到缩减装置116的其他形式。下文 更详细地描述了缩减装置116。系统100还包括检测装置118。在图1中,检测装置118被描述为位于固态存储设 备104中,但也可位于固态控制器104、固态存储器106、计算机108等中。检测装置118可 位于一起,或者可以是分布式的。本领域技术人员会认识到检测装置118的其他形式。下 文更详细地描述了检测装置118。系统100包括重构装置120。在图1中,重构装置120被描述为位于固态存储设备 104中,但也可位于固态控制器104、固态存储器106、计算机108等中。重构装置120可位 于一起,或者可以是分布式的。本领域技术人员会认识到重构装置120的其他形式。下文 更详细地描述了重构装置120。固态存储设备图2是示出了根据本发明的固态存储设备102内的固态存储设备控制器202的一 种实施方式201的示意性框图,该固态存储设备控制器202包括写入数据管道106和读取 数据管道108。固态存储设备控制器202可包括若干固态存储控制器O-NlMa-η,每个固态 存储控制器都控制固态存储器110。在描述的实施方式中,示出了两个固态控制器固态控 制器O 10 和固态控制器N 104η,并且每一个控制固态存储器llOa-n。在描述的实施方式 中,固态存储控制器0 10 控制数据通道,以使得附属固态存储器IlOa存储数据。固态存 储控制器N 10 控制与存储的数据关联的索引元数据通道,并且关联的固态存储器IlOn 存储索引元数据。在替代的实施方式中,固态存储设备控制器202包括具有单个固态存储 器1 IOa的单个固态控制器104a。在另一种实施方式中,存在多个固态存储控制器l(Ma-n和 关联的固态存储器llOa-n。在一种实施方式中,一个或多个固态控制器l(Ma-104n-l (与它 们的关联固态存储器IlOa-IlOn-I连接)控制数据,而至少一个固态存储控制器104n(与 其关联固态存储器IlOn连接)控制索引元数据。在一种实施方式中,至少一个固态控制器104是现场可编程门阵列(“FPGA”)并 且控制器功能被编入FPGA。在特定的实施方式中,FPGA是Xilinx 公司的FPGA。在另一种 实施方式中,固态存储控制器104包括专门设计为固态存储控制器104的组件(如专用集 成电路(“ASIC”)或自定义逻辑解决方案)。每个固态存储控制器104通常包括写入数据 管道106和读取数据管道108,这两个管道被结合图3进一步描述。在另一种实施方式中, 至少一个固态存储控制器104由PGA、ASIC和自定义逻辑组件的组合组成。固态存储器
固态存储器110是非易失性固态存储元件216、218、220的阵列,该阵列布置在内 存库214中并且通过双向存储输入/输出(I/O)总线210并行访问。在一种实施方式中, 存储I/O总线210能够在任何一个时刻进行单向通信。例如,当将数据写入固态存储器110 时,不能从固态存储器110中读取数据。在另一种实施方式中,数据可同时双向地流动。然 而,如此处针对数据总线使用的双向指在相同时间数据仅在一个方向流动的数据通路,但 是,当在双向数据总线上一个方向流动的数据被阻止时,数据可在所述双向总线上沿相反 方向流动。固态存储元件(如SSS 0. 0216a)通常被配置为电路板上的芯片(一个或多个芯 片块(die)的封装)或芯片块。正如所描述的那样,固态存储元件(如216a)独立于或半独 立于其他固态存储元件(如218a)运行,即使这些元件被一起封装在芯片包、芯片包的堆栈 或一些其他封包元件内。正如所描述的,一列固态存储元件216、218、220被指定为内存库 214。正如所描述的,可以有“η”个内存库2Ha-n并且每个内存库可以有“m”个固态存储 元件216a-m,218a-m,220a-m,从而在固态存储器110中可以有nXm个固态存储元件216、 218,220的阵列。在一种实施方式中,固态存储器IlOa的每个内存库214(有8个内存库 214)包括20个固态存储元件216、218、220,并且,固态存储器IlOn的每个内存库214(有 一个内存库214)包括两个固态存储元件216、218。在一种实施方式中,每个固态存储元件 216,218,220由单层单元(“SLC”)设备组成。在另一种实施方式中,每个固态存储元件 216、218、220由多层单元(“MLC”)设备组成。在一种实施方式中,用于多个内存库的固态存储元件被封包在一起,所述多个内 存库共享公用存储I/O总线210a行(如216b、218b、220b)。在一种实施方式中,固态存储 元件216、218、220的每个芯片可具有一个或多个芯片块,而一个或多个芯片垂直堆叠且每 个芯片块可被独立存取。在另一种实施方式中,固态存储元件(如SSS 0. 0216a)的可具有 在每个芯片块内的一个或多个虚拟芯片块、以及在每个芯片内的一个或多个芯片块、以及 垂直堆叠的一个或多个芯片,且每个虚拟芯片块可被独立存取。在再一种实施方式中,固态 存储元件SSS 0.0216a可具有在每个芯片块内的一个或多个虚拟芯片块以及在每个芯片 内的一个或多个芯片,其中一个或多个芯片块中的一些或全部垂直堆叠,并且每个虚拟芯 片块可被独立存取。在一种实施方式中,每组有四个堆,每堆有两个芯片块垂直堆叠,从而形成8个存 储元件(如SSS 0. O-SSS 0. 8)216a-220a,每个存储元件位于分离的内存库2Ha-n内。在 另一种实施方式中,20个存储元件(如SSS 0. O-SSS 20. 0)216形成逻辑内存库214a,因 此8个逻辑内存库中的每一个都具有20个存储元件(如SSSO. 0-SSS20. 8) 216、218、220。 通过存储I/O总线210将数据发送到固态存储器110,从而发送到存储元件(SSS 0. O-SSS 0. 8)216a、218a、220a的特定组的所有存储元件。存储控制总线21 用于选择特定的内存 库(如内存库-0 21 ),从而通过连接到所有内存库214的存储I/O总线210接收到的数 据仅被写入选定的内存库2Ha。在优选实施方式中,存储I/O总线210由一个或多个独立I/O总线(包括210aa-m, 210n. a-m的“IIOBa-m”)组成,其中,每一行内的固态存储元件共享独立I/O总线中的一条, 所述独立I/O总线中的一条并行访问每个固态存储元件216、218、220,从而使得同时访问 所有的内存库214。例如,存储I/O总线210的一个通道可同时访问每个内存库2Ha-n的第一固态存储元件216a、218a、220a。存储I/O总线210的第二通道可同时访问每个内存库 214a-n的第二固态存储元件216b、2im3、220b。固态存储元件216、218、220的每一行都被 同时访问。在一种实施方式中,其中固态存储元件216、218、220是多层的(物理堆叠的), 固态存储元件216、218、220的所有物理层被同时访问。正如此处所使用的,“同时”还包括 几乎同时的访问,其中,以略有不同的时间间隔访问设备以避免开关噪声。在这种情况下, 同时被用于与连续的或系列的访问相区别,其中,命令和/或数据被单独地相继发送。通常,采用存储控制总线212独立地选择内存库2Ha-n。在一种实施方式中,采用 芯片选通或芯片选择来选择内存库214。当芯片选择和芯片选通均可用时,存储控制总线 212可选择多层固态存储元件216、218、220中的一层。在其他实施方式中,存储控制总线 212使用其他命令来单独地选择多层固态存储元件216、218、220中的一层。还可通过控制 和地址信息的结合来选择固态存储元件216、218、220,所述控制和地址信息在存储I/O总 线210和存储控制总线212上传输。在一种实施方式中,每个固态存储元件216、218、220被分割成擦除块,并且每个 擦除块被分割成页。固态存储元件216、218、220上的擦除块可被称为物理擦除块或PEB。 典型的页为2000字节(“2kB”)。在一个实例中,固态存储元件(如SSS 0. 0)包括两个寄 存器并能编程两页,从而双寄存器固态存储元件216、218、220具有4kB的容量。20个固态 存储元件216、218、220的内存库214就会有SOkB的相同地址的页访问容量,所述相同地址 流出存储I/O总线210的通道。在固态存储元件216、218、220的内存库214中的这一组80kB大小的页可称为逻 辑页或虚拟页。类似地,内存库21 的每个存储元件216a-m的擦除块可被分组以形成逻 辑擦除块或虚拟擦除块。在优选实施方式中,当在固态存储元件216、218、220中接收到擦 除命令时,擦除位于固态存储元件216、218、220内的页擦除块。然而,在固态存储元件216、 218,220内的擦除块、页、平面层或其他逻辑和物理分区的大小和数量预计会随着时间的推 移、随着技术的进步而变化,可以预期的是,与新配置一致的许多实施例是可能的并与本文 的一般描述相一致。通常,当将包写入固态存储元件216、218、220内的特定位置时,其中,拟将所述包 写入特定页内的位置,所述特定页对应于特定内存库的特定存储元件的特定物理擦除块的 页,在发送所述包之后,将物理地址发送在存储I/O总线210上。所述物理地址包含足够的 信息,以使得固态存储元件216、218、220将所述包导入页内的指定位置。由于存储元件行 (如SSS 0. O-SSS 0. N 216a、218a、220a)上的存储元件通过存储I/O总线210a. a内的合适 总线同时被访问,为了到达合适的页并避免将所述数据包写入在存储元件行(SSS 0. O-SSS 0.N 216a.218a.220a)中相似地址的页,存储控制总线212同时选择内存库214a,所述内存 库包括具有要将所述数据包写入其内的正确页的固态存储元件SSS 0. 0216a。类似地,在存储I/O总线212上传输的读命令需要在存储控制总线212上的同步 命令,以选择单个的内存库21 和内存库21 内的合适页。在优选实施方式中,读命令读 取整个页,并且由于在内存库214内存在许多并行的固态存储元件216、218、220,利用读命 令读取整个逻辑页。然而,所述读命令可分割为子命令,这将在下文中结合内存库交错进行 解释。还可以在写操作中访问逻辑页。可通过存储I/O总线210发出擦除块擦除命令以擦除擦除块,该擦除块擦除命令特定的擦除块。通常,可通过存储I/O总线210的并行通路 发送擦除块擦除命令以擦除逻辑擦除块,每个擦除块擦除命令具有特定的擦除块地址以擦 除特定的擦除块。同时,通过存储控制总线212选择特定的内存库(如内存库-021 )以 防止擦除所有的内存库(内存库I-N 214b-n)中的类似地址的擦除块。还可采用存储I/O 总线210和存储控制总线212的结合将其他命令发送到特定位置。本领域技术人员会认识 到采用双向存储I/O总线210和存储控制总线212选择特定存储位置的其他方法。在一种实施方式中,将包顺序地写入固态存储器110。例如,包流到存储元件216 的内存库21 的存储写入缓冲器,并且当所述缓冲器饱和时,所述包被编程入指定的逻辑 页。然后所述包再次填充所述存储写入缓冲器,并且当所述存储缓冲器饱和时,所述包被写 入下一逻辑页。所述下一个逻辑页可位于相同内存库21 内或可位于另一个内存库(如 214b)内。这个过程(一个逻辑页接一个逻辑页)通常一直持续到逻辑擦除块被填满时。 在另一种实施方式中,当这个过程(一个逻辑擦除块接一个逻辑擦除块)持续时,数据流可 继续越过逻辑擦除块边界。在读、修改、写操作中,在读操作中定位并读取与所述对象关联的数据包。已被修 改的修改对象的数据段并不写入读取它们的位置。取而代之,修改的数据段再次被转化为 数据包并随后被顺序地写入正在被写入的逻辑页中的下一个可用位置。各个数据包的所述 对象索引项被修改为指向包含已修改的数据段的包。所述对象索引中用于与未被修改的相 同对象关联的数据包的项(或多个项)会包括指向未被修改的数据包的源位置的指针。因 此,如果源对象保持不变(例如保持所述对象的先前版本不变),所述源对象将在所述对象 索引中具有指向所有与最初写入的一样的数据包的指针。新对象将在所述对象索引中具有 指向一些源数据包的指针和指向正在被写入的逻辑页中的修改的数据包的指针。在复制操作中,所述对象索引包括用于源对象的项,该源对象映射到若干存储在 固态存储器110中的包。当复制完拷贝时,创建了新对象并在将所述新对象映射到源包的 对象索引中创建新项。还将所述新对象写入固态存储器110,所述固态存储器具有映射到所 述对象索引中的新项的新对象地址。新对象包可用于确定在源对象中的包,该包被引用以 防在未复制的源对象中发生改变并以防对象索引丢失或损坏。有利地是,顺序地写入包有助于更平滑地使用固态存储器110并允许固态存储设 备控制器202监测固态存储器110内的存储热点和不同逻辑页的层使用状况。相继地写入 包还可有助于建立强大、高效的垃圾收集系统,这将在下文中详细描述。本领域技术人员会 认识到顺序地存储数据包的其他好处。固态存储设备控制器在不同的实施方式中,固态存储设备控制器202还可包括数据总线204、局部总线 206、缓冲控制器208、缓冲器O-N 22加-11,主控制器224、直接存储器存取(“DMA”)控制器 226、存储器控制器228、动态存储器阵列230、静态随机存储器阵列232、管理控制器234、管 理总线236、连接系统总线MO的网桥238和杂项逻辑块对2,这些将在下文中描述。在其 他实施方式中,系统总线240与一个或多个网络接口卡(“NIC”) 244相连接,这些网络接口 卡中的一些可包括远程DMA (“RDMA”)控制器对6、一个或多个中央处理单元(“CPU”)M8、 一个或多个外部存储器控制器250和关联的外部存储器阵列252、一个或多个存储控制器 254对等控制器256和专用处理器258,这些将在下文描述。连接到系统总线MO的组件244-258可位于计算内112内或者可以为其他设备。通常,固态存储控制器104通过存储I/O总线210与固态存储器110进行数据通 信。在典型的实施方式中,固态存储器布置在内存库214内,且每个内存库214包括多个并 行访问的存储元件216、218、220,存储I/O总线210是多条总线的阵列,每一条总线用于内 存库214内的存储元件216、218、220的每一行。正如此处所使用的,术语“存储I/O总线” 可指一条存储I/O总线210或多条独立的数据总线204的阵列。在优选实施方式中,访问 存储元件的行(如216、218a、220a)的每条存储I/O总线210可包括在存储元件216、218a、 220a的行中访问的存储部(如擦除块)的逻辑-物理映射。如果第一存储部失效、部分失 效、不可访问或出现一些其他问题时,这种映射(或错误块重映射)允许映射到存储部的物 理地址的逻辑地址重映射到不同的存储部。还可通过系统总线M0、网桥238、局部总线206、缓冲器22并最终通过数据总线 204将数据从请求设备155传送到固态存储控制器104。数据总线204通常连接到一个或 多个由缓冲控制器208控制的缓冲器22加-11。缓冲控制器208通常控制数据从局部总线 206传递到缓冲器222并通过数据总线204传递到管道输入缓冲器306和输出缓冲器330。 为了解决时钟域差异、防止数据冲突等等,缓冲控制器222通常控制在缓冲器222中暂时存 储来自请求设备的数据的方式,并控制此后传送给数据总线204(或相反)的方式。缓冲控 制器208通常与主控制器224结合使用以协调数据流。当数据到达时,所述数据会到达系 统总线240并通过网桥238传递给局部总线206.通常,数据在主控制器2 和缓冲控制器208的指引下从局部总线206传递给一 个或多个数据缓冲器222。然后,所述数据通过固态控制器104从缓冲器222流向数据总 线204并到达固态存储器110(如NAND闪存或其他存储媒体)。在优选实施方式中,数据 和与所述数据一起到达的关联的带外元数据(“对象元数据”)采用一个或多个数据通道 送达,所述数据通道包括一个或多个固态存储控制器104a-l(Mn-l和关联的固态存储器 IlOa-IIOn-I,而至少一个通道(固态存储控制器104η、固态存储器110η)用于带内元数据 (如索引信息和其他固态存储设备102内部生成的元数据)。局部总线206通常为双向总线或总线组,所述双向总线或总线组允许数据和命令 在固态存储设备控制器202内部的设备间通信,也允许命令和数据在固态存储设备102内 部的设备和与系统总线240连接的设备244-258之间通信。网桥238有助于在局部总线 206和系统总线240之间的通信。本领域技术人员会认识到其他实施方式,如总线对0、206、 204,210和网桥238的环结构或交换式星形配置和功能。系统总线240通常是计算机、安装有或连接有固态存储设备102的其他设备的总 线。在一种实施方式中,系统总线240可以为PCI-e总线、串行高级技术附件(“串行ΑΤΑ”) 总线、并行ATA或类似总线。在另一种实施方式中,系统总线240为外部总线,例如小型计 算机系统接口( “SCSI”)、防火墙、光纤通道、USB、PCIe-As或类似总线。固态存储设备102 可被封装为适于置于设备内部或被封装为外部连接设备。固态存储设备控制器202包括控制固态存储设备102内较高级别功能的主控制器 224。在不同的实施方式中,主控制器2M通过解释对象请求和其他请求来控制数据流,指 导创建索引,以将与数据关联的对象标识符映射到关联的数据或协调的DMA请求等的物理 地址。主控制器2M完全地或部分地控制此处描述的许多功能。
在一种实施方式中,主控制器2M采用嵌入式控制器。在另一种实施方式中,主控 制器2M采用局部存储器,如动态存储器阵列230 (动态随机存取存储器“DRAM”)、静态存储 器阵列323(静态随机存取存储器“SRAM”)等。在一种实施方式中,采用主控制器2M控制 局部存储器。在另一实施方式中,主控制器通过存储器控制器2 访问局部存储器。在另一 种实施方式中,所述主控制器运行Linux服务器并可支持各种常用服务器接口,如万维网、 超文本标记语言(“HTML”)等。在另一种实施方式中,主控制器2M采用纳米处理器。可 采用可编程或标准逻辑或上述控制器类型的任意组合来构建主控制器224。本领域技术人 员会认识到主控制器的许多实施方式。在一种实施方式中,其中存储设备152/固态存储设备控制器202管理多个数据 存储设备/固态存储器llOa-n,主控制器2M在内部控制器(如固态存储控制器l(Ma-n) 之间分配工作负载。例如,主控制器2M可分割将要被写入数据存储设备(如固态存储器 110a-n)的对象,使得每个附属的数据存储设备存储所述对象的一部分。这种特征是允许更 快地存储和访问对象的性能增强。在一种实施方式中,主控制器2M利用FPGA实施。在另 一种实施方式中,位于主控制器224内的固件可通过管理总线236、经由网络连接到NIC244 的系统总线240或其他连接到系统总线MO的设备更新。在一种实施方式中,管理对象的主控制器2M仿真块存储,从而使得计算机102或 其他连接到存储设备152/固态存储设备102的设备将存储设备152/固态存储设备102视 为块存储设备并将数据发送给存储设备152/固态存储设备120中的特定物理地址。然后, 主控制器2M分割块并像存储对象一样存储数据块。然后,主控制器2M将块和与块一起 发送的物理地址映射到由主控制器2M确定的实际位置。映射存储在对象索引中。通常, 对于块仿真来说,在计算机112、客户端114或其他希望将存储设备152/固态存储设备102 当成块存储设备来使用的设备的驱动器中提供有块设备应用程序接口( “API”)。在另一种实施方式中,主控制器224与NIC控制器244和嵌入式RDMA控制器246 协同运行以提供数据和命令集的准时RDMA传输。NIC控制器244可隐藏在非透明端口后以 使得能够使用自定义的驱动器。此外,客户端114上的驱动器可通过采用标准堆栈API并 与NIC 244结合运行的I/O存储驱动器访问计算机网络118。在一种实施方式中,主控制器224也是独立驱动冗余阵列(“RAID”)控制器。当 数据存储设备/固态存储设备120与一个或多个其他数据存储设备/固态存储设备120联 网时,主控制器2 可以是用于单层RAID、多层RAID、渐进式RAID等的RAID控制器。主控 制器2 还允许一些对象存储在RAID阵列内而其他对象不通过RAID存储。在另一种实施 方式中,主控制器2M可以是分布式RAID控制器元件。在另一种实施方式中,主控制器2M 可包括许多RAID、分布式RAID和另行描述的其他功能。在一种实施方式中,主控制器2 控制RAID类结构中的数据存储,其中,奇偶校验信息存储在逻辑页的一个或多个存储元件 216,218,220中,奇偶校验信息保护存储在相同逻辑页的其他存储元件216、218、220中的 数据。在一种实施方式中,主控制器2M与单个或多个网络管理器(如交换机)协同运 行以建立路由、平衡带宽使用率、故障转移等。在另一种实施方式中,主控制器2M与集成 专用逻辑器件(通过局部总线206)和关联的驱动器软件协同运行。在另一种实施方式中, 主控制器2M与附属专用处理器258或逻辑器件(通过外部系统总线M0)和关联的驱动器软件协同运行。在另一种实施方式中,主控制器2M与远程专用逻辑器件(通过计算机 网络118)和关联的驱动器软件协同运行。在另一种实施方式中,主控制器2M与局部总线 206或附属于硬盘驱动器(“HDD”)存储控制器的外部总线协同运行。在一种实施方式中,主控制器2M与一个或多个存储控制器2M通信,其中存储设 备/固态存储设备102可表现为通过SCSI总线、因特网SCSI( “iSCSI”)、光纤通道等连接 的存储设备。同时,存储设备/固态存储设备102可自主地管理对象并可表现为对象文件 系统或分布式对象文件系统。还可通过对等控制器256和/或专用处理器258访问主控制 器2M。在另一种实施方式中,主控制器224与自主集成管理控制器协同运行以周期性地 验证FPGA码和/或控制器软件、在运行(复位)时验证FPGA码和/或在通电(复位)期 间验证控制器软件、支持外部复位请求、支持由于检查超时的复位请求,并支持电压、电流、 功率、温度及其他环境测量和阈值中断设置。在另一种实施方式中,主控制器2M管理垃圾 收集以释放擦除块进行再次使用。在另一种实施方式中,主控制器2M管理耗损均衡。在 另一种实施方式中,主控制器2M允许数据存储设备/固态存储设备102被分割成多个逻 辑设备并允许基于分区的媒体加密。在又一种实施方式中,主控制器2M支持具有高级的、 多位的ECC修正的固态存储控制器104。本领域技术人员会认识到存储控制器152内,或更 具体地说位于固态存储设备102内的主控制器224的其他特征和功能。在一种实施方式中,固态存储设备控制器202包括存储器控制器228,该存储器控 制器2 控制动态随机存储器阵列230和/或静态随机存储器阵列232。如上所述,存储器 控制器2 可独立于主控制器2M使用或与主控制器2M集成使用。存储器控制器2 通 常控制一些类型的易失性存储器,如DRAM(动态随机存储器阵列230)和SRAM(静态随机存 储器阵列23 。在其他实例中,存储器控制器2 还控制其他存储器类型,如电可擦可编程 序只读存储器(“EEPR0M”)等。在其他实施方式中,存储器控制器2 控制两种或多种存 储器类型且存储器控制器2 可包括不止一个控制器。通常,存储器控制器2 在可行情 况下控制尽可能多的SRAM232,并且通过DRAM 230补足SRAM 232。在一种实施方式中,所述对象索弓I存储在存储器230、232中并被周期性地卸载到 固态存储器IlOn或其他非易失性存储器的通道内。本领域技术人员会认识到存储器控制 器228、动态存储器阵列230和静态存储器阵列232的其他运用和配置。在一种实施方式中,固态存储设备控制器202包括DMA控制器226,该DMA控制器 226控制在下列设备之间的DMA操作存储设备/固态存储设备102、一个或多个外部存储 器控制器250、关联的外部存储器阵列252和CPU 2480应该注意到,外部存储器控制器250 和外部存储器阵列252之所以被称为外部是因为它们位于存储设备/固态存储设备102的 外部。此外,DMA控制器2 还可通过NIC 244和关联的RDMA控制器246控制请求设备的 RDMA操作。在一种实施方式中,固态存储设备控制器202包括连接到管理总线236的管理控 制器234。通常,管理控制器234管理存储设备/固态存储设备102的环境指标和状态。管 理控制器234可通过管理总线236监测设备温度、风扇转速、电力供应设置等。管理控制器 可支持电可擦可编程序只读存储器(“EEPR0M”)的读取和编程以存储FPGA码和控制器软 件。通常,管理总线236连接到存储设备/固态存储设备102内的不同组件。管理控制器234可通过局部总线206进行警报、中断等的通信或可包括单独的与系统总线240或其他总 线的连接。在一种实施方式中,管理总线236为内部集成电路(“I2C”)总线。本领域技术 人员会认识到通过管理总线236连接到存储设备/固态存储设备102的组件的管理控制器 234的其他相关的功能和运用。在一种实施方式中,固态存储设备控制器202包括杂项逻辑块M2,该杂项逻辑块 242可被定制为专用。通常,当使用FPGA或其他可配置控制器配置固态设备控制器202或 主控制器224时,可基于特定应用、用户需求、存储需求等而包括定制逻辑块。数据管道图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、对齐模块3 和 输出缓冲器330。在另一种实施方式中,读取数据管道108可包括媒体解密模块332、垃圾 收集器旁路316的一部分、解密模块334、解压缩模块336和读取程序模块338。固态存储 控制器104还可包括控制和状态寄存器340和控制队列342、内存库交错控制器344、同步 缓冲器;346、存储总线控制器348及多路转换器(“MUX”) 350。固态控制器104的组件和关 联的写入数据管道106和读取数据管道108描述如下。在其他实施方式中,可采用同步固 态存储器110并且可不使用同步缓冲器308、328。写入数据管道写入数据管道106包括封包器302,该封包器直接地或间接地通过另一写入数据 管道106的级接收将要被写入固态存储器的数据或元数据段,并创建一个或多个大小适于 固态存储器110的包。所述数据或元数据段通常是对象的一部分,但也可包括整个对象。在 另一种实施方式中,所述数据段是数据块的一部分,但也可包括整个数据块。通常,对象接 收自计算机112、客户端114或其他计算机或设备并被以流向固态存储设备102或计算机 112的数据段的形式传送给固态存储设备102。数据段也可被称为另一名称,如数据包裹, 本文所提及的数据段包括对象或数据块的全部或一部分。每个对象被存为一个或多个包。每个对象可具有一个或多个容器包。每个包包含 包头。所述包头可包括包头类型字段。类型字段可包括数据、对象属性、元数据、数据段定 界符(多包)、对象结构、对象连接及类似物。所述包头还可包括关于包的大小的信息,如包 内的数据的字节数。所述包的长度可由包类型确定。包头可以包括确定包与对象关系的信 息。一个实例可能是利用数据包包头的偏移值来确定对象内数据段的位置。本领域技术人 员会认识到其他包含在由封包器302添加到数据上的包头内的信息和其他添加到数据包 的信息。每个包包括包头,还可能包括来自所述数据或元数据段的数据。每个包的包头包 括用于将包与包所属对象联系起来的相关信息。例如,所述包头可包括对象标识符和偏移值,该偏移值表明了形成数据包的数据段、对象或数据块。所述包头还可包括存储总线控制 器348用以存储包的逻辑地址。所述包头还可包括关于包的大小的信息,如包内字节数。 所述包头还可包括序列号,当重建数据段或对象时,该序列号识别数据段相对于对象内的 其他包所属的位置。所述包头可包括包头类型字段。类型字段可包括数据、对象属性、元数 据、数据段定界符(多包)、对象结构、对象连接及类似物。本领域技术人员会认识到其他包 含在由封包器302加到数据或元数据上的包头内的信息和其他添加到数据包的信息。写入数据管道106包括ECC发生器304,该ECC发生器为一个或多个接收自封包 器302的包生成一个或多个纠错码(“ECC”)。ECC发生器304通常采用纠错算法生成ECC, 该ECC与包一起存储。与包一起存储的ECC通常用于检测和纠正由于传送和存储而弓I入数 据中的错误。在一种实施方式中,包作为长度为N的未编码块流入ECC发生器304。计算 并添加长度为S的并发位,并作为长度为N+S的编码块输出。长度为N的数据包结合并发 位S形成了 ECC组块或ECC块。N和S的值依赖于算法的特点,该算法被选择用于实现特定 的性能、效率和鲁棒性指标。在优选实施方式中,在ECC组块和包之间并没有固定关系;包 可包括不止一个ECC组块;ECC组块可包括不止一个包;且第一包可在ECC组块内的任何位 置终止而第二包可始于相同ECC组块内的第一包终止之后的位置。在优选实施方式中,ECC 算法不能被动态修改。在优选实施方式中,与数据包一起存储的ECC足够稳定以在两个以 上的位内纠正错误。有利地是,采用允许不止一位的修正或甚至是两位修正的稳健ECC算法允许延长 固态存储器110的使用寿命。例如,如果固态存储器110内使用闪存作为存储媒体,闪存在 每个擦除周期内可被写入大约100000次不出现错误。这种使用期限可通过稳健ECC算法 延长。固态存储设备102载有ECC发生器304和相应的ECC纠错模块322,固态存储设备 102可在其内部纠正错误并具有比采用不甚稳健的ECC算法(如单位错误修正)更长的使 用寿命。然而,在其他实施方式中,ECC发生器304可采用不甚稳健的算法并可修正单位或 双位错误。在另一种实施方式中,固态存储设备110可包括不甚可靠的存储器以增加容量, 所述不甚可靠的存储器例如多级单元(“MLC”)闪存,所述不甚可靠的存储器在没有稳健 ECC算法的情况下可能不是充分可靠的。在一种实施方式中,写入数据管道包括输入缓冲器306,该输入缓冲器接收将要被 写入固态存储器110的数据段并存储输入的数据段直到写入数据管道106的下一级,例如 封包器302(或其他更复杂写入数据管道106的其他级)准备处理下一个数据段。通过使 用适当容量的数据缓冲器,输入缓冲器306通常允许写入数据管道106接收和处理数据段 之间存在速率差异。输入缓冲器306还允许数据总线204将数据传送给写入数据管道106 的速率大于写入数据管道106能支持的速率,从而提高数据总线204运行的效率。通常,当 写入数据管道106不包括输入缓冲器306时,缓冲功能在别处(如固态存储设备102)实 现,但所述别处位于写入数据管道106外、位于计算机内,例如当使用远程直接存储器读取 (“RMDA”)时,如在网络接口卡(“NIC”)内或其他设备上。在另一种实施方式中,写入数据管道106还包括写入同步缓冲器308,该写入同步 缓冲器308在将包写入固态存储器110之前缓冲接收自ECC发生器304的包。写入同步缓 冲器308位于本地时钟域和固态存储时钟域之间的边界上,并且提供缓冲以解决时钟域差 异。在其他实施方式中,可采用同步固态存储器110,并可移除同步缓冲器3083观。
在一种实施方式中,写入数据管道106还包括媒体加密模块318,该媒体加密模块 318直接地或间接地从封包器302接收一个或多个包,并在将包发送给ECC发生器304之前 利用对固态存储设备102唯一的加密密钥加密所述一个或多个包。通常,整个包(包括包 头)都被加密。在另一种实施方式中,并不加密包头。在本文中,加密密钥被理解为意味着 在集成固态存储器110的实施方式外管理的秘密加密密钥,这种实施方式需要加密保护。 媒体加密模块318和相应的媒体解密模块332为存储在固态存储器110中的数据提供安全 等级。例如,当数据利用媒体加密模块318加密时,如果固态存储器110连接到不同的固态 存储控制器104、固态存储设备102或计算机112,通常,在不使用在将数据写入固态存储器 110期间使用的相同加密密钥的情况下,不经过合理的努力,则不能读取固态存储器110的 内容。在典型的实施方式中,固态存储设备102不将所述加密密钥存储在非易失性存储 器中并且不允许从外部访问所述加密密钥。在初始化期间为固态存储控制器104提供加 密密钥。固态存储设备102可使用并存储非秘密性加密临时值,该非秘密性加密临时值与 加密密钥结合使用。不同的临时值可用于存储每个包。为了加强加密算法所提供的保护, 可利用唯一临时值在多个包之间分割数据段。所述加密密钥可接收自客户端114、计算机 112、密钥管理器或其他管理固态存储控制器104使用的加密密钥的设备。在另一种实施方 式中,固态存储器110可具有两个或多个分区,并且固态存储控制器104显得就像有两个或 多个固态存储控制器104,每一个固态存储控制器104在固态存储器110内的单个分区上运 行。在这种实施方式中,唯一的媒体加密密钥可与每个分区一起使用。在另一种实施方式中,写入数据管道106还包括加密模块314,该加密模块314在 将数据段发送给封包器302之前直接地或间接地加密接收自输入缓冲器306的数据或元 数据段,利用与数据段一同接收的加密密钥来加密数据段。加密模块314与媒体加密模块 318的区别在于加密模块318用以加密数据的加密密钥对存储在固态存储设备102内的 所有数据来说不是共同的,并在对象基础上可能不同,并且加密密钥可不与数据段一起接 收(如下所述)。例如,用于将要被加密模块318加密的数据段的加密密钥可与数据段一起 被接收,或可作为命令的一部分接收以写入数据段所属的对象。固态存储设备102可为每 个与加密密钥结合使用的对象包使用并存储非秘密性加密临时值。不同的临时值可用于存 储每个包。为了加强加密算法所提供的保护,可利用唯一临时值在多个包之间分割数据段。 在一种实施方式中,媒体加密模块318使用的临时值与加密模块314使用的临时值相同。加密密钥可接收自客户端114、计算机112、密钥管理器或其他保存用于加密数据 段的加密密钥的设备。在一种实施方式中,加密密钥被从固态存储设备102、计算机112、客 户端114或其他外部代理中的一个传送到固态存储控制器104,所述外部代理能够执行工 业标准方法以安全地传送并保护私有密钥和公共密钥。在一种实施方式中,加密模块318利用与第一包一起接收的第一加密密钥加密第 一包,并利用与第二包一起接收的第二加密密钥加密第二包。在另一种实施方式中,加密模 块318利用与第一包一起接收的第一加密密钥加密第一包,而将第二数据包传递给下一级 而不加密。有利地是,包括在固态存储设备102的写入数据管道106内的加密模块318允 许对象接对象或段接段的数据加密,而不需要单独的文件系统或其他外部系统来追踪不同 的用于存储相应对象或数据段的加密密钥。每个请求设备155或相关密钥管理器独立地管理加密密钥,该加密密钥仅用于加密请求设备155发送的对象或数据段。在另一种实施方式中,写入数据管道106包括压缩模块312,该压缩模块312在将 数据段发送给封包器302之前为元数据段压缩数据。压缩模块312通常利用本领域技术人 员熟知的压缩例程来压缩数据或元数据段以减少段的的存储大小。例如,如果数据段包括 一串512个0位,压缩模块312可用表明512个0位的编码或令牌来替换这512个0位,其 中,所述编码被压缩地比512个0位的空间更多。在一种实施方式中,压缩模块312利用第一压缩例程压缩第一段,而输送第二段 且未经压缩。在另一种实施方式中,压缩模块312利用第一压缩例程压缩第一段并利用第 二压缩例程压缩第二段。在固态存储设备102内具有这种灵活性是有利的,以便客户端114 或其他将数据写入固态存储设备102内的设备每一个都可指定压缩程序,或以便一个设备 指定压缩程序而另一个设备指定无压缩。还可根据每个对象类型或对象类基础的默认设置 来选择压缩例程。例如,特定对象的第一对象可以能够废除默认压缩例程设置,相同对象类 和对象类型的第二对象可采用默认压缩例程,而相同对象类和对象类型的第三对象可不压 缩。在一种实施方式中,写入数据管道106包括垃圾收集器旁路316,该垃圾收集器旁 路316接收来自读取数据管道的108(在垃圾收集系统中作为数据旁路的一部分)的数据 段。垃圾收集系统通常标记不再有效的包,不再有效的原因通常是由于包被标记为删除或 包已被修改且修改过的数据存储在不同的位置。在某一时刻,垃圾收集系统确定存储器的 某个区域(例如逻辑擦除块)可被恢复。之所以确定某个区域可被恢复可能是由于缺乏 可用的存储空间、标记为无效的的数据百分比达到阈值、有效数据的合并、存储器的该区域 的错误检出率达到阈值或基于数据分布提高性能等。垃圾收集算法可考虑大量的因素以确 定何时存储器的区域将要被恢复。一旦存储器的区域被标记为恢复,该区域内的有效包通常必须被重新存放。垃圾 收集器旁路316允许将包读入读取数据管道108,并允许然后将包直接传送给写入数据管 道106而不会将包路由出固态存储控制器104。在一种实施方式中,从正被恢复的逻辑擦除 块恢复的有效包与来自客户端116的输入包混合。在另一种实施方式中,从正被恢复的逻 辑擦除块恢复的有效包存储在一起,而不散布输入的数据包。在优选实施方式中,垃圾收集 器旁路316是运行在固态存储设备102内的自主垃圾收集系统的一部分。这允许固态存储 设备102管理数据,从而数据系统地传播到整个固态存储器110以提升性能、数据可靠性并 避免过度使用和不充分使用固态存储器110的任何一个位置或区域,并且延长了固态存储 器110的使用寿命。垃圾收集器旁路316协调将数据段插入写入数据管道106,数据导管106具有其他 由客户端116或其他设备写入的数据段。在描述的实施方式中,垃圾收集器旁路316位于 写入数据管道106内的封包器302之前、读取数据管道108内的解包器314之后,但也可位 于写入和读取数据管道106、108内的其他位置。可在清洗写入管道106期间使用垃圾收集 器旁路316,以填充逻辑页的剩余部分,从而提升固态存储器110内的存储效率并因此降低 垃圾收集的频率。在一种实施方式中,写入数据管道106包括写入缓冲器320,该写入缓冲器320为 了高效的写操作而缓冲数据。通常,写入缓冲器320包括用于包的足够容量,以填充固态存储器110内的至少一个逻辑页。这允许写操作将数据的整个页没有中断地发送给固态存储 器110。通过将写入数据管道106的写入缓冲器320和读取数据管道108内的缓冲器的容 量选为与固态存储器110内存储写入缓冲器的容量同样大小的容量或比固态存储器110内 存储写入缓冲器的容量大,写入和读取数据的效率更高,因为单个写入命令可被设计为将 数据的整个逻辑页发送给固态存储器110,而不是多条命令。当填充写入缓冲器320时,固态存储器110可用于其他读操作。这是有利的,原因 是当将数据写入存储写入缓冲器时和注入存储写入缓冲器的数据失速时,具有更小的写 入缓冲器的或不具有写入缓冲器的其他固态设备可绑定固态存储器。读操作会被拦截直到 整个存储写入缓冲器被填充或被编程。用于不具有写入缓冲器或小写入缓冲器的系统的另 一种方法是清洗未满的存储写入缓冲器以使得能进行读取。同样地,由于需要多个写入/ 编程周期来填充页,因此这种方法的效率低。对于描述的具有容量比逻辑页容量大的写入缓冲器320的实施方式,单个的写入 命令(包括大量子命令)的后续命令可以是单个程序命令,以将来自每个固态存储元件 216、218、220中的存储写入缓冲器的数据页传递给每个固态存储元件216、218、220中的指 定页。这种技术带来的好处是减少了部分页编程,众所周知,这降低了数据的可靠性和稳 定性并在当缓冲器填充时,为读命令和其他命令释放了目标内存库。在一种实施方式中,写入缓冲器320为交替缓冲器(ping-pong buffer),其中,所 述交替缓冲器的一侧被填充,然后当所述交替缓冲器的另一侧被填充时,所述交替缓冲器 的一侧被指定在适当的时间传送数据。在另一种实施方式中,写入缓冲器320包括先进先 出(“FIFO”)寄存器,该FIFO寄存器的容量比数据段逻辑页的容量大。本领域技术人员 会认识到允许在将数据写入固态存储器110之前存储数据逻辑页的其他写入缓冲器320配 置。在另一种实施方式中,写入缓冲器320的容量比逻辑页小,从而少于一页的信息 可被写入固态存储器110内的存储写入缓冲器。在这种实施方式中,为了防止写入数据管 道106的失速阻止读操作,采用需要从一个位置移动到另一个位置的垃圾收集系统将数据 排队,这个过程是垃圾收集进程的一部分。在写入数据管道106中的数据失速的情况下,可 通过垃圾收集器旁路316将所述数据供应给写入缓冲器320并然后将所述数据供应给固态 存储器110中的存储写入缓冲器,从而在编程所述数据之前填充逻辑页的页面。这样,写入 数据管道106中的数据失速不会使读取自固态存储设备106的数据失速。在另一种实施方式中,写入数据管道106包括写入程序模块310,该写入程序模块 310具有写入数据管道106内的一个或多个用户可定义的功能。写入程序模块310允许用 户自定义写入数据管道106。用户可基于特定数据请求或应用自定义写入数据管道106。当 固态存储控制器104为FPGA时,用户可相对轻松地编程具有自定义命令和功能的写入数据 管道106。用户还可利用写入程序模块310以使ASIC包括自定义功能,然而自定义ASIC可 能比使用FPGA时更困难。写入程序模块310可包括缓冲器和旁路机制,以允许第一数据段 在写入程序模块310中执行,而第二数据段通过写入数据管道106可继续传送。在另一种 实施方式中,写入程序模块310可包括能通过软件编程的处理器内核。应注意,写入程序模块310被示为位于输入缓冲器306和压缩模块312之间,然而 写入程序模块310可位于写入数据管道106内的任何位置,并且可分布在不同的级302-320之间。此外,在不同的、已编程的且独立运行的级302-320之间可分布有多个写入程序模块 310。此外,级302-320的顺序可以改变。本领域技术人员会认识到基于特定用户需求的级 302-320的顺序的可行改变。读取数据管道读取数据管道108包括ECC纠错模块322,该ECC纠错模块322通过使用与请求包 中的每个ECC组块一起存储的ECC来确定接收自固态存储器110的请求包的ECC组块中是 否存在错误。然后,如果存在任何错误并且所述错误可使用ECC修正,则ECC纠错模块322 修正请求包中的任何错误。例如,如果ECC能够探测6位错误但只能修正3位错误,那么ECC 纠错模块322修正具有3位错误的请求包ECC组块。ECC纠错模块322通过把出错的位改 变为正确的1或0状态来修正出错的位,从而请求数据包与其被写入固态存储器110并且 为包生成ECC时一致。如果ECC纠错模块322确定请求包包含了比ECC能修正的位数多的出错位,则ECC 纠错模块322不能修正请求包中毁坏的ECC组块的错误并发送中断。在一种实施方式中, ECC纠错模块322发送中断,该中断带有指示请求包出错的消息。所述消息可包括指出ECC 纠错模块322不能修正错误或暗示ECC纠错模块322没有能力修正错误的信息。在另一种 实施方式中,ECC纠错模块322与所述中断和/或消息一起发送请求包中毁坏的ECC组块。在优选的实施方式中,请求包中不能被ECC纠错模块322修正的毁坏的ECC组块 或毁坏的ECC组块的一部分由主控制器2M读取、修正和返回给ECC纠错模块322,以被读 取数据管道108进一步处理。在一种实施方式中,请求包中毁坏的ECC组块或毁坏的ECC 组块的一部分被发送给请求数据的设备。请求设备155可修正所述ECC组块或用另一拷贝 替换数据(如备份或镜像拷贝),然后可使用请求数据包的替换的数据或将所述替换的数 据返回给读取数据管道108。请求设备155可使用出错请求包中的包头信息以识别替换毁 坏请求包或替换包所属的对象所需的数据。在另一种优选实施方式中,固态存储控制器104 采用一些类型的RAID存储数据并能够恢复毁坏的数据。在另一种实施方式中,ECC纠错模 块322发送中断和/或消息,并且接收设备停止与请求数据包关联的读操作。本领域技术 人员会认识到ECC纠错模块322确定请求包的一个或多个ECC组块为毁坏的且ECC纠错模 块322不能修正错误后采取的其他选择和操作。读取数据管道108包括解包器324,该解包器3 直接地或间接地接收来自ECC修 正模块322的请求包的ECC组块,并检查和删除一个或多个包头。解包器3 可通过检查 包头内的包标识符、数据长度、数据位置等验证包头。在一种实施方式中,所述包头包括散 列码,该散列码可用于验证传递给读取数据管道108的包为请求包。解包器3M还从封包 器302所添加的请求包中删除包头。解包器3M可被指定为不对某些包起作用而将这些包 未经修改地向前传送。一个实例可以是容器标签,当对象索引重建模块272需要包头信息 时,该容器标签在重建进程期间被请求。另外的实例包括传送不同类型的包,这些包预定在 固态存储设备102内使用。在另一种实施方式中,解包器3M操作可以依赖于包的类型。读取数据管道3 包括对齐模块326,该对齐模块3 接收来自解包器324的数 据并删除多余的数据。在一种实施方式中,发送给固态存储器110的读命令恢复数据包。 请求数据的设备可不需要恢复的数据包内的所有数据,并且对齐模块3 删除不需要的数 据。如果恢复页内的所有数据都是请求的数据,对齐模块3 不删除任何数据。
对齐模块3 在将数据段传输到下一级之前以与请求数据段的设备兼容的形式 按对象的数据段重新格式化数据。通常,由于数据由读取数据管道108处理,数据段或包的 大小在不同级改变。对齐模块3 使用接收到的数据以将数据格式化为适于发送给请求设 备1 的数据段,该数据段还适于连接在一起以形成响应。例如,来自第一数据包的一部分 的数据可与来自第二数据包的一部分的数据结合。如果数据段比请求设备请求的数据大, 对齐模块3 可丢弃不需要的数据。在一种实施方式中,读取数据管道108包括读取同步缓冲器328,该读取同步缓冲 器3 在读取数据管道108处理之前缓冲一个或多个读取自固态存储器110的请求包。读 取同步缓冲器3 位于固态存储时钟域和本地总线时钟域之间的边界上并提供缓冲以解 决时钟域差异。在另一种实施方式中,读取数据管道108包括输出缓冲器330,该输出缓冲器330 接收来自对齐模块3 的请求包并在数据包传送到所述请求设备前存储该包。输出缓冲器 330解决当从读取数据管道108级接收数据段时和当将数据段传送给固态存储控制器104 的其他部分或传送给请求设备时之间的差异。输出缓冲器330还允许数据总线204以比读 取数据管道108能够支持的速率高的速率接收来自读取数据管道108的数据,以提升数据 总线204运行的效率。在一种实施方式中,读取数据管道108包括媒体解密模块332,该媒体解密模块 332接收一个或多个来自ECC纠错模块322的加密过的请求包并在将一个或多个所述请求 包发送给解包器3M之前利用对于固态存储设备102唯一的加密密钥解密一个或多个所述 请求包。通常,媒体解密模块332用以解密数据的加密密钥与媒体加密模块318使用的加 密密钥一致。在另一种实施方式中,固态存储器110可具有两个或多个分区且固态存储控 制器104表现得好像有两个或多个固态存储控制器104(每个都在固态存储器110内的单 独分区内运行)一样。在这种实施方式中,可对每个分区使用唯一的媒体加密密钥。在另一种实施方式中,读取数据管道108包括解密模块334,该解密模块334在将 数据段发送给输出缓冲器330之前解密由解包器3M格式化的所述数据段。采用与读请求 一起接收的加密密钥解密所述数据段,所述读请求初始化由读取同步缓冲器3 接收的请 求包的恢复。解密模块334可利用与用于第一包的读请求一起接收的加密密钥解密第一 包,然后可利用不同的加密密钥解密第二包或可将第二包未经解密地传送给读取数据管道 108的下一级。通常,解密模块334使用与媒体解密模块332用以解密请求数据包的加密密 钥不同的加密密钥解密数据段。当包与非秘密性加密临时值一起存储时,该临时值与加密 密钥一起使用以解密数据包。加密密钥可接收自客户端114、计算机112、密钥管理器或管 理固态存储控制器104使用的加密密钥的其他设备。在另一种实施方式中,读取数据管道108包括解压缩模块336,该解压缩模块336 解压缩由解包器3M格式化的数据段。在优选实施方式中,解压缩模块336使用存储在包 头和容器标签中的一个或两个中的压缩信息以选择补充例程,压缩模块312使用该补充程 序来压缩数据。在另一种实施方式中,解压缩模块336所使用的解压缩例程由请求解压缩 数据段的设备确定。在另一种实施方式中,解压缩模块336根据每个对象类型或对象类基 础的默认设置选择解压缩例程。第一对象的第一包可以能够废除默认解压缩例程设置,具 有相同的对象类和对象类型的第二对象的第二包可采用默认解压缩例程,而具有相同的对象类和对象类型的第三对象的第三包可不经过解压缩。在另一种实施方式中,读取数据管道108包括读取程序模块338,该读取程序模块 338包括一个或多个在读取数据管道108内的用户可定义功能。读取程序模块338具有与 写入程序模块310类似的特点并允许用户提供自定义功能给读取数据管道108。读取程序 模块338可位于图3中所示的位置,可位于读取数据管道108内的其他位置,或者可包括读 取数据管道108内多个位置的多个部分。此外,在读取数据管道108内的多个不同位置可 有多个独立运行的读取程序模块338。本领域技术人员会认识到读取数据管道108内的读 取程序模块338的其他形式。正如写入数据管道,读取数据管道108的级可重新排序,本领 域技术人员会认识到读取数据管道108内的级的其他排列顺序。固态存储控制器104包括控制和状态寄存器340和相应的控制队列342。控制和 状态寄存器340和控制队列342有助于控制并按顺序排列与在写入和读取数据管道106、 108内处理的数据相关联的命令和子命令。例如,封包器302中的数据段可具有一个或多个 在与ECC发生器关联的控制队列342内的相应控制命令或指令。当数据段被封包时,可在 封包器302内执行一些指令或命令中。当从数据段建立的、最新形成的数据包被传送给下 一级时,其他命令或指令可通过控制和状态寄存器340直接传送给下一个控制队列342。可同时将命令或指令加载到控制队列342上以将包转发给写入数据管道106,其 中由于每个管道级要执行各自的包,因此每个管道级读取合适的命令或指令。类似地,可同 时将命令或指令加载到控制队列342上以从读取数据管道108请求包,其中由于每个管道 级要执行各自的包,因此每个管道级读取合适的命令或指示。本领域技术人员会认识到控 制和状态寄存器340和控制队列;342的其他特征和功能。固态存储控制器104和/或固态存储设备102还可包括内存库交错控制器344、同 步缓冲器;346、存储总线控制器348及多路转换器(“MUX”)350。存储元件配置图4A是示出了根据本发明的N+P个存储元件402的阵列400的一种实施方式
的示意性方框图。存储元件402的阵列400包括N个存储元件4(^a、402b...... 402η和
存储奇偶校验数据的P个存储元件402ρ,奇偶校验数据是从存储在N个存储元件40加、
402b...... 402η上的数据生成的。存储奇偶校验数据402ρ的存储元件402可以是专用的
奇偶校验存储元件402,其可仅存储奇偶校验数据。此外,如下所述,奇偶校验数据可以在存 储元件402之间轮换。尽管描述了单个奇偶校验存储元件402ρ,但本领域内普通技术人员 会认识到可以使用多个奇偶校验存储元件402ρ。附加奇偶校验数据可以以不同的方式存储 在附加的存储元件402(未示出)上,例如使用设计为在多个失效后允许数据恢复的复杂奇 偶校验方案;使用简单奇偶校验,在该简单奇偶校验中,两个或多个存储元件402具有相同 奇偶校验数据的拷贝。每个存储元件402可包括设备、芯片、芯片的一部分、芯片块和类似 物。此外,在一种实施方式中,每个存储元件402包括物理擦除块(PEB)404。例如,存 储元件140 包括PEB14(Ma。物理擦除块通常是位于芯片块、芯片或其他存储元件402上
的擦除块。每个PEB 404包括m个物理页406。例如,PEBl包括页0406a、页1410a.....页
m412a。每个物理页406a存储数据的一部分和与数据(D) 408 —起分散的纠错码(ECC)。另 外,奇偶校验存储元件402p上的物理页406p、410p......412p存储奇偶校验数据408p。
在一种实施方式中,PEB的群组形成逻辑擦除块(LEB)。LEB 414遍及包括奇偶校 验存储元件402p的N+P个存储元件400的阵列。此外,在一种实施方式中,逻辑页(LP) 416 遍及成一行的、包括奇偶校验存储元件402p上的物理页410p的多个物理页410。在另一种 实施方式中,逻辑页416遍及N个存储元件而不是奇偶校验存储元件402p,从而奇 偶校验数据在一个单独的步骤中存储在存储元件402p上,该单独的步骤不同于数据存储 在N个存储元件上的步骤。在一种实施方式中,ECC是与数据一起分散的块码。此外,数据和ECC可不与任何 特定的物理硬件边界对齐。因此,利用ECC的错误纠正不依赖于特定的硬件配置。因此,ECC 和对应的数据可形成ECC组块,并且ECC组块可被分割并存储在N个存储元件中的 一个或多个上。ECC组块418通常遍及逻辑页416的多个物理页406的至少一部分,其中,
生成自数据408a、408b...... 408m的数据和ECC散布在不包括奇偶校验存储元件402p上
的奇偶校验数据408p的N个存储元件上。包括奇偶校验数据402p的存储元件可 在包括存储元件402的阵列400的存储元件之间动态轮换。在优选实施方式中,LP416包 括多个ECC组块418。物理页406可包含ECC组块418的一个或多个数据字节。ECC组块 418可遍及物理页406中的多个行,物理页418可包括多个ECC组块418。图4B是示出了根据本发明的具有分散的奇偶校验的N+P个存储元件450阵列的 另一种实施方式的示意性方框图。在所描述的实施方式中,奇偶校验数据408p是分散的。 因此,存储奇偶校验数据408p的逻辑页454的存储元件402改变了。例如,LP 454在存储 元件3402c上包括用于特定数据列的奇偶校验数据408p,在存储元件2402b上包括用于另 一数据列的奇偶校验数据。在这种实施方式中,ECC组块456仍然独立于奇偶校验数据。在 另一种实施方式中,奇偶校验信息存储在用于LP454内的所有ECC组块456的相同存储元 件中,并且仅在LP妨4的边界上的改变。在另一种实施方式中,奇偶校验的位置存储在LEB 452内的相同存储元件402中,并仅在LEB 452的边界上改变。增强的数据完整性图5是示意性框图,示出了根据本发明的增强冗余存储系统中的数据完整性的装 置500的一种实施方式。装置500包括缩减装置116的一种实施方式,在一种实施方式中, 装置500包括接收模块502、数据读取模块504、重新生成模块506和ECC模块508,下文 将描述这些模块。Jonathan Thatcher等人于2009年5月18日提交的题为“Apparatus, System, and Method to Increase Data Integrity in a RedundantStorage System,,、φ 请号为—的美国专利申请中也描述了装置500,其通过援引并入本文。在一种实施方式中,装置500包括接收从逻辑页416中读取数据(请求的数据) 的读取请求的接收模块502。逻辑页416遍及Ν+Ρ个存储元件402的阵列400,并可包括一 个或多个ECC组块418。在一种实施方式中,接收模块502接收从多个逻辑页416中读取数 据的请求。N和P每个代表多个存储元件402。N个存储元件402的每一个存储ECC组块418的一部分,P个存储元件402存储 奇偶校验数据。如图4Α和4Β所示,存储奇偶校验数据408ρ的实际存储元件402可通过页 406,410,412,LEB 414或其他存储分区改变。在一个或多个ECC组块418中存储的数据可 包括请求的数据。此外,存储在P个存储元件402上的奇偶校验数据生成自存储在每个ECC 组块418上的数据。例如,如果来自ECC组块418的数据和ECC丢失或损坏,可利用余下的数据和ECC恢复并还原丢失或损坏的数据和ECC。奇偶校验数据可包括简单XOR奇偶校 验信息,或者可以更复杂并如现有技术已知的那样涉及存储奇偶校验数据的多个存储元件 402。在一种实施方式中,ECC组块418的存储在N个存储元件402中的每一个上的那部分 存储在每个存储元件402的物理页406的至少一部分上。在一种实施方式中,存储奇偶校验数据的P个的存储元件402包括数据镜像,该数 据镜像包括存储在N个存储元件402中的数据的拷贝,而不包括奇偶校验数据。因此,来自 具有镜像数据的P个的设备的数据可直接作为替代,而不是在为N个存储元件还原数据之 前利用奇偶校验计算处理。在另一种实施方式中,数据镜像包括数据的反相,从而逻辑“1” 在镜像中具有对应的逻辑“0”,逻辑“0”在镜像中具有逻辑“ 1”。在一种实施方式中,装置500包括数据读取模块504,数据读取模块504从N+P个 存储元件402的X个存储元件402中的每一个上的物理页406的至少一部分读取数据(读 取的数据),其中X等于N。X表示由数据读取模块504读取的多个存储元件402,并且其足 以恢复数据。因此,数据读取模块504可读取阵列400中的存储元件402的子集(X),与存 储元件402(N+P)总数相等的子集(X)减少了存储奇偶校验数据(P)的存储元件402的个 数。数据读取模块504响应于接收读取请求的接收模块502读取数据。在一种实施方 式中,数据读取模块504为每个读取请求读取X个存储元件402中的每一个上的物理页406 的至少一部分。由数据读取模块504读取的物理页406可包括由读取请求所请求的逻辑页 416的一部分。在一种实施方式中,数据读取模块504为每个读取从相同存储元件402读取数据。 由数据读取模块504读取的存储元件402可包括ECC组块418的某些部分或包括来自ECC 组块418和奇偶校验数据408p的数据的组合。通过从相同存储元件402读取,数据读取模 块504最大化了最初未被读取的存储元件402上的数据完整性。未作为读取请求的一部分 被读取的存储元件402中的数据包括可在随后被用于修正一个或多个错误的数据。在一种实施方式中,数据读取模块504从存储ECC组块418的至少一部分的N个存 储元件402读取数据并且不从存储奇偶校验数据的P个的存储元件402读取数据。因此, 与其他存储元件402相比,存储奇偶校验数据的存储元件402经历了较少的读取,奇偶校验 数据可具有较高的数据完整性。相对于非奇偶校验数据存储元件402来说,存储奇偶校验 数据的存储元件402可变得更加可靠,这是因为奇偶校验存储元件402平均故障时间变得 大于非奇偶校验存储元件402。因此,当奇偶校验数据被需要用于数据替换时,更高质量的 数据用作替代。在一种实施方式中,数据读取模块504确定读取哪些存储元件402。数据读取模 块504可确定是否从存储奇偶校验数据的存储元件402上的物理页406读取,是否从不包 括奇偶校验数据的物理页406完全读取,或者是否根据用户设定的方式从存储元件402读 取,下文将详细描述。通过在每次读取中不读取全部的存储元件402且仅读取那些获取所 请求的数据所需要的一定量的存储元件402,对阵列400的全部读取次数下降。因此,存储 元件402不会快速失效,而且存储元件402上的数据经受了较少的读取干扰,或者当相邻的 位被读取时,存储元件402上的数据中被激活的位也较少。在一种实施方式中,装置500包括重新生成丢失的数据的重新生成模块506。由于数据读取模块504仅从X个存储元件402的物理页406读取,被数据读取模块504读取的 存储元件402中的一个或多个可包括导致并非整个ECC组块418被读取的奇偶校验数据, 由此导致了“丢失的数据”。重新生成模块506使用由数据读取模块506读取的奇偶校验数 据和读取的数据中剩余的并非奇偶校验数据的部分来重新生成丢失的数据。重新生成模块506将丢失的数据替换进ECC组块418,并且与读取的数据的剩余 部分相结合的该丢失的数据现在包括ECC组块418。在数据读取模块504并不读取奇偶校 验数据的例程中,重新生成模块506不需要重新生成丢失的数据。举例来说,重新生成模块 506可响应于读取的数据的一部分(包括奇偶校验数据)或从来自读取奇偶校验数据的读 取数据模块504的信号重新生成丢失的数据。在一种实施方式中,装置500包括确定一个或多个ECC组块418是否包括错误的 ECC模块508。ECC模块508可使用每个ECC组块418中的ECC来确定ECC组块418中的 数据是否包括错误。ECC组块418可包括读取的数据和任何重新生成的丢失的数据。每个 ECC组块418中的ECC可被用于检测并修正通过传输和存储而引入ECC组块418中的数据 的错误。通常,ECC能够检测特定数量的错误并具其能修正的错误的量小于ECC所能检测 到的错误的量。例如,ECC能够检测六位中的错误,但仅能修正位错误中的三位。具有数据 组块的包括大量数据的存储系统通常使用具有多位ECC修正的高级ECC。具有高级、多位 ECC修正的ECC可检测16位中的错误,并且修改位错误中的8位。ECC模块508通过将错 误的位改变成正确的1或0状态而修正错误的位,从而ECC组块418与其被写入固态存储 器110中且ECC被生成以用于ECC组块418时一致。图6是示意性框图,示出了根据本发明的增强冗余存储系统中的数据完整性的装 置600的另一种实施方式。装置600包括具有接收模块502、数据读取模块504、重新生成 模块506和ECC模块508的轮流的坏块映射装置114,这些模块大体上类似于相对于图5的 装置500所描述的模块。在不同实施方式中,装置600也可包括ECC检查模块602、替换模 块604、设备错误确定模块606、周期性读取模块608、奇偶校验轮换模块610、读取轮换模块 612和ECC修正模块614,将在下文中描述这些模块。在一种实施方式中,装置600包括ECC检查模块602。如果ECC模块508确定ECC 组块418包括错误,则ECC检查模块602确定是否能够利用存储在ECC组块418中的ECC 修正错误。能够利用ECC修正的错误的数量由用于生成ECC的ECC算法的鲁棒性来确定。 如果ECC组块418中的错误多于能够用存储在ECC组块418中的特定ECC所修正的量,ECC 检查模块602确定错误不可修正。ECC组块418具有多于能够用与数据一起存储的ECC所 修正的错误,这种状况可以是存储元件402失效的指示。在一种实施方式中,装置600包括替换模块604。如果ECC检查模块602确定错误 不可利用与ECC组块418 —起存储的ECC修正,替换模块604从未被数据读取模块504读 取的存储元件402读取数据(替换数据)并且使用替换数据和所读取的数据来替换来自有 错误的存储元件402的数据,从而生成不包括错误或包括大量随后可用替换ECC组块418 中的ECC修正的错误的ECC组块418 (替换ECC组块418)。替换模块604读取先前未被数 据读取模块504读取的数据,这是因为ECC组块418中的错误不能用ECC组块418中的ECC 修正。在一种实施方式中,未被数据读取模块504读取的存储元件402是存储奇偶校验数据的存储元件402。替换模块604可读取存储奇偶校验数据的存储元件402以生成替换 数据。在另一种实施方式中,未被数据读取模块504读取的存储元件402是存储ECC组块 418的一部分而不存储奇偶校验数据的存储元件402。替换模块402可读取存储ECC组块 418的一部分的存储元件402以将ECC组块418的一部分用作替换数据,或使用替换数据和 由数据读取模块504读取的数据(包括奇偶校验数据)以替代有错误的存储元件502上的 数据。在一种实施方式中,装置600包括ECC修正模块614,ECC修正模块614使用ECC和 来自ECC组块418的数据修正数据中的错误。如果ECC检查模块602确定错误能够在ECC 组块418中修正,则ECC修正模块614可利用ECC组块418中的ECC修正这些错误。在另一种实施方式中,ECC检查模块602确定ECC组块418中的错误不可修正。 在确定具有错误的存储元件402存储奇偶校验数据的情况下,由数据读取模块504读取的 来自其他存储元件402的数据加上来自替换存储元件402的ECC组块数据构成了 ECC组块 418,而且随后ECC修正模块614使用ECC组块418并修正存储在替换ECC组块418中的数 据中的任何错误。在不存储奇偶校验数据的存储元件被识别为具有错误的情况下,替换模 块604使用替换数据和来自由数据读取模块504读取的数据中的奇偶校验数据以替代确定 为具有错误的存储元件上的数据,从而创建替换ECC组块418,在一种实施方式中,ECC检查 模块602能够确定具有可修正的错误或不具有错误。如果可修正的错误存在于替换ECC组 块的数据中,则ECC修正模块614使用来自替换ECC组块418的数据修正替换ECC组块418 中的数据中的错误。在一种实施方式中,装置600包括设备错误确定模块606,设备错误确定模块606 与ECC检查模块602和替换模块604配合工作以确定哪个存储元件402包括具有错误的数 据。错误可以是不可用ECC组块418中的ECC修正的错误。不可用ECC修正的错误可以是 故障存储元件402的信号,该信号可能需要故障存储元件402的引退。此外,如下文更详细 地描述的那样,由于ECC组块418遍及多个存储元件402,错误所源自的存储元件402不能 被ECC单独确定。设备错误确定模块606可包括下文更详细描述的检测装置118的一种实 施方式。在另一种实施方式中,ECC组块418内的ECC能够修正特定存储元件402中的错 误的大部分位。在这种实施方式中,这种专用的ECC码可直接识别需要作为替换的存储元 件402。在该实施方式中,设备错误确定模块606分析修正的数据的输出并根据ECC修正模 块614提供的信息确定哪个存储元件402失效。在一种实施方式中,装置600包括周期性读取模块608,周期性读取模块608周期 性地从未被数据读取模块504读取的一个或多个存储元件402读取数据。当存储元件402 未被数据读取模块504读取时,这些存储元件402中的潜在缺陷或故障的机率将未被发现 地大幅增加。潜在故障保持未被发现,直到缺陷的设备被需要时。通常,潜在故障在具有冗 余性和容许一定数量的故障的系统中尤其重要。潜在故障创建了一种情况,在这种情况下, 具有假象的明显冗余性,并且随之而来的故障可导致系统失效。相反的,如果故障已经被发 现,则故障可能已经在随后的额外故障发生之前通过修复或重新配置而避免。一般而言,这种潜在故障可用标准的、周期性的读取检测。然而,当数据读取模块 504并不是定期地从某些存储元件402读取时,周期性读取模块608可周期性地从这些存储元件402读取数据。周期性读取模块608可根据预定的或用户配置的方式或根据阈值从较少使用的 存储元件402读取。例如,周期性读取模块608可从存储元件402被读取之时起跟踪时间 量或跟踪存储替换阵列400全部读取次数(不包括存储元件402的读取)。如果时间量或 全部读取次数达到阈值,则周期性读取模块608可读取存储元件402。本领域技术人员会认 识到确定周期性读取模块608何时从较少使用的存储元件402读取的其他方法。在一种实施方式中,装置600包括奇偶校验轮换模块610,奇偶校验轮换模块610 改变逻辑页416的哪些存储元件402为每个存储元件402的存储子集存储奇偶校验数据。 每个存储子集包括存储元件402的至少一部分,逻辑存储子集包括阵列400的每个存储元 件402上的存储子集。存储子集可包括存储元件的物理或逻辑部分,存储元件包括物理页 406的一部分、物理页406、物理擦除块404的一部分、物理擦除块404、设备、芯片或一个或 多个芯片块。通过轮换奇偶校验数据,奇偶校验轮换模块610促进了损耗均衡,这是由于一个 专用的存储元件402不会持续地用于读取和写入奇偶校验数据。因此,奇偶校验数据可在 数据存储的若干级别上轮换。例如,逻辑页416可包括一行物理页406 (例如,406a-m,ρ), 其中奇偶校验数据408ρ存储在第一存储元件40 的物理页406a上。下逻辑页416的下 一行物理页410a-m,p中的奇偶校验数据408p可存储在第二存储元件402b的物理页410b 上。这种方式可为每个逻辑页416继续。在不同的实施方式中,奇偶校验轮换模块610可 按页 406,410,412,按 PEB404 等轮换。在一种实施方式中,对于逻辑存储子集来说,奇偶校验轮换模块610在存储空间 恢复操作之后改变存储奇偶校验数据的存储元件402。存储空间恢复操作可包括将有效数 据复制出逻辑存储子集和擦除逻辑存储子集以为存储新写入的数据准备逻辑存储子集。存 储空间恢复操作的一个实例是垃圾收集。在这种实施方式中,奇偶校验轮换模块610可指 令每个ECC组块418的奇偶校验数据408p存储在LEB 414的一个PEB (如,PEB 1404a)中, 然后在垃圾收集进程之后轮换到相同LEB 414的不同PEB (如,PEBM04b),在垃圾收集进程 中,从LEB 414复制有效数据,LEB414然后重新可用于数据存储。在一种实施方式中,数据读取模块504在每次读取中从相同存储元件402读取数 据,并且奇偶校验轮换模块610改变存储奇偶校验数据的存储元件402。因此,当奇偶校验 轮换模块410指令奇偶校验数据408p存储在每次由数据读取模块504读取的存储元件402 上时,数据读取模块504将读取奇偶校验数据408p。在一种实施方式中,数据读取模块504包括读取轮换模块612,读取轮换模块612 轮换N+P个存储元件402中数据读取模块504读取数据的X个存储元件402。在一种实施 方式中,对于特定的读取而言,N个存储元件402存储数据,单独的P个存储元件402存储 奇偶校验数据,数据读取模块504在N个存储ECC组块的存储元件402之间读取N-I个存 储元件402,并且读取存储奇偶校验数据408p的存储元件402。对另一读取而言,数据读取 模块504可读取存储ECC组块418的N个存储元件40加-11。在不同的读取操作中,读取轮 换模块612指令数据读取模块504读取相同逻辑页416的不同存储元件402。读取轮换模 块612在N+P个存储元件402之间轮换读取的X个存储元件402,以进行损耗均衡和降低未 检测到的潜在故障。本领域技术人员会认识到确定读取轮换模块612如何轮换数据读取模块504读取数据的存储元件402的其他方法。在一种实施方式中,奇偶校验轮换模块610为每个存储元件402的存储子集改变 逻辑页416的存储奇偶校验数据408p的存储元件402,并且读取轮换模块612轮换X个存 储元件402中的数据读取模块504读取数据的存储元件402。在某些实施方式中,读取轮换 模块612轮换存储元件402,从而数据读取模块504从存储ECC组块418的至少一部分的N 个存储元件402读取数据,并不从存储奇偶校验数据的P个存储元件402读取数据,而不考 虑存储奇偶校验数据的存储元件402轮换到了哪里。因此,尽管奇偶校验数据在轮换,但奇 偶校验数据仍然未被读取。随后,周期性读取模块608可周期性地读取存储奇偶校验数据 的存储元件402。本领域技术人员会认识到奇偶校验轮换模块610和读取轮换模块612可 交互以轮换被读取的存储元件402的不同方法。图7是示意性流程图,示出了根据本发明的增强冗余存储系统中的数据完整性的 方法700的一种实施方式。方法700开始,在步骤702,接收模块502接收从逻辑页416读 取请求的数据的读取请求,逻辑页416遍及N+P个存储元件的阵列400。存储元件的阵列 400包括存储ECC组块418的一部分的N个存储元件402和存储奇偶校验数据的P个的存 储元件402。响应于步骤702中接收模块502接收读取请求,在步骤702中,数据读取模块504 从N+P个存储元件402的X个存储元件402中的每一个上的物理页406的至少一部分读取 数据,其中X等于N。因此,数据读取模块504读取的存储元件402的数量小于存储元件402 的总数。响应于包括奇偶校验数据的读取的数据的一部分,在步骤706中,如果需要,重新 生成模块506使用由数据读取模块504读取的奇偶校验数据和读取的数据中不是奇偶校验 数据的的剩余部分生成丢失的数据。由重新生成模块506生成的数据用重新生成的数据替 换丢失的数据,从而为ECC模块508提供替换ECC组块418。ECC模块508确定ECC组块 418(包括读取的数据和任何重新生成的丢失数据)是否具有错误,方法700结束。图8是示意性流程图,示出了根据本发明的增强冗余存储系统中的数据完整性的 方法800的另一种实施方式。方法800开始,在步骤802,接收模块502接收从逻辑页416 读取请求的数据的读取请求,逻辑页416遍及N+P个存储元件的阵列400。存储元件的阵列 400包括存储ECC组块418的一部分的N个存储元件402和存储奇偶校验数据的P个的存 储元件402。此外,奇偶校验轮换模块610可(为阵列400上的每个存储元件402的存储子 集)改变逻辑页416的存储奇偶校验数据的存储元件402.响应于步骤802中接收模块502接收读取请求,在步骤804中,数据读取模块504 确定所要读取的X个存储元件402。数据读取模块504可确定为仅读取不存储奇偶校验数 据的存储元件402。数据读取模块504(通过读取轮换模块61 可涉及预定的读取方案或 算法,从而确定被读取数据的X个存储元件402。在步骤806,数据读取模块504从N+P个存储元件402的X个存储元件402中的 每一个上的物理页406的至少一部分读取数据,其中X等于N。在步骤808,重新生成模块 506确定读取的数据的一部分是否包括奇偶校验数据。如果在步骤808中,重新生成模块 506确定读取的数据的一部分包括奇偶校验数据,则在步骤810中,重新生成模块506重新 生成丢失的数据以补偿ECC组块418未被读取的部分。如果在步骤808中,重新生成模块506确定读取的数据的一部分不包括奇偶校验数据,重新生成模块506不重新生成数据。在步骤812中,ECC模块508确定ECC组块418是否包括任何错误。ECC组块418 包括读取的数据和任何重新生成的丢失数据。如果在步骤812中,ECC模块508确定ECC 组块418不包括任何错误,则方法800结束。可选地,如果在步骤812中,ECC模块580确 定ECC组块418包括错误,则在步骤814中,ECC检查模块602确定错误是否可利用存储在 ECC组块418中的ECC修正。如果在步骤814中,ECC检查模块602确定错误可利用ECC修 正,则在步骤816中,ECC模块580利用ECC修改错误,方法800结束。可选地,如果在步骤814中,ECC检查模块602确定错误不可利用ECC修正,则在步 骤818中,设备错误确定模块606从未被数据读取模块504读取的一个或多个存储元件402 读取数据。在步骤820中,设备错误确定模块402确定哪个存储元件402导致了错误,从而 ECC组块418具有太多可被修正的错误,这将在下文结合检测装置118做详细说明。在步 骤822中,替换模块604用替换数据替换导致ECC组块418中的数据不可被修正的存储元 件402中的数据,方法800返回,ECC模块508在步骤812中确定替换ECC组块418是否具 有错误。在一种实施方式中(未示出),设备错误确定模块606不能确定哪些存储元件402 具有错误并发送错误消息。有利地是,图7和图8中的方法700和800允许仅从需要读取ECC组块418的多 个存储元件402中读取数据,从而P个存储元件402通常未被读取,除非需要其在失效、故 障等情况下恢复数据。方法700、800延长了固态存储设备102的寿命,并可以通过减少影 响读取的数据附近的数据的读取干扰的次数提高存储在设备102中的数据的质量。检测失效的数据存储器图9A是示意性框图,示出了根据本发明的检测和替代失效数据存储器的装置900 的一种实施方式。装置900包括检测装置118的一种实施方式。该装置可检测数据存储器 (包括固态存储器110或任何类型的存储芯片,易失性的或非易失性的)中的失败。固态 驱动制造商最近发现固态存储器110(例如NAND闪存)具有高故障率。此外,如上所述,当 ECC组块418遍及多个存储元件402时,错误所源自的存储元件402通常不能被ECC单独确 定。装置900位于存储设备902的阵列中故障的存储芯片内或位于芯片(存储设备 902)的一部分内,并随后用来自另一存储设备904或存储设备904的一部分的数据作替换。 该构造包括存储设备902的阵列,并且有一个或多个额外的设备904。在一种实施方式中, 存储设备902、904是固态存储器,并且存储设备902、904可被称为存储元件402。下文中, “存储设备”和“存储元件”可交换使用,并且除非另有说明,存储设备902、904和存储元件 402都可以是固态存储器或一些其他类型的易失性或非易失性存储器。每个存储设备902 可包括上述的存储元件402。此外,存储设备的阵列可包括上述的N+P个存储元件 的阵列400。具体的,存储元件的阵列400可包括N个存储元件402 (每个存储ECC组块418 的一部分)和存储奇偶校验数据的P个存储元件402。如上所述,ECC组块418存储数据和 根据数据生成的ECC。ECC检查/修正电路910使用存储在ECC组块418中的ECC确定数 据中是否存在错误。ECC检查/修正电路可包括上述的设ECC检查模块602和/或ECC修 正模块614的一种实施方式。存储设备902、904可在结构、尺寸等上一致。通常存储设备902、904是存储芯片,但也可以是芯片的群组、DIMM等。存储设备902可包括N个上述的存储元件402。奇偶校 验信息存储在额外存储设备904中。此外,额外存储设备904可包括上述的存储奇偶校验 数据的P个存储元件402。如果单个额外存储设备90 被包括,额外存储设备90 通常 可包括从存储设备的阵列生成的简单奇偶校验信息。如果使用多个额外存储设备 904a-m,多维奇偶校验或其他更复杂的奇偶校验信息可存储在额外存储设备9(Ma-m中。在 另一种实施方式中,多个额外存储设备9(Ma-m存储简单奇偶校验数据。例如,每个额外存 储设备904可包括相同的奇偶校验数据。存储设备902、904可以是易失性存储器,例如静 态随机存取存储器(静态RAM)、动态RAM(DRAM)或类似存储器,或者可以是非易失性存储 器,例如闪存、纳米随机存取存储器(纳米RAM或NRAM)、磁阻RAM(MRAM)、相变RAM(PRAM)、 赛道存储器(racetrack memory)、忆阻存储器等。通常通过对阵列中存储设备90 -!!的输入的数据进行异或O(OR)运算,生成存储 在额外存储设备904上的奇偶校验信息。当数据读取自阵列902、904时,通常并行地读取, 从而数据的一部分读取自阵列中的每个存储设备902。为简便起见,该实施方式读取存储设 备902、904的所有数据。如上所述,为了增加数据完整性,这种设计所读取存储设备的量小 于全部存储设备的量。ECC (不包括奇偶校验信息)被用于确定读取自存储设备102的数据是否有效。ECC 可位于多个ECC组块418中,其中每个ECC组块418中的ECC对应于ECC组块418中的数 据。此外,ECC组块418可遍及多个存储设备90加-11。如果ECC被ECC检查/修正电路910 用于确定数据有效或数据是否包括可利用ECC修正的错误,则有效数据或修正的数据被装 置900放行,而不采取进一步的操作。然而,如果ECC检查/修正电路910发现数据无效且错误的量大于ECC所能修正 的量,类似于上述相对于缩减装置116描述的情况,一个或多个存储设备90 -!!的全部或 一部分有很大可能性发生故障。在这种情况下,来自额外存储设备904的奇偶校验信息作 为每个存储设备90 -!!的替代,一次替换一个以发现哪个存储设备902未起作用或包括大 量的错误数据。数据恢复906包括允许奇偶校验信息被替代的XOR逻辑,从而存储设备902 的被测试的有效数据被源于额外存储设备904的数据所替代。在一个实例中,四个存储设备90加-(1在一个阵列中,存储有数据A、B、C和D,还有 一个具有奇偶校验数据P的额外存储设备9(Ma。为了生成奇偶校验信息P,数据被异或运 算P = A~B~C~D (未示出,"表示异或运算),P存储在额外存储设备90 中。举例来说, 假设第三存储设备902c损坏,从而数据A、B、C、D不能利用ECC修正。损坏的数据C’将被 读取,并且ECC检查/修正电路910将使用ECC确定数据A、B、C’、D为损坏且不能被修正。 当数据A、B、C’、D与存储在每个存储设备902上的ECC组块418的一部分一起存储,从而 ECC组块418遍及存储设备90 -!!时,装置900可能不能够单独从ECC检测出第三存储设 备902c的全部或一部分已经失效或具有太多要被修正的错误。在图9A所描述的实施方式中,MUX 912和XOR逻辑914与每个存储设备902包括 在一起。每个MUX 912能够从其存储设备902或从关联的M)R 914选择数据。每个M)R 914 结合读取的数据和来自数据恢复906的奇偶校验数据。数据恢复906包括与读取的数据异 或的奇偶校验信息。读取的数据通常被缓冲908,从而如果存储设备902、904中存在错误, 读取的数据不会被改变。MUX 912和)(0R914可包括重新生成模块506和/或替换模块604的一部分或全部的一种实施方式。使存储设备902、904取消选定的控制信号未被示出。当未被选定时,未被读取的 存储设备902的关联MUX 912将同时被选定,并且丢失的数据将由数据恢复906重新生成。装置900通过选定来自M)R 914的数据而不是读取自存储设备902的数据来测试 每个存储设备90加-11。该进程为每个存储设备90 -!!重复,直到ECC组块被确定为可修 正。装置900可通过控制器916控制数据和存储设备902选择。控制器916可控制选定/ 取消选定数据的逻辑并反复以独立故障的存储设备902或存储设备902的一部分。此外, 控制器916可包括设备错误确定模块606、奇偶校验轮换模块610和读取轮换模块612的一 种实施方式。继续该实例,如果第一存储设备90 首先被测试,第一 MUX 912a选定M)R91 数据。在这个实例中,数据恢复906将是A~B~C,~D~P。代入P所表示的,数 据恢复 906 为 A"B"C' "D"A"B"C"D = (A"A) “ (B"B) “ (C,"C) “ (D"D) = 0"0"C"C' "0 = C"C'。 其与来自第一存储设备的读取的数据相异或:A~C~C’。由于C和C’不取消,结果是A’,并且 该结果将被损坏,ECC910仍然将检测不可修正的错误。该进程为每个存储设备902重复。当第三存储设备902c被测试时,损坏的数据C,被从第三存储设备902c读取并与 其他存储设备90h、902b、902d相异或数据恢复906 = A"B"C' ~D~P。代入P所表示的数 据恢复 906 = A~B~C,"D"A"B"C"D = (A"A) “ (B"B) “ (C' ~C) ~ (D~D)。与其自身异或的数据 为0,因此,XOR = 0~(TC,"C"0 = C' "C。如果第三MUX 912c选定第三M)R 9Hc数据而不 是直接来自第三存储设备902c的数据,MUX 912c上的数据是第三存储设备902c的数据C, 和数据恢复M)R 906的输出的异或C’~(C’~C) =C0因此,正确的数据C替换了无效数据 C’。在这点上,ECC检查/修正电路910通常确定数据有效或可修正。一旦数据被确定为有效或可修正,在数据被确定为可用ECC修正之时所选定的存 储设备902c就被确定为失效的存储设备902c。在这点上,用于失效的存储设备902c的MUX 912c被永久地选定,并且具有奇偶校验信息的额外存储设备90 被用于替代失效的存储 设备902c为失效的存储设备902c的至少一个区域提供数据。该区域可以是页、多页、PEB、 多个PEB、芯片块、芯片或存储设备902c内的任何其他分区,或者甚至可以包括整个存储设 备902c。奇偶校验数据仍然存储在额外存储设备902c上,而且上述进程被用于获取正确的 数据C,正确的数据C被用于替代来自额外存储设备90 的损坏的数据C’。在上述实例中,当装置900确定存储设备902c包括错误的数据时,来自存储设备 902c的具有损坏的数据C’的数据可被从额外存储设备90 获取的被修正的数据替换。该 进程修正错误的数据,其用一个存储器模块904替换另一个存储设备902。如下所述,本发 明也包括替换存储设备902内的存储位置的任何子集(区域),以及通过分析如上所述的错 误的存储器位置而匹配来自额外存储设备904的数据。例如,一旦装置900检测到不可用ECC 910修正的错误、隔离错误并修复数据,装 置900可记录错误记录,错误记录包含诸如存储器位置的信息。每次发生错误,错误信息被 记录并随后被分析,从而将错误与特定页、块、逻辑擦除块等隔离。一旦存储设备902中的 区域被确定,该装置可隔离那个区域并用来自额外存储设备904的数据替换,直到具有失 效区域的存储设备902被替换。下文更详细地描述了错误记录。本发明预先考虑到完成下述步骤的许多其他的方法检测不可修正的错误、使用奇偶校验数据以选择性地隔离错误和随后使用额外存储设备904中的数据修正错误的数 据。尽管在图9A和9B中描述的实例表明8位数据总线,但本发明也预料到了更宽或更窄 的其他阵列。图9B是示意性框图,示出了根据本发明的检测和替代失效数据存储器的装置950 的另一种实施方式。在装置950的实施方式中,MUX 912上方的M)R 914被移去,来自数据 恢复906的数据被直接输入到MUX 912。第二组MUX装置952接收来自存储设备902和来 自接地以提供逻辑0的数据线的一组数据。当隔离错误时,一组MUX(例如MUX 952a、MUX 912a)被设置为不选定来自适当的 存储设备(例如存储设备90 )的数据。再次返回到上述实例,阵列包括数据A,B,C,D和 奇偶校验P,奇偶校验以与图9A相同的方式生成(例如,P = A~B~C~D)。再次假设第三存储 设备902c被损坏,因此,C,被读取。如果第一存储设备90 被选定为隔离,存储设备90 下方的第一 MUX95M将读取所有的0。随后,数据恢复块将异或数据和奇偶校验数据恢复 906 = 0"B"C' "D"P = 0"B"C' "D"A"B"C"D = (0"A) “ (B"B) “ (C,"C) “ (D"D) = A"0"C' "C"0 =A"C' ~C = A’。随后,这被反馈到第二 MUX112a,ECC检查/修正电路910将继续检测不 可修正的错误。当第三存储设备902c被选定时,数据恢复输出为A~B~0~D~P = A"B"0"D"A"B"C"D =(A"A)"(B"B)"(0"C)"(D"D) = (Γ(Γ(Γ(Τθ = C。然后,第三存储设备 902c 线上的第二MUX 112c选定数据恢复906的输出,其为C,从而ECC检查/修正电路910通常检测有效数据A、 B、C和D。错误可随后被记录用于分析或垃圾收集,或者第三存储设备902c可被选定,而来 自额外存储设备904的数据可被用于提供修正的数据。本领域技术人员会认识到将实现下述步骤的其他电路检测不可用ECC检查/修 正电路910和存储在ECC组块418中的ECC修正的错误、通过顺序地选定存储设备902隔 离错误并使用奇偶校验数据以用被修正的数据做替换、以及随后一旦存储设备902被选定 且ECC检查/修正电路910确定数据为有效或可修正,则修正错误。此外,此处所述的本发 明预料到下述情况多个存储设备902发生故障或包括坏数据,并且复杂的替换方式与来 自多个额外存储设备904的数据一起使用以定位发生故障的存储设备902。在这种实施方 式中,来自多个额外存储设备904的奇偶校验数据被用于创建数据,从而以轮换方案替换 相应数量的存储设备902的数据,直到存储设备902被发现,从而ECC组块418中的任何错 误均可被修正。图10是示意性框图,示出了根据本发明的检测和替代失效数据存储器的装置 1000的又一种实施方式。装置1000包括检测装置118的一种实施方式,并且在一种实施方 式中,包括读取模块1002、ECC模块1004和隔离模块1006,下文将描述这些模块。在一种实施方式中,装置100包括从存储设备的阵列中读取数据的读取模块 1002。阵列包括两个或多个存储设备902和一个或多个存储来自存储设备902的奇偶校验 信息的额外存储设备904。在一些实施方式中,读取模块1002从逻辑页416的至少一部分 读取数据,逻辑页416遍及存储设备902、904的阵列。此外,存储设备902、904的阵列可包 括N+P个存储元件402的阵列。如上所述,存储元件402的阵列400可包括N个存储元件 402 (每个存储ECC组块418的一部分)和存储奇偶校验数据的P个存储元件402。如下文相对于隔离模块1006更详细地描述的,来自选定为测试的存储设备的数据不会被使用但会被替代。因此,在一种实施方式中,读取模块1002从N+P个存储元件402 的X个存储元件402中的每一个上的物理页406的至少一部分读取,其中X等于(N+P)-l。 未被读取的存储元件402被选定为测试下的存储元件402。在一种实施方式中,装置1000包括ECC模块1004,ECC模块1004使用纠错码(ECC) 确定测试的数据中是否存在一个或多个错误,和错误是否可用ECC修正。测试的数据可包 括由读取模块1002读取的数据。在一些实施方式中,ECC与由读取模块1002读取的数据一 起存储在ECC组块418中。数据被用于生成与数据一起存储在ECC组块418中的ECC。因 此,测试数据可包括ECC组块418,例如由读取模块1002读取的ECC组块418,或由隔离模 块1006生成的ECC组块418,如下文更详细地描述的。在一种实施方式中,1000包括隔离模块1006,隔离模块1006响应于ECC模块1004
确定错误存在于由读取模块1002读取的数据中且错误不可用ECC修正而从存储设备的阵 列中选定存储设备902。存在于数据中的不可修正的错误可以是发生故障的存储设备902/ 存储元件402的指示。隔离模块1006用下述数据替代读取自选定的存储设备902的数据包括从存储在 一个或多个额外存储设备904上的奇偶校验数据生成的数据的数据(替代数据)和读取自 未被选定的存储设备902的数据(有效数据)。在一种实施方式中,隔离模块1006使用异 或逻辑以用数据替换选定的正被测试的存储设备902,该数据源于替换数据和有效数据。在另一种实施方式中,ECC组块418内的ECC能够修正特定存储设备902内出错的 所有位的大部分。在这种实施方式中,专用的ECC码可直接识别产生错误的存储设备902。 在该实施方式中,隔离模块1006分析修正的数据的输出并从ECC模块1004提供的信息确 定哪些存储设备902失效。另外,隔离模块1006通过存储设备902迭代,以找出不可修正的错误所源自的存 储设备902。具体地,如下文详细所述的,隔离模块1006响应于选定的存储设备902被检测 为不具有不可修正的错误而选定下一个存储设备902以测试。下一个存储设备902可包括 存储设备以在取消选定被测试过的存储设备902之后选定和测试。因此,隔离模块1006选 定存储设备902中的每一个用于测试,直到找出错误的存储设备902或所有的存储设备902 被测试。在一种实施方式中,如果所有的存储设备902已被选定和测试而没有检测到故障 的存储设备902,隔离模块1006返回或报告错误。在这种情况下,多个存储设备902可发生 错误,并且可能需要用户进一步的操作。在一种实施方式中,隔离模块1006可存储先前发 生故障的存储设备902的标识,从而隔离模块1006随后不必迭代这些存储设备902。隔离 模块1006可包括在图9A和图9B中描述的控制器916。ECC模块1004确定测试数据(现在是结合有替代数据的可用数据)是否不包括错 误或包括可用ECC修正的错误。结合有替代数据的可用数据不包括错误或包括可用ECC修 正的错误的事实可表明数据被替代的选定的存储设备902是错误所源自的存储设备。一旦数据被确定为有效或可修正,在数据被确定为可被ECC修正时被选定的存储 设备902随后被装置1000确定为是失效的存储设备,并在下文中被称为“选定的出错的存 储设备902”。如果结合有替代数据的可用数据是有效的且不包含错误,选定的出错的存储 设备902(隔离模块1006为其替代数据)是出错的原因。类似地,如果余下的仅有的错误 是可利用ECC修正的,不可修正的错误通常源于选定的存储设备902(隔离模块1006为其替代数据)。注意到图9A和9B示出了存储数据的具体存储设备902和存储奇偶校验数据的具 体存储设备904,如上文中相对于缩减装置116所描述的,奇偶校验数据可按页、擦除块等 轮换,从而对于一页来说,额外存储设备904可位于阵列的尾部,对于下一页来说,额外存 储设备904可以是阵列中的第一个设备,依此类推。存储奇偶校验数据的额外存储设备904 可基于奇偶校验轮换方案变换,如图9A和9B中的电路或类似电路可允许阵列中的任何设 备存储用于替换另一存储设备902的奇偶校验数据。图11是示意性框图,示出了根据本发明的检测和替代失效数据存储器的装置 1100的再一种实施方式。装置1100包括读取模块1002、ECC模块1004和隔离模块1006, 这些模块基本上类似于相对于图10的装置1000描述的模块。在不同的实施方式中,装置 1100还可包括引退模块1102、存储设备重新配置模块1104、记录模块1106、存储区域测试 模块1108、区重新配置模块1110、分析模块1112、错误存储恢复模块1114、修正数据模块 1116和报告模块1118,下文将描述这些模块。在一种实施方式中,装置1100包括引退模块1102。响应于ECC模块1004确定选 定的出错的存储设备,引退模块1102引退选定的存储设备902或选定的存储设备902上的 一个或多个存储区域。存储区域(包括存储设备902上的物理或逻辑区域,并包括选定的 存储设备的至少一部分)如果包括一个或多个错误,则可以被引退。存储区域可包括一个 或多个ECC组块418的一部分、一个或多个物理页406、一个或多个逻辑页416、一个或多个 物理擦除块404、一个或多个逻辑擦除块414、芯片、芯片的一部分、一个或多个芯片块的一 部分、一个或多芯片块或者存储设备902/存储元件402的任何其他部分。引退模块1102可通过永久地或暂时地将引退的存储器脱离标准使用来引退选定 的存储设备902或存储区域(引退的存储器)。在一种实施方式中,引退模块1102通过向 存储控制器发出引退的存储器不再可用于标准读取和写入的信号来引退存储器。随后,引 退的存储器可被进一步测试,然后被永久的关闭或基于引退策略被跟踪。引退模块1102甚 至可擦除引退的存储器并允许其上的继续操作,同时监测为进一步的错误监测引退的存储 器。本领域技术人员会认识到引退存储器的其他方法。引退模块1102可使引退决定基于引退策略。在一种实施方式中,引退策略包括确 定何时引退引退的存储器、引退的存储器怎样引退及类似问题的规则、用户偏好和逻辑。引 退策略可包括引退的标准、引退的不同级别和引退的手段。例如,引退策略可指明在一定 数量的错误或错误的级别或严重程度之后,引退的存储器暂时地停止标准操作并被标记为 测试协议。在另一个实例中,引退策略可指明在一定数量的错误之后,将警报发送给用户。在某些实施方式中,引退模块1102可在错误之后标记存储区域,但随后允许存储 区域被存储空间恢复操作(例如垃圾收集)恢复。例如,具有错误的擦除块可被擦除,并且 后续的数据可被写入擦除块。如果用ECC模块1004和隔离模块1006在擦除块中识别了额 外的错误,擦除块可永久的引退。在一种实施方式中,引退策略为引退的存储器指明宏引退手段或“自上而下”的方 法。具体地,宏引退可假设初始区是有缺陷的,初始区包括比实际缺陷大的存储区。初始区 可包括选定的出错的存储设备902或整个设备上的存储区域。随后,宏引退可利用进一步 测试将初始区减少到实际有缺陷的存储区域。在一种实施方式中,宏引退指明当选定的存储设备902出错时,整个存储设备902被引退。在这点上,引退模块1102可实施进一步地 测试以确定存储设备902上的错误的范围。引退模块1102还可将错误隔离在存储设备902 上的存储区域之外。存储设备902上未被错误影响的存储区域可重新投入标准使用。因此, 在宏引退下,引退的存储区域是集中的并通过额外测试被隔离。在另一种实施方式中,引退策略为引退的存储器指明微引退手段或“自下而上”的 方法。具体地,微引退可始于已知的或假设为有缺陷的初始区,并扩大初始区以包括有缺 陷的其他存储区域。在一种实施方式中,在微引退下,仅仅是具有错误的存储分区被初始引 退,而不是整个存储设备902。引退模块1102可进一步为额外错误测试或监测相邻存储区 域上的标准读取。如果发现额外错误,引退模块1102可进一步引退存储设备902上的额外 存储区域或增加引退的存储区域的尺寸。如下文所描述的,引退模块1102可与其他模块协 同工作以将错误定位和监测存储设备902。在一种实施方式中,装置1100包括存储设备重新配置模块1104,存储设备重新配 置模块1104识别选定的出错的存储设备,从而数据被生成以为了将来的操作替代来自选 定的存储设备902的读取数据。如上所述,选定的出错的存储设备可以是响应于ECC模块 1004确定结合有替代数据的可用数据不包含错误或包含可用ECC修正的错误而选定的存 储设备。存储设备重新配置模块1104可与引退模块1102协同工作以永久地或暂时地用结 合有替代的奇偶校验数据的可用数据(如图9A和9B所述)替代来自引退的存储设备902 的数据。在一种实施方式中,装置1100包括记录模块1106。响应于选定的出错的存储设 备,记录模块记录选定的存储设备902的标识并且/或者记录指明包括一个或多个错误的 一个或多个存储区域的存储器位置数据。每次发生错误,错误信息可被记录模块1106记录 并随后被分析以将错误与特定存储区域(如页、块、擦除块等)隔离。一旦存储设备902中 的存储区域被确定,装置1100可隔离那个区,并用来自额外存储设备904的数据替换,直到 选定的出错的存储设备被替代。记录模块1106可与引退模块1102协同运行以跟踪存储设备902或存储区域中的 错误。例如,根据宏引退,引退模块1102可记录选定的出错的存储设备的标识,而不记录包 括具有一个或多个错误的存储区域的存储器位置数据,因为引退模块1102在隔离错误之 前始于较大的区。如下所述,记录模块1106还可为被存储区域测试模块1108进行的进一 步的存储区域测试识别的一个或多个存储区域记录存储器位置数据,从而缩窄已知的出错 的存储设备902的区域。在另一种实施方式中,取代于记录选定的出错的存储设备的标识,记录模块1106 根据微引退记录存储设备902上包括的一个或多个错误的一个或多个存储区域。因此,整 个存储设备902可不被记录为出错,而仅包括错误的存储区域被记录为出错。此外,响应于 读取模块1002的后续读取以及用ECC模块1004和隔离模块1006确定具有可通过结合替 代数据和可用数据而被修正的不可修正错误的额外存储区域,记录模块1106也可记录存 储位置数据,该存储位置数据指明包括选定的存储设备902中的一个或多个错误的一个或 多个额外存储区域。后续的读取可包括由存储区域测试模块1108初始化,以将特定的额外 存储区域作为目标来进行如下所述的测试。此外,后续的读取可包括来自读取请求的标准 读取。
在一种实施方式中,装置1100包括存储区域测试模块1108,存储区域测试模块 1108识别选定的存储设备902内包括错误的一个或多个存储区域。存储区域测试模块1108 可测试存储设备902中被引退模块1102根据宏引退记录的存储区域。因此,存储区域测试 模块1108可进一步通过利用读取模块1002进行的后续读取和使用ECC模块1004和隔离 模块1006替代测试的存储区域上的数据来识别具有一个或多个错误的存储区域而隔离存 储设备902上的包括错误的区,并为测试下的具体存储区域确定具有通过结合替代数据和 可用数据(如上所述)而可被修正的不可修正的错误的存储区域。例如,记录模块1102根据宏引退记录出错的存储设备902的标识,引退模块1102 通过将选定的存储设备902移出标准使用引退选定的出错的存储设备902并指派选定的存 储设备902用于进一步测试,并且存储区域测试模块1108识别存储设备902中出错的存储 区域。存储区域测试模块1108可将特定的存储区域作为目标以用于测试,例如邻近出错的 存储区域的存储区域。此外,存储区域测试模块1108可扩大或压缩测试下的或已知的包括 错误的存储区域。在一种实施方式中,根据宏引退,当记录模块1102已经识别了出错的存储区域 时,存储区域测试模块1108可测试额外的存储区域以确定存储设备902中错误的范围。由 于数据错误可局限于存储设备902的某些区,存储区域测试模块1108可测试邻近错误的存 储区域的额外存储区域。本领域技术人员会认识到存储区域测试模块1108可测试额外的 存储区域的不同方法。在一种实施方式中,装置1100包括区重新配置模块1110,区重新配置模块1110用 来自一个或多个额外存储设备的替代数据替代选定的存储设备902中的一个或多个存储 区域中的数据以用于将来的操作,从而选定的存储设备902中的一个或多个存储区域之外 的数据不被替代。例如,根据微引退,仅这些出错的存储区域可被初始引退。因此,区重新 配置模块1110可替代出错的存储区域中的数据,而不替代其余存储设备902中的数据。在 这种方式下,整个存储设备902在没有进一步测试的情况下是备用引退。在某些实施方式中,区重新配置模块1110可使用相同额外存储设备904替代一些 存储区域上的数据。区重新配置模块1110用来自额外存储设备904的替代数据替代来自 选定的存储设备902上存储区域的数据,并且如果存储区域和额外存储区域不共享共同的 逻辑页416,替代来自相同额外存储设备904的额外存储区的数据。额外存储区域可驻留在 相同选定的存储设备902上或不同的选定的存储设备902上。例如,装置1100可确定第一存储设备90 上的区X出错、第二存储设备902b上 的区Y出错、第三存储设备902c上的区Z出错,等等。只要区(X、Y、Z等)不重叠存储器 地址(例如,区X中的地址不与区Y、Z等中的地址相同),区重新配置模块1110可用修正 的数据替代第一存储设备90 的区X的数据、用修正的数据替代第二存储设备902b上区 Y的数据、以及用来自相同额外存储设备的修正的数据替代第三存储设备902c的区Z的数 据。如果存储区域和额外存储区域共享共同的逻辑页416或共同的存储器地址,区重 新配置模块1110可用来自额外存储设备904的替代数据替代来自一个或多个存储区域的 数据,并替代一个或多个不同的额外存储设备904的额外存储区域中的数据。在一种实施方式中,装置1100包括分析记录以确定选定的存储设备902中具有数据错误的区的分析模块1112,存储设备90 -!!中具有错误的区的大小可通过分析记录的 错误独立地确定。此外,分析模块1112也可利用故障中的更多详情确定错误类型。例如,不 可修正的错误可被检测,进一步的分析可表明错误是由于擦除失败、程序失败、读取失败、 诊断失败、POST失败和记录。在一种实施方式中,装置1100包括错误存储恢复模块1114,错误存储恢复模块 1114响应于选定的出错的存储设备擦除具有一个或多个错误的擦除块以将该擦除块准备 好用于将来的数据存储。在闪存中,程序干扰(写入干扰)和读取干扰能够导致暂时的错 误。对于特定的存储位置而言,当存储位置周围的数据被编程或读取时,数据线对其他编 程/读取的位置的接近程度能够干扰存储位置中的数据。这种错误可以是通过在垃圾收集 (存储空间恢复)操作中刷新存储位置而解决的暂时性错误。在垃圾收集操作中,通常,有效数据从擦除块或存储器的其他区移动到另一区,擦 除块被擦除。对于闪存而言,这可涉及将“1”写入擦除块中的所有存储单元,这种操作为单 元充电。随后,擦除块可被重新使用,新数据可被存储在擦除块中。然后,装置1100可继续 记录错误,而且如果出错的存储位置在垃圾收集操作之前再次出错,存储位置可被引退并 被标记为永久不可用,而对应于额外存储设备904中存储位置的数据可被用于替换失效的 存储位置。在一种实施方式中,装置1100包括修正数据模块1116,修正数据模块1116响应于 选定的出错的存储设备而返回修正的数据。在一种实施方式中,当隔离模块1006已经识别 了选定的出错的存储设备902时,修正的数据是通过隔离模块1006结合有可用数据的替代 数据。如上所述,当结合有替代数据的可用数据不包含错误或包含可用ECC修正的错误时, 选定的出错的存储设备902被识别。在一种实施方式中,装置1100包括响应于选定的出错的存储设备而报告错误的 报告模块1118。报告模块1118可报告错误以警告用户潜在的存储设备902故障或帮助错 误诊断。此外,报告模块1118也可报告潜在的用户可选定为引退的存储设备902或存储区 域。图12是示意性流程图,示出了根据本发明的检测和替换失效数据存储器的方法 1200的一种实施方式。方法1200开始,在步骤1202,读取模块1002从具有两个或多个存 储设备902和一个或多个额外存储设备904(存储来自存储设备902的奇偶校验信息)的 存储设备的阵列读取数据。在步骤1204,ECC模块1004确定测试的数据中是否存在一个或多个错误,和错误 是否可用ECC修正。测试的数据包括由读取模块1002读取的数据。ECC可与由读取模块 1002读取的数据一起存储在ECC组块418中。响应于ECC模块1004确定错误存在于读取 模块1002读取的数据中而且错误不可用ECC修正,在步骤1206,隔离模块1006从存储设备 的阵列中选定存储设备902。在步骤1208,隔离模块1006用替代数据或根据存储在一个或多个额外存储设备 904上的奇偶校验数据生成的数据替代读取自选定的存储设备902的数据。隔离模块1006 使替代数据结合可用数据或读取自未被选定的存储设备902的数据。在步骤1208中,ECC 模块1004为选定的存储设备902确定结合有替代数据的可用数据不包含错误或包含可用 ECC修正的错误,方法1200结束。
图13是示意性流程图,示出了根据本发明的检测和替换失效数据存储器的方法 1300的另一种实施方式。方法1300示出了隔离模块1006迭代每个存储设备902。方法 1300开始,在步骤1302,ECC模块1004检测读取的数据中的错误。在步骤1304,方法1300 选定存储设备90 并迭代以确定哪个存储设备902是坏的。在这个实例中,变量设置为 0(i = 0)。在步骤1306,读取模块1002随后从存储设备902读取数据,除了被测试的存储 设备902具有选定的MUX 912以从数据恢复906读取数据。对于未选定的存储设备902来 说,未修正的数据在步骤1308被读取。在初次通过方法1300时,i =0,第一存储设备90 被选定。对于选定的存储设备90 ,未被修正的数据成为与数据恢复906的输出(如C’C) 相异或的读取的数据(如A)。然后,在步骤1312,ECC模块1004确定数据是否可修正。如果数据可修正,则在步骤1316,隔离模块1006返回选定的设备(i),方法1300 完成。如果ECC模块1004在步骤1312确定数据仍然不可修正,则在步骤1314,隔离模块 1006增加变量i。然后在步骤1318,隔离模块1006确定变量i是否达到最大值,达到最大 值表明所有的存储设备902已经被测试,如果隔离模块1006在步骤1318确定变量i达到最 大值,则隔离模块1006在步骤1320返回失效的消息,这表明不止一个存储设备902出错, 或一些其他的错误不能被装置900修正。如果隔离模块1006在步骤1318确定变量i未达到最大值,隔离模块1006返回并 测试下一存储设备902。方法1300继续,直到装置900在步骤1312确定错误可修正或者所 有的存储设备902都已被测试,装置在步骤1320返回失败信息。方法1300仅仅是本发明的一种实施方式,本领域技术人员会认识到选择性地测 试存储设备以用来自额外存储设备904的数据替代存储设备902的数据的其他方法。图14是示意性流程图,示出了根据本发明的检测和替换失效数据存储器的方法 1400的又一种实施方式。方法1400涉及分析错误以确定怎样将存储设备分段或分区以修 正错误。图13的方法1300首先执行,装置1000隔离错误并返回哪个存储设备902出错和 存储位置信息。方法1400开始,由记录模块1106记录的错误数据被分析模块1112分析 以确定发生了哪种类型的错误。例如,在步骤1402中,另一 ECC910不可修正的错误可被检 测,并且进一步的分析可指示错误是由于擦除失败1404、程序失败1406、读取失败1408、诊 断失败1410、POST失败1412等。记录的错误数据可被用于将错误与存储设备902的特定 区隔离。基于分析,在步骤1414,方法1400将特定的坏的存储设备识别为最小,但分析也 可以能够隔离存储设备902内坏的特定区。在步骤1416,方法1400确定坏的存储设备902 是否已经被隔离。如果隔离,则在步骤1418,存储设备重新配置模块1104重新配置装置 900、装置950,以用来自额外存储设备904的数据替换坏的存储设备902,在步骤1420,当第 一次检测到错误时,方法1400可重试操作。如果未隔离,则在步骤1422,方法1400返回失 败消息。图15A是示意性流程图,示出了根据本发明的记录具有错误的存储区域的方法 1500的一种实施方式。方法1500是根据宏引退的一种实施方式,并且发生在错误在选定的 存储设备902上被检测出之后。方法1500开始,在步骤1502,记录模块1106记录选定的存 储设备902的标识。在另一种实施方式中,记录模块1106记录初始区,该初始区包括存储 设备902上具有错误的区的扩展集。
在步骤1504,存储区域测试模块1108识别选定的存储设备902中包括错误的存 储区域。在另一种实施方式中,存储区域测试模块1108识别初始区(具有错误的区的扩展 集)内包括错误的存储区域。在步骤1506,记录模块1106为由存储区域测试模块1108识别的一个或多个存储 区域记录存储位置数据。此外,在步骤1508,存储区域测试模块1108利用后续的读取(由 读取模块1002进行)和使用ECC模块1004和隔离模块1006确定具有不可修正的错误的 存储区域(如上所述)来识别具有一个或多个错误的存储区域,方法1500结束。存储区域测试模块1108可继续将存储设备902内的存储区域作为整体或更大的 存储区域测试,以隔离错误。在这种方式下,测试的区在自上而下的方法中重复的聚集。此 外,引退模块1102可将存储设备从标准操作引退,而方法1500根据引退策略进行。图15B是示意性流程图,示出了根据本发明的记录具有错误的存储区域的方法 1550的另一种实施方式。方法1550是根据宏引退的一种实施方式,并且发生在错误在选 定的存储设备902上被检测出之后。方法1550开始,在步骤1552中,记录模块1106记录 包括一个或多个错误的一个或多个存储区域。在步骤15M中,ECC模块1004和隔离模块 1006利用上述的后续的读取识别具有错误的额外存储区域。后续的读取可包括由存储区域 测试模块1108初始化以将特定的存储区域(例如相邻的存储区域)作为目标的读取,从而 扩大已知的包括错误的存储区域。后续的读取也可是来自读取请求的标准读取,例如,如果 引退模块1102未将存储区域从标准操作中引退。在步骤1556中,记录模块1106记录表明一个或多个具有错误的额外存储区域的 存储位置数据,方法1550结束。存储区域测试模块1108可继续测试存储区域以扩张存储 区域或测试下的存储区域。在这种方式下,测试下的区或已知为包括错误的区被重复地扩 大以按照自下而上的方法定位额外的错误。此外,引退模块1102可将存储区域从标准操作 中引退,同时方法1550根据引退策略进行。图16是示意性流程图,示出了根据本发明的引退擦除块的方法1600的一种实施 方式。方法1600开始,在步骤1602,ECC模块1004和隔离模块1006如上所述地检测存储 设备902中的错误。在步骤1604,记录模块1106根据上述的引退策略记录错误。在步骤 1606,引退模块1102根据引退策略引退存储设备902或存储设备902内的存储区域。如下 所述,在步骤1608中,重新配置装置120可随后配置存储设备902以将数据写入未出错的 区,方法1600结束。重新配置存储元件图17是示意性方框图,示出了根据本发明的使用奇偶校验数据重新配置受保护 的固态存储元件402的阵列的装置1700的一种实施方式。装置1700包括重新配置装置 120的一种实施方式,并且在一种实施方式中,包括存储元件错误模块1702、重新配置数据 读取模块1704、数据重新生成模块1706、数据重新配置模块1708和新配置存储模块1710, 下文将描述这些模块。装置1700在由David Flynn等人于2009年5月18日提交的题为 “Apparatus, System, and Method for Reconfiguring an Array toOperate with Less Storage Elements”、申请号为—的美国专利申请中也有所描述,通过引用将该申请并入 本文中。在一种实施方式中,装置1700包括存储元件错误模块1702,存储元件错误模块1702确定一个或多个存储元件402不可用于存储数据(不可用存储元件)。存储元件402 可驻留在三个或更多个存储元件402的阵列中。此外,阵列中的每个存储元件402可包括 非易失性固态存储器110。类似于上述的存储元件的阵列400,数据被写入阵列400的逻辑 页416,逻辑页416包括阵列400的每个存储元件402上的页。注意到不可用存储元件402 可仅具有不可用的存储元件402的区域,例如页、擦除块等,从而存储元件402可用于区域 而不是不可用的区域。下述情况是有利的在服务中保持尽可能大的容量以提升性能和延 长存储元件402的可用寿命。阵列400可包括N个存储第一 ECC组块418的存储元件402和存储生成自第一 ECC组块418的第一奇偶校验数据的P个存储元件402。N个存储元件402可存储多个ECC 组块418,P个存储元件402可存储生成自多个ECC组块408的奇偶校验数据。第一 ECC组 块418的一部分存储在N个存储元件402中的每一个上。ECC组块418包括数据(存储的 数据)和生成自存储的数据的ECC,第一 ECC组块418的一部分存储在N个存储元件402中 的每一个上。在一种实施方式中,阵列400的存储元件402中的每一个包括一个或多个附 加点,数据顺序地存储在存储元件的阵列400上。数据被顺序地存储,从而数据被写入附加点。顺序存储与随机存取存储的区别在 于在读取-修改-写入操作中,数据从一个位置被读取、被修正,然后被写入当前写入数据 的附加点中。一旦数据被写入,附加点移动到新写入数据的尾端并为写入新附加点的下一 数据准备好。在一种实施方式中,不可用存储元件402是具有错误的存储元件402或被如上所 述的检测装置118识别或引退的存储元件402。在某些实施方式中,存储元件错误模块1702 通过确定第一 ECC组块418中的错误不可用与第一 ECC组块418 —起存储的ECC修正来确 定存储元件402出错或不可用。存储元件错误模块1702可利用多个ECC组块418来确定 存储元件402出错。不可用ECC修正的错误可表示,在读取和写入干扰之外,存储元件402 存在问题。此外,用户可具体指定不可用的存储元件402。在一种实施方式中,存储元件错误模块1702通过确定正在起作用的存储元件 402(正在失效的存储元件)达到替代阈值来确定存储元件402出错。例如,存储元件402 可仍然起作用,但可能正在失效、性能上退化或注定要失效。替代阈值可以是存储元件402 的状况的指示符。替代阈值可包括存储在正在失效的存储元件402中的数据的错误率、存 储在正在失效的存储元件402中的数据的错误次数、正在失效的存储元件402上的读取和 /或写入操作的次数、正在失效的存储元件402中的环境条件及类似指示。在存储元件错误模块1702确定一个或多个不可用存储元件402之后,存储元件错 误模块1702可确定一个或多个额外不可用存储元件402,如下文详细描述的。在一种实施方式中,装置1700包括重新配置数据读取模块1704,重新配置数据读 取模块1704从除不可用存储元件402之外的存储元件402读取数据(可用数据)。在一种 实施方式中,可用数据包括来自逻辑页416的数据。重新配置数据读取模块1704读取可用 数据且并不读取来自正在失效的存储元件上的数据,从而获取的数据不具有错误,或者获 取的数据具有一些可用与数据一起存储的ECC修正的错误。通常,相比于从正在失效的存 储元件使用的数据,可用数据包含错误的机率较低。此外,如果不可用存储元件402是非功 能性,不可用存储元件402甚至可不被重新配置数据读取模块1704访问。
在一种实施方式中,重新配置数据读取模块1704运行在后台进程(例如存储空间 恢复操作)中。存储空间恢复操作的一个实例包括垃圾收集进程。通过在后台进程中运行, 重新配置数据读取模块1704可将对固态存储设备102的操作的妨碍最小化。在一种实施方式中,装置1700包括数据重新生成模块1706。响应于包括第一奇偶 校验数据的可用数据,数据重新生成模块1706使用第一奇偶校验数据从第一 ECC组块418 重新生成丢失的数据(丢失数据)。在另一种实施方式中,响应于包括ECC组块418的可用 数据,数据重新生成模块1706重新生成第一奇偶校验数据。第一奇偶校验数据可包括简单 XOR奇偶校验信息或者可以更复杂,涉及多个存储奇偶校验数据的存储元件402。第一奇偶 校验数据可以由检测装置118提供。同样地,数据重新生成模块1706可利用XOR操作(如 图9A和9B描述的)或其他类似的本领域已知的奇偶校验操作重新生成丢失数据。数据重 新生成模块1706可利用用于ECC组块418的奇偶校验数据为多个ECC组块418重新生成 丢失数据。在一种实施方式中,数据重新生成模块1706运行在后台进程(例如存储空间恢 复操作)中。在一种实施方式中,装置1700包括数据重新配置模块1708,数据重新配置模块 1708从可用数据、丢失数据和由存储控制器接收的数据(新数据)中的一个或多个生成第 二 ECC。第二 ECC和用于创造第二 ECC的数据一起形成了第二 ECC组块418。此外,数据重 新配置模块1708也可从第二 ECC组块418生成第二奇偶校验数据以保护第二 ECC组块418 中的数据。在一种实施方式中,数据重新配置模块1708使新数据与第一 ECC组块418分离, 从而第一 ECC与第二 ECC —致,而且第一 ECC组块418与第二 ECC组块418 —致。在另一 种实施方式中,新数据与来自第一 ECC组块418的数据混合,从而数据重新配置模块1708 为新数据和来自第一 ECC组块418的一部分数据生成第二 ECC。在一种实施方式中,数据重 新配置模块1708运行在后台进程中,后台进程例如存储空间恢复操作(垃圾收集)。在一种实施方式中,装置1700包括新配置模块1710,新配置模块1710将第二 ECC 组块418的至少一部分和关联的第二奇偶校验数据存储在(N+P)-Z个存储元件402上,其 中,1≤Z≤P。因此第二 ECC组块418和任何额外的重新配置的ECC组块418被重新配置 为存储在具有较少存储元件402的阵列中。Z是不可用存储元件402的数量。在简单情况下,Z = 1,从而新配置存储模块1710将第二 ECC组块418存储在比 存储第一 ECC组块418存储的设备少一个的设备上。每次存储元件402或存储元件402的 区域变得不同用时,重新配置装置120重新配置存储在存储元件402的阵列400中的数据, 从而新配置存储模块1710将数据存储在少一个的存储元件402上,至少为了正被引退的区 域。在一种实施方式中,对于某些存储区域而言,ECC组块418存储在N+P个存储元件402 中,在其他存储区域中,其他ECC组块418存储在(N+P)-l个存储区域中,在其他存储区域 中,其他ECC组块418存储在(N+P) -2个存储区域中,等等。在一种实施方式中,阵列400的存储元件402中的每一个包括一个或多个附加点, 数据顺序地存储在存储元件的阵列400上。在这种实施方式中,新配置存储模块1710将第 二ECC组块418和关联的奇偶校验数据存(N+P)-Z个存储元件402中的每一个的附加点上。 每个附加点被移动到在恰好在移动附加点之前存储的数据的尾端。当新配置存储模块1710存储产生第二 ECC组块418和第二奇偶校验数据时,可利用少一个的奇偶校验设备或少一个的数据设备重新配置数据。例如,如果第一 ECC组块418 存储在N个存储元件402中并利用两个或多个存储元件402(即,PP ^ 2)上的奇偶校验数 据保护,则新配置存储模块1710能够生成第二 ECC组块418和第二奇偶校验数据,从而第 二 ECC组块418仍然存储在N个存储元件402上,但奇偶校验信息存储在P_1个存储元件 402上。在这个实例中,阵列400的性能不会受到影响,但数据的奇偶校验保护将少一层并 且能容许的存储元件402失效也将少一次。 在P = 1或奇偶校验保护保持不变的情况下,新配置存储模块1710能够生成第二 ECC组块和第二奇偶校验数据,从而第二 ECC组块能够被存储在N-I个存储元件402上,并 且奇偶校验信息能够存储在P个存储元件402上。在这种情况下,阵列400的性能将降低, 这是由于存储数据的存储元件402较少,然而,奇偶校验保护将保持不变。
不可用存储元件402可以是存储数据的存储元件402或存储奇偶校验数据的存储 元件402,这取决于被存取的逻辑页416的位置和奇偶校验数据的轮换。然而,存储在不可 用存储设备402上的数据的性质不需要与由新配置存储模块1710存储的数据的配置有任 何关系。因此,如果不可用存储元件402存储奇偶校验数据,在一种实施方式中,新配置存 储模块1710可将第二 ECC组块418的一部分存储在(N-Z)个存储元件402上,将关联的第 二奇偶校验数据存储在P个存储元件402上,或者在另一种实施方式中,新配置存储模块 1710可将第二 ECC组块418的一部分存储在N个存储元件402上,将关联的第二奇偶校验 数据存储在P-Z个存储元件402上,其中P > 1。在一种实施方式中,新配置存储模块1710将第二 ECC组块418的一部分存储在先 前是存储奇偶校验数据的存储元件402的设备上。同样地,在另一种实施方式中,新配置 存储模块1710将与第二 ECC组块418关联的奇偶校验数据存储在先前是存储来自ECC组 块418的数据的存储元件402的设备上。一旦存储区域(例如逻辑擦除块414)已被擦除, 且准备好再次存储数据,重新配置装置120能够以任何方便的组合存储数据和奇偶校验数 据。在优选实施方式中,第二 ECC组块418存储在不同于被读取以获取第一 ECC组块418 的逻辑擦除块414的逻辑擦除块414中。存储的重新配置可重新配置逻辑擦除块414以及 ECC组块418存储在逻辑擦除块414内的方式。这可从存储在存储元件402上的ECC组块 418内部改变位数。在另一种重新配置中,ECC组块418的大小可被修改以维持由存储元件 402上的ECC组块418存储的相同位数。冗余存储系统(例如RAID系统)在一定数量的数据或奇偶校验存储元件402失效 的情况下提供了数据保护。阵列400以一种类RAID的方式被保护,因为数据类似于RAID被 条带化且利用奇偶校验数据被保护。如果这些存储元件402不被替代,缺陷的或不可用的 存储元件402的数量降低到RAID系统所能容纳的失效存储元件402的数量之下,数据将丢 失。然而,通过将存储元件的N+P个阵列400重新配置成存储元件的(N+P)-Z个阵列400, 即使在存储元件402未被替代的情况下,阵列仍400可保持数据保护的级别。有利地是,不 像常规RAID配置,失效的存储元件402不需要被替代。通过重新配置被RAID的数据,余下 的功能性存储元件402可被重新配置为容纳失效的存储元件402。在按上述的那样使用宏引退方法的情况下,可能需要逆向重新配置以将(N+P)_l 变回(N+P)状态。这个进程实质上与上述的一样,本领域技术人员将认识到第二 ECC组块 418可被进一步重新配置为存储在N+P个存储元件418上。
此外,如果更多的存储元件402失效或变得不可用,装置1700可继续重新配置ECC 组块418。在存储元件错误模块1702识别一个或多个不可用存储元件402并且重新配置数 据读取模块1704、数据重新生成模块1706、数据重新配置模块1708和新配置存储模块1710 运作以将一个或多个ECC组块418存储在(N+P) -Z个存储元件402之后,存储元件错误模 块1702可识别更多个不可用存储元件402。因此,重新配置数据读取模块1704、数据重新 生成模块1706、数据重新配置模块1708和新配置存储模块1710运作以将一个或多个额外 ECC组块418存储在((N+P)-Z)-Y个存储元件402上。Y可以表示在最近的重新配置之后 确定的不可用存储元件402的数量。图18是示意性方框图,示出了根据本发明的使用奇偶校验数据重新配置受保护 的固态存储元件402的阵列的装置1800的另一种实施方式。装置1800包括存储元件错误 模块1702、重新配置数据读取模块1704、数据重新生成模块1706、数据重新配置模块1708 和新配置存储模块1710,这些模块大体上类似于相对于图17的装置1700描述的模块。在不 同实施方式中,装置1800也可包括重新配置记录模块1802和存储元件错误位置模块1804, 下文将描述这些模块。在一种实施方式中,装置1800包括重新配置记录模块1802,重新配置记录模块 1802识别存储元件的阵列400的一个或多个区域,其中数据存储在(N+P)-Z个存储元件 402上。重新配置记录模块1802可通过将关于区域的数据记录在记录文件中来识别区域, 记录文件例如区域的位置、时间戳或有关于重新配置的数据何时首先被存储在区域中的序 列信息,等等。一个或多个区域可包括存储元件402上或多个存储元件402上的物理或逻 辑区域。区域可包括逻辑页416的一部分、逻辑页416、逻辑页416的群组、擦除块的一部 分、擦除块、擦除块的群组、一个或多个芯片块或一个或多个芯片。在一种实施方式中,重新 配置记录模块1802利用逻辑-物理映射识别记录中的区域。记录文件可在读取操作、程序 化操作等中使用,从而存储控制器104得知要存取哪些存储元件402。在一种实施方式中,重新配置记录模块1802为不可用存储元件402上的数据存储 跟踪不可用的存储区域。如果存储元件402的某些部分不可用且不起作用,数据可仍然存 储在可用部分上。因此,重新配置记录模块1802跟踪不可用存储区域上,从而数据存储在 (N+P)-Z个存储元件上用于不可用区域,并存储在N+P个存储元件402上用于不可用存储 区域之外的位置。存储区域包括N+P个存储元件402的每一个的一部分,并可包括逻辑页 416的一部分、逻辑页416、多个逻辑页416、逻辑擦除块414的一部分、逻辑擦除块414、多 个擦除块414、芯片块、多个芯片块、芯片和/或多个芯片。重新配置记录模块1802防止浪 费存储元件402的功能性部分。在一种实施方式中,重新配置记录模块1802跟踪具有变化数量的存储元件402的 不可用存储区域。具体地,重新配置记录模块1802可跟踪一个或多个不可用存储区域,其 中,数据在(N+P) -Z个存储元件402和一个或多个额外不可用存储区域上,在额外不可用存 储区域中,数据存储在((N+P)-Z)-X个存储元件402上。在除了不可用存储区域之外的存 储区域中,数据存储在N+P个存储元件402中。通常,相比于具有较少不可用存储元件402的存储区域而言,具有较多不可用存 储元件402的存储区域具有较高的性能。在一种实施方式中,根据数据的性能要求,数据存 储并隔离在存储元件的阵列400中。在该实施方式中,具有较高性能要求的数据被指定有高优选级,以被存储在具有较高性能的存储区域中。例如,频繁存取的某些数据可被存储在 具有较高性能的存储区域中。如上所述,N个存储元件402的N值较大的存储元件的阵列 400可具有较高的性能。在一种实施方式中,存储元件错误模块1702通过确定第一 ECC组块418中的错误 不可利用与第一 ECC组块418 —起存储的ECC修正来确定存储元件402出错。例如,存储 元件错误模块1702可使用检测装置118来确定第一 ECC组块418中的错误不可修正。在 另一种实施方式中,存储元件错误模块1702包括存储元件错误位置模块1804,存储元件错 误位置模块1804使用存储在存储一个或多ECC组块418的一个或多个存储元件402中的 和存储在存储关联的奇偶校验数据的存储元件402中的数据来识别不可用于存储数据的 存储元件402。存储元件错误位置模块1804可包括上述的检测装置118的一种实施方式, 以识别不可用的存储元件。在一种实施方式中,存储元件错误位置模块1804使用硬件门和 逻辑来替换存储在存储一个或多个ECC组块418的一个或多个存储元件402中的数据。图19是示意性流程图,示出了根据本发明的使用奇偶校验数据重新配置受保护 的固态存储元件402的阵列400的方法1900的一种实施方式。方法1900开始,在步骤1902, 存储元件错误模块1702确定一个或多个存储元件402不可用于存储数据(不可用存储元 件)。存储元件402是三个或更多个存储元件402的阵列的一部分,数据被写入阵列400的 逻辑页416中。此外,阵列400包括存储第一 ECC组块418的N个存储元件402和存储生 成自第一 ECC组块418的第一奇偶校验数据的P个存储元件402。在步骤1904,重新配置数据读取模块1704从除不可用存储元件402之外的存储元 件402读取数据(可用数据)。可用数据包括来自逻辑页416的数据。如果可用数据包括 第一奇偶校验数据,则在步骤1906,数据重新生成模块1706用第一奇偶校验数据重新生成 来自第一 ECC组块418的丢失的数据(丢失数据)。在步骤1908,数据重新配置模块1708从可用数据、丢失数据和/或存储控制器接 收的数据生成第二 ECC (新数据)。第二 ECC和数据被数据重新配置模块1708用以创建第 二 ECC组块418。数据重新配置模块1708也从第二 ECC组块418生成第二奇偶校验数据。 在一种实施方式中,数据重新配置模块1708不包括新数据,因此第二 ECC生成自第一 ECC 组块418的数据并因此通常与第一 ECC —致。在这种情况下,第二 ECC组块418与第一 ECC 组块418 —致。在新数据与第一 ECC组块418的数据混合的情况下,第二 ECC组块418的 数据不同于第一 ECC组块418的数据,因此,第二 ECC不同于第一 ECC,第二 ECC组块418不 同于第一 ECC组块418。在步骤1910,新配置存储模块1710将第二 ECC组块418的一部分和关联的第二奇 偶校验数据存储在(N+P)-Z个存储元件402上,其中1P,方法1900结束。在一种实 施方式中,至少重新配置数据读取模块1704、数据重新生成模块1706和数据重新配置模块 1708可运行在后台进程中。此外,后台进程可与垃圾收集一起运行。图20是示意性流程图,示出了根据本发明的用于确定额外不可用存储元件402的 方法2000的一种实施方式。方法2000开始,在步骤2002,存储元件错误模块1702确定一 个或多个存储元件402是不可用存储元件402。在步骤2004,重新配置数据模块1704、数据 重新生成模块1706、数据重新配置模块1708和新配置存储模块1710运作以将一个或多个 ECC组块418存储在(N+P)-Z个存储元件402上,其中,Z是被发现不可用的存储元件402的数量。在步骤2006,存储元件错误模块1702再次确定一个或多个额外存储元件402不 可用。在步骤2008,重新配置数据模块1704、数据重新生成模块1706、数据重新配置模块 1708和新配置存储模块1710运作以将一具或多个额外ECC组块418存储在((N+P)_Z)_Y 个存储元件402上,其中,Y是被发现为不可用的额外存储元件402的数量。在步骤2010, 重新配置记录模块1802跟踪一个或多个不可用存储区域,其中,数据存储在(N+P)-Z个存 储元件402和一个或多个额外不可用存储区域上,在额外不可用存储区域中,数据存储在 ((N+P) -Z) -Y个存储元件402上,方法2000结束。本发明可采用其他指定形式实施而不脱离本发明的宗旨或本质特点。描述的实施 方式在各个方面被视为仅仅是示例性而不是限制性的。因此,本发明的范围由附属的权利 要求确定,而不是由上述说明书确定。在本发明的权利要求的含义和等价范围内的所有改 变被包含在本发明的保护范围内。
权利要求
1.一种检测和替代失效的数据存储器的装置,该装置包括读取模块,其从存储设备的阵列读取数据,该阵列包括两个或多个存储设备和一个或 多个额外存储设备,额外存储设备存储来自存储设备的奇偶校验信息;ECC模块,其利用纠错码(ECC)确定测试的数据是否存在一个或多个错误以及错误是 否可用ECC修正,测试的数据包括由读取模块读取的数据;隔离模块,所述隔离模块响应于ECC模块确定错误存在于由读取模块读取的数据中且该错误不 可用ECC修正而从存储设备的阵列选定存储设备;并利用包括生成自奇偶校验数据的数据(替代数据)和读取自未被选定的存储设备的数 据(可用数据)的数据替代读取自选定的存储设备的数据,奇偶校验数据存储在一个或多 个额外存储设备上,其中,测试的数据还包括结合有替代数据的可用数据。
2.如权利要求1所述的装置,其中,隔离模块响应于ECC模块确定结合有替代数据的可 用数据包含不可用ECC修正的错误而选定用于测试的下一存储设备,下一存储设备选自存 储设备的阵列,隔离模块选定每个隔离模块用于测试,直到ECC模块确定结合有替代数据 的可用数据不包含错误或包含可用ECC修正的错误。
3.如权利要求1所述的装置,还包括引退模块,其响应于ECC模块确定结合有替代数据 的可用数据不包含错误或包含可用ECC修正的错误而基于引退策略引退选定的存储设备 和选定的存储设备上的一个或多个存储区域中的一个,该一个或多个存储区域包括一个或 多个错误,存储区域包括选定的存储设备的至少一部分。
4.如权利要求1所述的装置,还包括存储设备重新配置模块,其响应于ECC模块确定结 合有替代数据的可用数据不包含错误或包含可用ECC修正的错误而识别选定的存储设备, 从而为将来的操作生成数据以替代来自选定的存储设备的读取数据。
5.如权利要求1所述的装置,还包括记录模块,其响应于ECC模块确定结合有替代数据 的可用数据不包含错误或包含可用ECC修正的错误,进行下述操作中的一个或多个记录选定的存储设备的标识;和记录指明包括一个或多个错误的一个或多个存储区域的存储位置数据,该区域包括选 定的存储设备的至少一部分。
6.如权利要求5所述的装置,其中,记录模块记录选定的存储设备的标识而不记录包 括具有一个或多个错误的存储区域的存储位置数据。
7.如权利要求6所述的装置,还包括存储区域测试模块,其识别选定的存储设备内包 括错误的一个或多个存储区域,并且其中,记录模块还记录包括由存储区域测试模块识别 的一个或多个存储区域的存储位置数据。
8.如权利要求7所述的装置,其中,存储区域测试模块利用由读取模块进行的后续读 取并使用ECC模块和隔离模块确定具有不可修正的错误的存储区域来识别具有一个或多 个错误的存储区域,其中所述不可修正的错误通过结合替代数据和可用数据是可修正的。
9.如权利要求5所述的装置,其中,记录模块记录包括一个或多个错误的一个或多个 存储区域,还响应于读取模块进行的后续读取和使用ECC模块和隔离模块确定具有不可修 正的错误的存储区域,记录指明选定的存储设备中包括一个或多个错误的一个或多个额外存储区域的存储位置数据,其中所述不可修正的错误通过结合替代数据和可用数据是可修 正的。
10.如权利要求9所述的装置,其中,后续读取包括由存储区域测试模块初始化的读取 和来自读取请求的读取中的一个。
11.如权利要求5所述的装置,还包括区重新配置模块,其为了将来的操作,用来自一 个或多个额外存储设备的替代数据替代选定的存储设备中一个或多个存储区域的数据,从 而选定的存储设备中一个或多个存储区域外的数据不被替代。
12.如权利要求11所述的装置,其中,区重新配置模块用来自一个或多个额外存储设 备的替代数据替代来自选定的存储设备上的一个或多个存储区域的数据,并用来自相相同 的一个或多个额外存储设备的替代数据替代来自相同选定的存储设备或不同选定的存储 设备上的一个或多个额外存储区域的数据,一个或多个额外存储区域中的每一个包括一个 或多个错误,其中,一个或多个存储区域和一个或多个额外存储区域不共享共同的逻辑页。
13.如权利要求11所述的装置,其中,区重新配置模块用来自一个或多个额外存储设 备的替代数据替代来自一个或多个存储区域的数据,并用来自一个或多个不同的额外存储 设备的替代数据替代一个或多个额外存储区域,一个或多个额外存储区域中的每一个包括 一个或多个错误,其中,一个或多个存储区域和一个或多个额外存储区域共享共同的逻辑 页。
14.如权利要求5所述的装置,其中,存储区域包括下述中的一个或多个一个或多个 ECC组块、一个或多个物理页、一个或多个逻辑页、一个或多个物理擦除块、一个或多个逻辑 擦除块、芯片、芯片的一部分、一个或多个芯片块的一部分和一个或多个芯片块。
15.如权利要求5所述的装置,还包括分析模块,其分析记录以确定下述中的一项或多 项选定的存储设备中具有数据错误的区和错误类型。
16.如权利要求1所述的装置,还包括错误存储恢复模块,其响应于ECC模块确定结合 有替代数据的可用数据不包含错误或包含可用ECC修正的错误而擦除具有一个或多个错 误的擦除块以将擦除块准备用于将来的数据存储。
17.如权利要求16所述的装置,其中,引退模块引退擦除块并响应于下述情况用来自 一个或多个额外存储设备的替代数据替代来自擦除块的数据存储错误恢复模块擦除擦除块,顺序地将额外数据写入擦除块,读取模块顺序地读取额外数据,和使用ECC模块和隔离模块确定擦除块包括不可修正的错误,其中所述不可修正的错误 通过结合替代数据和可用数据是可修正的。
18.如权利要求1所述的装置,其中,读取模块从逻辑页的至少一部分读取数据,逻辑 页遍及存储设备的阵列,存储设备的阵列包括N+P个存储元件的阵列,存储元件的阵列包 括N个每个存储ECC组块的一部分的存储元件和P个存储奇偶校验数据的存储元件,ECC组 块包括存储的数据和生成自存储的数据的ECC,其中ECC遍及存储的数据,P个存储元件存 储生成自存储在N个存储元件中的ECC组块的奇偶校验数据。
19.如权利要求1所述的装置,还包括修正数据模块,其响应于ECC模块确定结合有替 代数据的可用数据不包含错误或包含可用ECC修正的错误而返回修正的数据。
20.如权利要求1所述的装置,还包括报告模块,其响应于ECC模块确定结合有替代数 据的可用数据包含不可用ECC修正的错误而报告错误。
21.如权利要求1所述的装置,其中,每个存储设备包括非易失性固态存储器。
22.—种检测和替代失效的数据存储器的系统,该系统包括存储设备的阵列,该阵列包括两个或多个存储设备和一个或多个额外存储设备,额外 存储设备存储来自存储设备的奇偶校验信息; 控制阵列的存储控制器; 从存储设备的阵列读取数据的读取模块;ECC模块,其利用纠错码(ECC)确定测试的数据是否存在一个或多个错误以及错误是 否可用ECC修正,测试的数据包括由读取模块读取的数据; 隔离模块,所述隔离模块响应于ECC模块确定错误存在于由读取模块读取的数据中 且该错误不可用ECC修正而从存储设备的阵列选定存储设备;并 利用包括生成自奇偶校验数据的数据(替代数据)和读取自未被选定的存储设备的数 据(可用数据)的数据替代读取自选定的存储设备的数据,奇偶校验数据存储在一个或多 个额外存储设备上,其中,测试的数据还包括结合有替代数据的可用数据。
23.一种包括计算机可读媒体的计算机程序制品,该计算机可读媒体具有计算机可读 的程序代码,可执行该程序代码以实现检测和替代失效的数据存储器的操作,该计算机程 序制品的操作包括从存储设备的阵列读取数据,该阵列包括两个或多个存储设备和一个或多个额外存储 设备,额外存储设备存储来自存储设备的奇偶校验信息;利用纠错码(ECC)确定测试的数据是否存在一个或多个错误以及错误是否可用ECC修 正,测试的数据包括由读取模块读取的数据;响应于ECC模块确定错误存在于数据中且该错误不可用ECC修正而从存储设备的阵列 选定存储设备;利用包括生成自奇偶校验数据的数据(替代数据)和读取自未被选定的存储设备的数 据(可用数据)的数据替代读取自选定的存储设备的数据,奇偶校验数据存储在一个或多 个额外存储设备上;及确定测试的数据是否不包含错误或包含可用ECC修正的错误,测试的数据还包括结合 有替代数据的可用数据。
全文摘要
本发明公开了一种用于检测和替代失效的数据存储器的装置、系统和方法。读取模块1002从存储设备902、904的阵列读取数据。该阵列包括存储设备902和存储来自存储设备902的奇偶校验信息的额外存储设备904。ECC模块1004利用纠错码(ECC)确定测试的数据是否存在错误以及错误是否可用ECC修正。测试的数据包括由读取模块1002读取的数据。隔离模块1006响应于ECC模块1004确定错误存在于由读取模块1002读取的数据中且数据是不可修正的而选定存储设备902。隔离模块1006还用替代数据和可用数据替代读取自选定的存储设备902的数据,其中,测试的数据包括结合有替代数据的可用数据。
文档编号G11C29/00GK102124527SQ200980128013
公开日2011年7月13日 申请日期2009年5月18日 优先权日2008年5月16日
发明者乔纳森·撒切尔, 乔舒亚·昂, 凯文·维格尔, 大卫·弗林, 杰里米·菲灵吉姆, 比尔·因斯克普, 约翰·斯特拉瑟 申请人:弗森-艾奥公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1