CN101681283A - 存储系统中的错误纠正和检测的系统和方法 - Google Patents
存储系统中的错误纠正和检测的系统和方法 Download PDFInfo
- Publication number
- CN101681283A CN101681283A CN200880015751A CN200880015751A CN101681283A CN 101681283 A CN101681283 A CN 101681283A CN 200880015751 A CN200880015751 A CN 200880015751A CN 200880015751 A CN200880015751 A CN 200880015751A CN 101681283 A CN101681283 A CN 101681283A
- Authority
- CN
- China
- Prior art keywords
- memory
- mistake
- raid
- dimm
- verification
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/16—Protection against loss of memory contents
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
- G06F11/108—Parity data distribution in semiconductor storages, e.g. in SSD
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2211/00—Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
- G06F2211/10—Indexing scheme relating to G06F11/10
- G06F2211/1002—Indexing scheme relating to G06F11/1076
- G06F2211/1045—Nested RAID, i.e. implementing a RAID scheme in another RAID scheme
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2211/00—Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
- G06F2211/10—Indexing scheme relating to G06F11/10
- G06F2211/1002—Indexing scheme relating to G06F11/1076
- G06F2211/1057—Parity-multiple bits-RAID6, i.e. RAID 6 implementations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2211/00—Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
- G06F2211/10—Indexing scheme relating to G06F11/10
- G06F2211/1002—Indexing scheme relating to G06F11/1076
- G06F2211/1064—Parity-single bit-RAID3, i.e. RAID 3 implementations
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Hardware Redundancy (AREA)
Abstract
一种存储系统中的错误纠正和检测的系统和方法。所述系统包括存储控制器、多个存储器模块以及机制。所述存储器模块与所述存储控制器以及多个存储器件通信。所述机制检测到所述存储器模块之一的故障可能与另一存储器模块上的存储器件故障同时发生。所述机制允许所述存储系统在存在存储器模块故障和存储器件故障的情况下继续未受阻碍地运行。
Description
背景技术
本发明一般地涉及计算机存储器,具体地说,本发明涉及RAID存储系统中的错误检测和纠正。
计算机系统通常需要大量高速RAM(随机存取存储器),以在计算机接通电源和运行时保存诸如操作系统软件、程序和其他数据之类的信息。此信息一般采用二进制,由称为数据位的1和0模式组成。所述数据位经常在更高级别上进行分组和组织。例如,一个字节通常由8个位组成,尽管当字节中还包括识别和/或纠正错误时使用的信息时,所述字节还可包含附加位(例如,9、10等)。该二进制信息一般在计算机系统接通电源和初始程序加载(IPL)时,被从诸如硬盘驱动器(HDD)之类的非易失性存储装置(NVS)加载到RAM。在正常计算机操作期间,还从NVS分页出数据以及将数据分页到NVS。一般而言,计算机系统所用的所有程序和信息无法装入较昂贵的小型动态RAM(DRAM)中,即使能装入,也会在计算机系统断电时丢失数据。目前,通常使用大量HDD来构建NVS系统。
计算机RAM经常被设计为可插拔的子系统,后者通常采用模块形式,如此可根据每个系统和应用的特定存储要求,不断将更多的RAM添加到每个计算机。缩略词“DIMM”表示双列直插存储器模块,这可能是目前在用的最流行的存储器模块。DIMM是包括一个或多个存储器件的薄型的矩形卡,并且还可包括一个或多个寄存器、缓冲器、集线器装置和/或非易失性装置(例如,可擦写可编程只读存储器或“EPROM”),以及各种无源器件(例如,电阻器和电容器),它们都安装到卡。DIMM通常采用需要定期刷新以防止其中所存储的数据丢失的动态存储芯片或DRAM。DRAM芯片最初为异步器件,但是,现在的芯片,同步DRAM(SDRAM)(例如,单倍数据速率或“SDR”、双倍数据速率或“DDR”、DDR2、DDR3等)具有同步接口来提高性能。DDR器件通常采用预取以及其他提升速度的技术,以提高存储器带宽并降低延迟。例如,DDR3具有为8的标准突发长度。
随着计算机系统功能的日益强大,存储器件密度也在持续增大。目前单个计算机的RAM容量一般包含数百兆的位。不幸地,单个RAM器件的一小部分发生问题就可导致整个计算机系统出现故障。当发生存储器错误(其可能是“硬”(重复发生)故障或软(一次或间歇性)故障)时,这些故障可能为单个单元故障、多位故障、整体芯片故障或整体DIMM故障,并且部分或全部系统RAM在其被修复之前可能无法使用。修复时间可能为数小时,甚至数日,这会对依赖于计算机系统的业务造成重大影响。
随着现代计算机中内存存储容量的不断增加,在正常运行期间遇到RAM故障的几率也在持续增加。
在过去数十年来,检测和纠正位错误的技术已经发展为相当精密的科技。最基本的检测技术可能就是奇校验或偶校验的出现,其中数据字中的数字“1”或“0”被一起“异或”(XOR)来生成校验位。例如,包含偶数个“1”的数据字的校验位为0,以及包含奇数个“1”的数据字的校验位为1,此校验位数据被附加到所存储的存储器数据。如果在读取操作期间数据字中存在一个错误,则可以通过从数据重新生成校验,然后检查该校验是否与已存储的(原始生成的)校验匹配来检测此错误。
Richard Hamming发现,可以将校验技术扩展为不仅检测错误,而且还通过将XOR字段(即,纠错码(ECC)字段)附加到每个代码字来纠正错误。ECC字段是数据字中进行“异或”的不同位的组合,使得错误(对数据字的细微更改)可以被容易地检测、锁定和校正。可以检测并纠正的错误数与附加到数据字的ECC字段的长度直接相关。所述技术包括确保有效数据字与代码字组合之间的最小分隔距离。要检测和纠正的错误数越多,代码字就越长,从而使有效代码字之间的距离更长。有效代码字之间的最短距离被称为最短汉明距离。
这些错误检测和错误纠正技术通常被用于将嘈杂通信传输介质中的数据恢复为原始/正确的形式,或用于存储介质中由于器件的物理特性而造成的有限可能的数据错误。存储器件通常将数据存储为代表RAM中的1或0的电压电平并且同时受器件故障以及由高能宇宙射线和α粒子造成的状态更改的影响。类似地,将1和0存储为磁性表面上的磁场的HDD也受磁介质中的缺陷以及可能造成数据模式从原始存储状态更改的其他机制的影响。
在上世纪八十年代,RAM存储器件大小首次达到了受导致存储器位翻转的α粒子撞击和宇宙射线影响的程度。这些粒子不会损坏器件,但是可造成存储器错误。这些错误称为软错误,并且经常只影响一个位。一旦被识别,便可通过简单地重写存储单元来纠正所述位错误。软错误的频率已增加到对总体系统可靠性具有显著影响的程度。
如由Hamming所提出的存储器ECC使用位于数据字中各个位位置上的校验码的组合来检测和纠正错误。每次将数据字写入存储器时,都需要生成新的ECC字并将这些字与数据一起存储,由此在从存储器读出的数据包括的ECC码与通过所读取的数据生成的最新计算的ECC码不匹配时,允许检测和纠正该数据。
最初ECC应用于计算机系统中的RAM以提供超过先前手段所允许的容错。部署可实现双位错误检测(DED)和单位错误纠正(SEC)的二进制ECC码。该SEC/DED ECC还允许透明地恢复RAM中的单位硬错误。
还开发了清理(scrubbing)例程来帮助减少存储器错误,其方式为通过互补/重新互补过程查找软错误以便可以检测和纠正这些软错误。
某些存储装置制造商使用诸如Reed-Solomon码之类的高级ECC技术来纠正整体存储芯片故障。某些存储系统设计还包括可自动引入存储系统来替代故障芯片的标准保留存储芯片(例如“备用”芯片)。这些改进技术极大地提高了RAM可靠性,但是由于存储器大小不断增加并且客户对可靠性的期望也在增长,所以需要进一步的提升。系统需要容忍整个DIMM的故障并且在系统运行的同时更换该DIMM。此外,必须考虑影响一个或多个DIMM与存储控制器/嵌入式处理器间的连接之间的单点故障的其他故障模式。例如,存储控制器和存储器件(多个)间的某些连接可包括一个或多个中间缓冲器,后者可能在存储控制器外部并位于DIMM之上或之外,但是,当出现故障时,所述中间缓冲器可能表现为单个DIMM故障、整体DIMM故障或范围更广的存储系统故障的一部分。
虽然明显需要使用更高级的纠错技术来提高计算机RAM的可靠性(也称为“容错度”),但是这种尝试因为会对可用的客户存储器、性能、空间和热度等产生影响而受阻。通过包括数据的额外副本(例如“镜像”)来使用冗余或使用更复杂的错误编码技术会增加成本,加大设计的复杂性,并且会影响另一关键的业务度量:上市时间。例如,多家存储装置制造公司已将简单的存储器镜像技术作为一项功能推出。使用存储器镜像可使系统从更严重的存储故障中恢复,但其接受度还很低,因为这需要在设计中已存在的基本SEC/DEC ECC之上使存储器大小加倍,这样通常只留给客户不到已安装RAM的50%来用于系统。
已经开始使用ECC技术来提高存储系统的可用性,其方式为纠正HDD故障,以使客户免受因HDD故障造成的数据丢失或数据完整性问题,同时进一步保护客户免受较小的故障模式的影响。
某些存储系统供应商已成功地使用独立磁盘冗余阵列(RAID)技术提升了HDD对计算机RAM的可用性。在许多方面,使用RAID技术更容易从HDD故障中恢复,因为与RAM相比,在HDD中更容易隔离故障。HDD一般具有诸如ECC之类的嵌入式校验器来检测坏扇区。此外,循环冗余校验(CRC)和纵向冗余校验(LRC)可以嵌入HDD电子装置或盘适配器中,它们也可以是由高级代码和应用用于检测HDD错误的校验器。CRC和LRC与数据同时被写入以帮助检测数据错误。CRC和LRC是用于从所述数据产生小型的基本唯一的位模式的散列函数。当从HDD读取数据时,将重新生成校验和并将其与盘中存储的校验和进行比较。签名必须完全匹配以确保从盘上编码的磁模式(magnetic pattern)检索的数据与原始写入盘的数据相同。
已开发了RAID系统来提高性能和/或增加盘存储系统的可用性。RAID将数据分布在若干独立HDD间。已开发许多不同的RAID方案,每个方案都具有不同的特性以及与其关联的各种优缺点。其中性能、可用性,以及利用率/效率(实际保存客户数据的盘的百分比)可能是最重要的因素。必须仔细考虑与各种方案关联的折衷,因为一种属性的改进通常会影响另一属性。
RAID-0是对数据进行分条,使数据分布在多个HDD上以提高性能。RAID-1是数据的镜像,将数据的两个完全相同的副本置于两个不同HDD上以提高可用性并防止数据丢失。某些RAID方案可以结合使用以产生综合优势。例如,RAID-0在阵列中的多个HDD上同时执行数据分条和镜像以同时提高性能和可用性。
RAID-3、RAID-4和RAID-5非常类似,因为它们使用单个“异或”校验和来纠正单个数据元素错误。RAID-3是具有专用校验HDD的字节级分条。RAID-4使用具有专用校验HDD的块级分条。RAID-5是与RAID-4类似的块级分条,只是执行分布式校验。不再使用专用校验HDD。校验基本在所有HDD间均匀地分布,从而避免了专用校验HDD成为性能瓶颈。RAID-3、RAID-4和RAID-5的关键属性是它们能够在通过某些独立手段锁定错误位置时纠正单个数据元素错误。
对于RAID-6,没有被广泛接受的统一业界定义。一般而言,RAID-6指具有双重校验和的块级或字节级分条。RAID-6的重要属性是它允许在通过某些独立手段锁定错误时纠正最多两个数据元素错误。它还可以在不知道故障位置的情况下锁定和纠正单个错误。
图1示出了由集成处理器芯片100构成的现代系统,其包含一个或多个处理器元件和一个集成存储控制器110。在图1所示的配置中,多条独立的串接互连存储器接口总线106在逻辑上聚集在一起共同运行,以支持更高带宽上的单个独立访问请求,其中数据和错误检测/纠正信息在平行的总线和关联的器件间分布或“分条”。存储控制器110与4条窄/高速点对点存储器总线106相连,每条总线106将多个唯一的存储控制器接口通道之一与包括至少一个集线器装置104和一个或多个存储器件109的串接互连存储子系统103(或存储器模块,例如DIMM)相连。某些系统进一步允许在存储器总线106的子集分布于存储子系统103时启用操作。在这种情况下,一条或多条分布的存储总线108可共同运行以支持单个访问请求。
图2示出了具有串接的存储器模块103和单向总线106的存储器结构。串接结构中的存储器模块103内的集线器装置104所提供的功能之一是将信号沿单向总线106发送到其他存储器模块103或存储控制器110的重新驱动功能。图2包括存储控制器110以及在两条存储器总线106(具有24线的下游存储器总线和具有25线的上游存储器总线)中的每条总线上,以直接或串接的方式与存储控制器110相连的四个存储器模块103。位于存储控制器110旁的存储器模块103直接与存储控制器110相连。其他存储器模块103以串接方式与存储控制器110相连。尽管图中未示出,但是存储控制器110可以集成到处理器100中,并且可以与多条存储器总线106相连,如图1所示。
本领域需要改进存储系统中的故障检测和纠正。希望存储系统能够免于整体DIMM故障的影响以及能够在系统运行的同时更换DIMM。
发明内容
因此,本发明在第一方面提供了一种存储系统,包括:存储控制器;与所述存储控制器以及多个存储器件通信的多个存储器模块;以及机制,所述机制用于检测所述存储器模块之一的故障可能与另一存储器模块上的存储器件故障同时发生,并且允许所述存储系统在存在存储器模块故障和存储器件故障的情况下继续未受阻碍地运行。
优选地,所述存储器模块包括一个或多个用于对所述存储器模块进行错误检测和纠正的存储器件。
优选地,所述存储器模块之一上的基本所有存储器件都用于跨所述存储器模块进行错误检测和纠正。
优选地,所述检测包括使用三角测量隔离存储器模块故障和存储器件故障。
优选地,所述多个存储器模块包括经由五个不同的通道与所述存储控制器通信的五个存储器模块,所述五个存储器模块包括:四个存储器模块,其具有用于所述存储器模块的错误检测和纠正的两个存储器件;以及一个存储器模块,其具有用于跨所述四个存储器模块的错误检测和纠正的存储器件。
优选地,所述机制使用应用于跨所述多个存储器模块组织为行的所述存储器件的RAID-3纠错码和应用于跨单个存储器模块组织为列的所述存储器件的RAID-6纠错码,其中只有一个数据元素在任意行和列之间共享。
优选地,结合RAID-6纠错码来使用偏移多重移动(offset multipleshift)以确保所述纠正不会产生行对齐错误和变得无法检测。
优选地,所述存储系统的机械封装适于允许在系统运行的同时更换所述存储器模块之一。
优选地,所述存储系统的机械封装适于允许在系统运行的同时更换一个或多个所述存储器件。
优选地,所述机制还检测可能与存储器件故障同时发生的影响存储器模块与存储控制器之间的通信的故障,并且所述机制还允许所述存储系统在影响所述存储器模块与所述存储控制器之间的通信的故障和所述存储器件故障存在时未受阻碍地运行。
在第二方面,提供了一种存储控制器,包括:到多个存储器模块的接口,所述模块与多个存储器件通信;以及机制,所述机制用于检测所述存储器模块之一的故障可能与另一存储器模块上的存储器件故障同时发生,并且允许存储系统在存在存储器模块故障和存储器件故障的情况下继续未受阻碍地运行。
优选地,所述存储器模块包括一个或多个用于对所述存储器模块进行错误检测和纠正的存储器件。
优选地,所述检测包括使用三角测量隔离存储器模块故障和存储器件故障。
优选地,所述多个存储器模块包括经由五个不同的通道与所述存储控制器通信的五个存储器模块,所述五个存储器模块包括:四个存储器模块,其具有用于所述存储器模块的错误检测和纠正的两个存储器件;以及一个存储器模块,其具有用于跨所述四个存储器模块的错误检测和纠正的存储器件。
优选地,所述机制使用应用于跨所述多个存储器模块组织为行的所述存储器件的RAID-3纠错码和应用于跨单个存储器模块组织为列的所述存储器件的RAID-6纠错码,其中只有一个数据元素在任意行和列之间共享。
优选地,结合RAID-6纠错码来使用偏移多重移动以确保所述纠正不会产生行对齐错误和变得无法检测。
在第三方面,提供了一种检测和纠正存储系统中的错误的方法,所述方法包括:检测所述存储系统中的一个或多个错误,所述存储系统包括具有存储器件的多个存储器模块,响应于存储命令而共同地访问所述存储器模块;使用三角测量识别错误类型以将所述一个或多个错误隔离到存储器件和存储器模块之一或两者;使用水平地应用于所述多个存储器模块中的存储器件的第一ECC码和垂直地应用于一个存储器模块中的存储器件的第二ECC码来纠正所述一个或多个错误,从而使所述存储系统能够在与存储器件故障同时发生的存储器模块故障的情况下未受阻碍地运行。
优选地,结合所述第二ECC码来使用偏移多重移动以确保所述纠正不会产生行对齐错误和变得无法检测。
优选地,在识别到故障存储器模块时,将所述故障存储器模块的身份用作所述第一ECC纠错码中的参数以便提高所述存储系统的可靠性。
优选地,所述第一ECC码为RAID-3 ECC码以及所述第二ECC码为RAID-6 ECC码。
示例性实施例包括具有存储控制器、多个存储器模块和机制的存储系统。所述存储器模块与所述存储控制器以及多个存储器件通信。所述机制检测到所述存储器模块之一的故障可能与另一存储器模块上的存储器件故障同时发生。所述机制允许所述存储系统在存在存储器模块故障和存储器件故障的情况下继续未受阻碍地运行。
另一示例性实施例包括具有到多个存储器模块的接口以及机制的存储控制器。所述存储器模块与多个存储器件通信。所述机制检测到所述存储器模块之一的故障可能与另一存储器模块上的存储器件故障同时发生。所述机制允许所述存储系统在存在存储器模块故障和存储器件故障的情况下继续未受阻碍地运行。
其他示例性实施例包括一种检测和纠正存储系统中的错误的方法。所述方法包括检测所述存储系统中的一个或多个错误。所述存储系统包括具有存储器件的多个存储器模块,响应于存储命令而共同地访问所述存储器模块。所述方法还包括使用三角测量识别错误类型以将所述一个或多个错误隔离到存储器件和存储器模块之一或两者。使用水平地应用于所述多个存储器模块中的存储器件的第一ECC码和垂直地应用于一个存储器模块中的存储器件的第二ECC码来纠正所述一个或多个错误。所述存储系统能够在与存储器件故障同时发生的存储器模块故障的情况下未受阻碍地运行。
附图说明
现在参考附图仅通过实例的方式描述本发明的优选实施例,其中:
图1示出了具有单向总线的串接互连存储系统;
图2示出了具有单向总线的串接互连存储系统;
图3是本发明的示例性实施例所使用的示例性计算机存储系统配置的方块图;
图4是纠正单个DRAM芯片错误的逻辑视图的方块图;
图5是纠正整体DIMM故障的逻辑视图的方块图;
图6是纠正两个DRAM芯片错误的逻辑视图的方块图;
图7是纠正与次级DRAM芯片故障同时发生的整体DIMM故障中的困难的逻辑视图的方块图;
图8是纠正与次级DRAM芯片故障同时发生的整体DIMM故障中的困难的逻辑视图的方块图;
图9a-9c示出了纠正与次级DRAM芯片故障同时发生的整体DIMM故障的各种方式;
图10是纠正与两个额外DRAM器件故障同时发生的整体DIMM故障的逻辑视图的方块图;
图11a-11c是使用本发明的示例性实施例执行错误纠正和检测的过程的流程图;
图12示出了可用于执行二维三角测量的示例性过程流;以及
图13为列出由本发明的示例性实施例使用的错误分类的表。
具体实施方式
本发明的示例性实施例使用两个独立的代码(一个水平应用于RAM的区段以及一个垂直应用于RAM的区段)检测和纠正与整体芯片(例如DRAM)故障同时发生的整体DIMM故障。这允许同时修复故障DIMM,并且即使存在次级芯片错误,也允许计算机系统存储器在修复期间继续运行。这种处理次级芯片错误的能力是新颖的并且非常重要,因为在完成DIMM修复之前,存在出现次级错误,尤其是存储器软错误的有限可能性。
如本文所用,术语“同时发生”指两个(或更多)错误模式的发生。在一个实例中,发生可纠正的错误并且稍后在修复该第一可纠正的错误之前,发生第二故障。所述第一和第二故障被称为“同时发生”。修复时间总是大于零,并且修复时间越长,越可能出现第二故障与第一故障同时发生的情况。在识别出DIMM故障之前,示例性实施例已准备好纠正DIMM故障以及很有可能最多一个额外芯片错误。一旦识别了DIMM故障,本发明的示例性实施例可纠正DIMM故障以及在任何时间的一个额外芯片错误。尽管这里使用单词“DIMM故障”或“存储器模块故障”,但是本发明示例性实施例所防止的故障模式通常包括将数据从DIMM传送到存储控制器的通信介质的故障。
示例性实施例提供了包括RAM器件(例如DRAM、SDRAM等)的计算机存储系统的透明恢复和完全在线同时DIMM修复。提供了与另一存储芯片故障同时发生的整体存储子系统(例如DIMM)故障的透明恢复。示例性实施例使用计算机系统RAM的节点结构配合ECC的新颖应用,后者使能断开任何存储器节点的电源而不会影响对RAM中存储的必要系统数据的访问。这样,计算机系统存储器继续未受阻碍地运行,允许完全访问RAM中存储的所有数据,就像所有存储器节点都存在,都接通电源并且完全运行那样。如本文所用,术语“存储器节点”指与单个逻辑列关联的所有DIMM的集合。逻辑列包含与条带内的单个符号位置关联的符号。在此处所述的示例性实施例中,它们是RAID-3ECC码的单个符号。通常,但并非总是,单个列与单个存储器通道关联。以本文所述的方式构建节点的重要性在于,为ECC码提供了在从系统删除节点时重新生成所有遗失符号的能力。
在示例性实施例中,使用“双倍数据速率3”(DDR3)SDRAM芯片。使用DDR3SDRAM芯片设计DIMM,DIMM上存储的总数据量平均存储在每个芯片中。该示例性实施例还使用被组织为具有4个输入/输出引脚(例如,4个器件(x4))的DDR3器件,其中每个访问的突发长度为8。换言之,对于每个存储器访问,各个SDRAM在突发长度为8的情况下提供4位(半字节)数据,总共生成32位或4字节(4位*8突发长度=32位=4字节)。
整个业界中使用的有关RAID的术语存在某些不一致和不明确之处。除非另有声明,否则下面的定义是本披露中使用这些术语时所指的含义。阵列指实现一个或多个RAID清除码实例的硬盘驱动器的集合。符号或元素是数据或校验的基本单位,是清除码的构造块。在编码理论中,其是指定给符号内的一个位的数据。它通常为一组有序的区段。元素由固定数目的字节构成。通常也将元素定义为固定数目的块。块为固定数目的字节。条带是与校验计算关系相关的数据和校验元素的完整和相连集合。在编码理论中,条带是代码字或代码实例。条带是单个硬盘驱动器上相邻元素的集合。条带包含来自同一磁盘和条带的数据元素、校验元素或两者。术语“条带”和“列”可以互换使用。在编码理论中,条带与代码字关联并且有时被称为条带单元。代码字中的条带集合形成一个条带。最常见的是各条带包含同样数量的元素。在某些情况下,条带可以被分组到一起以形成称为数据幅(stride)的更高级别的结构。
RAID-6是更常见的RS纠错码的特定实例。RS码首次出现在IrvingReed和Gus Solomon 1960年所发表的论文中。这些强大的代码已经广泛地用于各种纠错,所涉范围从深空问题一直到DVD播放器中的盘错误。RS码是应用于数据元素或符号的非二进制循环码。RS(n,k)码可以被定义为:k=数据符号数,m=以位表示的符号长度,以及n=符号总数。因此,0<k<n<2^(m+1)。
进一步定义c=在无法独立确定位置时的符号错误纠正能力,从而n-k=2c。换言之,符号总数与数据符号数之差与RS码的数据纠正能力直接成比例。对于任意线性码,RS码可达到最大可能的最小距离。对于非二进制码,与Hamming距离类似的最小距离为:dmin=n-k+1。
进一步定义e=清除纠正能力(即,在独立确定错误位置时的纠错能力),从而e=dmin-1=n-k=2c。换言之,与通过某些独立手段确定位置相比,无法获知位置时只能纠正一半的故障。
RS码使用一系列联立方程来求解未知数。这些未知数为数据符号或具有错误的符号的位置。例如,RAID-6使用两个方程生成两个应用于每行中的每个数据元素的独立校验和。定义:Q(x)=R-S校验和,其中x=a;P(x)=R-S校验和,其中x=1;以及d0,d1,...dN=多项式系数,允许使用以下多项式形式表示R-S校验和方程:Q(x)=d0+d1*x+d2*x^2+...d(N-1)*x^(N-1)。此方程可用于求解纠正数据元素的系数,以及/或者在错误位置未知的情况下,可用于求解x的幂以锁定该位置。
可以看到,RAID-3、RAID-4和RAID-5的简单“异或”是x=1时多项式和的特例,因此方程变为:P(x)=d0+d1+d2+...d(N-1)。该通用方程有许多变型可供本发明的示例性实施例使用。主要要求是该方程应是本原多项式,这意味着它与质数类似,其中没有公根。这确保了对于有限域(如Galois域),解始终是唯一的。
图3示出如何在示例性实施例中配置计算机存储系统。以5个DIMM302的块314(组)向系统添加存储器,每个DIMM 302具有18个DRAM芯片。因此,在每个存储器块314中,总共有90个DRAM芯片分布在5个DIMM 302上。DRAM芯片中的64个包含客户可用数据以及DRAM芯片中的26个用于保存校验和(标记为304的DRAM芯片和位于与存储器通道306e相连的DIMM 302上的块314中的所有DRAM芯片)。每个存储器块访问提供360字节的数据(假设DRAM为4字节),其中256字节为可用的客户数据,104字节用于校验和。这将导致28.9%的可靠性和服务性(RAS)开销。显然,本发明并不限于此特定存储器配置,其可适用于许多其他使用不同DRAM芯片和DIMM结构的存储器配置。
图3中所示的示例性实施例包括五个存储器节点316,每个节点都包括三个以串接方式与存储器通道306互连的存储器模块(DIMM 302)。在该示例性实施例中,五个存储器通道306a-e与位于主机系统310中的存储控制器308相连。每个DIMM 302都包括用于与存储器件(例如DRAM芯片)和存储器通道306进行通信的集线器装置312。
在该示例性实施例中,ECC在64数据字节块上生成以通过使用关键字优先策略(即,存储系统被设计为按重要性检索字)提供断续(chopped)突发模式支持和低延迟访问。在DDR2器件中,“突发断续模式”支持允许使用突发长度4,而非为DDR3指定的常用突发长度8来访问DRAM。本发明中所用的ECC也可应用于128字节块并且仍支持断续突发模式。所述代码可应用于64、128或256字节块。但是,如果所述代码应用于在单个存储器访问中检索或存储的全部256个字节,则不支持断续突发模式,因为需要全部256字节数据来生成或重新生成与已存储的校验和相比较的校验和以便检测错误。
图3是根据本发明的实施例的RAM系统结构的一个实施例的高级视图。每个存储器节点316都包括3个DIMM 312。可以通过许多基于集线器的模块上的可用扩展(例如,串接互连)总线之类的手段,将每个存储器节点316的DIMM 312数量扩展为包括3个以上的DIMM 312。图3中所示的此存储器节点结构允许断开任何存储器节点316的电源并允许在不影响系统存储器运行的情况下更换DIMM。存储系统可在断开任何单个存储器节点316的电源的情况下继续无阻碍地运行。
在图3中,与存储器通道306e相连的标记为304的DRAM芯片和存储器节点316中的所有DRAM芯片都保存可实现同时DIMM修复的特殊ECC。DIMM 302上的其余DRAM包含可用客户数据。
DIMM 302在系统内以每5个DIMM的块来增加。图3中最上一行的5个DIMM代表系统的第一DIMM块314。它还表示最小存储器配置。接下来的5个DIMM块是其正下方的行。
每列中位于最右侧节点内的第五DIMM(例如,与存储器通道306e相连的每行最右侧的DIMM)都具有包含跨其他存储器节点316中的DIMM计算的RAID-3校验和的DRAM芯片。与存储器通道306e相连的DRAM不包含(或包含非常少的)客户可用数据。RAID-5通常用于HDD,因为与RAID-3不同,校验和跨所有HDD分布以避免瓶颈。在此实施例中不存在此类瓶颈,因为同时访问存储器块中的所有DRAM芯片。这样,无需进行校验和分布。在此实施例中,数据元素具有长度为1字节的符号,因为在单个访问中操作64字节数据块。其他实施例使用RAID-4替代RAID-3,包括具有更长符号大小的数据元素。在本文其余的描述中,使用术语RAID-3之处也可视为RAID-4。重点是,此处不需要如RAID-5中用于提高HDD配置性能的分布式校验。使用来自与图3中的各DIMM 302列对应的其他存储器节点316中的每个对应DRAM芯片的对应数据元素来计算RAID-3校验和。通过对每个DIMM使用RAID-3,可以在通过独立手段锁定具有错误的特定DIMM 302时纠正整体DIMM故障。
示例性实施例利用2个分别水平应用和垂直应用的独立ECC,它们提供有效的错误检测和错误隔离特性。与检测和隔离HDD错误相比(其中广泛使用RAID-3和RAID-6纠错),检测和锁定DRAM芯片错误,尤其是检测和锁定诸如单个位翻转(单个单元错误)之类的更细小的错误要困难得多。HDD经常使用与每个数据元素或数据元素组关联的器件上的嵌入代码来检测和锁定更细小的错误。这些代码包括简单校验以及提供更好的错误检测和隔离的CRC和LRC。当可以通过独立手段锁定错误时,RAID-3和RAID-6在纠错时的效能将翻倍。从盘适配器到HDD的接口通常为命令/响应类型接口,与每个DRAM芯片的接口一般所提供的功能相比,其可以更好地检测完全失效的HDD。
HDD接口是在特定HDD不响应的情况下可由盘适配器立即识别的接口。如果DRAM芯片出现故障,除非所检索的数据与最初存储的不符,否则不会指示此故障,必须通过某种独立手段来检测此故障。HDD存储装置廉价而且存储量大,所以增加校验所需的开销不像RAM那样特别昂贵。为了提高错误检测能力而在RAM中添加嵌入式校验器会显著影响存储器密度、功耗、性能、整体存储器大小以及计算机系统成本。RAM ECC码尽可能有效是非常重要的。
为了克服这些限制,此处所述的示例性实施例使用水平应用的RAID-3码、垂直应用的RAID-6码,以及二维三角测量来有效地隔离错误。一旦隔离了错误,便可使用RAID-3行代码和RAID-6列代码进行纠错。如上所述,RAID-3码跨DIMM应用。RAID-6码,示例性实施例中的[18,16]R-S码,独立地应用于每个DIMM。图3中标记为304的DRAM芯片保存用于其所在DIMM 302的[18,16]R-S校验和。使用每个DIMM 302上的其他16个DRAM芯片的对应数据元素计算这些[18,16]R-S校验和。
这些水平和垂直应用于每个数据元素的独立ECC、应用于跨DIMM的行中的DRAM芯片数据元素的RAID-3,以及应用于每个DIMM的列中的DRAM芯片数据元素的RAID-6的组合实质上在没有显著开销的情况下增强了错误隔离和错误纠正能力。这一新的ECC具有28.9%的开销,比目前在高端系统上使用的许多当前ECC高17.8%。用于高端系统存储器的示例性当前ECC码为提供单芯片纠错和双芯片错误检测的[35,32]R-S码。
如下文所述,此处描述的示例性实施例提供100%的检测和高概率的纠正,最大可至整体DIMM故障(18个DRAM芯片)。对于单个DIMM上2个以上的DRAM芯片错误,有很小的概率RAID-6列方程会错误地产生看似有效的解。在这种情况下,所应用的RAID-6列不一定会检测到错误。但是,只要错误包含在单个DIMM中,RAID-5校验便会在任何时间都检测到错误。一旦识别到故障DIMM,本发明的示例性实施例可在任何时间提供最大为整体DIMM的故障纠正。
如下文所述,示例性实施例还提供了100%的检测和高概率的纠正,最大可至与整体DIMM故障(19个DRAM芯片)同时发生的整体芯片故障。从次级错误恢复的能力非常重要,尽管同时性的故障事件相当少见,但是在执行或完成同时的DIMM修复之前或期间,仍有可能遇到与整体DIMM故障同时发生的在另一DIMM上的次级错误。对于单个单元次级故障尤其如此。如上所述,一旦识别到故障DIMM,本发明的示例性实施例就可在任何时间纠正与芯片(此处也称为存储器件)同时发生的整体DIMM故障。
以下为示例性情况,用于展示本发明的示例性实施例如何提供增强的恢复能力及其限制。
图4示出了刚才参考图3描述的存储系统配置的逻辑视图。如下面的说明中使用的,Dxy=数据元素;Pxy=RAID-3行校验和;Pxy’=重新生成的校验和;Qxy=RAID-6列校验和;Qxy’=重新生成的校验和;Q0x=一个RAID-6列校验和(这将是RAID-6的RAID-5列校验和,例如,Q01=D01+D11+D21+...+DF1,其中“+”为“异或”);Q1y=另一RAID-6列校验和(例如,Q11=D01+D11*x+D21*x^2+...+DF1*x^15);exy、zxy和wxy=错误(添加到正确数据以产生错误的随机变量);以及Rxy=Qxy校验和的行RAID-3校验和。
现在参考图4,最右侧的逻辑表示示出了完整的计算机存储器配置。每列都表示包括18个DRAM芯片的单个DIMM。每个DRAM芯片上的数据元素被指定为Dxy。RAID-3校验和元素402(Pxy和Rxy)在跨DIMM的每个DRAM数据元素上逐行生成。对于RAID-3,校验和为每行中数据元素的“异或”:Px0=Dx0+Dx1+Dx2+Dx3。例如,当x=2时,P20=D20+D21+D22+D23。
沿着应用于相关列中每个数据元素的列生成的RAID-6校验和元素404被指定为Qxy。
图4示出了如何检测和纠正单个DRAM芯片错误。左侧的逻辑表示示出了没有错误且完全运行的存储器。图4中右侧的表示示出了在标记为D42的DRAM芯片中出现了错误。该错误可能是单位错误、多位错误或任何其他错误组合,最大为整体DRAM芯片故障。本发明的示例性实施例为单个DRAM芯片错误提供了100%的检测和纠正。
使用此处称为二维三角测量的技术隔离具有错误的特定DRAM芯片,其中结合使用RAID-3行校验和与RAID-6列校验和来锁定错误位置。在存储器读取操作中,通过从存储器读取的数据来重新生成RAID-3校验和Pxy’与RAID-6校验和Qxy’。重新生成的校验和Pxy’、Qxy’和Rxy’与已存储的校验和Pxy、Qxy和Rxy进行比较。如果它们全部相等:Pxy’=Pxy,Qxy’=Qxy和Rxy’=Rxy,则可以假设没有数据错误。从存储器检索的数据被验证为正确。如果只有一个重新生成的校验和Qxy’与已存储的校验和不匹配,则表示保存该校验和的DRAM芯片具有错误。因为在这种情况下客户数据仍然有效,所以不需要进行数据纠正。
如图4所示,与该行关联的重新生成的RAID-3校验和Pxy’与已存储的校验和不匹配,这表示该行中存在错误。在此实例中,P40与P40’不匹配,因此可以获知存在一个与包含D40、D41、D42、D43以及P40的行关联的错误。可能是数据元素D40、D41、D42、D43或行RAID-3校验和P40与该错误相关。甚至可以存在多个错误。将重新生成的行RAID-3校验和P40’与已存储的校验和P40进行比较只能隔离该行。RAID-6列校验和用于进一步的隔离。如果所有重新生成的RAID-6列校验和Qxy’与已存储的校验和Qxy都匹配,则RAID-3校验和DRAM芯片Pxy具有错误。在该实例中,重新生成的RAID-6校验和Q02’和Q12’与已存储的校验和Q02和Q12’不匹配。现在使用二维三角测量,将错误锁定到D42。这是具有错误的DRAM芯片。
一旦隔离了错误,便可简单地通过将其他行数据元素与RAID-3存储的RAID-3校验和进行“异或”:D42=D40+D41+D43+P04或将列数据元素与已存储的RAID-6校验和进行“异或”:D42=D02+D12+D22+D32+D52+...+DB2+DC2+DD2+DE2+DF2+Q02,来完成错误纠正。还可以使用其他RAID-6、[18,16]R-S方程来纠正错误。
由于这是单个DRAM芯片错误,所以3个重新生成的校验和,即一个RAID-3校验和与两个RAID-6校验和,不匹配已存储的校验和,并且所有其他重新生成的RAID-3校验和与RAID-6校验和必须与已存储的校验和匹配。在该实例中,P40’与P40不匹配,并且重新生成和已存储的RAID-6校验和Q02’与Q02以及Q12’与Q12相应地不匹配,因此可以获知具有与D42关联的DRAM芯片错误。类似地,如果只有重新生成的RAID-6校验和Q0y’或Q1y’之一与已存储的相应RAID-3校验和Q0y或Q1y之一不匹配,则可以获知它是错误源。对于单个数据元素错误Dxy,重新生成和已存储的校验和Q0y’和Q0y以及Q1y’和Q1y必须显示不匹配,Pxy’和Pxy亦然。
下面给出更复杂的错误情况的实例以揭示本发明示例性实施例的完整能力。
图5示出了刚才所述的方法如何轻松扩展为处理单个DIMM上的多个DRAM芯片错误,以及处理DIMM上的全部18个DRAM的整体DIMM故障。首先,描述单个DIMM故障情况。在该实例中,许多(也许是全部)重新生成的RAID-3行校验和Pxy’与已存储的Pxy不匹配,这表示存在多个具有错误的行。但是在该实例中,当重新生成的RAID-6校验和Qxy’与已存储的校验和Qxy比较时,可以发现只有两个与单个列关联的校验和不匹配。因此,可以获知错误包含在单个DIMM中。在该实例中,重新生成的校验和Q02’和Q12’与已存储的校验和Q02和Q12不匹配,因此,可以获知故障与第三DIMM关联。在极少的情况下,DIMM中的错误可能使关联的RAID-6校验和等于0,在这种情况下,这种解码方法仅提供错误检测,而不提供错误纠正。
只要是只有一个列包含错误,就可以重新产生整个DIMM的数据,使用列RAID-3纠正的数据如下:Dx2=Dx0+Dx1+Dx3+Px0,其中x=0、1、2、....F。这是非常重要的功能。要允许同步DIMM修复,就必须有整体DIMM故障恢复功能。当DIMM为热插拔DIMM时,会似乎是整体DIMM故障。为每个DIMM添加存在检测线有助于保证从系统移除DIMM时进行隔离。
图6示出了在两个不同的DIMM上发生两个DRAM芯片错误时,如何处理这两个错误。同时发生两个随机错误的概率基本为零,但是在同时修复或DRAM分出(sparing)操作消除第一故障之前,有可能遇到第二故障。
在图6中,存在与D42和D91关联的实际DRAM芯片错误。通过先前所述的相同校验和重新生成过程检测所述错误。在执行此操作时,重新生成的RAID-3校验和P40’和P90’与已存储的校验和P40和P90不匹配,因此可以获知错误与这两行关联。此外,与第二列关联的重新生成的RAID-6校验和Q01’和Q11’与已存储的校验和Q01和Q11不匹配,因此可以获知存在与第二列关联的错误。另外,与第三列关联的重新生成的RAID-6校验和Q02’和Q12’与已存储的校验和Q02和Q12不匹配,因此可以获知存在与第三列关联的错误。使用带有独立校验和的二维三角测量来锁定具有错误的DRAM。P40与Q02或Q12的交叉点清晰正确地将D42锁定为包含错误的DRAM芯片。P90与Q01或Q11的交叉点也清晰正确地将D91锁定为包含错误的DRAM芯片。
还存在锁定D41的P40与Q01或Q11的交叉点以及锁定D92的P90与Q02或Q12的交叉点。但是,这些DRAM芯片不包含错误。不可能单独凭此判定4个DRAM芯片中的哪个芯片包含错误。不过,这不是问题。RAID-6,[18,16]R-S码的最短距离为3,此距离允许在通过另一独立手段锁定位置时隔离和纠正单个错误或纠正两个错误。在这种情况下,RAID-3行校验和允许锁定行以及RAID-6列校验和允许锁定列。现在有四个方程和四个未知数D41、D42、D91、D92来纠正全部四个有问题的DRAM芯片的错误:
Q01=D01+D11+D21+D31+D41+D51+D61+D71+D81+D91...+DF1;
Q11=D01+D11*x+D21*x^2+...+DF1*x^15
Q03=D02+D12+D22+D32+D42+D52+D62+D72+D82+D92...+DF2;以及
Q12=D02+D12*x+D22*x^2+...+DF2*x^15。
图6示出了如何在任何时间隔离和纠正任意两个同时的DRAM芯片错误。
图7示出了当存在与次级DRAM芯片故障同时发生的整体DIMM故障时遇到的困难。如果未隔离和锁定第一故障,则不可能仅通过比较重新生成的校验和与已存储的校验和来判定两个DIMM上包含错误的DRAM芯片。这是因为多数(若非全部)RAID-3行校验器,Pxy和Rxy,指示存在与行关联的错误。但是,Pxy行校验器与Qxy列校验器的交叉点指示两个DIMM上的所有DRAM芯片都可能存在潜在错误。不过仍有方法解决此困境。
图8略为详细地示出了当存在与另一DIMM上另一单个DRAM芯片错误同时发生的整体DIMM错误时,错误在纠错期间如何传播。在这种情况下,算法不需要了解哪个错误首先发生便可正确地提供这些错误类型的100%检测和高概率的纠正。如上所述,当整体DIMM错误与另一单个DRAM芯片错误同时发生时,多数(也许是全部)重新生成的RAID-3行校验和Rxy与已存储的校验和Pxy不匹配,指示行中包含错误。但是在这种情况下,第一DIMM的重新生成的RAID-6列校验和,Q00’和Q10’,与已存储的校验和Q00和Q10不匹配,指示存在与第一DIMM关联的错误。此外,第一DIMM的重新生成的RAID-6列校验和,Q02’和Q12’,与已存储的校验和Q02和Q12不匹配,指示存在与第三DIMM关联的错误(具有高概率)。在该实例中,未锁定故障DIMM,因此需要在没有此信息的情况下从错误恢复。只有在一个DIMM上存在最多单个DRAM芯片错误,同时另一DIMM上发生整体DIMM故障(最多19个DRAM芯片错误)时,才能够纠正数据。为了完成此操作,必须假设每个有问题的DIMM存在整体DIMM错误并且其他DIMM具有单个DRAM芯片错误,以在两种情况下寻求单个有效的解决方案。
现在返回图8,其中正确地假设第三DIMM具有整体DIMM故障并且第一DIMM具有单个DRAM芯片错误。可以使用RAID-3列方程以如下方式纠正第三DIMM上的数据:Dx2=Dx0+Dx1+Dx3+Px0,其中x=0、1、2、....F。
在尝试使用RAID-3纠正第三DIMM上的错误时,错误模式变成如右图所示。D40和D42仍包含错误e40。更糟的是,行RAID-3不检测该错误,因为在“异或”运算期间,同样的错误被抵消。已存储的P40与重新生成的P40’进行比较以指示没有错误。不过众所周知,必定仍有至少一个错误,因此系统继续执行并使用列RAID-6方程来锁定并纠正该错误。这将消除同时与D40和D42关联的e40错误,并且所有RAID-3和RAID-6重新生成以及已存储的校验和将匹配。现在假设另一DIMM具有整体DIMM故障以确保这不是一个有效的解。
图9a示出了当错误地假设第一DIMM具有整体DIMM故障并且第三DIMM具有单个DRAM芯片错误时所发生的状况。如上所述,RAID-3列方程被用于以如下方式纠正第三DIMM上的数据:Dx0=Dx1+Dx2+Dx3+Px0,其中x=0、1、2、....F。结果是图9a的右侧块中所示的错误模式。与第三DIMM上的DRAM芯片关联的所有错误都被传播到第一DIMM上的对应DRAM芯片。由于它们是同样的错误,因此,将所有重新生成的RAID-3行校验和Pxy’与已存储的校验和进行比较指示这些错误相同。RAID-3行校验和不检测任何错误,因此不会指示存在行错误。不过,第一和第三RAID-6列校验和指示那些列中包含错误。因此到目前为止,通过查询重新生成和已存储的校验和,看上去就像当正确地假设另一DIMM具有整体DIMM故障时所发生的状况,只是现在错误已经传播到第一和第三DIMM上的每个DRAM中。
图9b示出了在做出正确的假设之前,尝试使用RAID-6列来锁定和纠正两个单个芯片错误时所发生的状况。多数情况下,当尝试对RAID-6方程求解时会得到无效解。发生这种情况时,会检测到答案是错误的并且获知其他答案是正确的。但是在255个可能性中,有18个有效位置,因此存在相当高的不会检测到错误的概率:(18/255)=0.0706。存在7%(100中有7个)的生成看似有效并无法被检测到的无效解的可能性。在这种情况下,将执行RAID-6纠正,一旦完成,便会发现重新生成的校验和与所存储的校验和相等。将发现所有校验和均与RAID-3和RAID-6校验和匹配。当列中包含一个以上的错误时,使用RAID-6方程可得到错误的结果(此处RAID-6被用作单个纠错码,而非两个被清除的符号纠错码)。在图9b的这个实例中,所述计算将得出右侧的错误模式,其中每行中与各个对应的DRAM 芯片关联的错误是相同的:s00=Q00+Q00’=z02+z12+z22+...ZF2+W02并且s02=Q02+Q02’=z02+z12+z22+...ZF2+W02,因此:s00=s02。
这表示RAID-6方程的解与已存储的数据无关,而仅与对于两列均相同的错误有关。由于错误是相同的,因此就保证了无法检测到的无效解将会行对齐,从而使得RAID-3或RAID-6校验和无法检测到错误。只要无法检测到的错误解被行对齐,在执行RAID-6列纠正之后,RAID-3行校验和就无法检测到错误(假设该RAID-6纠正不会造成无法纠正的错误或“UE”)。在该实例中,已存储的P60与重新生成的P60’校验和相匹配,因为D60和D62中的错误:S00+z62在“异或”运算期间被抵消。
但是,该问题存在相对简单的解决方案,如图9c所示。RAID-6方程的解仅是错误信息的函数。下面示出了RAID-6尝试纠正之后如何解决未检测到错误的行和错误量(magnitude)对齐问题。
参见图9a中第一列的Q00校验和,已存储的校验和Q00最初为:Q00=D00+D10+D20+...+DF0。在使用RAID-3行尝试纠正错误之后,已存储的校验和变为:Qmod00=D00+D10+D20+...+DF0+w02=Q00+w02。重新生成的校验和将为:Q00’=D00+D10+D20+...+DF0+z02+z12+z22+...zF2。当重新生成的校验和与已存储的校验和比较时,结果为:S00=Qmod00+Q00’=Q00+w02+Q00’=z02+z12+z22+...zF2+w02。
对第三列执行相同的运算将得出:已存储的校验和Q02最初等于:D02+D12+D22+...+DF2。使用RAID-3行尝试纠正错误之后,已存储的校验和变为:Qmod02=D02+D12+D22+...+DF2+w02=Q02+w02。重新生成的校验和将为:Q02’=D02+D12+D22+...+DF2+z02+z12+z22+...zF2。当重新生成的校验和与已存储的校验和比较时,结果为:S02=Qmod02+Q02’=Q02+w02+Q02’=z02+z12+z22+...zF2+w02。
因此,很明显第一列和第三列中的第一RAID-6校验和的解相同,并且为:S00=S02=z02+z12+z22+...zF2+w02。对第二校验和进行类似的分析将得出:S10=S12=z02+z12*x+z22*x^2+...+zF2*x^15+w12。因此,如果错误偶尔产生看似有效的解,则所述错误将始终会行对齐并且RAID-3行校验无法检测到所述错误。
但是,存在简单的过程来防止此对齐,如图9c所示。将四个常数:a、b、c、d定义为全部彼此不等且非0的唯一数字。修改第一RAID-6校验和以使用:Q00=a*(D00+D10+D20+...+DF0)、Q01=b*(D01+D11+D21+...+DF1)、Q02=c*(D02+D12+D22+...+DF2),以及Q03=d*(D03+D13+D23+...+DF3)来替代Q00=D00+D10+D20+...+DF0、Q01=D01+D11+D21+...+DF1、Q02=D02+D12+D22+...+DF2,以及Q03=D03+D13+D23+...+DF3。
再次使用图9a作为参考实例。已存储的校验和Q00现在最初为:Q00=a*(D00+D10+D20+...+DF0)。使用RAID-3行尝试纠正错误之后,已存储的校验和变为:Qmod00=a*(D00+D10+D20+...+DF0)+w02=Q00+w02。重新生成的校验和为:Q00’=a*(D00+D10+D20+...+DF0+z02+z12+z22+...zF2)。当重新生成的校验和与已存储的校验和比较时,结果为:S00=Qmod00+Q00’=Q00+w02+Q00’=a*(z02+z12+z22+...zF2)+w02。该结果除以a来获得已存储的数据值,得出:S00/a=z02+z12+z22+...zF2+w02/a。
在第三列中,检索的第一校验和为Q02=W02+c*(D02+D12+...+DF2),并且重新生成的校验和为Q02’=c*(D02+D12+...+DF2+Z02+Z12+...+ZF2)。因此S02=Q02+Q02’=W02+c*(Z02+Z12+...+ZF2)。很明显,如果w02不等于0,则S02/c不等于S00/c。这防止了第一列和第三列中执行的单个符号纠正为同一纠正。可以对每个DIMM上的第二冗余芯片中存储的校验和执行类似的修改来改进此方法。
可以看到,第一列和第三列中的第一RAID-6校验和的解不同,因为当W02不为0时,w02/a和w02/c不相等。在该实例中,尝试通过RAID-6纠正错误将在DRAM芯片D62和D90中产生包含可由行RAID-3校验和检测到的错误的数据。
下文示出当应用偏移时,图8中的第一情况(其中正确地假设第三DIMM具有整体DIMM故障)仍有效。如上所述,使用RAID-3列方程按如下方式纠正第三DIMM上的数据:Dx2=Dx0+Dx1+Dx3+Px0,其中x=0、1、2、....F。在尝试使用RAID-3纠正第三DIMM上的错误时,结果为右图的错误模式。D40和D42仍包含错误e40。再次地,行RAID-3未检测到该错误,因为这是同样的错误,因此会在执行行RAID-3“异或”运算期间被抵消。已存储的P40与重新生成的P40’进行比较以指示没有错误。不过众所周知,必定仍有至少一个错误,因此算法继续执行并使用列已修改的RAID-6方程,它们是带有偏移的锁定和纠正错误的方程。
修改后的带有偏移的RAID-6方程为:Q00=a*(D00+D10+D20+...+DF0)、Q01=b*(D01+D11+D21+...+DF1)、Q02=c*(D02+D12+D22+...+DF2),以及Q03=d*(D03+D13+D23+...+DF3)。已存储的校验和Q00现在最初为:Q00=a*(D00+D10+D20+...+DF0)。使用RAID-3行尝试纠正错误之后,已存储的校验和变为:Qmod00=a*(D00+D10+D20+...+DF0)=Q00。重新生成的校验和为:Q00’=a*(D00+D10+D20+...+DF0+e40)。当重新生成的校验和与已存储的校验和比较时,结果为:S00=Qmod00+Q00’=a*(e40)。经过除法运算后除去a,得到e40,这与应用偏移之前获得的结果相同。
现在,对第三列执行相同的运算。已存储的校验和Q02最初为:Q02=c*(D02+D12+D22+...+DF2+e40)。使用RAID-3行尝试纠正错误之后,已存储的校验和变为:Qmod02=c*(D02+D12+D22+...+DF2)=Q02。重新生成的校验和为:Q02’=c*(D02+D12+D22+...+DF2+e40)。当重新生成的校验和与已存储的校验和比较时,结果为:S02=Qmod02+Q02’=c*(e40)。经过除法运算后除去c,得到e40,这与应用偏移之前获得的结果相同。因此,偏移在两种情况下都正常工作。
图10示出了在相当少见的整体DIMM实效(此处也称为DIMM故障)与另一DIMM上的两个附加DRAM器件(此处也称为DRAM芯片)错误同时发生时所出现的情况。在此,首先正确地假设第三DIMM具有整体DIMM故障。如上所述,跨行使用RAID-3尝试纠正错误,得到左图的错误模式。如上所述,无法使用RAID-3行校验和Pxy检测到这些错误。可使用RAID-6列校验和检测到这些错误,但是,由于每列包含一个以上的错误,所以RAID-6无法锁定和纠正错误。如果假设每行包含一个错误并尝试以上述方式对RAID-6方程进行求解,则存在7%(根据18/255=0.0706计算出的相对较高的概率)的检测不到错误的可能性。偏移乘数没有作用,因为没有与列校验和关联的错误。当未检测到错误时,解将会行对齐,从而无法检测问题。
可使用存在检测(确定DIMM已安装并确定DIMM属性)和故障记录来提高本发明的示例性实施例的有效性。
图11a-c示出了可由示例性实施例实现以执行上述过程的示例性流程图。执行所述过程流的机制可以通过位于存储控制器308上的软件和/或硬件来实现。在备选示例性实施例中,所述机制的一部分位于存储控制器308上,所述机制的另一部分也位于一个或多个存储器模块302上(例如,位于集线器装置312中,其中在存储控制器308与存储器模块302之间共享所述过程)。在另一备选示例性实施例中,所述机制的所有部分都位于主处理器310上。
参考图11a,所述过程从方块1102开始。在方块1104,接收读取请求(例如,主存储高速缓存线读取请求)。在方块1106,判定响应于所述读取请求而返回的数据中是否存在错误。如果所有校验子均不等于0,则存在错误。如果不存在错误,则所述过程继续到方块1108,其中将其所请求的数据返回请求方(例如,将正确数据传送到高速缓存)。
如果在方块1106判定存在错误,则执行方块1112来判定错误签名是否为单数据符号错误签名(例如,Px=1,Q0y=1以及Q1y=1)。如果是,则执行方块1114以使用二维三角测量来锁定符号错误位置。在方块1116,判定三角测量的结果是否为已知锁定的(或钉扎的(pinned))单符号(SD1)错误。对于多个错误,可使用错误钉扎来更确定地判定正确的错误签名,从而提高在遇到某种不明确的状况时检测和纠正稀有事件的有效性。如果三角测量的结果为已知钉扎的单符号(SD1)错误,如在方块1116判定的,则所述过程继续到方块1120。如果否,则执行方块1118并通过保存位置和错误类型来钉扎错误。然后,过程继续到方块1120,其中使用Px0、Q0y或Q1y校验和来通过保存到存储器来纠正错误(erasure)。然后,过程继续到方块1108。
如果在方块1112判定所述错误签名不是单数据符号错误签名,则执行方块1122。执行方块1122来判定所述错误签名是否为影响一行和一列(例如,Px=1,Q0y=1或Q1y=1)的单校验和错误签名。如果是,则执行方块1124以使用二维三角测量来锁定符号错误位置。在方块1126,判定三角测量的结果是否为已知锁定的(或钉扎的)单符号(SE1)错误。如果是,则所述过程继续到方块1130。如果否,则执行方块1128并通过保存位置和错误类型来钉扎错误。然后,过程继续到方块1130,其中重新生成Px0、Q0y或Q1y校验和并将其写入存储器。然后,所述过程继续到方块1108。
如果在方块1122判定所述错误签名不是单校验和错误签名,则执行方块1132。执行方块1132来判定所述错误签名是否为双校验和错误签名(例如,Px=1以及Q0y=1或Px和Q1y=1)。如果是,则执行方块1136以使用二维三角测量来锁定符号错误位置。在方块1138,判定三角测量的结果是否为已知锁定的(或钉扎的)双符号(SD2)错误。如果是,则所述过程继续到方块1142。如果否,则执行方块1140并通过保存位置和错误类型来钉扎错误。然后,过程继续到方块1141,其中重新生成Px0、Q0y或Q1y校验和并将其写入存储器。然后,所述过程继续到方块1108。
如果在方块1132判定所述错误签名不是双校验和错误签名,则执行图11b中的方块1134。接下来,执行图11b中的方块1144来判定所述错误签名是否为影响两行和两列(例如,Px=2,Q0y=2以及Q1y=2)的双数据符号错误签名。如果是,则执行方块1146以使用二维三角测量来锁定两个符号错误位置。在方块1148,判定三角测量的结果是否为两个已知锁定的单符号(SD1)错误。如果是,则所述过程继续到方块1152。如果否,则执行方块1150并通过保存位置和错误类型来钉扎错误。在方块1152,使用Px0、Q0y或Q1y校验和来纠正两个清除错误并将已纠正的数据写入存储器。然后,所述过程继续到图11a中的方块1110。
如果在方块1144判定所述错误签名不是影响两行和两列的双数据符号错误签名,则执行方块1154来判定所述错误签名是否为影响一行和两列(例如,Px=1以及Q0y=2和Q1y=2)的双数据符号错误签名。如果是,则执行方块1156以使用二维三角测量来锁定这两个符号错误位置。在方块1158,判定三角测量的结果是否为两个已知钉扎的单符号(SD1)错误。如果是,则所述过程继续到方块1162。如果否,则执行方块1160并通过保存位置和错误类型来钉扎错误。在方块1162,使用Q0y或Q1y校验和来纠正两个清除错误并将已纠正的数据写入存储器。然后,所述过程继续到图11a中的方块1110。
如果在方块1154判定所述错误签名不是影响一行和两列的双数据符号错误签名,则执行方块1164来判定所述错误签名是否为影响两行和一列(例如,Px=2以及Q0y=1和Q1y=1)的双数据符号错误签名。如果是,则执行方块1168以使用二维三角测量来锁定这两个符号错误位置。在方块1170,判定三角测量的结果是否为两个已知钉扎的单符号(SD1)错误。如果是,则所述过程继续到方块1174。如果否,则执行方块1172并通过保存位置和错误类型来钉扎错误。在方块1174,使用Px0校验和来纠正两个清除错误并将已纠正的数据写入存储器。然后,所述过程继续到图11a中的方块1110。
如果在方块1164判定所述错误签名不是影响两行和一列的双数据符号错误签名,则执行图3c中的方块1166。接下来,执行图3c中的方块1176来判定所述错误签名是否为影响所有行和一列(例如,Px>2以及Q0y=1和Q1y=1)的单DIMM错误签名。如果是,则执行方块1178以使用二维三角测量来锁定DIMM位置。在方块1180,判定三角测量的结果是否为两个已知钉扎的单DIMM(SD5)错误。如果是,则所述过程继续到方块1184。如果否,则执行方块1182并通过保存位置和错误类型来钉扎DIMM。在方块1184,使用Py0校验和来纠正清除错误并将已纠正的数据写入存储器。然后,所述过程继续到图11a中的方块1110。
如果在方块1176判定所述错误签名不是影响所有行和一列的单DIMM错误签名,则执行方块1186来判定所述错误签名是否为影响所有行和两列(例如,Px>2以及Q0y=2和Q1y=2)的单DIMM和单DRAM错误签名。如果是,则执行方块1190以在假设DIMM故障(D0a、D1a、D2a、...Dfa、Q0a、Q1a,其中Q0y和Q1y为y=a、b)的情况下尝试纠正错误。上面已参考图7-10描述了由方块1190-1198执行的过程。接下来,执行方块1192以查找使用Q0a、Q1a、Q0b以及Q1b RAID-6算法锁定和纠正的其他符号错误Dxa和Dxb。然后执行方块1193以重新生成所有校验子并检验它们均不为0。
然后执行方块1194以在假设DIMM故障(D0b、D1b、D2b、...Dfb、Q0b、Q1b,其中Q0y和Q1y为y=a、b)的情况下尝试纠正错误。接下来,执行方块1195以查找使用Q0a、Q1a、Q0b以及Q1b RAID-6算法锁定和纠正的其他符号错误Dxa和Dxb。然后执行方块1196以重新生成所有校验子并检验它们均不为0。
接下来,执行方块1197来判定是否只有DIMM a或只有DIMM b产生全部非0校验子。如果只有DIMM a或只有DIMM b产生全部非0校验子(即,错误是在DIMM a或DIMM b),则执行方块1198以通过将已纠正的值写入存储器来返回与所述全部非0校验子关联的已纠正的数据,然后,所述过程继续到图11a中的方块1110。
如果在方块1197判定DIMM a和DIMM b都产生全部非0的校验子(即,错误可在DIMM a或DIMM b),则所述过程继续到方块1188。此外,如果在方块1186判定所述错误签名不是影响所有行和两列的单DIMM和单DRAM错误签名,则所述过程继续到方块1188。在方块1188,判定所述错误为无法检测的存储器错误。
图12示出了可用于执行二维三角测量的示例性过程流。所述过程从方块1202开始。在方块1204,通过从存储器读取的数据重新生成和写入Px0、Q0y或Q1y校验和并将它们添加到已存储的校验和。在方块1206,判定与数据关联的所有校验子是否均等于0(即,数据没有错误)。如果数据没有错误,则所述过程继续到方块1208,并在方块1210将结果“无错误”返回给请求方。
如果在方块1206判定数据包含错误,则执行方块1212以识别Px0的所有x和Qzy的所有y中非0的校验子。在方块1214,将所述错误分类为(例如,使用图13中的表)SD1、SD2、SD3、SD4、SD5、SD6、SE1或SE2。接下来,执行方块1216并针对分类为SD1、SD2、SD3和SD4的错误将所述符号错误的位置设为Dxy。然后,执行方块1218并针对分类为SD5的错误将所述符号错误的位置设为DIMM D0y、D1y、D2y、...Dfy、Q0y、Q1y。随后执行方块1220并针对分类为SD6的错误将所述符号错误的位置设为DIMM D0a、D1a、D2a、...Dfa、Q0a和Q1a或者D0b、D1b、D2b、...Dfb、Q0b和Q1b,其中y=a、b。接着执行方块1222并将其他符号错误的位置设为由Q0a、Q1a、Q0b和Q1b RAID-6算法在猜想正确的DIMM和匹配校验子之后锁定和纠正的Dxa和Dxb。过程然后继续到方块1210。
图13包括参考图11a-c和图12描述的过程所使用的错误分类的汇总。
在此所述的过程和分类本质上作为示例,在不偏离本发明的范围的情况下,示例性实施例也可以使用其他过程流和分类。
在示例性实施例中,集线器装置可以通过多点或点对点总线结构(可以进一步包括与一个或多个附加集线器装置的串接连接)与存储控制器相连。存储器访问请求由存储控制器通过总线结构(例如,存储器总线)传输到选定的集线器(多个)。响应于收到所述存储器访问请求,所述集线器装置对存储器访问请求进行转译以控制存储器件存储来自集线器装置的写入数据或向集线器装置提供读取数据。读取数据被编码为一个或多个通信分组并通过存储器总线(多个)传输到存储控制器。
在备选示例性实施例中,存储控制器(多个)可与一个或多个处理器芯片以及支持逻辑集成在一起、封装在独立芯片(通常被称为“北桥”芯片)中、包含在带有一个或多个处理器和/或支持逻辑的多芯片载体内、或封装为最适合应用/环境的各种备选形式。上述任意一种解决方案可以采用也可不采用一条或多条窄/高速链路以连接到一个或多个集线器芯片和/或存储器件。
存储器模块通过各种技术来实现,其中包括DIMM、单列直插存储器模块(SIMM)和/或其他存储器模块或卡结构。一般而言,DIMM指主要由在一侧或两侧上的随机存取存储器(RAM)集成电路或小片组成的小型电路板,板的两侧均有信号引脚和/或电源引脚。相比之下,SIMM是主要由在一侧或两侧上的RAM集成电路或小片组成的小型电路板或基板,沿一个较长的边沿具有一行引脚。图1中所示的DIMM在示例性实施例中包括168个引脚,而后面的DIMM已被构想为具有100到300以上个引脚。在本文所述的示例性实施例中,存储器模块可包括两个或更多个集线器装置。
在示例性实施例中,存储器总线被构想为使用到存储器模块上的集线器装置的多点连接和/或使用点对点连接。被称为下游总线的控制器接口(或存储器总线)的下游部分可以包括命令、地址、数据和其他被发送到存储器模块上的集线器装置的操作、初始化或状态信息。每个集线器装置只是通过旁路电路将信息转发给后续的集线器装置(多个);在判定以下游集线器装置为目标的情况下接收、解译和再次驱动信息;在不首先解释信息以确定目标接收方的情况下再次驱动部分或全部信息;或者执行这些选项的子集或组合。
被称为上游总线的存储器总线的上游部分返回被请求的读取数据和/或错误、状态或其他操作信息,并且此信息可以通过旁路电路转发给后续的集线器装置;可以在确定以处理器复合体中的上游集线器装置和/或存储控制器为目标的情况下被接收、解译和再次驱动;可以在不首先解释信息以确定目标接收方的情况下被部分或全部地再次驱动;或者执行这些选项的子集或组合。
在备选示例性实施例中,点对点总线包括交换器或旁路机制,它们可以在下游通信期间(从存储控制器到存储器模块上的集线器装置的通信)将总线信息引导到两个或更多个可能的集线器装置之一,以及经常通过一个或多个上游集线器装置引导上游信息(从存储器模块上的集线器装置到存储控制器的通信)。其他实施例包括使用本领域的技术人员了解的连接(continuity)模块,后者例如在串接互连存储系统中可置于存储控制器与第一安装的集线器装置(即,与一个或多个存储器件通信的集线器装置)之间,以使所述存储控制器和所述第一安装的集线器装置间的任何中间集线器装置位置都包括用于在所述存储控制器和所述第一安装的集线器装置之间传输信息的装置,即使当一个或多个中间集线器装置位置不包括集线器装置时也是如此。所述连接模块(多个)可根据任意总线限制安装在任何模块位置(多个),所述限制包括第一位置(距离主存储控制器最近)、最后位置(位于所包括的任何终端之前)或任何中间位置(多个)。在多模块串接互连总线结构中,使用所述连接模块尤其有利,其中位于存储器模块上的中间集线器装置被移除并代之以连接模块,以使系统可在移除中间集线器装置之后继续运行。在更常见的实施例中,连接模块(多个)包括互连接线以将所有所需信号从输入(多个)传输到相应的输出(多个),或通过中继装置进行再次驱动。连接模块(多个)可进一步包括非易失性存储器件(例如EEPROM),但不包括主存储器存储装置。
在示例性实施例中,存储系统包括一个或多个位于一个或多个存储器模块上的集线器装置,所述存储器模块通过串接互连存储器总线与所述存储控制器相连,但是可以实现诸如点对点总线、多点存储器总线或共享总线之类的其他存储器结构。取决于所用的信令方法、目标操作频率、空间、功率、成本以及其他约束,可以考虑各种备选总线结构。在使用电气互连的系统中,点对点总线可以提供最佳性能,因为与具有分支信号线路、交换设备或短分支(stub)的总线结构相比,其可以减少信号衰减。但是,在需要与多个装置或子系统通信的系统中使用时,这种方法经常造成显著增加的组件成本并增加系统功耗,并且由于需要中间缓冲和/或再驱动,它还会减小潜在的存储器密度。
尽管附图中未示出,但是存储器模块或集线器装置也可包括诸如“存在检测”总线之类的独立总线、12C总线和/或SMBus,后者用于包括确定集线器装置和/或存储器模块特性(通常在接通电源后执行此操作),将错误或状态信息报告给系统,在接通电源后或正常运行期间配置集线器装置(多个)和/或存储子系统(多个)在内的一个或多个用途或其他用途。取决于总线特性,该总线还提供一种手段,使集线器装置和/或存储器模块(多个)可将操作的有效完成报告给存储控制器,或在执行主存储控制器请求期间确定发生的故障。
可通过添加交换设备获取与通过点对点总线结构得到的性能类似的性能。上述和其他解决方案以较低的功耗增加了存储器封装密度,同时保留了点对点总线的许多特性。多点总线提供了备选解决方案,尽管通常被限制为较低的操作频率,但是它的成本/性能对许多应用都非常有利。光纤总线解决方案可显著增加点对点应用或多点应用中的潜在频率和带宽,但是会对成本和空间造成影响。
如此处所用,术语“缓冲器”或“缓冲器件”指临时存储单元(如在计算机中),尤其是指以一种速率接受信息并以另一速率传输信息的装置。在示例性实施例中,缓冲器是在两个信号之间提供兼容性(例如,更改电压值或电流的能力)的电子器件,术语“集线器”有时与术语“缓冲器”可互换地使用。集线器是包含多个与若干其他装置相连的端口的装置。端口用作提供适当I/O功能的接口的一部分(例如,端口可用于通过点对点链路或总线之一发送和接收数据、地址,以及控制信息)。集线器可以是将若干系统、子系统或网络连接在一起的中央装置。无源集线器可以只是转发消息,而有源集线器或中继器放大和刷新否则会在远距离传送中衰减的数据流。如此处所用,术语“集线器装置”指包括用于执行存储功能的逻辑(硬件和/或软件)的集线器芯片。
同时如此处所用,术语“总线”指连接计算机内的两个或更多个功能单元的一组导线之一(例如,接线、印刷电路板排线或集成电路中的连接)。数据总线、地址总线和控制信号,无论名称为何,构成了一条总线,因为它们彼此缺一不可。总线可包括多个形成以电子方式连接两个或更多个收发器、发送器和/或接收器的主传输路径的信号线,每个信号线都具有两个或更多个连接点。术语“总线”与术语“通道”相比,后者通常用于描述与存储系统中的存储控制器相关的“端口”的功能,并且可能包括一条或多条总线或一组或多组总线。如此处所用,术语“通道”指存储控制器上的端口。注意,该术语通常与I/O或其他外围设备结合使用,但是术语“通道”已被一些人用来描述处理器或存储控制器与一个或多个存储子系统之一间的接口。
进一步地,如此处所述,术语“菊链”指一种总线连接结构,其中,例如,装置A与装置B相连,装置B与装置C相连等。最后一个装置通常与电阻器或终端器相连。所有装置接收相同的信号或者,与简单的总线相比,每个装置都可以在传输一个或多个信号之前对其进行修改。如此处所用,“串接”或“串接互连”指一系列级或单元或互连联网装置(通常为集线器)集合,其中集线器用作逻辑中继器,进一步允许将合并的数据汇入现有的数据流。同时如此所用,术语“点对点”总线和/或链路指其中每条都包括一个或多个终端器的一条或多个信号线。在点对点总线和/或链路中,每条信号线都具有两个收发器连接点,每个收发器连接点都与发射器电路、接收器电路或收发器电路相连。信号线指一条或多条用于传输至少一个逻辑信号的电气导线或光学载体,通常被配置为单个载体或两个或更多采用互绞、平行或同心排列的载体。
存储器件一般被定义为主要包括存储器(存储装置)单元的集成电路,如DRAM(动态随机存取存储器)、SRAM(静态随机存取存储器)、FeRAM(铁电RAM)、MRAM(磁性随机存取存储器)、闪存以及采用电、光、磁、生物等形式或其他方式存储信息的其他形式随机存取以及相关存储器。动态存储器件类型可包括诸如FPM DRAM(快速页面模式动态随机存取存储器)、EDO(扩展数据输出)DRAM、BEDO(突发EDO)DRAM之类的异步存储器件以及SDR(单倍数据速率)同步DRAM、DDR(双倍数据速率)同步DRAM或诸如DDR2、DDR3、DDR4之类的任何预期后续器件以及诸如通常基于相关DRAM上的基本功能、特性和/或接口的图形RAM、视频RAM、LP RAM(低功耗DRAM)之类的相关技术。
存储器件的可用形式包括芯片(小片)和/或具有各种类型和配置的单芯片封装或多芯片封装。在多芯片封装中,存储器件与诸如其他存储器件、逻辑芯片、模拟器件以及可编程器件之类的其他器件类型封装在一起,并且还可包括诸如电阻器、电容器以及电感器之类的无源器件。这些封装可以包括集成散热或其他冷却增强装置,后者可进一步与紧挨的载体或另一邻近的载体或排热系统相连。
模块支持器件(例如缓冲器、集线器、集线器逻辑芯片、寄存器、PLL、DLL、非易失性存储器等)可以包括多个独立的芯片和/或组件,可以作为多个独立的芯片被组合到一个或多个基板上,可以被组合到单个封装中或者甚至被集成到单个器件上,具体取决于技术、功耗、空间、成本以及其他权衡。此外,还可以根据技术、功耗、空间、成本以及其他权衡将诸如电阻器、电容器之类的一个或多个各种无源器件集成到支持芯片封装上,或集成到基板上、电路板上或原始卡(raw card)本身。这些封装可以包括集成的散热或其他冷却增强装置,后者可进一步与紧挨的载体或另一邻近的载体或排热系统相连。
存储器件、集线器、缓冲器、寄存器、时钟器件、无源以及其他存储支持器件和/或组件可以通过包括熔接互连、传导粘合、套接结构、加压接合的各种方法以及允许经由电、光或备选手段进行两个或更多器件间的通信的其他方法与存储子系统和/或集线器装置相连。
一个或多个存储器模块(或存储子系统)和/或集线器装置可以通过诸如熔接互连、连接器、加压接合、传导粘合、光纤互连之类的一种或多种方法以及其他通信和供电方法与存储系统、处理器复合体、计算机系统或其他系统环境进行电连接。连接器系统可包括匹配连接器(公/母)、与公/母连接器匹配的载体上的导电接点和/或引脚、光学连接、压力接点(经常与保持机构结合使用)和/或各种其他通信和供电方法中的一种或多种。互连(多个)可以沿着存储器组合件的一个或多个边缘放置和/或置于与存储子系统的边缘具有一段距离的位置,具体取决于诸如便于升级/修复、可用空间/容量、热传输、组件大小和形状以及其他相关的物理、电、光、视觉/物理接近之类的应用要求。存储器模块上的电气互连通常被称为接点或引脚或弹片(tab)。连接器上的电气互连通常被称为接点或引脚。
如此处所用,术语“存储子系统”指(但不限于):一个或多个存储器件;一个或多个存储器件及关联的接口和/或计时/控制电路;以及/或者一个或多个与存储缓冲器、集线器装置和/或交换器结合使用的存储器件。术语“存储子系统”还指一个或多个存储器件,除了任何关联的接口和/或计时/控制电路和/或存储缓冲器、集线器装置或交换器以外,被装配在基板、卡、模块或相关配件,其还可包括以电气方式将存储子系统与其他电路进行连接的连接器或类似装置。此处所述的存储器模块还可以称为存储子系统,因为它们包括一个或多个存储器件和集线器装置。
位于存储子系统和/或集线器装置本地的其他功能包括写入和/或读取缓冲器、一级或多级高速缓冲存储器、本地预取逻辑、数据加密/解密、压缩/解压缩、协议转译、命令优先排序逻辑、电压和/或电平转换、错误检测和/或纠正电路、数据清除、本地电源管理电路和/或报告、操作和/或状态寄存器、初始化电路、性能监测和/或控制、一个或多个协处理器、搜索引擎(多个)以及之前位于其他存储子系统中的其他功能。通过将功能置于存储子系统本地,通常可以增加特定功能的性能,同时利用子系统内未使用的电路。
存储子系统支持器件(多个)可以直接与连接存储器件(多个)的同一基板或配件相连,也可以安装到同样使用各种塑料、硅、陶瓷或其他材料中的一种或多种制造的单独的内插器或基板上,所述其他材料包括电、光或其他通信路径以使支持器件(多个)与存储器件(多个)和/或存储器或计算机系统上的其他元件在功能上互连在一起。
可以使用多种信令方式中的一种或多种来沿着总线、通道、链路或适用于互连方法的其他命名约定传输信息(例如,分组)。这些信令方式包括诸如单端信号传输、差分信号传输、光信号传输或其他传输方式之类的方法,其中电信号传输进一步包括诸如使用单级或多级方式的电压或电流信令之类的方法。信号还可使用诸如时间或频率、非归0、相移键控、幅度调制以及其他方式之类的方法进行调制。电压电平预期持续降低,从1.5V、1.2V、1V一直到更低的信号电压,其应与相关集成电路本身的操作所需的降低的电源电压一致(但通常两者无关)。
可以在存储子系统和存储系统本身内使用一种或多种定时方法,其中包括全局定时、源同步定时、编码定时或这些方法和其他方法的组合。时钟信令可能与信号线本身的信令相同,或者可以使用所列出的或备选的方法中的一种对设定的时钟频率(多个)以及在各种子系统内设定的时钟数有利的方法。单个时钟可以与去往和来自存储器的所有通信,以及存储子系统内的所有定时功能关联,或者可以使用诸如上文所述的一种或多种方法来提供多个时钟。使用多个时钟时,存储子系统内的功能与该子系统提供的唯一时钟关联,或者可以基于从来自或和去往存储子系统的信息的相关时钟导出的时钟(例如与编码时钟关联)。备选地,唯一的时钟用于传输到存储子系统的信息,而单独的时钟用于从一个(或多个)存储子系统提供的信息。时钟本身能够以通信或工作频率或通信或工作频率的倍频运行,并且可以相对于数据、命令或地址信息被边对齐、居中对齐或置于备选计时位置。
传送到存储子系统(多个)的信息一般包括地址、命令和数据,以及通常与请求或报告状态或错误状况、重置记忆、完成存储器或逻辑初始化以及其他功能、配置或相关信息关联的其他信号。从存储子系统(多个)传递的信息包括传送到存储子系统(多个)的任何或全部信息,但是一般不包括地址和命令信息。此信息可以使用符合正常存储器件接口规范(通常在本质上是平行的)的通信方法进行传送,此信息可编码成“分组”结构,后者可与将来的存储接口一致,或仅被开发为增加通信带宽和/或允许子系统通过将收到的信息转换为接收装置(多个)所需的格式来独立于存储技术运行。
存储子系统的初始化可以根据可用接口总线、期望初始化速度、可用空间、成本/复杂性目标、子系统互连结构、对可用于此目的和其他目的的备选处理器(例如,服务处理器)的使用等,通过一种或多种方法完成。在一个实施例中,使用高速总线完成存储子系统(多个)的初始化,其方式一般为首先完成训练过程以建立可靠的通信,接着询问与该子系统的各个关联组件和/或特性相关的属性数据或“存在检测”数据,最后使用与该系统内的目标操作关联的信息编程相应的器件。在串接系统中,一般按照存储子系统沿着串接互连总线的位置顺序,先建立与第一存储子系统的通信,然后建立与后续(下游)子系统的通信。
第二初始化方法包括其中高速总线先以初始化过程期间的频率运行,然后以正常运行期间的第二频率(通常更高)运行的方法。在该实施例中,由于增加了与低频率运行相关的时间裕度,因此可以在完成每个子系统的询问和/或编程之前启动与串接互连总线上的所有存储子系统的通信。
第三初始化方法包括串接互连总线以正常的操作频率(多个)运行,同时增加了与每个地址、命令和/或数据传输关联的周期数。在一个实施例中,正常运行期间,可以在一个时钟周期内传输包含全部或部分地址、命令和/或数据信息的分组,但是在初始化期间,相同数量和/或类型的信息需要两个、三个或更多周期来传输。因此,该初始化过程将使用“慢”命令形式,而非“正常”命令形式,并且可以在各个子系统和存储控制器利用这些子系统中每个子系统内包括的POR(加电复位)逻辑开机和/或重启之后的某个时刻自动进入该模式。
第四初始化方法利用诸如存在检测总线(如Dell等人的美国专利第5,513,135号中定义的总线)、I2C总线(诸如刊物21-C修订版7R8中的168引脚DIMM系列之类的已发布JEDEC标准中定义的总线)和/或在使用此类存储器模块的计算机系统中广泛使用和记载的SMBUS之类的单独总线。此总线可以使用菊链/串接互连、多点或备选的结构与存储系统内的一个或多个模块相连,从而提供独立的询问存储子系统的装置,将一个或多个存储子系统中的每个子系统编程为在整个系统环境中运行,以及在系统正常运行期间根据系统环境中所需的或在系统环境中检测到的性能、热度、配置或其他更改来调整其他时间的操作特性。
也可以结合上面所列的方法或独立于这些方法使用其他初始化方法。使用诸如上面的第四实施例中所述的单独总线还具有以下优点:如与此共同转让的Dell等人的美国专利第6,381,685号所述,提供同时用于初始化和初始化以外的用途的独立装置,其中包括实时更改子系统的操作特性,同时还提供了报告诸如使用率、温度数据、故障信息或其他目标之类的子系统操作信息并对操作信息做出响应的单独装置。
随着蚀刻技术的改进,更好的工艺控制、低阻材料的使用、增加的面积以及其他半导体工艺改进、增加的器件电路密度(通常与增加的小片大小结合)将有助于促进增加集成器件功能以及集成过去在独立器件上实现的功能。该集成将用于提高目标功能的整体性能,同时促进增加存储密度,降低功耗,降低空间需求,降低成本以及带来其他有利于制造商和客户的优势。该集成是一种自然进化过程,需要对与系统关联的基础构造块进行结构更改。
使用一种或多种错误检测和/或纠正方法,可以高度确保通信路径、数据存储内容以及与存储系统或子系统的每个元件关联的所有功能操作的集成。各种元件中的任一元件或所有元件都包括错误检测和/或纠正方法,例如,CRC(循环冗余校验)、EDC(错误检测和纠正)、奇偶校验或适于此目的的其他编码/解码方法。进一步的可靠性增强包括操作重试(克服诸如与信息传输关联的错误之类的间歇错误),使用一个或多个备选或替换通信路径来替换故障路径和/或线路,在计算机、通信系统以及相关系统中使用的互补-重新互补技术或备选方法。
随着性能要求的增加,会更频繁地在犹如点对点链路一样简单或犹如多点结构一样复杂的总线上使用总线终端器。可识别和/或考虑的终端方法非常多,包括使用诸如电阻器、电容器、电感器之类的器件或这些器件的任意组合,这些器件在信号线与电源电压或地电位,端接电压或另一信号之间连接。终端器件(多个)可以是无源或有源终端结构的一部分,并且可以位于沿一条或多条信号线的一个或多个位置上,以及/或者是传输器和/或接收装置(多个)的一部分。终端器可以被选择为与传输线的阻抗匹配,或通过备选的方法选择以最大化可用频率、操作裕度以及成本、空间、功耗和其他约束内的相关属性。
技术影响和优势包括在与存储器件故障同时发生的存储器模块故障的情况下以未受阻碍的状态运行存储系统的能力。这可显著提高存储系统的可用性和可服务性。
如上所述,本发明的实施例可以采用由计算机实现的过程以及实施这些过程的装置的形式来实现。本发明的实施例还可以采用包含在诸如软盘、CD-ROM、硬盘或其他任何计算机可读存储介质之类的有形介质中存储的指令的计算机程序代码的形式来实现,其中,当计算机程序代码被加载到计算机内并由计算机执行时,计算机便成为用于实现本发明的装置。本发明也可以采用,例如,存储在存储介质,加载到计算机内和/或由计算机执行,或像通过电线或电缆,通过光纤,或通过电磁辐射那样通过某种传输介质传输的计算机程序代码的形式来实现,其中,当计算机程序代码被加载到计算机内并由计算机执行时,计算机便成为用于实现本发明的装置。当在通用微处理器上实现时,计算机程序代码段会配置微处理器以创建专用逻辑电路。
尽管参考示例性实施例描述了本发明,但是本领域的技术人员将理解,可以在不偏离本发明的范围的情况下做出各种更改,并且可以使用等效的元件来替换本发明中的元件。
Claims (10)
1.一种检测和纠正存储系统中的错误的存储控制器,所述存储控制器包括:
用于检测所述存储系统中的一个或多个错误的装置,所述存储系统包括具有存储器件的多个存储器模块,响应于存储命令而共同地访问所述存储器模块;
用于使用三角测量识别错误类型以将所述一个或多个错误隔离到存储器件和存储器模块之一或两者的装置;以及
用于使用水平地应用于所述多个存储器模块中的存储器件的第一ECC码和垂直地应用于一个存储器模块中的存储器件的第二ECC码来纠正所述一个或多个错误,从而使所述存储系统能够在与存储器件故障同时发生的存储器模块故障的情况下未受阻碍地运行的装置。
2.如权利要求1中所述的存储控制器,其中结合所述第二ECC码来使用偏移多重移动以确保所述纠正不会产生行对齐错误和变得无法检测。
3.如权利要求1或2中所述的存储控制器,其中在识别到故障存储器模块时,将所述故障存储器模块的身份用作所述第一ECC纠错码中的参数以便提高所述存储系统的可靠性。
4.如任一上述权利要求中所述的存储控制器,其中所述第一ECC码为RAID-3ECC码以及所述第二ECC码为RAID-6ECC码。
5.一种存储系统,包括:
与存储控制器以及多个存储器件通信的多个存储器模块;以及
如任一上述权利要求中所述的存储控制器。
6.如权利要求5中所述的存储系统,其中所述多个存储器模块包括经由五个不同的通道与所述存储控制器通信的五个存储器模块,所述五个存储器模块包括:四个存储器模块,其具有用于所述存储器模块的错误检测和纠正的两个存储器件;以及一个存储器模块,其具有用于跨所述四个存储器模块的错误检测和纠正的存储器件。
7.一种检测和纠正存储系统中的错误的方法,所述方法包括:
检测所述存储系统中的一个或多个错误,所述存储系统包括具有存储器件的多个存储器模块,响应于存储命令而共同地访问所述存储器模块;
使用三角测量识别错误类型以将所述一个或多个错误隔离到存储器件和存储器模块之一或两者;
使用水平地应用于所述多个存储器模块中的存储器件的第一ECC码和垂直地应用于一个存储器模块中的存储器件的第二ECC码来纠正所述一个或多个错误,从而使所述存储系统能够在与存储器件故障同时发生的存储器模块故障的情况下未受阻碍地运行。
8.如权利要求7中所述的方法,其中结合所述第二ECC码来使用偏移多重移动以确保所述纠正不会产生行对齐错误和变得无法检测。
9.如权利要求7或8中所述的方法,其中在识别到故障存储器模块时,将所述故障存储器模块的身份用作所述第一ECC纠错码中的参数以便提高所述存储系统的可靠性。
10.如权利要求7至9中的任一权利要求中所述的方法,其中所述第一ECC码为RAID-3ECC码以及所述第二ECC码为RAID-6ECC码。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/769,929 US8041990B2 (en) | 2007-06-28 | 2007-06-28 | System and method for error correction and detection in a memory system |
US11/769,929 | 2007-06-28 | ||
PCT/EP2008/057199 WO2009000639A2 (en) | 2007-06-28 | 2008-06-10 | System and method for error correction and detection in a memory system |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101681283A true CN101681283A (zh) | 2010-03-24 |
CN101681283B CN101681283B (zh) | 2012-07-25 |
Family
ID=40090304
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008800157513A Active CN101681283B (zh) | 2007-06-28 | 2008-06-10 | 存储系统中的错误纠正和检测的系统和方法 |
Country Status (7)
Country | Link |
---|---|
US (1) | US8041990B2 (zh) |
EP (1) | EP2171586B1 (zh) |
JP (1) | JP5349470B2 (zh) |
KR (1) | KR101119358B1 (zh) |
CN (1) | CN101681283B (zh) |
TW (1) | TWI430084B (zh) |
WO (1) | WO2009000639A2 (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103229243A (zh) * | 2010-11-08 | 2013-07-31 | 格林莱恩特有限责任公司 | 用于在非易失性存储设备中以冗余方式存储数据块的存储控制器和系统 |
CN104425019A (zh) * | 2013-08-23 | 2015-03-18 | 慧荣科技股份有限公司 | 存取快闪存储器中储存单元的方法以及使用该方法的装置 |
CN104424040A (zh) * | 2013-08-23 | 2015-03-18 | 慧荣科技股份有限公司 | 存取快闪存储器中储存单元的方法以及使用该方法的装置 |
CN104991833A (zh) * | 2015-06-15 | 2015-10-21 | 联想(北京)有限公司 | 一种错误检测方法及电子设备 |
WO2017012460A1 (zh) * | 2015-07-23 | 2017-01-26 | 深圳市中兴微电子技术有限公司 | 检测随机存储器故障的方法及装置、处理器 |
US9600359B2 (en) | 2012-05-31 | 2017-03-21 | Hewlett Packard Enterprise Development Lp | Local error detection and global error correction |
CN107766172A (zh) * | 2016-08-15 | 2018-03-06 | 三星电子株式会社 | 用于ddr sdram接口的dram辅助纠错机制 |
US9977714B2 (en) | 2013-08-23 | 2018-05-22 | Silicon Motion, Inc. | Methods for programming a storage unit of a flash memory in multiple stages and apparatuses using the same |
CN110348244A (zh) * | 2018-04-02 | 2019-10-18 | 深信服科技股份有限公司 | 基于仲裁的多校验和验证方法、系统、装置及存储介质 |
Families Citing this family (79)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9286198B2 (en) | 2005-04-21 | 2016-03-15 | Violin Memory | Method and system for storage of data in non-volatile media |
US8200887B2 (en) | 2007-03-29 | 2012-06-12 | Violin Memory, Inc. | Memory management system and method |
US8452929B2 (en) * | 2005-04-21 | 2013-05-28 | Violin Memory Inc. | Method and system for storage of data in non-volatile media |
US9384818B2 (en) | 2005-04-21 | 2016-07-05 | Violin Memory | Memory power management |
US8028186B2 (en) | 2006-10-23 | 2011-09-27 | Violin Memory, Inc. | Skew management in an interconnection system |
US9632870B2 (en) * | 2007-03-29 | 2017-04-25 | Violin Memory, Inc. | Memory system with multiple striping of raid groups and method for performing the same |
US11010076B2 (en) | 2007-03-29 | 2021-05-18 | Violin Systems Llc | Memory system with multiple striping of raid groups and method for performing the same |
US7979616B2 (en) * | 2007-06-22 | 2011-07-12 | International Business Machines Corporation | System and method for providing a configurable command sequence for a memory interface device |
US8041990B2 (en) | 2007-06-28 | 2011-10-18 | International Business Machines Corporation | System and method for error correction and detection in a memory system |
US8041989B2 (en) * | 2007-06-28 | 2011-10-18 | International Business Machines Corporation | System and method for providing a high fault tolerant memory system |
US7900084B2 (en) * | 2007-12-21 | 2011-03-01 | Intel Corporation | Reliable memory for memory controller with multiple channels |
US20100095188A1 (en) * | 2008-10-09 | 2010-04-15 | Transwitch Corporation | Apparatus and method for detecting and correcting errors in control characters of a multimedia interface |
US8472199B2 (en) * | 2008-11-13 | 2013-06-25 | Mosaid Technologies Incorporated | System including a plurality of encapsulated semiconductor chips |
US20100138717A1 (en) * | 2008-12-02 | 2010-06-03 | Microsoft Corporation | Fork codes for erasure coding of data blocks |
US20100162037A1 (en) * | 2008-12-22 | 2010-06-24 | International Business Machines Corporation | Memory System having Spare Memory Devices Attached to a Local Interface Bus |
US8924819B2 (en) * | 2009-01-23 | 2014-12-30 | Macronix International Co., Ltd. | Memory device and operation method thereof |
US8189420B2 (en) * | 2009-06-04 | 2012-05-29 | Micron Technology, Inc. | Advanced detection of memory device removal, and methods, devices and connectors |
US8046628B2 (en) * | 2009-06-05 | 2011-10-25 | Micron Technology, Inc. | Failure recovery memory devices and methods |
KR101324688B1 (ko) * | 2009-06-12 | 2013-11-04 | 바이올린 메모리 인코포레이티드 | 영구 가비지 컬렉션을 갖는 메모리 시스템 |
EP2264604A1 (en) * | 2009-06-15 | 2010-12-22 | Thomson Licensing | Device for real-time streaming of two or more streams in parallel to a solid state memory device array |
US8255773B2 (en) * | 2009-06-29 | 2012-08-28 | Sandisk Technologies Inc. | System and method of tracking error data within a storage device |
CN102812518B (zh) * | 2010-01-28 | 2015-10-21 | 惠普发展公司,有限责任合伙企业 | 存储器存取方法和装置 |
US20110258520A1 (en) * | 2010-04-16 | 2011-10-20 | Segura Theresa L | Locating and correcting corrupt data or syndrome blocks |
US8719675B1 (en) * | 2010-06-16 | 2014-05-06 | Google Inc. | Orthogonal coding for data storage, access, and maintenance |
US8549378B2 (en) | 2010-06-24 | 2013-10-01 | International Business Machines Corporation | RAIM system using decoding of virtual ECC |
US8484529B2 (en) | 2010-06-24 | 2013-07-09 | International Business Machines Corporation | Error correction and detection in a redundant memory system |
US8898511B2 (en) * | 2010-06-24 | 2014-11-25 | International Business Machines Corporation | Homogeneous recovery in a redundant memory system |
US8631271B2 (en) * | 2010-06-24 | 2014-01-14 | International Business Machines Corporation | Heterogeneous recovery in a redundant memory system |
US8327080B1 (en) | 2010-09-28 | 2012-12-04 | Emc Corporation | Write-back cache protection |
US8522122B2 (en) | 2011-01-29 | 2013-08-27 | International Business Machines Corporation | Correcting memory device and memory channel failures in the presence of known memory device failures |
US8732557B2 (en) | 2011-05-31 | 2014-05-20 | Micron Technology, Inc. | Data protection across multiple memory blocks |
TWI446160B (zh) | 2011-07-21 | 2014-07-21 | Silicon Motion Inc | 快閃記憶體控制器及資料讀取方法 |
TWI476589B (zh) * | 2011-08-25 | 2015-03-11 | Macronix Int Co Ltd | 記憶體編程方法及應用其之快閃記憶體裝置 |
US20130318393A1 (en) * | 2011-11-15 | 2013-11-28 | Ocz Technology Group Inc. | Solid-state mass storage device and methods of operation |
US20140304201A1 (en) | 2011-11-15 | 2014-10-09 | Kim Hyldgaard | System And Method For Identifying Suggestions To Remedy Wind Turbine Faults |
US9535865B2 (en) | 2011-12-22 | 2017-01-03 | Intel Corporation | Interconnection of multiple chips in a package |
US10379971B2 (en) | 2012-01-31 | 2019-08-13 | Hewlett Packard Enterprise Development Lp | Single and double chip space |
WO2013115790A1 (en) | 2012-01-31 | 2013-08-08 | Hewlett-Packard Development Company L.P. | Single and double chip spare |
US8990646B2 (en) | 2012-05-31 | 2015-03-24 | Hewlett-Packard Development Company, L.P. | Memory error test routine |
CN103577274B (zh) | 2012-07-31 | 2016-07-06 | 国际商业机器公司 | 管理存储器阵列的方法和装置 |
CN104756092A (zh) * | 2012-10-19 | 2015-07-01 | 富士通株式会社 | 记录再生装置、错误订正方法以及控制装置 |
US8966348B2 (en) | 2012-11-30 | 2015-02-24 | Hewlett-Packard Development Company, L.P. | Memory error identification based on corrupted symbol patterns |
US20140173170A1 (en) * | 2012-12-14 | 2014-06-19 | Hewlett-Packard Development Company, L.P. | Multiple subarray memory access |
JP6005533B2 (ja) | 2013-01-17 | 2016-10-12 | 株式会社東芝 | 記憶装置および記憶方法 |
US9430418B2 (en) | 2013-03-15 | 2016-08-30 | International Business Machines Corporation | Synchronization and order detection in a memory system |
CN104347122B (zh) * | 2013-07-31 | 2017-08-04 | 华为技术有限公司 | 一种消息式内存模组的访存方法和装置 |
WO2015016880A1 (en) * | 2013-07-31 | 2015-02-05 | Hewlett-Packard Development Company, L.P. | Global error correction |
CN104424127A (zh) * | 2013-08-23 | 2015-03-18 | 慧荣科技股份有限公司 | 存取快闪存储器中储存单元的方法以及使用该方法的装置 |
TWI552160B (zh) * | 2013-08-23 | 2016-10-01 | 慧榮科技股份有限公司 | 存取快閃記憶體中儲存單元的方法以及使用該方法的裝置 |
US9343181B2 (en) | 2013-08-30 | 2016-05-17 | Hewlett Packard Enterprise Development Lp | Memory module errors |
US9805775B1 (en) | 2013-11-08 | 2017-10-31 | Altera Corporation | Integrated circuits with improved memory controllers |
US9946590B2 (en) | 2013-12-19 | 2018-04-17 | Hewlett Packard Enterprise Development Lp | Transmission of command strings and status strings via memory bus |
KR102110767B1 (ko) * | 2013-12-24 | 2020-06-09 | 삼성전자 주식회사 | 메모리 컨트롤러 구동방법 및 메모리 컨트롤러 |
US9354818B2 (en) | 2014-02-25 | 2016-05-31 | Kabushiki Kaisha Toshiba | Memory device and data storing method |
US9268660B2 (en) * | 2014-03-12 | 2016-02-23 | International Business Machines Corporation | Matrix and compression-based error detection |
US9251054B2 (en) * | 2014-03-27 | 2016-02-02 | International Business Machines Corporation | Implementing enhanced reliability of systems utilizing dual port DRAM |
US9672880B2 (en) | 2014-06-16 | 2017-06-06 | Honeywell International Inc. | Radiation upset detection |
US9754684B2 (en) | 2014-11-06 | 2017-09-05 | Samsung Electronics Co., Ltd. | Completely utilizing hamming distance for SECDED based ECC DIMMs |
US9747035B2 (en) | 2014-12-17 | 2017-08-29 | Empire Technology Development Llc | Reducing memory overhead associated with memory protected by a fault protection scheme |
US10261697B2 (en) | 2015-06-08 | 2019-04-16 | Samsung Electronics Co., Ltd. | Storage device and operating method of storage device |
US20160378594A1 (en) * | 2015-06-26 | 2016-12-29 | Intel Corporation | Method and apparatus to decode low density parity codes |
TWI653536B (zh) | 2015-07-08 | 2019-03-11 | 美商萬國商業機器公司 | 用於調整最佳化參數以自訂用於共用匯流排上目標晶片之信號眼之方法、系統及電腦程式產品 |
CN105183579B (zh) * | 2015-09-24 | 2019-09-24 | 联想(北京)有限公司 | 一种数据校验方法及装置、电子设备 |
US10594491B2 (en) * | 2015-12-24 | 2020-03-17 | Intel Corporation | Cryptographic system memory management |
GB2548407A (en) | 2016-03-18 | 2017-09-20 | Memoscale As | Coding technique |
US10078567B2 (en) | 2016-03-18 | 2018-09-18 | Alibaba Group Holding Limited | Implementing fault tolerance in computer system memory |
KR102638789B1 (ko) | 2016-09-05 | 2024-02-22 | 에스케이하이닉스 주식회사 | 테스트방법 및 이를 이용한 반도체시스템 |
US10379939B2 (en) * | 2017-01-04 | 2019-08-13 | Samsung Electronics Co., Ltd. | Memory apparatus for in-chip error correction |
KR102243582B1 (ko) * | 2017-04-24 | 2021-04-23 | 에스케이하이닉스 주식회사 | 반도체장치 |
GB201715073D0 (en) | 2017-09-19 | 2017-11-01 | Memoscale As | Data security |
US10303545B1 (en) | 2017-11-30 | 2019-05-28 | International Business Machines Corporation | High efficiency redundant array of independent memory |
TWI722496B (zh) * | 2019-06-20 | 2021-03-21 | 慧榮科技股份有限公司 | 使用者資料的加解密方法及裝置 |
KR20210013387A (ko) | 2019-07-24 | 2021-02-04 | 삼성전자주식회사 | 메모리 시스템 |
US11042432B1 (en) * | 2019-12-20 | 2021-06-22 | Western Digital Technologies, Inc. | Data storage device with dynamic stripe length manager |
US11256587B2 (en) * | 2020-04-17 | 2022-02-22 | Pure Storage, Inc. | Intelligent access to a storage device |
KR20210138241A (ko) | 2020-05-12 | 2021-11-19 | 삼성전자주식회사 | 메모리 컨트롤러, 메모리 시스템 및 메모리 모듈 |
KR20220031801A (ko) | 2020-09-03 | 2022-03-14 | 삼성전자주식회사 | 메모리 모듈, 메모리 모듈의 보호 장치 및 메모리 모듈 보호 시스템 |
WO2023106434A1 (ko) * | 2021-12-06 | 2023-06-15 | 주식회사 딥아이 | Ddr sdram 인터페이스를 이용한 dram 지원 에러 정정 방법 |
US11681581B1 (en) * | 2022-06-21 | 2023-06-20 | Western Digital Technologies, Inc. | Data integrity protection with partial updates |
Family Cites Families (63)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4464747A (en) * | 1982-02-18 | 1984-08-07 | The Singer Company | High reliability memory |
DE68928112T2 (de) * | 1988-03-18 | 1997-11-20 | Toshiba Kawasaki Kk | Masken-rom mit Ersatzspeicherzellen |
GB8926004D0 (en) * | 1989-11-17 | 1990-01-10 | Inmos Ltd | Repairable memory circuit |
JP2659283B2 (ja) * | 1991-01-14 | 1997-09-30 | シャープ株式会社 | 半導体記憶装置の製造方法 |
KR100296850B1 (ko) * | 1992-05-28 | 2001-10-24 | 썬 마이크로시스템즈, 인코포레이티드 | 캐시램용다수의뱅크열용장성초기화제어기 |
JPH08511368A (ja) * | 1993-06-04 | 1996-11-26 | ネットワーク・アプリアンス・コーポレーション | 不揮発性メモリを用いてraidサブシステムにパリティを形成する方法 |
US5488691A (en) * | 1993-11-17 | 1996-01-30 | International Business Machines Corporation | Memory card, computer system and method of operation for differentiating the use of read-modify-write cycles in operating and initializaiton modes |
US5499253A (en) * | 1994-01-05 | 1996-03-12 | Digital Equipment Corporation | System and method for calculating RAID 6 check codes |
US5463643A (en) * | 1994-03-07 | 1995-10-31 | Dell Usa, L.P. | Redundant memory channel array configuration with data striping and error correction capabilities |
US5513135A (en) * | 1994-12-02 | 1996-04-30 | International Business Machines Corporation | Synchronous memory packaged in single/dual in-line memory module and method of fabrication |
US5680564A (en) * | 1995-05-26 | 1997-10-21 | National Semiconductor Corporation | Pipelined processor with two tier prefetch buffer structure and method with bypass |
US6012839A (en) * | 1995-06-30 | 2000-01-11 | Quantum Corporation | Method and apparatus to protect data within a disk drive buffer |
WO1998009219A1 (de) * | 1996-08-30 | 1998-03-05 | Siemens Aktiengesellschaft | Fehlererkennung in einem speichersystem |
US5835425A (en) | 1997-09-04 | 1998-11-10 | Siemens Aktiengesellschaft | Dimension programmable fusebanks and methods for making the same |
US6223301B1 (en) * | 1997-09-30 | 2001-04-24 | Compaq Computer Corporation | Fault tolerant memory |
CN1165906C (zh) * | 1998-02-25 | 2004-09-08 | 松下电器产业株式会社 | 纠错装置 |
US6173382B1 (en) * | 1998-04-28 | 2001-01-09 | International Business Machines Corporation | Dynamic configuration of memory module using modified presence detect data |
US6505305B1 (en) * | 1998-07-16 | 2003-01-07 | Compaq Information Technologies Group, L.P. | Fail-over of multiple memory blocks in multiple memory modules in computer system |
US6845472B2 (en) * | 2000-01-25 | 2005-01-18 | Hewlett-Packard Development Company, L.P. | Memory sub-system error cleansing |
US6854070B2 (en) * | 2000-01-25 | 2005-02-08 | Hewlett-Packard Development Company, L.P. | Hot-upgrade/hot-add memory |
US6715116B2 (en) * | 2000-01-26 | 2004-03-30 | Hewlett-Packard Company, L.P. | Memory data verify operation |
US6820072B1 (en) * | 2000-08-22 | 2004-11-16 | Hewlett-Packard Development Company, L.P. | Validation of probabilistic troubleshooters and diagnostic system |
US6418068B1 (en) * | 2001-01-19 | 2002-07-09 | Hewlett-Packard Co. | Self-healing memory |
US6763444B2 (en) * | 2001-05-08 | 2004-07-13 | Micron Technology, Inc. | Read/write timing calibration of a memory array using a row or a redundant row |
JP3565798B2 (ja) * | 2001-06-14 | 2004-09-15 | 英二 藤原 | バースト誤りパターン生成方法及びバーストおよびバイト誤り検出・訂正装置 |
KR100413762B1 (ko) * | 2001-07-02 | 2003-12-31 | 삼성전자주식회사 | 뱅크 수를 가변할 수 있는 반도체 장치 및 그 방법 |
US6845474B2 (en) * | 2001-09-10 | 2005-01-18 | Hewlett-Packard Development Company, L.P. | Problem detector and method |
US7028213B2 (en) * | 2001-09-28 | 2006-04-11 | Hewlett-Packard Development Company, L.P. | Error indication in a raid memory system |
US6973612B1 (en) * | 2001-11-13 | 2005-12-06 | Unisys Corporation | Familial correction with non-familial double bit error detection for directory storage |
JP2003303139A (ja) * | 2002-04-09 | 2003-10-24 | Nec Corp | 冗長メモリモジュールおよびメモリコントローラ |
US6948091B2 (en) * | 2002-05-02 | 2005-09-20 | Honeywell International Inc. | High integrity recovery from multi-bit data failures |
US7293138B1 (en) * | 2002-06-27 | 2007-11-06 | Adaptec, Inc. | Method and apparatus for raid on memory |
WO2004012337A2 (en) * | 2002-07-29 | 2004-02-05 | Robert Halford | Multi-dimensional data protection and mirroring method for micro level data |
US6957365B2 (en) * | 2002-08-16 | 2005-10-18 | Sun Microsystems, Inc. | Method and apparatus for using acoustic signals to identify disk drives that are likely to fail |
US7149945B2 (en) * | 2003-05-09 | 2006-12-12 | Hewlett-Packard Development Company, L.P. | Systems and methods for providing error correction code testing functionality |
JP3892832B2 (ja) * | 2003-08-11 | 2007-03-14 | 株式会社東芝 | 半導体記憶装置 |
US7099994B2 (en) * | 2003-09-29 | 2006-08-29 | Hewlett-Packard Development Company, L.P. | RAID memory system |
US8645622B2 (en) * | 2003-11-18 | 2014-02-04 | International Business Machines Corporation | Method to protect data on a disk drive from uncorrectable media errors |
US7191257B2 (en) * | 2003-12-22 | 2007-03-13 | National Instruments Corp. | System and method for real-time processing of nondeterministic captured data events |
US20050164373A1 (en) | 2004-01-22 | 2005-07-28 | Oldham Mark F. | Diffusion-aided loading system for microfluidic devices |
JP2005242797A (ja) * | 2004-02-27 | 2005-09-08 | Oki Electric Ind Co Ltd | エラー訂正回路 |
US8464093B1 (en) | 2004-09-03 | 2013-06-11 | Extreme Networks, Inc. | Memory array error correction |
US7395488B2 (en) * | 2004-12-29 | 2008-07-01 | Zoran Corporation | System and method for efficient use of memory device bandwidth |
US8107714B2 (en) * | 2005-01-18 | 2012-01-31 | The Board Of Regents Of The University Of Texas System | Methods for detecting and tagging scene changes |
US7424648B2 (en) * | 2005-03-10 | 2008-09-09 | Matsushita Electric Industrial Co., Ltd. | Nonvolatile memory system, nonvolatile memory device, data read method, and data read program |
JP4474648B2 (ja) * | 2005-03-25 | 2010-06-09 | 日本電気株式会社 | メモリシステム及びそのホットスワップ方法 |
WO2007006128A1 (en) * | 2005-04-18 | 2007-01-18 | Research In Motion Limited | Method for handling a detected error in a script-based application |
US8200887B2 (en) * | 2007-03-29 | 2012-06-12 | Violin Memory, Inc. | Memory management system and method |
US20060256615A1 (en) * | 2005-05-10 | 2006-11-16 | Larson Thane M | Horizontal and vertical error correction coding (ECC) system and method |
US7721182B2 (en) * | 2005-05-27 | 2010-05-18 | International Business Machines Corporation | Soft error protection in individual memory devices |
US8060774B2 (en) * | 2005-06-24 | 2011-11-15 | Google Inc. | Memory systems and memory modules |
US7227797B2 (en) * | 2005-08-30 | 2007-06-05 | Hewlett-Packard Development Company, L.P. | Hierarchical memory correction system and method |
US7307902B2 (en) * | 2005-08-30 | 2007-12-11 | Hewlett-Packard Development Company, L.P. | Memory correction system and method |
DE112006002300B4 (de) * | 2005-09-02 | 2013-12-19 | Google, Inc. | Vorrichtung zum Stapeln von DRAMs |
US8386702B2 (en) * | 2005-10-27 | 2013-02-26 | Hewlett-Packard Development Company, L.P. | Memory controller |
US7577899B2 (en) * | 2006-02-13 | 2009-08-18 | Harris Corporation | Cyclic redundancy check (CRC) based error correction method and device |
US8375064B2 (en) * | 2006-05-05 | 2013-02-12 | International Business Machines Corporation | Apparatus, system, and method for read back verification of stored data |
US7484138B2 (en) * | 2006-06-09 | 2009-01-27 | Taiwan Semiconductor Manufacturing Co., Ltd. | Method and system for improving reliability of memory device |
US7895502B2 (en) * | 2007-01-04 | 2011-02-22 | International Business Machines Corporation | Error control coding methods for memories with subline accesses |
US7596648B2 (en) * | 2007-03-08 | 2009-09-29 | Dell Products L.P. | System and method for information handling system error recovery |
US7656727B2 (en) * | 2007-04-25 | 2010-02-02 | Hewlett-Packard Development Company, L.P. | Semiconductor memory device and system providing spare memory locations |
US8041990B2 (en) | 2007-06-28 | 2011-10-18 | International Business Machines Corporation | System and method for error correction and detection in a memory system |
US8041989B2 (en) * | 2007-06-28 | 2011-10-18 | International Business Machines Corporation | System and method for providing a high fault tolerant memory system |
-
2007
- 2007-06-28 US US11/769,929 patent/US8041990B2/en active Active
-
2008
- 2008-06-10 CN CN2008800157513A patent/CN101681283B/zh active Active
- 2008-06-10 KR KR1020097016558A patent/KR101119358B1/ko active IP Right Grant
- 2008-06-10 JP JP2010513832A patent/JP5349470B2/ja active Active
- 2008-06-10 WO PCT/EP2008/057199 patent/WO2009000639A2/en active Application Filing
- 2008-06-10 EP EP08760760.2A patent/EP2171586B1/en active Active
- 2008-06-24 TW TW097123487A patent/TWI430084B/zh not_active IP Right Cessation
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103229243B (zh) * | 2010-11-08 | 2016-08-24 | 格林莱恩特有限责任公司 | 用于在非易失性存储设备中以冗余方式存储数据块的存储控制器和系统 |
CN103229243A (zh) * | 2010-11-08 | 2013-07-31 | 格林莱恩特有限责任公司 | 用于在非易失性存储设备中以冗余方式存储数据块的存储控制器和系统 |
CN104246898B (zh) * | 2012-05-31 | 2017-03-22 | 慧与发展有限责任合伙企业 | 局部错误检测和全局错误纠正 |
US9600359B2 (en) | 2012-05-31 | 2017-03-21 | Hewlett Packard Enterprise Development Lp | Local error detection and global error correction |
CN104424040B (zh) * | 2013-08-23 | 2017-10-31 | 慧荣科技股份有限公司 | 存取快闪存储器中储存单元的方法以及使用该方法的装置 |
CN104424040A (zh) * | 2013-08-23 | 2015-03-18 | 慧荣科技股份有限公司 | 存取快闪存储器中储存单元的方法以及使用该方法的装置 |
CN104425019A (zh) * | 2013-08-23 | 2015-03-18 | 慧荣科技股份有限公司 | 存取快闪存储器中储存单元的方法以及使用该方法的装置 |
CN107193684A (zh) * | 2013-08-23 | 2017-09-22 | 慧荣科技股份有限公司 | 存取快闪存储器中储存单元的方法以及使用该方法的装置 |
CN104425019B (zh) * | 2013-08-23 | 2018-07-06 | 慧荣科技股份有限公司 | 存取快闪存储器中存储单元的方法以及使用该方法的装置 |
CN107632904A (zh) * | 2013-08-23 | 2018-01-26 | 慧荣科技股份有限公司 | 存取快闪存储器中储存单元的方法以及使用该方法的装置 |
CN107632904B (zh) * | 2013-08-23 | 2020-12-22 | 慧荣科技股份有限公司 | 存取快闪存储器中储存单元的方法以及使用该方法的装置 |
US9977714B2 (en) | 2013-08-23 | 2018-05-22 | Silicon Motion, Inc. | Methods for programming a storage unit of a flash memory in multiple stages and apparatuses using the same |
CN104991833A (zh) * | 2015-06-15 | 2015-10-21 | 联想(北京)有限公司 | 一种错误检测方法及电子设备 |
CN104991833B (zh) * | 2015-06-15 | 2018-03-27 | 联想(北京)有限公司 | 一种错误检测方法及电子设备 |
WO2017012460A1 (zh) * | 2015-07-23 | 2017-01-26 | 深圳市中兴微电子技术有限公司 | 检测随机存储器故障的方法及装置、处理器 |
CN107766172A (zh) * | 2016-08-15 | 2018-03-06 | 三星电子株式会社 | 用于ddr sdram接口的dram辅助纠错机制 |
CN107766172B (zh) * | 2016-08-15 | 2022-06-28 | 三星电子株式会社 | 用于ddr sdram接口的dram辅助纠错方法 |
US11625296B2 (en) | 2016-08-15 | 2023-04-11 | Samsung Electronics Co., Ltd. | DRAM assist error correction mechanism for DDR SDRAM interface |
CN110348244A (zh) * | 2018-04-02 | 2019-10-18 | 深信服科技股份有限公司 | 基于仲裁的多校验和验证方法、系统、装置及存储介质 |
CN110348244B (zh) * | 2018-04-02 | 2023-03-17 | 深信服科技股份有限公司 | 基于仲裁的多校验和验证方法、系统、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US20090006886A1 (en) | 2009-01-01 |
KR20090118031A (ko) | 2009-11-17 |
US8041990B2 (en) | 2011-10-18 |
EP2171586A2 (en) | 2010-04-07 |
TW200919171A (en) | 2009-05-01 |
WO2009000639A3 (en) | 2009-05-28 |
WO2009000639A2 (en) | 2008-12-31 |
JP2010531499A (ja) | 2010-09-24 |
JP5349470B2 (ja) | 2013-11-20 |
EP2171586B1 (en) | 2013-05-08 |
CN101681283B (zh) | 2012-07-25 |
KR101119358B1 (ko) | 2012-03-13 |
TWI430084B (zh) | 2014-03-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101681283B (zh) | 存储系统中的错误纠正和检测的系统和方法 | |
CN101217060B (zh) | 用于识别故障存储器元件的系统和方法 | |
US10191676B2 (en) | Scalable storage protection | |
US7949931B2 (en) | Systems and methods for error detection in a memory system | |
US8041989B2 (en) | System and method for providing a high fault tolerant memory system | |
US8495328B2 (en) | Providing frame start indication in a memory system having indeterminate read data latency | |
CN102084341A (zh) | 用于在高速串行链路中使用的循环冗余码 | |
US8055976B2 (en) | System and method for providing error correction and detection in a memory system | |
US8359521B2 (en) | Providing a memory device having a shared error feedback pin | |
US7836379B1 (en) | Method for computing buffer ECC | |
CN102520890B (zh) | 基于gpu的rs-draid系统及存储设备数据控制方法 | |
US20090063759A1 (en) | System and method for providing constrained transmission and storage in a random access memory | |
US7471219B1 (en) | Low latency constrained coding for parallel busses | |
US11012099B1 (en) | Half-size data array for encoding binary symmetry-invariant product codes | |
JP2013205853A (ja) | フラッシュメモリディスク装置、フラッシュメモリディスク装置におけるデータ記憶制御方法およびプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |