管理存储器阵列的方法和装置制造方法

文档序号:6487482阅读:113来源:国知局
管理存储器阵列的方法和装置制造方法
【专利摘要】本发明提供管理存储器阵列的方法和装置。所述方法包括,将存储器阵列条带化以形成多个条带;从每个条带中选择F个存储块作为本地校验块,并从存储器阵列中另外选择L个存储块作为全局校验块;对条带中的所有数据块进行(F+L)容错纠删编码,以生成(F+L)组校验数据,将其中的F组校验数据存储在所述F个本地校验块中;对于另外L组校验数据,进行跨条带运算以生成L组全局校验数据,将其分别存储在所述L个全局校验块中。所述装置与方法对应。通过本发明实施例的方法和装置,能够对存储器阵列中的多种错误进行检测和/或恢复,提高存储器阵列的容错能力和空间利用率。
【专利说明】管理存储器阵列的方法和装置
【技术领域】
[0001]本发明涉及存储器设备,更具体而言,涉及对存储器设备构成的存储器阵列进行管理和控制的方法和装置。
【背景技术】
[0002]随着信息技术的快速发展,需要存储和处理的数据量越来越庞大。为此,在增大单个存储器设备的存储密度和存储容量的同时,往往还采用由多个存储器设备构成的存储器阵列来存储数据。典型地,存储器阵列由多个独立的非易失性存储器设备构成,例如磁盘、SSD等设备;这些存储器设备共同连接到存储器阵列控制器,在该控制器的控制下执行与数据存储相关的操作。
[0003]除了控制阵列中的数据读写操作之外,存储器阵列控制器还控制存储器设备对读写操作中可能出现的各种错误进行检测和恢复。如本领域技术人员所知,存储器阵列中存在三种设备错误:设备故障(device failure)、潜在错误(latent error)和无记载错误(silent error)。
[0004]设备故障是指,整个存储器设备出现故障,因而无法进行读写操作的情况。潜在错误是指,存储器设备的一部分数据块(例如磁盘中的某个扇区)出现故障,因而无法对故障数据块进行读写操作的情况。由于无法对故障设备或其中的数据块进行数据的读写操作,因此,设备故障和潜在错误都可以由存储器设备自身检测出来。
[0005]为了能够对设备故障和潜在错误进行恢复,提出了 RAID (冗余磁盘阵列)技术。该技术中使用最广泛的容错能力为I的RAID5通过把数据条带化(stripping)分布到不同的存储设备上以提高数据访问的并行性,并在每个条带中采用一个校验数据块以使得磁盘阵列能够容忍一个磁盘故障或容忍一个条带中出现一个潜在扇区错误。然而,在一个磁盘故障和一个潜在扇区错误同时出现的时候,RAID5无法对包含两个失效数据块的条带进行修复。针对该问题,容错能力为2的RAID6被提出并被逐渐应用。RAID6能够同时容忍一个设备故障和一个潜在错误。然而,现有RAID具有以下不足:首先,容错能力仍然不够理想,其次,存储效率不够高,造成一定的存储空间浪费。
[0006]另一种设备错误是无记载错误。无记载错误是存储器设备自身无法检测到的错误,通常是由不成功的数据写入导致。无记载错误的原因包括以下几种典型情况:一种是在数据写入时,由于磁头定位错误导致将数据写入错误的存储位置;一种是数据写入过程未执行完毕,数据未能完整地写入;还有一种是数据写入操作未得到真正执行,目标存储位置仍保留失效的旧数据。以上几种情况中,前两种情况会导致数据损坏(corrupted),最后一种会导致数据过期(stale)。对于以上的无记载错误的情况,存储器设备自身无法进行检测和报错;如果在出现无记载错误的情况下照常执行数据读取,就会读出错误的数据。因此,对于无记载错误,需要附加地提供一定的机制来检测这样的错误,进而修复错误的数据。
[0007]对于无记载错误,现有技术提出了几种方案来进行检测。一种是改进数据的编码和解码方法,通过更完善的编码来实现无记载错误的检测。然而,在这样的方法中,对于无记载错误的定位过程较为复杂,执行效率不高。另一种方案是为数据添加并存储校验值。然而,当存储校验值的存储区出现无记载错误时,这样的方案仍然无法进行检测。
[0008]因此,综合以上,希望提出改进的机制来对存储器阵列进行管理,使得存储器阵列能够对至少一种设备错误进行检测和恢复。

【发明内容】

[0009]鉴于以上提出的问题,提出本发明,旨在提供一种方案,能够更好地管理存储器阵列,提闻其错误检测和恢复能力。
[0010]根据本发明一个实施例,提供一种管理存储器阵列的方法,所述存储器阵列由η个存储器设备构成,所述方法包括:将所述存储器阵列条带化以形成m个条带,其中每个条带包含η个存储块,所述η个存储块分别来自所述η个存储器设备;从每个条带中选择F个存储块作为本地校验块,并从所述存储器阵列中另外选择L个存储块作为全局校验块,将所述存储器阵列中除所述本地校验块和全局校验块之外的存储块的至少一部分作为数据块;对条带中的所有数据块中的数据进行(F+L)容错纠删编码,以生成(F+L)组校验数据,将其中的F组校验数据分别存储在该条带中的F个本地校验块中;对于所述(F+L)组校验数据中的L组校验数据,进行跨条带运算以生成L组全局校验数据,将所述L组全局校验数据分别存储在所述L个全局校验块中。
[0011]根据本发明另一实施例,提供一种管理存储器阵列的装置,所述存储器阵列由η个存储器设备构成,所述装置包括:条带化单元,配置为将所述存储器阵列条带化以形成m个条带,其中每个条带包含η个存储块,所述η个存储块分别来自所述η个存储器设备;选择单元,配置为从每个条带中选择F个存储块作为本地校验块,并从所述存储器阵列中另外选择L个存储块作为全局校验块,将所述存储器阵列中除所述本地校验块和全局校验块之外的存储块的至少一部分作为数据块;本地校验存储单元,配置为,对条带中的所有数据块中的数据进行(F+L)容错纠删编码,以生成(F+L)组校验数据,将其中的F组校验数据分别存储在该条带中的F个本地校验块中;以及全局校验存储单元,配置为,对于所述(F+L)组校验数据中的L组校验数据,进行跨条带运算以生成L组全局校验数据,将所述L组全局校验数据分别存储在所述L个全局校验块中。
[0012]通过本发明实施例的方法和装置,能够对存储器阵列中的至少一种错误进行检测和/或恢复,提高存储器阵列的容错能力和空间利用率。
【专利附图】

【附图说明】
[0013]通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
[0014]图1示出了适于用来实现本发明实施方式的示例性计算系统100的框图;
[0015]图2示出根据本发明实施例的管理存储器阵列的方法的流程图;
[0016]图3Α示意性示出一个存储器阵列;
[0017]图3Β示意性示出经过条带化的存储器阵列;
[0018]图4A-4C示出根据本发明实施例的存储器阵列示意图;[0019]图5示出根据一个实施例的存储全局校验数据的步骤;
[0020]图6A,6B分别示出与图4A和图4B对应的存储器阵列的示意图;
[0021]图7示出恢复错误数据块的步骤;
[0022]图8示出与图6A对应的存储器阵列中的错误示意图;
[0023]图9示出为存储器阵列添加校验和的步骤;
[0024]图10示出根据一个实施例的附加校验和的示意图;
[0025]图11示出根据一个实施例的检测无记载错误的流程图;以及
[0026]图12示出根据一个实施例的管理存储器阵列的装置的示意性框图。
【具体实施方式】
[0027]下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0028]图1示出了适于用来实现本发明实施方式的示例性计算系统100的框图。如图1所示,计算机系统100可以包括:CPU (中央处理单元)10URAM (随机存取存储器)102,ROM(只读存储器)103、系统总线104、硬盘控制器105、键盘控制器106、串行接口控制器107、并行接口控制器108、显示控制器109、硬盘110、键盘111、串行外部设备112、并行外部设备113和显示器114。在这些设备中,与系统总线104耦合的有CPU101、RAM102、R0M103、硬盘控制器105、键盘控制器106、串行控制器107、并行控制器108和显示控制器109。硬盘110与硬盘控制器105耦合,键盘111与键盘控制器106耦合,串行外部设备112与串行接口控制器107耦合,并行外部设备113与并行接口控制器108耦合,以及显示器114与显示控制器109耦合。应当理解,图1所述的结构框图仅仅是为了示例的目的,而不是对本发明范围的限制。在某些情况下,可以根据具体情况增加或减少某些设备。
[0029]所属【技术领域】的技术人员知道,本发明可以实现为系统、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:可以是完全的硬件、也可以是完全的软件(包括固件、驻留软件、微代码等),还可以是硬件和软件结合的形式,本文一般称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
[0030]可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是一但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPR0M或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0031]计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于一电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
[0032]计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括一但不限于一无线、电线、光缆、RF等等,或者上述的任意合适的组合。
[0033]可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言一诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言一诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络一包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0034]下面将参照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。
[0035]也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instructionmeans)的制造品(manufacture)。
[0036]也可以把计算机 程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
[0037]下面结合附图描述本发明的各个实施例。
[0038]现在参看图2,其描述了根据本发明实施例的管理存储器阵列的方法。如图2的流程图所示,管理由η个存储器设备构成的存储器阵列的方法包括:步骤21,其中将存储器阵列条带化;步骤22,从每个条带中选择F个存储块作为本地校验块,并从存储器阵列中选择L个存储块作为全局校验块;步骤23,对于每一条带,根据数据块中的数据生成(F+L)组校验数据,将其中的F组校验数据存储在F个本地校验块中;步骤24,对于针对每一条带生成的(F+L )组校验数据中的L组校验数据,进行跨条带运算以生成L组全局校验数据,将所述L组全局校验分别存储在L个全局校验块中。下面结合具体例子描述图2的各个步骤的执行。
[0039]图3Α示意性示出一个存储器阵列。如图中所示,该存储器阵列包括η个存储器设备(在图3Α的例子中,η=6),分别标注为设备1,设备2,…设备η。上述η个存储器设备共同连接到存储器阵列控制器30。对于这样的存储器阵列,首先执行步骤21,也就是将存储器阵列条带化以形成m个条带,使得每个条带包含分别来自n个存储器设备的n个存储块。 换而言之,可以将每个存储器设备视为一列,步骤21的条带化意味着将存储器设备从横向 上进一步划分为m行,每行对应一个条带。图3B示意性示出经过条带化的存储器阵列。通 过图3B的图示可以看到,通过条带化,每个存储器设备被划分为m个存储块(chunk)。位于 同一行的n个存储块构成一个条带。也就是说,n个存储器设备可以看作一个以存储块为元 素的n*m的矩阵。在图3B的例子中,m=5。然而,m的数目可以根据存储器设备的大小、所 需的存储块的大小等进行设定。在现有的RAID技术中也采用了类似的条带化的方式。因 此,不再详细描述条带化的具体执行步骤。
[0040]接着,在步骤22,从每个条带中选择F个存储块作为本地校验块,并从存储器阵列 中另外选择L个存储块作为全局校验块,将存储器阵列中除本地校验块和全局校验块之外 的存储块的至少一部分作为数据块。
[0041]首先描述本地校验块的选择。由于每个条带中包含n个存储块,因而显然地,F〈n。 实际上,F等于存储器阵列能够容忍的设备故障的数目。这将在稍后结合容错编码进行进 一步描述。在本地校验块之外,还从存储器阵列中选择L个存储块作为全局校验块。也就 是说,全局校验块和本地校验块不位于同一存储块的位置。根据容错纠删编码的容错机制, 全局校验块的数目L等于存储器阵列能够容忍的潜在错误的数目。
[0042]图4A示出根据一个实施例的存储器阵列示意图。具体地,图4A示出了从图3B的 条带化的存储器阵列中选出校验块的示意图。在图4A的例子中,F=L=I,因此,在每一条带 中均选择了 F=I个本地校验块(标记为LPC)。此外,在最后一个条带中,还另外选择了 L=I 个存储块作为全局校验块(标记为GPC)。尽管在图4A中出于示例目的示出了一种校验块 选择方式,但这并不是唯一和必须的。例如,尽管在图4A中,不同条带的m个本地校验块均 位于存储器设备n中(或者说,位于同一列),但是在其他例子中,不同条带的本地校验块可 以位于不同存储器设备中。例如,可以理解,在第二个条带中,可以将存储器设备n-1中的 存储块选择为本地校验块。类似地,尽管在图4A中全局校验块位于最后一个条带,但是在 其他例子中,可以在存储器阵列中选择任一存储块作为全局校验块,只要本地校验块和全 局校验块不位于同一存储块的位置。此外,本地校验块和全局校验块的选择可以以任意顺 序执行。在一个实施例中,可以首先选择本地校验块,然后选择全局校验块;在另一实施例 中,可以首先选择全局校验块;或者,可以同时选择本地校验块和全局校验块。
[0043]图4B示出根据另一个实施例的存储器阵列的示意图。在图4B的例子中,F=I,1=2。 因此,与图4A类似,在每一条带中均选择了 I个本地校验块LPC。此外,在条带m以及条带 m-1中,各选择了 I个存储块作为全局校验块GPC。尽管在图4B的例子中,多个全局校验块 位于不同的条带中,但这并不是必须的。在其他例子中,可以使得多个全局校验块的全部或 一部分在同一条带中。
[0044]图4C示出根据另一实施例的存储器阵列的示意图。在图4C的例子中,F=2,L=1。 因此,在每个条带中选择了 2个本地校验块,这样整个存储器阵列中共具有2*m=10个本地 校验块。这10个本地校验块分布在三个存储器设备中,其中存储器设备n中的所有存储块 均被选择作为本地校验块,存储器设备2和存储器设备3共同承载了其他本地校验块。此 夕卜,与图4A类似地,在最后一个条带中还另外选择了一个存储块作为全局校验块。
[0045]在一个实施例中,为了快速选择本地校验块,可以从n个存储器设备中选择F个存储器设备作为校验存储器,将这F个校验存储器中的存储块均作为本地校验块。如此,每个 条带中必然具有F个本地校验块。
[0046]以上描述了不同的F、L取值情况下的校验块选择的例子。如上所述,这些例子仅 仅是说明性的,本领域技术人员可以对以上实施例进行修改,获得更多种选择方式。并且, 基于以上的典型实施例,对于F和L具有其他取值的情况,本领域技术人员能够在发明构思 范畴内相应地选择本地校验块和全局校验块。
[0047]在一个实施例中,以上条带化的步骤21和选择校验块的步骤22都是由存储器阵 列控制器在存储器阵列初始化期间来执行。一旦选定了本地校验块和全局校验块,控制器 可以将选择结果以表格、索引等其他形式记录下来,以用于后续数据读写阶段的控制和管理。
[0048]在一个实施例中,在选择或设定了校验块的基础上,控制器在数据读写阶段利用 设定的校验块来存储对数据进行容错编码而产生的校验数据,从而为错误数据的恢复提供基础。
[0049]具体地,在步骤23中,对于每一条带,对该条带中的所有数据块中的数据进行 (F+L)容错纠删编码(erasure code),以生成(F+L)组校验数据,将其中的任意F组校验数 据分别存储在该条带中的F个本地校验块中。接着,在步骤24,对于针对每一条带生成的另 外L组校验数据,进行跨条带运算以生成L组全局校验数据,将其分别存储在L个全局校验 块中。
[0050]以上的步骤涉及通过纠删编码来产生校验数据并对其进行运算操作和存储的过 程。纠删码是源于信道传输的编码技术,因为能够容忍多个数据帧的丢失,被引入到分 布式存储领域,用于解决数据块的失效。目前,基于纠删码的容错技术成为最常用的能 够容忍多个数据块同时失效的容错编码技术。已有很多研究在提高容错能力和降低编 码复杂度等方面提出了很多具体的纠删编码方法。依据编码方式的不同,这些方法可 以分为Reed-Solomon码(简称RS码)、奇偶阵列码(parity array code)、奇偶校验码 (parity-check code)和低密度奇偶校验码(low-density parity-check code,简称 LDPC 码)等类型。
[0051]一般来说,采用纠删码进行容错时,首先要把待存储的数据对象分割成若干数据 块,然后对这些数据块进行编码,得到一些编码后的编码块。读取数据时只要获得足够数量 的编码后的数据块,就可以解码得到原始数据。用k表示编码前数据块的个数,b表示每个 数据块包含的比特数,k’表示一个不小于k的整数,n是编码后的数据块个数,则可以用一 个四元组(n,k, b, k')来定义纠删码。这个定义表示利用纠删码编码以后,可以通过获得 编码后的任意k'个数据块来解码还原原始数据块。这个定义可简化表示为(11,10,其中11 表示数据块和冗余块的总数,k表示要获取的数据块的最少数目。也就是说,在将原始k个 数据块编码为n个数据块之后,通过编码后的任意k个数据块就可以重构原始的k个数据 块。
[0052]不同的纠删码的容错能力有所不同。对于能够容忍N个数据块的错误的纠删码来 说,至少要在原始数据块基础上产生N个冗余的校验数据块。因此,对于通过步骤21和22 配置的存储器阵列来说,为了使得存储器阵列能够同时容忍F个设备故障和L个潜在错误, 就需要采用能够容忍(F+L)个数据块失效的容错纠删编码。相应地,经过这样的纠删编码之后,会产生至少(F+L)冗余数据块,每一冗余数据块包含一组校验数据。
[0053]具体地,结合图3和图4的例子可以看到,为了执行纠删编码,已经通过条带化将 存储器划分为存储块;在选择了 F个本地校验块和L个全局校验块之后,存储器阵列中的 其他存储块均可作为数据块。为了能够在数据块中的数据出现错误时恢复或重构这些数 据,在步骤23,对于每一条带中的所有数据块中的数据进行能够容许(F+L)个错误的纠删 编码,也就是(F+L)容错纠删编码。如上所述,这会产生(F+L)组冗余校验数据。由于已经 为每个条带选择了 F个本地校验块,因此可以将产生的(F+L)组冗余校验数据中的F组校 验数据分别存储在所选择的F个本地校验块中。存储在本地校验块中的这F组校验数据可 以是编码产生的(F+L )组校验数据中的任意F组。
[0054]可以理解,如果存储全部(F+L)组校验数据,就可以直接基于冗余校验数据和未 损坏的数据块来恢复出现错误的数据块。然而,这样的方案需要在存储器阵列中划出大量 空间来存储冗余校验数据,从而降低存储器的数据存储能力。因此,为了提高存储器阵列 的空间利用率,在本发明的实施例中,对于每一条带,仅利用本地校验块来存储编码产生的 (F+L)组冗余校验数据中的一部分,也就是F组校验数据。对于另外的L组校验数据,在步 骤24中,对其进行跨条带的运算,将运算结果存储在全局校验块中。也就是说,对于针对每 一条带产生的另外L组校验数据,将其作为中间结果进行继续运算,从而产生L组全局校验 数据。利用步骤22中选择的L个全局校验块来存储产生的L组全局校验数据。
[0055]图5示出根据一个实施例的存储全局校验数据的步骤,也就是图2的步骤24的子 步骤。如图5所示,首先在步骤241,对于每一条带,将编码产生的(F+L)组校验数据中没有 存储在本地校验块中的L组校验数据分别存储在L个虚拟校验块中。上述的虚拟校验块只 是出于描述简单的目的对临时存储L组校验数据的存储部分的表达。在实际例子中,虚拟 校验块可以是存储器阵列的一部分,也可以位于存储器阵列控制器中,或者位于与存储器 阵列控制器连接的其他存储介质上。在一个例子中,为了更清楚的描述,可以认为,附加地 设置了 L个虚拟校验存储器,这L个虚拟存储器同样也被条带化。每个虚拟校验存储器中的 存储块就作为上述的虚拟校验块。如此,与F个本地校验块类似地,每个条带还对应地“具 有”L个虚拟校验块。F个本地校验块和L个虚拟校验块共同存储了纠删编码产生的(F+L) 组冗余校验数据。
[0056]接着,在步骤242,对所有不同条带所分别对应的虚拟校验块中的校验数据进行运 算,以生成L组全局校验数据。在引入虚拟校验存储器的表述方式的情况下,该步骤就是对 L个虚拟校验存储器的每一个中的所有虚拟校验块中的校验数据进行运算,从而生成L组 全局校验数据。
[0057]上述运算可以采用多种运算方法。在一个实施例中,对不同条带的虚拟校验块中 的校验数据进行异或运算,从而生成全局校验数据。在另一实施例中,上述运算可以是对不 同条带的虚拟校验块中的校验数据进行求和运算。在另一实施例中,上述运算还可以是对 不同条带的校验数据进行其他线性运算。在另一实施例中,所述运算可以是以上列举的几 种运算的组合。除此之外,本领域技术人员还可以采用其他运算方式,只要能够从运算结果 容易地反推获得参与运算的校验数据组。
[0058]对于通过跨条带运算所获得的L组全局校验数据,在步骤243中,将其分别存储在 步骤22中所选择的L个全局校验块中。由此,将每条带L个校验块的存储量“压缩”为一共需要L个(全局)校验块,从而更好地利用了存储器阵列的存储空间。
[0059]下面结合具体例子描述上述过程。图6A,6B分别示出与图4A和图4B对应的存储 器阵列的示意图。在图6A的例子中,与图4A同样地,F=L=1。因此,可以对图6A中每一条 带中的数据块进行容错为2的纠删编码,由此产生2组冗余校验数据。将其中任意一组冗 余数据存储在图4A中所选择的本地校验块LPC中。除了选择的本地校验块LPC之外,图6A 还以虚线示出所设置的每条带I个的虚拟校验块VPC。可以认为这m个虚拟校验块构成一 个虚拟校验存储器VS。在上述的步骤241中,针对每一条带,将生成的2组冗余校验数据中 没有存储在LPC中的那组校验数据存储在虚拟校验块VPC中。接着,在步骤242,对所有不 同条带所对应的VPC中的数据进行运算,也就是对虚拟校验存储器VS中存储的所有校验数 据进行运算,由此获得I组全局校验数据。这组全局校验数据可以存储在已经选择的全局 校验块GPC中。
[0060]图6B的存储器阵列与图4B所示相对应。因此,在图6B中,F=1,L=2。因此,可以 对图6B每一条带中的数据块进行容错为3的纠删编码,由此产生3组冗余校验数据。将其 中I组冗余数据存储在图4B中所选择的本地校验块LPC中。此外,在6B中,还设置了 L=2 个虚拟校验存储器VSI和VS2。VSI和VS2也同样地进行了条带化。因此,每个条带还对应 地“具有”2个虚拟校验块。基于此,在步骤241中,针对每一条带,将没有存储在LPC中的另 外2组校验数据分别存储在该条带对应具有的2个虚拟校验块VPC中。接着,在步骤242, 对于每一虚拟校验存储器VS,对其中存储的所有校验数据进行运算,以获得全局校验数据, 然后在步骤243将运算获得的全局校验数据分别存储在全局校验块中。具体地,对VSl中 的虚拟校验块中的数据进行运算可以获得全局校验数据D1,对VS2中的数据进行运算可以 获得全局校验数据D2。接着,可以将Dl存储在GPCl中,将D2存储在GPC2中。
[0061]对于F和L具有其他取值的情况,本领域技术人员可以参考以上具体例子适当地 执行步骤23-24,从而通过本地校验块和全局校验块来存储容错纠删编码产生的冗余校验 数据。利用这样的冗余校验数据,可以在存储器阵列出现设备故障和/或潜在错误时,对错 误的数据块进行恢复。
[0062]根据本发明一个实施例,基于以上所存储的冗余校验数据,管理存储器阵列的方 法还包括利用这些校验数据恢复错误数据块的步骤。图7示出该步骤的流程图。如图7所 示,首先在步骤71,对于每一条带,利用未出现错误的数据块和F个本地校验块中存储的F 组校验数据来恢复F个因设备故障出现错误的数据块。接着,在步骤72,对于不存在潜在错 误的条带,利用恢复的数据块和所述F组校验数据获得该条带的L组校验数据。在步骤73, 利用L个全局校验块中存储的L组全局校验数据以及步骤72获得的所述L组校验数据,获 得具有潜在错误的条带所对应的L组校验数据。最后,在步骤74,对于具有潜在错误的条 带,至少利用步骤73获得的L组校验数据,恢复L个潜在错误。可以理解,以上流程是针对 存储器阵列中同时存在F个设备故障和L个潜在错误的情况。如果存储器阵列中仅存在设 备故障,那么仅需要执行步骤71。如果存储器阵列中仅存在潜在错误,那么仅需要执行步骤 72-74。下面结合具体例子描述上述步骤的执行。
[0063]图8示出与图6A对应的存储器阵列中的错误示意图。如前所述,该存储器阵列中 能够同时容忍I个设备故障和I个潜在错误。假定其中存储器设备2出现了故障,相应地, 其中所有数据块,也就是存储器阵列中的整个第二列,都出现错误。此外,存储器设备3中第二条带的存储块也出现了故障。错误的数据块以阴影块示出。在图8的存储器阵列已经 按照图2所示的方法分别在本地校验块和全局校验块中存储冗余校验数据的情况下,就可 以利用这些校验数据恢复错误的数据块。
[0064]具体地,在步骤71,根据纠删码的纠错机制,由于已知设备故障的位置,因此可以 利用每个条带中的正常数据块和I个本地校验块来恢复I个错误数据块。如此,出现错误 的存储器设备2中的数据块,也就是阵列的整个第2列都可以得到恢复。于是,对于不存在 潜在错误的条带,也就是除条带2之外的条带,由于设备故障引起的错误数据块已经得到 恢复,整个条带中已经没有错误数据块。对于这样的条带,在步骤72,基于所有数据块重新 计算纠删码就可以再次获得2组冗余校验数据。如前所述,这2组校验数据中的I组已经 存储在本地校验块中。因此,通过将获得的2组校验数据与本地校验块中的数据进行对比, 就可以确定出虚拟校验块中存储的校验数据。这样,就获得了条带1,3-5所对应的虚拟校 验块中的数据。接着,在步骤73,由于已知全局校验数据的运算方式,就可以利用全局校验 块中存储的全局校验数据和已知的虚拟校验块中的数据(即条带1,3-5所对应的虚拟校验 块中的数据),反推未知的虚拟校验块(即,存在潜在错误的条带2所对应的虚拟校验块)中 存储的数据。这时,对于条带2,就获得了全部2组冗余校验数据。于是,在步骤74,就可以 利用2组冗余校验数据,即本地校验块中的校验数据和步骤73中获得的虚拟校验块中的校 验数据,恢复得到错误的数据块。通过以上过程,就可以恢复I个设备故障和I个潜在错误 所造成的错误数据块。
[0065]对于存在多个设备故障的情况,即F>1,可以在步骤71中利用F个本地校验块同 时恢复F个因设备故障出现的错误数据块。对于存在多个潜在错误的情况,即L>1,步骤73 中未知的虚拟校验块就有L个,而全局校验块也有L个。在已知全局校验块的运算方式的 情况下,可以从L个全局校验块和已知的虚拟校验块来推出未知的L个虚拟校验块。进一 步地,再利用获得的L个虚拟校验块和其他数据块恢复L个潜在错误的数据块。对于以上 过程,本领域技术人员在阅读以上例子和具体描述的情况下,能够针对其他F和L取值的情 况适当地执行以上的步骤71-74,从而恢复因设备故障和潜在错误而出现的错误数据块。
[0066]在一个实施例中,根据存储器设备的大小,可以进一步将一个大的存储器阵列划 分为若干逻辑组,每一逻辑组包含固定数目的条带。以上所述的选择本地校验块和全局校 验块的步骤,产生并存储冗余校验数据的步骤,以及根据冗余校验数据恢复错误数据块的 步骤均可以针对一个或多个逻辑组(而不必针对整个存储器阵列)来进行。这使得存储器阵 列的设置和纠错更加灵活。然而,出于描述的简单,本文主要针对存储器阵列进行描述。但 应理解,在进行与全局校验块相关的操作和处理时,该全局校验块也可以仅针对某一逻辑 组,而不必是整个存储器阵列。
[0067]综合以上,本发明实施例的方法在存储器阵列的初始化阶段对存储器阵列进行设 置,这样的设置包括将存储器阵列条带化并从中选择本地校验块和全局校验块。在数据存 储阶段,就可以根据之前的设置,在本地校验块和全局校验块中分别存储对数据块进行纠 删编码所产生的冗余校验数据。于是,在存储器阵列出现设备故障和潜在错误时,就可以 依据本地校验块和全局校验块中存储的冗余校验数据,对错误数据块进行恢复。通过本地 校验块和全局校验块相结合的方式,能够在较少占用存储器阵列的存储空间的情况下对任 意数目的设备故障和潜在错误进行恢复,从而提高了存储器阵列的空间使用效率和容错能力。
[0068]如前所述,存储器阵列中还存在一种类型的错误,即无记载错误。通常,存储器设 备自身无法检测到这种错误,也无法确定错误的位置。为此,本发明实施例的管理方法还通 过添加校验和的方式对存储器阵列中的无记载错误进行检测和恢复。
[0069]在一个实施例中,本发明的管理方法还包括为存储器阵列添加校验和的步骤。图 9示出该步骤的流程图。如图9所示,在步骤91,对于存储器阵列中的每一数据块,计算该 数据块的校验和,并将该校验和附加到对应的本地校验块和全局校验块。接着,在步骤92, 对于每一本地校验块,基于该本地校验块自身连同所附加的数据块的校验和一起计算自身 校验和,将该自身校验和附加到该本地校验块;在步骤93,对于每一全局校验块,基于该全 局校验块自身连同所附加的数据块的校验和一起计算自身校验和,将该自身校验和附加到 该全局校验块。下面结合具体例子描述上述步骤的执行。
[0070]图10示出根据一个实施例的附加校验和的示意图。图10中D0-D4表示数据块,Pl 和P2表示本地校验块。所有存储块D0-P2可以构成存储器阵列的一个条带,例如图4C所示 的存储器阵列的任意一个条带。在步骤91,针对每一数据块Di计算校验和CKi,并将其附 加到对应的本地校验块和全局校验块。对于一个数据块来说,它对应的本地校验块也就是 同一条带中的本地校验块。因此,每一本地校验块被附加了同一条带中所有数据块的校验 和。如图10所示,Pl和P2均被附加了来自数据块D0-D4的校验和CK0-CK4。接着,在步骤 92,基于本地校验块Pi自身连同所附加的校验块CK0-CK4,一起计算自身校验和CK-Pi。这 里,在计算自身校验和时,已经将附加的数据块的校验和包含在内。尽管没有示出全局校验 块,但是可以理解,全局校验块是对存储器阵列(或逻辑组)中所有条带的综合处理,因而存 储器阵列(或逻辑组)中的所有数据块都会将其校验和附加给全局校验块。在图6A的例子 中,全局校验块会附加有24个数据块的校验和。相应地,在步骤93,对于每一全局校验块, 基于全局校验块自身连同所附加的全部校验块一起计算自身校验和,并将其附加到全局校 验块。尽管这会使得全局校验块中存储大量的校验和,但是,由于校验和的字节数非常小, 因此存储这些校验和并不会占用大量存储空间。更重要的是,这样的存储方式对于存储器 阵列中潜在错误的检测非常有利。在一个实施例中,在以上附加校验和时,将其作为后缀添 加到数据末端,一同存储在数据块中。
[0071]根据一个实施例,本发明的管理方法还包括检测无记载错误的步骤。如前所述,无 记载错误主要包括数据损坏和数据过期。当数据块Di中出现数据损坏时,通过检查Di对 应的校验和CKi就可以检测到这样的错误。对于数据过期的核查则要通过不同存储块之间 的交叉核查来实现。
[0072]图11示出根据一个实施例的检测无记载错误的流程图。如图11所示,首先在步骤 1101,核查校验块Pi与对应的自身校验和CK-Pi的一致性。这里的校验块Pi可以是任意 本地校验块或全局校验块。如果二者不一致,则在步骤1102,确定Pi出现了数据损坏。此 时,可以为Pi添加错误标签。如果二者一致,则前进至步骤1103,比较Pi附加的与数据块 Dj对应的校验和CKj以及根据数据块Dj计算的校验和CKj。假定数据块Dj进行了数据更 新,相应地,附加到Pi的校验和CKj也会进行更新。因此,如果Pi附加的校验和CKj与根 据数据块Dj计算的CKj相一致,那么在步骤1104中,可以认定校验块Pi没有错误。如果 两者不一致,那么有可能是因为Dj本身出现了数据过期,未能成功更新,但是Pi所附加的CKj已经进行了更新。还有一种可能是Pi出现了数据过期的错误,未能更新,因此其附加的 CKj是过期的数据,与根据更新后的数据块Dj计算的CKj不一致。因此,还需要对Pi进行 进一步判断。具体地,在步骤1105,将Pi所附加的CKj与其他校验块中的CKj相比较。由 于存储器阵列中至少存在2个校验块(I个本地校验块和I个全局校验块),因此校验块Pi 可以与任意其他校验块就CKj进行比较。如果比较结果为,校验块Pi中的CKj与其他校验 块中的CKj也不相同,那么可以在步骤1106中确定Pi出现了数据过期。如果比较结果为, 校验块Pi中的CKj与其他校验块中的CKj相同,也就是说,根据数据块Dj计算的CKj与两 个校验块中的CKj均不相同,那可以在步骤1107中确定,数据块Dj出现了数据过期。
[0073]通过以上的方法,可以对数据块和校验块中的无记载错误均进行有效的检测。在 检测到无记载错误的情况下,可以利用无错误标签的剩余数据块和校验块来恢复错误的存 储块。
[0074]综合以上,通过对存储器阵列执行本发明实施例的方法,可以有效地检测并恢复 存储器阵列中的各种错误。
[0075]基于同一发明构思,本发明还提供了一种管理存储器阵列的装置。图12示出根据 一个实施例的管理存储器阵列的装置的示意性框图。如图所示,用于管理存储器阵列的装 置总体上用120表示。根据一个实施例,装置120包括:条带化单元121,配置为将由n个 存储器设备构成的存储器阵列条带化以形成m个条带,其中每个条带包含n个存储块,所述 n个存储块分别来自所述n个存储器设备;选择单元122,配置为从每个条带中选择F个存 储块作为本地校验块,并从所述存储器阵列中另外选择L个存储块作为全局校验块,将所 述存储器阵列中除所述本地校验块和全局校验块之外的存储块的至少一部分作为数据块; 本地校验存储单元123,配置为对条带中的所有数据块中的数据进行(F+L)容错纠删编码, 以生成(F+L)组校验数据,将其中的F组校验数据分别存储在该条带中的F个本地校验块 中;以及全局校验存储单元124,配置为,对于上述(F+L)组校验数据中的L组校验数据,进 行跨条带运算以生成L组全局校验数据,将所述L组全局校验数据分别存储在所述L个全 局校验块中。
[0076]在一个实施例中,装置120还包括错误恢复单元,配置为执行图7所示的流程。
[0077]在一个实施例中,装置120还包括校验和附加单元125,用以为存储器阵列中的存 储块附加校验和。具体地,校验和附加单元125包括第一附加模块,配置为对于存储器阵列 中的数据块,计算该数据块的校验和,并将该校验和附加到对应的本地校验块和全局校验 块;第二附加模块,配置为基于本地校验块连同所附加的数据块的校验和一起计算该本地 校验块的自身校验和,将该本地校验块的自身校验和附加到该本地校验块;以及第三附加 模块,配置为基于全局校验块连同所附加的数据块的校验和一起计算该全局校验块的自身 校验和,将该全局校验块的自身校验和附加到该全局校验块。
[0078]在一个实施例中,装置120还包括检测单元,配置为检测存储器阵列中的无记载 错误。具体地,检测单元可以执行图11所示的步骤流程。
[0079]以上各单元的具体执行方式可以参照以上结合具体例子对方法步骤的描述,在此 不再赘述。
[0080]在一个实施例中,装置120的全部或一部分可以集成到现有的存储器阵列控制器 中,作为其功能的增强。在另一实施例中,装置120可以作为单独装置与现有的存储器阵列控制器通信,辅助控制器进行存储器阵列的控制和管理。
[0081]利用以上所述的方法和装置,能够对存储器阵列中的各种错误进行检测和/或恢 复,提高存储器阵列的容错能力和空间利用率。
[0082]可以理解,附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法 和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个 方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一 个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中, 方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实 际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也 要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可 以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算 机指令的组合来实现。
[0083]以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也 不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技 术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨 在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领 域的其它普通技术人员能理解本文披露的各实施例。
【权利要求】
1.一种管理存储器阵列的方法,所述存储器阵列由η个存储器设备构成,所述方法包括: 将所述存储器阵列条带化以形成m个条带,其中每个条带包含η个存储块,所述η个存储块分别来自所述η个存储器设备; 从每个条带中选择F个存储块作为本地校验块,并从所述存储器阵列中另外选择L个存储块作为全局校验块,将所述存储器阵列中除所述本地校验块和全局校验块之外的存储块的至少一部分作为数据块; 对条带中的所有数据块中的数据进行(F+L)容错纠删编码,以生成(F+L)组校验数据,将其中的F组校验数据分别存储在该条带中的F个本地校验块中; 对于所述(F+L)组校验数据中的L组校验数据,进行跨条带运算以生成L组全局校验数据,将所述L组全局校验数据分别存储在所述L个全局校验块中。
2.根据权利要求1的方法,其中从每个条带中选择F个存储块作为本地校验块包括,从所述η个存储器设备中选择F个存储器设备作为校验存储器,将F个校验存储器中的存储块均作为本地校验块。
3.根据权利要求1的方法,其中进行跨条带运算以生成L组全局校验数据包括: 对于每一条带,将所述另外L组校验数据分别存储在L个虚拟校验块中;以及 对所有不同条带所分别对应的虚拟校验块中的校验数据进行运算,以生成L组全局校验数据。
4.根据权利要求3的方法,还包括,设置L个虚拟校验存储器,使得该L个虚拟存储器被条带化,将每个虚拟校验存储器中的存储块作为所述虚拟校验块。
5.根据权利要求1的方法,其中所述跨条带运算包括以下中的一种或多种的组合:异或运算、求和运算和线性运算。
6.根据权利要求1的方法,还包括: 对于每一条带,利用未出现错误的数据块和F个本地校验块中存储的F组校验数据来恢复F个因设备故障出现错误的数据块。
7.根据权利要求6的方法,还包括: 对于不存在潜在错误的条带,利用恢复的数据块和所述F组校验数据获得该条带的L组校验数据; 利用L个全局校验块中存储的L组全局校验数据以及所获得的L组校验数据,获得具有潜在错误的条带所对应的L组校验数据;以及 至少利用具有潜在错误的条带所对应的L组校验数据恢复L个潜在错误。
8.根据权利要求1的方法,还包括: 对于存储器阵列中的数据块,计算该数据块的校验和,并将该校验和附加到对应的本地校验块和全局校验块; 基于本地校验块连同所附加的数据块的校验和一起计算该本地校验块的自身校验和,将该本地校验块的自身校验和附加到该本地校验块;以及 基于全局校验块连同所附加的数据块的校验和一起计算该全局校验块的自身校验和,将该全局校验块的自身校验和附加到该全局校验块。
9.根据权利要求8的方法,还包括:通过核查特定校验块Pi的自身校验和CK-Pi来检测该校验块Pi中的数据损坏,所述校验块Pi为任一本地校验块或全局校验块。
10.根据权利要求9的方法,还包括:将所述校验块Pi中附加的与数据块Dj对应的校验和CKj与根据数据块Dj计算的校验和CKj以及其他校验块中附加的校验和CKj相比较,从而检测所述校验块Pi中的数据过期。
11.一种管理存储器阵列的装置,所述存储器阵列由η个存储器设备构成,所述装置包括: 条带化单元,配置为将所述存储器阵列条带化以形成m个条带,其中每个条带包含η个存储块,所述η个存储块分别来自所述η个存储器设备; 选择单元,配置为从每个条带中选择F个存储块作为本地校验块,并从所述存储器阵列中另外选择L个存储块作为全局校验块,将所述存储器阵列中除所述本地校验块和全局校验块之外的存储块的至少一部分作为数据块; 本地校验存储单元,配置为,对条带中的所有数据块中的数据进行(F+L)容错纠删编码,以生成(F+L)组校验数据,将其中的F组校验数据分别存储在该条带中的F个本地校验块中; 全局校验存储单元,配置为,对于所述(F+L)组校验数据中的L组校验数据,进行跨条带运算以生成L组全局校验数据,将所述L组全局校验数据分别存储在所述L个全局校验块中。
12.根据权利要求11的装置,其中所述选择单元配置为,从所述η个存储器设备中选择F个存储器设备作为校验存储器,将F个校验存储器中的存储块均作为本地校验块。
13.根据权利要求11的装置,其中所述全局校验存储单元配置为: 对于每一条带,将所述另外L组校验数据分别存储在L个虚拟校验块中;以及 对所有不同条带所分别对应的虚拟校验块中的校验数据进行运算,以生成L组全局校验数据。
14.根据权利要求13的装置,所述选择单元还配置为,设置L个虚拟校验存储器,使得该L个虚拟存储器被条带化,将每个虚拟校验存储器中的存储块作为所述的虚拟校验块。
15.根据权利要求11的装置,其中所述跨条带运算包括以下中的一种或多种的组合:异或运算、求和运算和线性运算。
16.根据权利要求11的装置,还包括错误恢复单元,配置为: 对于每一条带,利用未出现错误的数据块和F个本地校验块中存储的F组校验数据来恢复F个因设备故障出现错误的数据块。
17.根据权利要求16的装置,其中所述错误恢复单元还配置为: 对于不存在潜在错误的条带,利用恢复的数据块和所述F组校验数据获得该条带的L组校验数据; 利用L个全局校验块中存储的L组全局校验数据以及所获得的L组校验数据,获得具有潜在错误的条带所对应的L组校验数据;以及 至少利用具有潜在错误的条带所对应的L组校验数据恢复L个潜在错误。
18.根据权利要求11的装置,还包括校验和附加单元,包括: 第一附加模块,配置为对于存储器阵列中的数据块,计算该数据块的校验和,并将该校验和附加到对应的本地校验块和全局校验块;第二附加模块,配置为基于本地校验块连同所附加的数据块的校验和一起计算该本地校验块的自身校验和,将该本地校验块的自身校验和附加到该本地校验块;以及 第三附加模块,配置为基于全局校验块连同所附加的数据块的校验和一起计算该全局校验块的自身校验和,将该全局校验块的自身校验和附加到该全局校验块。
19.根据权利要求18的装置,还包括检测单元,配置为通过核查特定校验块Pi的自身校验和CK-Pi来检测该校验块Pi中的数据损坏,所述校验块Pi为任一本地校验块或全局校验块。
20.根据权利要求19的装置,所述检测单元还配置为:将所述校验块Pi中附加的与数据块Dj对应的校验和CKj与根据数据块Dj计算的校验和CKj以及其他校验块中附加的校验和CKj相比较,从而检测所述校验块Pi中的数据过期。
【文档编号】G06F11/08GK103577274SQ201210270002
【公开日】2014年2月12日 申请日期:2012年7月31日 优先权日:2012年7月31日
【发明者】李明强, 何欢 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1