CN114360623A - 用于存储器纠错的方法、存储器控制器及计算机系统 - Google Patents
用于存储器纠错的方法、存储器控制器及计算机系统 Download PDFInfo
- Publication number
- CN114360623A CN114360623A CN202111618391.XA CN202111618391A CN114360623A CN 114360623 A CN114360623 A CN 114360623A CN 202111618391 A CN202111618391 A CN 202111618391A CN 114360623 A CN114360623 A CN 114360623A
- Authority
- CN
- China
- Prior art keywords
- memory
- error correction
- data
- error
- granule
- 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.)
- Pending
Links
Images
Abstract
本公开提供了用于一种用于存储器纠错的方法、存储器控制器及计算机系统。该用于存储器纠错的方法,包括:判定存储器的第一内存颗粒是否存在故障;在第一内存颗粒存在故障的情况下,使用第一纠错算法来纠正第一内存颗粒的存储数据中的错误数据,得到第一内存颗粒的纠正后的存储数据;以及利用第二纠错算法将纠正后的存储数据存储到存储器的第二内存颗粒中。该用于存储器纠错的方法提高了存储器的容错能力。
Description
技术领域
本公开的实施例涉及存储器领域,并且更具体地,涉及一种用于存储器纠错的方法、存储器控制器及计算机系统。
背景技术
存储器,例如双倍数据速率(Double Data Rate,DDR)存储器,在工作过程中难免会受到诸如电磁等环境因素的干扰,从而导致DDR存储器出现错误。例如,对于稳定性要求高的用户来说,内存错误可能会引起致命性的问题。DDR存储器必须具有高级可靠性、可用性和可维护性功能(RAS功能),以当出现内存错误时,可以延长整个系统的正常运行时间。因此,提高存储器容错能力尤为重要,否则系统很可能会由于存储器错误而崩溃或宕机。
发明内容
本公开的至少一实施例公开了一种用于存储器纠错的方法、存储器控制器及计算机系统,用于提高存储器的容错能力。
本公开的第一方面提供了一种用于存储器纠错的方法,包括:判定存储器的第一内存颗粒是否存在故障;在第一内存颗粒存在故障的情况下,使用第一纠错算法来纠正第一内存颗粒的存储数据中的错误数据,得到第一内存颗粒的纠正后的存储数据;以及利用第二纠错算法将纠正后的存储数据存储到存储器的第二内存颗粒中。
例如,根据本公开的第一方面提供的方法,利用第二纠错算法将纠正后的存储数据存储到存储器的第二内存颗粒中还包括:将第一纠错算法替换为第二纠错算法,并且生成第二纠错算法的纠错编码;将纠错编码存储在存储器的第三内存颗粒中;以及将纠正后的存储数据存储到第二内存颗粒中。
例如,根据本公开的第一方面提供的方法,判定第一内存颗粒是否存在故障,包括:确定第一内存颗粒连续出现可纠正错误的次数;判断次数是否大于或等于可纠正错误阈值;以及响应于次数大于或等于可纠正错误阈值,判定第一内存颗粒存在故障。
例如,根据本公开的第一方面提供的方法,确定第一内存颗粒连续出现可纠正错误的次数,包括:判断第一内存颗粒所属的列是否出现可纠正错误;响应于列出现可纠正错误,判断可纠正错误是否连续出现在第一内存颗粒;响应于可纠正错误连续出现在第一内存颗粒,对可纠正错误连续出现在第一内存颗粒的次数进行计数;以及响应于可纠正错误未连续出现在第一内存颗粒,将计数归零。
例如,根据本公开的第一方面提供的方法,还包括:接收写入数据;利用第二纠错算法将写入数据中原定要写入第一内存颗粒的数据写入到第二内存颗粒。
例如,根据本公开的第一方面提供的方法,还包括:确定读出数据是否在故障之前被写入;响应于读出数据在故障之前被写入,使用第一纠错算法校验读取数据。
例如,根据本公开的第一方面提供的方法,还包括:使用第二纠错算法将校验后的读取数据存储到第二内存颗粒中。
例如,根据本公开的第一方面提供的方法,还包括:响应于读取数据在故障之后被写入,使用第二纠错算法校验读取数据。
例如,根据本公开的第一方面提供的方法,第一纠错算法是RS算法,第二纠错算法是汉明码算法。
本公开的第二方面提供了一种存储器控制器,用于存储器,存储器包括第一内存颗粒和第二内存颗粒,存储器控制器包括:故障判定单元,被配置为:判定第一内存颗粒是否存在故障;纠错控制单元,被配置为:在第一内存颗粒存在故障的情况下,使用第一纠错算法来纠正第一内存颗粒的存储数据中的错误数据,得到第一内存颗粒的纠正后的存储数据;利用第二纠错算法将纠正后的存储数据存储到存储器的第二内存颗粒中。
例如,根据本公开的第二方面提供的存储器控制器,存储器还包括第三内存颗粒,并且纠错控制单元还被配置为:将第一纠错算法替换为第二纠错算法,并且生成第二纠错算法的纠错编码;将纠错编码存储在第三内存颗粒中;以及将纠正后的存储数据存储到第二内存颗粒中。
例如,根据本公开的第二方面提供的存储器控制器,故障判定单元包括:错误次数确定单元,被配置为:确定第一内存颗粒连续出现可纠正错误的次数;错误次数判定单元,被配置为:判断次数是否大于或等于可纠正错误阈值;以及响应于次数大于或等于可纠正错误阈值,判定第一内存颗粒存在故障。
例如,根据本公开的第二方面提供的存储器控制器,错误次数确定单元包括:列错误次数确定单元,被配置为:判断第一内存颗粒所属的列是否出现可纠正错误;响应于列出现可纠正错误,判断可纠正错误是否连续出现在第一内存颗粒;响应于可纠正错误连续出现在第一内存颗粒,对可纠正错误连续出现在第一内存颗粒的次数进行计数;以及响应于可纠正错误未连续出现在第一内存颗粒,将计数归零。
例如,根据本公开的第二方面提供的存储器控制器,纠错控制单元还被配置为:接收写入数据;以及利用第二纠错算法将写入数据中原定要写入第一内存颗粒的数据写入到第二内存颗粒。
例如,根据本公开的第二方面提供的存储器控制器,纠错控制单元还被配置为:确定读出数据是否在故障之前被写入;响应于读出数据在故障之前被写入,使用第一纠错算法校验读取数据。
例如,根据本公开的第二方面提供的存储器控制器,纠错控制单元还被配置为:使用第二纠错算法将校验后的读取数据存储到第二内存颗粒中。
例如,根据本公开的第二方面提供的存储器控制器,纠错控制单元还被配置为:响应于读取数据在故障之后被写入,使用第二纠错算法校验读取数据。
例如,根据本公开的第二方面提供的存储器控制器,第一纠错算法是RS算法,第二纠错算法是汉明码算法。
本公开的第三方面提供了一种计算机系统,包括:根据本公开至少一实施例所述的存储器和存储器控制器。
本公开的至少一个实施例使用第一纠错算法和第二纠错算法相结合的方法,在判定存储器的某一内存颗粒出现故障之后有一次切换算法的行为,实现了两种纠错算法的纠错能力的结合,提高了存储器的纠错能力,提高了存储器的容错能力。
附图说明
为了更清楚地说明本公开的实施例的技术方案,下面将对本公开的实施例的附图作简单地介绍。明显地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
图1示出了根据本公开的至少一实施例的用于存储器纠错的方法的流程图。
图2示出了根据本公开的至少一实施例的存储器控制器的示意图。
图3示出了根据本公开的至少一实施例的示例性应用场景中的架构示意图。
图4示出了根据本公开的至少一实施例的图3的示例性应用场景中读出数据的架构示意图。
图5示出了根据本公开的至少一实施例的图3的示例性应用场景中写入数据的架构示意图。
图6示出了根据本公开的至少一实施例的计算机系统的示意图。
图7示出了根据本公开的至少一实施例的电子设备的示意图。
图8示出了根据本公开的至少一实施例的另一电子设备的示意图
图9示出了根据本公开的至少一实施例的非瞬时可读存储介质的示意图。
具体实施方式
现在将详细参考本公开的具体实施例,在附图中例示了本公开的示例。尽管将结合具体实施例描述本公开,但将理解,不是想要将本公开限于描述的实施例。相反,想要覆盖由所附权利要求限定的在本公开的精神和范围内包括的变更、修改和等价物。应注意,本文描述的方法操作都可以由任何功能块或功能布置来实现,且任何功能块或功能布置可被实现为物理实体或逻辑实体、或者两者的组合。
为了使本领域技术人员更好地理解本公开,下面结合附图和具体实施方式对本公开作进一步详细说明。
注意,接下来要介绍的示例仅是具体的示例,而不作为限制本公开的实施例必须为示出和描述的具体的外形、硬件、连接关系、操作、数值、条件、数据、顺序等等。本领域技术人员可以通过阅读本说明书来运用本公开的构思来构造本说明书中未提到的更多实施例。
本公开中使用的术语是考虑到关于本公开的功能而在本领域中当前广泛使用的那些通用术语,但是这些术语可以根据本领域普通技术人员的意图、先例或本领域新技术而变化。此外,特定术语可以由申请人选择,并且在这种情况下,其详细含义将在本公开的详细描述中描述。因此,说明书中使用的术语不应理解为简单的名称,而是基于术语的含义和本公开的总体描述。
本公开中使用了流程图来说明根据本申请的实施例的系统所执行的操作。应当理解的是,前面或下面操作不一定按照顺序来精确地执行。相反,根据需要,可以按照倒序或同时处理各种步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步操作。
为便于理解,首先对本公开的至少一实施例涉及的相关术语进行解释:
可纠正错误(Correctable Error,CE),简称CE错误,是指硬件(芯片)基于自身所采用的ECC算法可以纠正的错误。由于内存控制器设计不一样,对于可纠正错误的能力可能存在不同。例如,主流x86服务器的内存控制器(支持带ECC的内存条),在一次读操作中,一个4位的数据位宽(X4宽度/位宽)的内存颗粒内的任意错误都是可纠正的。如果内存的组(Rank)是由8位的数据位宽(X8宽度/位宽)的内存颗粒组成,其纠正能力还是与X4宽度的内存颗粒及位置保持一致,在X8宽度的一个内存颗粒中,包括DQ0-7的8位数据,其中只有DQ0-3,或者DQ4-7可以被纠正。
不可纠正错误(Uncorrectable Error,UCE),简称UCE错误,是指硬件(芯片)基于自身所采用的ECC算法无法纠正的错误。例如,在一次读取操作中,错误数据位分布在不同X4宽度的内存颗粒范围,即出现跨内存颗粒的错误,以现有内存控制设计来看,属于不可纠正错误。又例如,内存的组是由X8宽度的内存颗粒组成,其纠正能力还是与X4宽度的内存颗粒及位置保持一致,在X8宽度的一个内存颗粒中,如果出错位置是例如DQ2-5,虽然是X4宽度但位置与X4宽度不对应,其中出错位置DQ2-3对应于一个X4位宽,而出错位置DQ4-5对应于另一X4位宽,即一个内存颗粒的出错位置跨不同的X4位宽时,也无法纠正。又例如,如果内存的组是由X8宽度的内存颗粒组成,其纠正能力还是与X4宽度的内存颗粒及位置保持一致,在X8的一个内存颗粒中,如果是例如DQ0-4,错误的位宽(此时为X5位宽)超过了可以被纠正的位宽(X4),也无法纠正。
本公开的至少一实施例提供了一种用于存储器纠错的方法、存储器控制器及计算机系统,用于提高存储器的容错能力。
以下参照附图,对本公开的实施例的用于存储器纠错的方法、存储器控制器及计算机系统分别进行详细介绍。
首先,以下介绍本公开的实施例的用于存储器纠错的方法,该用于存储器纠错的方法可以应用于如下文进一步描述的标记存储器的存储器控制器、计算机系统、电子设备、其他合适的软件或硬件、或硬件和软件的结合。
图1示出了根据本公开的至少一实施例的用于存储器纠错的方法的流程图。
用于存储器纠错的方法可以包括步骤S102~S106。
在步骤S102中,判定存储器的第一内存颗粒是否存在故障。
存储器例如可以以内存条的形式体现,并且可以包括一个或多个内存颗粒。可以通过读取命令从存储器中读取对象数据,在支持ECC的存储器架构中,对象数据可以以数据位+校验信息的形式体现,这样的对象数据也可以被称为ECC字。对象数据可以在校验操作中被译码和纠错(如有必要),以得到用于执行计算以实现预定功能的数据或指令。例如,可以通过ECC算法(例如里德所罗门(Reed-Solomon,RS)算法等)对对象数据进行校验操作来确定对象数据是否包括错误、或者当包括错误时,该错误是可纠正错误还是不可纠正错误,并且校验结果可以包括例如可纠正错误的相关信息,例如可纠正错误的位置。本公开的发明人发现可纠正错误可以很好的表征内存颗粒是否出现故障,例如某一内存颗粒的可纠正错误的次数达到一定的阈值可以指示该内存颗粒存在故障,然而本公开的实施例不限于此。
在步骤S104中,在第一内存颗粒存在故障的情况下,使用第一纠错算法来纠正第一内存颗粒的存储数据中的错误数据,得到第一内存颗粒的纠正后的存储数据。
在判断出内存颗粒存在故障的情况下,读出存在故障内存颗粒的数据,并对其中的错误利用纠错算法进行纠正可以的到该故障内存颗粒的纠正后的存储数据,这些数据被认为是正确的。例如,支持ECC的内存条包括ECC内存颗粒,ECC内存颗粒中存储有纠错编码,当从存储器读取的ECC字存在错误时,可以通过纠错编码对ECC字进行纠错。以这种方式,利用第一纠错算法实现了可纠正错误(例如单个内存颗粒的错误)的纠正。
在步骤S106中,利用第二纠错算法将纠正后的存储数据存储到存储器的第二内存颗粒中。
一般地,在判断出内存颗粒存在故障的情况下,需要更换内存条,以防止可纠正错误转变为不可纠正错误而带来的系统崩溃或宕机的风险。在本实施例中,在得到第一内存颗粒的纠正后的存储数据之后,可以通过新纠错算法(第二纠错算法)将纠正后的存储数据存储到存储器的第二内存颗粒中,实现了新纠错算法+内存颗粒替换的操作。
如上所述,本公开的至少一实施例所公开的用于存储器纠错的方法在于,通过将存储在故障内存颗粒的数据利用第一纠错算法进行纠正,得到故障内存颗粒的纠正后的存储数据,进而利用第二算法将纠正后的存储数据存储到另一内存颗粒,从而实现两种纠错算法的纠错能力的结合,提高了存储器的容错能力。
另外,与在判断出内存颗粒存在故障的情况下就更换内存条相比,第二算法实现了存储器中存储的数据的附加纠正能力,因而在即使存储器后续的使用过程中出现错误时,也可以利用第二算法进行纠错,延长了存储器的使用寿命。
以下对本公开的至少一实施例的用于存储器纠错的方法的其他方面进行详细的描述。
在一些实施例中,利用第二纠错算法将纠正后的存储数据存储到存储器的第二内存颗粒中还包括:将第一纠错算法替换为第二纠错算法,并且生成第二纠错算法的纠错编码;将纠错编码存储在存储器的第三内存颗粒中;以及将纠正后的存储数据存储到第二内存颗粒中。纠错编码可以用于对数据进行编码、译码和纠错。
以这种方式,可以将第二纠错算法的纠错编码存储在附加的内存颗粒中,以便于在对该第二内存颗粒中存储的数据进行后续读出时进行高效的译码和纠错。
在一些实施例中,第二内存颗粒和第三内存颗粒可以是ECC内存颗粒。在一些实施例中,第二内存颗粒和第三内存颗粒中的至少之一可以是用于第一纠错算法的ECC内存颗粒。以这种方式,可以减少ECC内存颗粒的数量。
在一些实施例中,判定第一内存颗粒是否存在故障,包括:确定第一内存颗粒连续出现可纠正错误的次数;判断次数是否大于或等于可纠正错误阈值;以及响应于次数大于或等于可纠正错误阈值,判定第一内存颗粒存在故障。
本公开的发明人意识到,内存的错误是逐渐累积而来的,通过判断某一内存颗粒是否连续出现可纠正错误,以及这种可纠正错误的次数可以很好的表征该内存颗粒是否出现故障。
在一些实施例中,确定第一内存颗粒连续出现可纠正错误的次数,包括:判断第一内存颗粒所属的列是否出现可纠正错误;响应于列出现可纠正错误,判断可纠正错误是否连续出现在第一内存颗粒;响应于可纠正错误连续出现在第一内存颗粒,对可纠正错误连续出现在第一内存颗粒的次数进行计数;以及响应于可纠正错误未连续出现在第一内存颗粒,将计数归零。
以这种方式,可以以列为单位确定可纠正错误连续出现在相同位置的次数,即以列为单元来确定内存颗粒是否出现故障,与以内存颗粒为单元确定内存颗粒是否出现故障相比,降低了计算开销。
在一些实施例中,本公开的至少一实施例的用于存储器纠错的方法还包括:接收写入数据;利用第二纠错算法将写入数据中原定要写入第一内存颗粒的数据写入到第二内存颗粒。
在对存储器写入该写入数据的过程中,部分写入第一内存颗粒(即出现故障的内存颗粒)的数据被引导到第二内存颗粒,并且经由第二纠错算法来存储到第二内存颗粒,例如可以生成针对写入数据的纠错编码并且可以将纠错编码存储在例如第三内存颗粒中。以这种方式,可以避免错误数据写入已经出现故障的内存颗粒,保证了写入数据的可靠存储并且经由第二纠错算法写入实现了写入数据的附加的纠错能力。
在一些实施例中,本公开的至少一实施例的用于存储器纠错的方法还包括:确定读出数据是否在故障之前被写入;响应于读出数据在故障之前被写入,使用第一纠错算法校验读取数据。
在判断出第一内存颗粒出现故障之后,可以确定从存储器读出的该读出数据是否在故障之前被写入,对于读出数据是在故障之前被写入的,即通过第一纠错算法写入的,可以通过第一纠错算法来校验,即对读出数据进行译码和纠错(如有必要)。以这种方式,可以对是以第一纠错算法写入的数据同样以第一纠错算法进行读出,以得到正确的读出数据。
在一些实施例中,本公开的至少一实施例的用于存储器纠错的方法还包括使用第二纠错算法将校验后的读取数据存储到第二内存颗粒中。
在上述实施例中,在得到正确的读出数据之后,因为判断出内存颗粒已经出现故障,因此需要进行新纠错算法+内存颗粒替换的操作,因此,使用第二纠错算法将校验后的读取数据存储到第二内存颗粒中保证被存储的数据的正确性,并且可以在后续的对该数据的读取过程中,如果该数据错误,则可以利用第二纠错算法进行纠正,保证了该数据可靠地存储,并且延长了存储器的使用寿命。
在一些实施例中,本公开的至少一实施例的用于存储器纠错的方法还包括:响应于读取数据在故障之后被写入,使用第二纠错算法校验读取数据。
对于读出数据是在故障之后被写入的,由于在故障之后需要进行上述的新纠错算法+内存颗粒替换的操作,可以通过第二纠错算法来校验。以这种方式,可以对是以第二纠错算法写入的数据同样以第二纠错算法进行读出,以得到正确的读出数据。
在一些实施例中,第一纠错算法是RS算法,第二纠错算法是汉明码算法。
RS算法可以实现单内存颗粒数据纠正(Single Device Data Correction),本文也称为SDDC,而汉明码算法可以实现一个比特的数据纠正,因而可以结合RS算法和汉明码算法可以实现一个内存颗粒和一个比特的数据纠正,即SDDC+1比特纠错能力。在一些情况下,内存条可以设置两个ECC内存颗粒,在新纠错算法+内存颗粒替换的操作之前,这两个ECC内存颗粒可以用于存储RS算法的纠错编码,用于针对数据进行基于RS算法的编码、译码和纠错。在新纠错算法+内存颗粒替换的操作之后,两个ECC内存颗粒中的一个ECC内存颗粒可用于存储出现故障的内存颗粒的纠正后存储数据,并且两个ECC内存颗粒中的另一个ECC内存颗粒可用于存储另一汉明码算法的纠错编码,用于针对正确的数据进行基于汉明码算法的编码、译码和纠错,实现附加的纠错能力。
为使本领域技术人员更好地理解和实现本公开的实施例,以下对能够实现上述参照图1所描述的用于存储器纠错的方法以及附加方面的存储器控制器参照附图进行相应描述。
与本公开的至少一实施例提供的用于存储器纠错的方法相对应,本公开还提供了一种存储器控制器。
图2示出了根据本公开的至少一实施例的存储器控制器的示意图。参见图2所示的存储器控制器可以用于对存储器进行访问的控制,存储器可以包括一个或多个内存颗粒,例如包括第一内存颗粒和第二内存颗粒。
参照图2,本公开的实施例的存储器控制器200包括故障判定单元210以及纠错控制单元220。
故障判定单元210被配置为判定第一内存颗粒是否存在故障。
纠错控制单元220被配置为在第一内存颗粒存在故障的情况下,使用第一纠错算法来纠正第一内存颗粒的存储数据中的错误数据,得到第一内存颗粒的纠正后的存储数据;利用第二纠错算法将纠正后的存储数据存储到存储器的第二内存颗粒中。
如上所述,本公开的至少一实施例所公开的存储器控制器在于,通过将存储在故障内存颗粒的数据利用第一纠错算法进行纠正,得到故障内存颗粒的纠正后的存储数据,进而利用第二算法将纠正后的存储数据存储到另一内存颗粒,从而实现两种纠错算法的纠错能力的结合,提高了存储器的容错能力。
另外,与在判断出内存颗粒存在故障的情况下就更换内存条相比,第二算法实现了存储器中存储的数据的附加纠正能力,因而在即使存储器后续的使用过程中出现错误时,也可以利用第二算法进行纠错,延长了存储器的使用寿命。
以下对本公开的至少一实施例的存储器控制器的其他方面进行详细的描述。
在一些实施例中,本公开的至少一实施例所公开的存储器还包括第三内存颗粒,并且纠错控制单元还被配置为:将第一纠错算法替换为第二纠错算法,并且生成第二纠错算法的纠错编码;将纠错编码存储在第三内存颗粒中;以及将纠正后的存储数据存储到第二内存颗粒中。
在一些实施例中,故障判定单元包括:错误次数确定单元,被配置为:确定第一内存颗粒连续出现可纠正错误的次数;错误次数判定单元,被配置为:判断次数是否大于或等于可纠正错误阈值;以及响应于次数大于或等于可纠正错误阈值,判定第一内存颗粒存在故障。
在一些实施例中,错误次数确定单元包括:列错误次数确定单元,被配置为:判断第一内存颗粒所属的列是否出现可纠正错误;响应于列出现可纠正错误,判断可纠正错误是否连续出现在第一内存颗粒;响应于可纠正错误连续出现在第一内存颗粒,对可纠正错误连续出现在第一内存颗粒的次数进行计数;以及响应于可纠正错误未连续出现在第一内存颗粒,将计数归零。
在一些实施例中,纠错控制单元还被配置为:接收写入数据;以及利用第二纠错算法将写入数据中原定要写入第一内存颗粒的数据写入到第二内存颗粒。
在一些实施例中,纠错控制单元还被配置为:确定读出数据是否在故障之前被写入;响应于读出数据在故障之前被写入,使用第一纠错算法校验读取数据。
在一些实施例中,纠错控制单元还被配置为:使用第二纠错算法将校验后的读取数据存储到第二内存颗粒中。
在一些实施例中,纠错控制单元还被配置为:响应于读取数据在故障之后被写入,使用第二纠错算法校验读取数据。
在一些实施例中,第一纠错算法是RS算法,第二纠错算法是汉明码算法。
以上仅结合图2描述了根据本公开的至少一实施例的存储器控制器200的部分,并且存储器控制器200的其余部分可以对本公开的结合图1描述的用于存储器纠错的方法的各个方面进行引用,并且根据本公开的结合图1描述的用于存储器纠错的方法的各个方面的效果同样可以映射到本公开的存储器控制器200,在此不在赘述。另外,省略描述了存储器控制器200的相关技术的已知部分,以避免模糊本公开。
下面通过图3至图5来描述可以利用根据本公开的至少一实施例所提供的用于存储器纠错的方法或存储器控制器的示例应用场景。可以理解的是,图3至图5所示出的场景仅是示例性的,而没有穷尽列举说明上述用于存储纠错的方法或存储器控制器各个方面,并且结合图3至图5描述的各方面与结合图1和图2描述的各方面可以相互引用,而不超出本公开的范围。
图3示出了根据本公开的至少一实施例的示例性应用场景中的架构300的示意图。
在图3所示的示例性应用场景中的架构300中,可以应用上文描述的用于存储器纠错的方法的部分或全部。
参见图3,架构300可以包括数据通路模块310、DDR控制模块320、以及内存条330。
数据通路模块310可以是读写数据命令的发起方。例如数据通路模块310可以经由数据通路(如图3中的箭头所示)发起对内存条330的访问请求(例如读取或写入请求),以从内存条330读取或写入数据。
数据通路模块310可以包括数据擦洗(Scrub)模块312。数据擦洗模块312可以在后台周期性从内存条330读取数据,提早发现并纠正从内存条330中读取的数据的错误以避免错误累积,并将正确数据写回。
DDR控制模块320(例如可以对应于上文的存储器控制器20)可以控制数据通路模块310对内存条330的访问。例如DDR控制模块320可以解析来自数据通路模块310的访问请求,获取对应于该访问请求的地址并且对该地址进行访问。
DDR控制模块320可以包括里德所罗门码/汉明(RS/hamming)ECC纠错模块302和多路复用模块304。里德所罗门码/汉明ECC纠错模块302可以包括分别使用RS算法或汉明码编码的ECC纠错模块。
参见图3,示例性的内存条330包括10个内存颗粒331-340。其中,内存颗粒331-338可以是数据内存颗粒,数据内存颗粒用于存储数据位。内存颗粒339-340可以是ECC校验内存颗粒。在该示例中,ECC校验内存颗粒339-340中的一个内存颗粒称为备用内存颗粒,例如图3中示出的备用内存颗粒339(例如为上文中提到的第二内存颗粒),用于替换出现错误的数据内存颗粒(例如图3中以深灰色示出的内存颗粒335),而另一个内存颗粒称为校验内存颗粒,例如图3中示出的校验内存颗粒340(例如为上文中提到的第三内存颗粒),用于存汉明码编码值。
在该实例应用场景中,与上文第一纠错算法相对应的是RS算法,与第二纠错算法相对应的是汉明码算法。RS算法可以实现SDDC,而汉明码算法可以实现一个比特的数据纠正,因而可以结合RS算法和汉明码算法可以实现一个内存颗粒和一个比特的数据纠正,即SDDC+1比特纠错能力。实现SDDC+1比特纠错能力,需要经过如下的SDDC+1替换流程。
下面介绍SDDC+1替换流程,触发SDDC+1替换流程的具体情况将在下文结合图4和图5的实施例进行详细说明。
当开始SDDC+1替换流程时,位于数据通路上游的数据擦洗模块312会启动数据搬运流程。在数据搬运流程中,数据擦洗模块312通过对内存条330中存储的所有数据进行读取操作与写回操作,将出错数据内存颗粒中的全部数据复制到备用内存颗粒339中。
下面介绍在数据搬运流程中的数据读取与写回操作。
在数据读取操作中,读取数据通路保持不变,即从内存条中读取数据的数据通路保持不变。在从内存条330中读取到数据之后,可以在里德所罗门码/汉明ECC纠错模块302中通过初始RS ECC算法(也称为RS算法)纠正单个颗粒的CE错误,例如纠正内存颗粒335的CE错误,并恢复出针对该内存颗粒的全部原始数据(对应于上文的纠正后的存储数据),这里的全部原始数据包括内存颗粒335中未出现错误的数据以及被纠正的数据。
在数据写回操作中,利用里德所罗门码/汉明ECC纠错模块302中的Hamming ECC算法(也称为汉明码算法)将内存颗粒335的全部原始数据存储到备用内存颗粒339中。例如,将里德所罗门码/汉明ECC纠错模块302中的原始RS ECC算法替换成Hamming ECC算法,生成相应的ECC校验位(例如对应于上文的纠错编码)。例如可以对内存颗粒335的全部原始数据或者包括内存颗粒335的全部原始数据和内存颗粒331-334、336-338中的全部数据的数据进行Hamming ECC算法来生成相应的ECC校验位。在该示例中,ECC校验位可以存储到校验内存颗粒340中。另外,生成相应的ECC校验位的同时,通过数据通路上的多路复用模块304,将原本将要写入内存颗粒335中的数据导入到备用内存颗粒339中。
在该实例应用场景中,在上述SDDC+1替换流程之前,ECC校验内存颗粒339-340可以是用于存储用于RS算法的校验位,并且在上述SDDC+1替换流程后,ECC校验内存颗粒339可以存储有出现故障的内存颗粒的全部原始数据(即备用内存颗粒339),而ECC校验内存颗粒340可以存储有汉明码算法的校验位(校验内存颗粒340)。
以这种方式,在上述SDDC+1替换流程中,将出现错误的内存颗粒中的全部数据经原始RS ECC算法纠错后搬运到备用内存颗粒中,并且可以经由Hamming ECC算法进行编码存储甚至后续的纠错,实现了SDDC+1比特的纠错能力。
当SDDC+1替换流程结束后,数据的写入和读取都会指向备用内存颗粒。
可以理解的是,在数据搬运流程中,需要暂停内存条对外服务,例如实际应用程序对内存条的读出和写入操作。
下面结合图4和图5描述对内存条的读出和写入操作的示例性架构。
图4示出了根据本公开的至少一实施例的图3的示例性应用场景中读出数据的架构示意图。
参见图4,可以设置CE错误阈值402,例如,可以通过基本输入输出系统(BIOS)或其他软件或硬件的方式设置CE错误阈值402。CE错误阈值402可以为可纠正错误连续出现在相同位置的次数的阈值,表示针对存储器(图4中示出的DDR存储器),可纠正错误连续地出现在相同的位置的上限值。在本文中,出现在相同的位置的可纠正错误也称为固定CE错误。这里的位置可以包括DDR存储器中的内存颗粒,或者内存颗粒中的比特位置(即在特定的DQ上出现CE错误)。
本公开的发明人意识到,在实践中,当可纠正错误连续出现在相同位置的次数达到CE错误阈值后,可以认为当前DDR存储器中的内存颗粒甚至内存颗粒中的比特位置已经出现故障,存在从可纠正错误转变为UCE错误的极大可能性。当然,也可以通过其他CE错误阈值来指示DDR存储器中的内存颗粒出现故障。例如,CE错误阈值可以是DDR存储器可纠正错误出现的总次数阈值,表示针对DDR存储器,可纠正错误出现的总次数的上限值,或者在一段时间内可纠正错误出现的总次数的上限值。又例如,CE错误阈值可以是存储器可纠正错误连续出现的次数阈值,表示针对DDR存储器,可纠正错误连续出现的次数的上限值。因此,在基于CE错误阈值确定内存颗粒出现故障情况下,可以触发上述SDDC+1替换流程以实现SDDC+1比特的纠错能力将减小出现UCE错误及宕机的可能性,并延长DDR存储器的使用寿命。
另外,可以通过设置参数SDDC_PLUS_en 404的方式来触发SDDC+1替换流程。例如,SDDC_PLUS_en为1可以代表开启SDDC+1替换流程,SDDC_PLUS_en为0可以表示不开启SDDC+1替换流程。参数SDDC_PLUS_en提供了触发SDDC+1替换流程的附加方式,增加了系统触发SDDC+1替换流程的灵活性。
下面介绍基于CE错误阈值触发SDDC+1替换流程。
DDR存储器406可以存储数据,可以基于访问请求对DDR存储器进行访问。在该示例中,DDR存储器被认为是DDR5存储器,其具有32+8比特数据位宽(8个4比特位宽(x4)的数据内存颗粒+2个x4的ECC校验内存颗粒),并且使用的RS算法(RS(64,80))来实现SDDC。
可以理解的是,DDR存储器406在被使用(例如读出和写入)的初期,一般不会到CE错误的阈值,CE错误是使用过程中积累出来的。
在从DDR存储器406读出数据后,该数据可以在CE错误阈值判断模块408中判断CE错误是否达到CE错误阈值。如果没有达到(“否”分支),如果读出的数据不包括错误,可以经由SDDC算法模块409(其中可以执行例如RS算法)对读出的数据进行译码操作并直接输出经译码的数据。如果读出的数据存在CE错误,可以直接使用SDDC算法纠正CE错误,并且可以输出纠正后的数据。如果读出的数据存在CE错误,则存储当前出现CE错误的位置(如图中的模块410所示)。例如,该位置可以表示在哪个内存颗粒出现CE错误(如图3中的Device)或者在哪个比特出现CE错误(如图中的Sym)。在一些实施例中,可以将当前出现CE错误的位置存在存储器或寄存器中。在一些实施例中,可以将当前出现CE错误的位置存储在机器校验架构(MCA)模块(也称为错误处理机制模块)中。
当出现CE错误时,在CE错误统计模块411中可以对CE错误的相关信息进行统计,以生产统计数据。统计数据与CE错误阈值相对应,以便在比较器412中对统计数据与相应的CE错误阈值进行比较。在本示例中,CE错误阈值为可纠正错误连续出现在相同位置的次数阈值,并且统计数据为可纠正错误连续出现在相同位置的次数。在一些情况下,CE错误阈值可以为可纠正错误出现在相同位置的总次数阈值,并且统计数据也可以为可纠正错误出现在相同位置的总次数。
CE错误统计模块411可以包括CE_Err_Num_R1~CE_Err_Num_R4,分别为每个组所对应的CE计数器。当出现CE错误,连续在同一个内存颗粒上时,可以对CE计数器的计数值进行累加(例如,累加1),当出现另外一个内存颗粒上时,对先前内存颗粒所对应的组所对应的CE计数器的计数值清零,并对该另外一个内存颗粒所对应的组所对应的CE计数器的计数值计数为1。以这种方式,可以以组为单位确定可纠正错误连续出现在相同位置的次数。
在获得统计数据之后,可以在比较器412中对统计数据和CE错误阈值进行比较。图4中示出了4个比较器——比较器_Rank1~比较器_Rank4,用于分别对当前的CE_Err_Num_R1~CE_Err_Num_R4与CE错误阈值402进行比较。比较结果可以发送到CE错误阈值判断模块408。在CE错误阈值判断模块408中,如果判断出某个组内可纠正错误连续出现在相同内存颗粒的次数大于或等于CE阈值,代表这个组的该内存颗粒出现错误的次数已经达到CE错误阈值了,将认为当前内存条(DIMM)(例如,DDR存储器406可以以内存条体现)中的该内存颗粒存在故障了。
在判断出某个组内可纠正错误连续出现在相同内存颗粒的次数大于或等于CE阈值的情况下,在SDDC+1模块414中,将该内存颗粒所对应的当前组标记为故障(例如,可以让软件来查询使用)之后,可以触发SDDC+1替换流程414。
在该示例中,存储器将DDR存储器406划分为4个组,从而以4个CE错误计数器以及相应的4个比较器来确定内存条中的某内存颗粒是否存在故障。然而,DDR存储器可以划分为其他数量的组,例如1个组、2个组等等,或者可以不以组为单元来判断内存颗粒是否存在故障。
在一些情况下,当读出数据是针对已经进行了SDDC+1替换流程而写入的数据,将从包括备用内存颗粒(例如图3的备用内存颗粒339)的内存颗粒中获取数据并且使用新的算法(例如hamming ECC算法)的方式读出。如果读出数据是针对上述故障(未进行上述SDDC+1替换流程)之前写入数据时,由于要被读出的数据并没有经过上述SDDC+1替换流程就已经被写入到DDR存储器中,可以使用先前的SDDC算法(RS算法)进行纠正读回,从而可以读回正确数据。
因此,继续参考图4,当在CE错误阈值判断模块判断出当前组为故障时,在故障处理模块416中可以确定是否需要读出该故障之前写入的数据。例如可以通过读故障组数据使能位errflow_rd_en来指示需要读出的数据是否在该故障之前写入。可以将errflow_rd_en设置为1来指示需要读出的数据在该故障之前写入,可以将errflow_rd_en设置为0来指示需要读出的数据在该故障之后写入。
当读回正确数据后,因为某一内存颗粒已经出现故障,可以再次使用新的算法和备用内存颗粒对该正确数据进行写入。
在结合图4描述的读出数据的架构中,可以基于从DDR存储器读取的数据包括的CE错误的信息与CE错误阈值的比较来指示DDR存储器中的某内存颗粒是否存在故障,并且在存在故障的情况下,触发SDDC+1替换流程,实现了SDDC+1比特的纠错能力。
图5示出了根据本公开的至少一实施例的图3的示例性应用场景中写入数据的架构示意图。
图5中与图4中,相同的附图标记所表示的模块指代相同或类似的内容,这里不再赘述。
参照图5,在CE错误阈值判断模块408中,如果判断出某个组内可纠正错误连续出现在相同内存颗粒的次数大于或等于CE阈值(“是分支”),代表这个组的该内存颗粒出现错误的次数已经达到CE错误阈值了,将认为当前内存条中的该内存颗粒存在故障了。在这种情况下,在SDDC+1模块中,将该内存颗粒所对应的当前组标记为故障(例如,可以让软件来查询使用)之后,可以触发SDDC+1替换流程414。随后,在写入数据的过程中,将原本要写入出现错误的内存颗粒(例如图3中的内存颗粒335)的数据写入到备用内存颗粒(例如图3中的内存颗粒339)中,并且将纠错算法从RS纠错算法切换为汉明纠错算法,使用汉明码编码将检验值写入到校验内存颗粒(例如图3中的内存颗粒340)中。
继续回到CE错误阈值判断模块408,如果判断出某个组内可纠正错误连续出现在相同内存颗粒的次数小于CE错误阈值(“否”分支),代表这个组的该内存颗粒出现错误的次数没有达到CE错误阈值了,将认为当前内存条状态良好,可以继续使用。在这种情况下,在SDDC算法模块409中可以继续使用先前的SDDC算法(例如RS算法)来向DDR存储器写入数据。
在结合图5描述的写入数据的架构中,可以基于从DDR存储器读取的数据包括的CE错误的信息与CE错误阈值的比较来指示DDR存储器中的某内存颗粒是否存在故障,并且在存在故障的情况下,触发SDDC+1替换流程,实现了SDDC+1比特的纠错能力。
上面虽然参照图4和图5描述的示例性架构可以结合RS算法和汉明码算法的纠错能力,可以提供一个内存颗粒+1比特的纠错能力,提高了DDR存储器的纠错能力,提高了存储器的容错能力。其中,对于已经报错的内存颗粒的组,可以恢复读出数据,避免数据丢失。在该示例性架构中,支持x4内存颗粒的4个组各自独立出错纠正容错的情形。
基于上述SDDC+1替换流程的示例性架构能够减小出现UCE错误及宕机的可能性,并可延长内存条的使用寿命。
上面虽然参照图4和图5描述的除DDR存储器之外的各个模块可以对应于本公开参照图2描述的存储器控制器200和参照图3描述的DDR控制器模块320,并且模块408-412可以包括在故障判定单元210中且模块414可以包括在故障纠错单元220中,然而,可以理解的是,在不脱离本公开的范围的情况下,可以对上述各个模块进行组合或拆分。
图6示出了根据本公开的至少一实施例的计算机系统的示意图。该计算机系统系统600可以包括如上所述的存储器610以及(例如可以包括参照图1描述的存储器,参照图3描述的内存条330以及参照图4所示的DDR存储器406)存储器控制器620(例如可以包括上文参照图2描述的存储器控制器或者参照图3描述的DDR控制模块320)。在具体地应用场景中,参照图6描述的计算机系统600可以包括参照图4和图5描述的架构的部分或全部。
可以理解的是,这里仅示出了计算机系统系统600的主要组件,并且计算机系统系统600还可以包括其他组件。
如上所述,与根据本公开的至少一实施例所公开的用于存储器纠错的方法和存储器控制器相对应的,本公开的至少一实施例所公开的计算机系统在于,通过将存储在故障内存颗粒的数据利用第一纠错算法进行纠正,得到故障内存颗粒的纠正后的存储数据,进而利用第二算法将纠正后的存储数据存储到另一内存颗粒,从而实现两种纠错算法的纠错能力的结合,提高了存储器的容错能力。
另外,与在判断出内存颗粒存在故障的情况下就更换内存条相比,第二算法实现了存储器中存储的数据的附加纠正能力,因而在即使存储器后续的使用过程中出现错误时,也可以利用第二算法进行纠错,延长了存储器的使用寿命。
图7示出了根据本公开的至少一实施例的电子设备700的示意图。如图7所示,电子设备700包括处理器710和存储器720。
存储器720包括一个或多个计算机程序模块721。一个或多个计算机程序模块721被存储在存储器720中并被配置为由处理器710执行,该一个或多个计算机程序模块721包括用于执行本公开的至少一实施例提供的用于存储器纠错的方法的指令,这些指令被处理器710执行时,可以执行本公开的至少一实施例提供的用于存储器纠错的方法及其附加方面的一个或多个步骤。存储器720和处理器710可以通过总线系统和/或其他形式的连接机构(未示出)互连。
例如,处理器710可以是中央处理单元(CPU)、数字信号处理器(DSP)或者具有数据处理能力和/或程序执行能力的其他形式的处理单元,例如现场可编程门阵列(FPGA)等;例如,中央处理单元(CPU)可以为X86或ARM架构、RISC-V架构等。处理器710可以为通用处理器或专用处理器,可以控制电子设备700中的其他组件以执行期望的功能。
例如,存储器720可以包括一个或多个计算机程序产品的任意组合,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序模块721,处理器710可以运行一个或多个计算机程序模块721,以实现电子设备700的各种功能。在计算机可读存储介质中还可以存储各种应用程序和各种数据以及应用程序使用和/或产生的各种数据等。该电子设备700例如可以是片上系统(SOC)或者包括该SOC的计算机、电视、显示器等。该电子设备700的具体功能和技术效果可以参考上文中关于用于存储器纠错的方法及其附加方面的描述,此处不再赘述。
图8示出了根据本公开的至少一实施例的另一电子设备800的示意图。该电子设备800例如适于用来实施本公开的至少一实施例提供的用于存储器纠错的方法及其附加方面。需要注意的是,图8示出的电子设备800仅仅是一个示例,其不会对本公开的至少一实施例的功能和使用范围带来任何限制。
如图8所示,电子设备800可以包括处理装置(例如中央处理器、图形处理器等)810,其可以根据存储在只读存储器(ROM)820中的程序或者从存储装置880加载到随机访问存储器(RAM)830中的程序而执行各种适当的动作和处理。在RAM 830中,还可以存储有电子设备800操作所需的各种程序和数据。处理装置810、ROM 820以及RAM 830通过总线840彼此相连。输入/输出(I/O)接口850也连接至总线840。
通常,以下装置可以连接至I/O接口850:例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置860;例如液晶显示器(LCD)、扬声器、振动器等的输出装置870;例如磁带、硬盘等的存储装置880;通信装置890。通信装置890可以允许电子设备800与其他电子设备进行无线或有线通信以交换数据。虽然图8示出了具有各种装置的电子设备800,但应理解的是,并不要求实施或具备所有示出的装置,电子设备800可以替代地实施或具备更多或更少的装置。
例如,本公开的至少一实施例提供的用于存储器纠错的方法及其附加方面可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包括用于执行上述用于存储器纠错的方法及其附加方面的程序代码。在这样的实施例中,该计算机程序可以通过通信装置890从网络上被下载和安装,或者从存储装置880安装,或者从ROM 820安装。在该计算机程序被处理装置810执行时,可以执行本公开的至少一实施例提供的用于存储器纠错的方法及其附加方面。
本公开的至少一实施例还提供一种非瞬时可读存储介质。图9示出了根据本公开的至少一实施例的非瞬时可读存储介质900的示意图。如图9所示,非瞬时可读存储介质900上存储有计算机指令910,该计算机指令910被处理器执行时执行如上所述的用于存储器纠错的方法及其附加方面中的一个或多个步骤。
例如,该非瞬时可读存储介质900可以是一个或多个计算机可读存储介质的任意组合,例如,一个计算机可读存储介质包含用于判定存储器的第一内存颗粒是否存在故障的计算机可读的程序代码,另一个计算机可读存储介质包含用于在第一内存颗粒存在故障的情况下,使用第一纠错算法来纠正第一内存颗粒的存储数据中的错误数据,得到第一内存颗粒的纠正后的存储数据的计算机可读的程序代码,另一个计算机可读存储介质包含利用第二纠错算法将纠正后的存储数据存储到存储器的第二内存颗粒中的计算机可读的程序代码。
当然,上述各个程序代码也可以存储在同一个计算机可读介质中,本公开的实施例对此不作限制。
例如,当该程序代码由计算机读取时,计算机可以执行该计算机存储介质中存储的程序代码,执行例如本公开任一个实施例提供的用于存储器纠错的方法及其附加方面。
例如,存储介质可以包括智能电话的存储卡、平板电脑的存储部件、个人计算机的硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、闪存、或者上述存储介质的任意组合,也可以为其他适用的存储介质。
可以理解,本文的框图可以表示体现所描述的实施例的原理的说明性电路系统或其他功能单元的概念图。类似地,可以理解,任何流程图等表示各种过程,这些过程可以基本上在计算机可读存储介质中表示,并且由计算机或处理器执行,无论是否明确示出了这样的计算机或处理器。包括功能块的各种元件的功能可以通过使用硬件(诸如电路硬件和/或能够以存储在上述计算机可读存储介质上的编码指令的形式执行软件的硬件)来提供。因此,这样的功能和所示的功能块将被理解为是硬件实施的和/或计算机实施的,因此是机器实施的。就硬件实施方式而言,功能块可以包括或涵盖但不限于数字信号处理器(digital signal processor,DSP)硬件、精简指令集处理器、硬件(例如,数字或模拟)电路系统,包括但不限于(多个)专用集成电路(application specific integrated circuit,ASIC)和/或(多个)现场可编程门阵列(field programmable gate array,FPGA),以及(在适当的情况下)能够执行这些功能的状态机。
就计算机实施方式而言,计算机通常被理解为包括一个或多个处理器或一个或多个控制器。当由计算机或处理器或控制器提供时,功能可以由单个专用计算机或处理器或控制器、单个共享计算机或处理器或控制器、或多个单独的计算机或处理器或控制器提供,其中一些可以是共享的或分布式的。
本公开中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
在本公开所提供的几个实施例中,应该理解到,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,该模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框/操作中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框/操作实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框/操作、以及框图和/或流程图中的方框/操作的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
需要说明的是,在本文中,诸如第一、第二等的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且进一步包括没有明确列出的其他要素,或者是进一步包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。
Claims (19)
1.一种用于存储器纠错的方法,包括:
判定存储器的第一内存颗粒是否存在故障;
在所述第一内存颗粒存在故障的情况下,使用第一纠错算法来纠正所述第一内存颗粒的存储数据中的错误数据,得到所述第一内存颗粒的纠正后的存储数据;以及
利用第二纠错算法将所述纠正后的存储数据存储到所述存储器的第二内存颗粒中。
2.根据权利要求1所述的方法,其中,利用第二纠错算法将所述纠正后的存储数据存储到所述存储器的第二内存颗粒中还包括:
将所述第一纠错算法替换为所述第二纠错算法,并且生成所述第二纠错算法的纠错编码;
将所述纠错编码存储在所述存储器的第三内存颗粒中;以及
将所述纠正后的存储数据存储到所述第二内存颗粒中。
3.根据权利要求1所述的方法,其中,判定所述第一内存颗粒是否存在故障,包括:
确定所述第一内存颗粒连续出现可纠正错误的次数;
判断所述次数是否大于或等于可纠正错误阈值;以及
响应于所述次数大于或等于所述可纠正错误阈值,判定所述第一内存颗粒存在故障。
4.根据权利要求3所述的方法,其中,确定所述第一内存颗粒连续出现所述可纠正错误的次数,包括:
判断所述第一内存颗粒所属的列是否出现所述可纠正错误;
响应于所述列出现所述可纠正错误,判断所述可纠正错误是否连续出现在所述第一内存颗粒;
响应于所述可纠正错误连续出现在所述第一内存颗粒,对所述可纠正错误连续出现在所述第一内存颗粒的次数进行计数;以及
响应于所述可纠正错误未连续出现在所述第一内存颗粒,将所述计数归零。
5.根据权利要求1所述的方法,还包括:
接收写入数据;
利用第二纠错算法将所述写入数据中原定要写入所述第一内存颗粒的数据写入到所述第二内存颗粒。
6.根据权利要求1所述的方法,还包括:
确定读出数据是否在所述故障之前被写入;
响应于所述读出数据在所述故障之前被写入,使用所述第一纠错算法校验所述读取数据。
7.根据权利要求6所述的方法,还包括:
使用所述第二纠错算法将校验后的读取数据存储到所述第二内存颗粒中。
8.根据权利要求6所述的方法,还包括:
响应于所述读取数据在所述故障之后被写入,使用所述第二纠错算法校验所述读取数据。
9.根据权利要求1-8中任一项所述的方法,其中,所述第一纠错算法是RS算法,所述第二纠错算法是汉明码算法。
10.一种存储器控制器,用于存储器,所述存储器包括第一内存颗粒和第二内存颗粒,所述存储器控制器包括:
故障判定单元,被配置为:判定所述第一内存颗粒是否存在故障;以及
纠错控制单元,被配置为:
在所述第一内存颗粒存在故障的情况下,使用第一纠错算法来纠正所述第一内存颗粒的存储数据中的错误数据,得到所述第一内存颗粒的纠正后的存储数据,以及
利用第二纠错算法将所述纠正后的存储数据存储到所述存储器的第二内存颗粒中。
11.根据权利要求10所述的存储器控制器,其中,所述存储器还包括第三内存颗粒,并且
所述纠错控制单元还被配置为:
将所述第一纠错算法替换为所述第二纠错算法,并且生成所述第二纠错算法的纠错编码,以及
将所述纠错编码存储在所述第三内存颗粒中;以及
将所述纠正后的存储数据存储到所述第二内存颗粒中。
12.根据权利要求10所述的存储器控制器,其中,所述故障判定单元包括:
错误次数确定单元,被配置为:确定所述第一内存颗粒连续出现所述可纠正错误的次数;
错误次数判定单元,被配置为:
判断所述次数是否大于或等于可纠正错误阈值,以及
响应于所述次数大于或等于所述可纠正错误阈值,判定所述第一内存颗粒存在故障。
13.根据权利要求12所述的存储器控制器,其中,所述错误次数确定单元包括:
列错误次数确定单元,被配置为:
判断所述第一内存颗粒所属的列是否出现所述可纠正错误;
响应于所述列出现所述可纠正错误,判断所述可纠正错误是否连续出现在所述第一内存颗粒;
响应于所述可纠正错误连续出现在所述第一内存颗粒,对所述可纠正错误连续出现在所述第一内存颗粒的次数进行计数;以及
响应于所述可纠正错误未连续出现在所述第一内存颗粒,将所述计数归零。
14.根据权利要求10所述的存储器控制器,所述纠错控制单元还被配置为:
接收写入数据;以及
利用第二纠错算法将所述写入数据中原定要写入所述第一内存颗粒的数据写入到所述第二内存颗粒。
15.根据权利要求10所述的存储器控制器,所述纠错控制单元还被配置为:
确定读出数据是否在所述故障之前被写入;
响应于所述读出数据在所述故障之前被写入,使用所述第一纠错算法校验所述读取数据。
16.根据权利要求15所述的存储器控制器,所述纠错控制单元还被配置为:
使用所述第二纠错算法将校验后的读取数据存储到所述第二内存颗粒中。
17.根据权利要求15所述的存储器控制器,所述纠错控制单元还被配置为:
响应于所述读取数据在所述故障之后被写入,使用所述第二纠错算法校验所述读取数据。
18.根据权利要求10-17中任一项所述的存储器控制器,其中,所述第一纠错算法是RS算法,所述第二纠错算法是汉明码算法。
19.一种计算机系统,包括:
如权利要求10-18中任一项所述存储器控制器;以及
所述存储器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111618391.XA CN114360623A (zh) | 2021-12-27 | 2021-12-27 | 用于存储器纠错的方法、存储器控制器及计算机系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111618391.XA CN114360623A (zh) | 2021-12-27 | 2021-12-27 | 用于存储器纠错的方法、存储器控制器及计算机系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114360623A true CN114360623A (zh) | 2022-04-15 |
Family
ID=81104280
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111618391.XA Pending CN114360623A (zh) | 2021-12-27 | 2021-12-27 | 用于存储器纠错的方法、存储器控制器及计算机系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114360623A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116028260A (zh) * | 2023-01-09 | 2023-04-28 | 海光信息技术股份有限公司 | 数据的处理方法、处理装置以及存储系统 |
WO2024016971A1 (zh) * | 2022-07-21 | 2024-01-25 | 华为技术有限公司 | 错误确定方法及系统、处理器、内存 |
-
2021
- 2021-12-27 CN CN202111618391.XA patent/CN114360623A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024016971A1 (zh) * | 2022-07-21 | 2024-01-25 | 华为技术有限公司 | 错误确定方法及系统、处理器、内存 |
CN116028260A (zh) * | 2023-01-09 | 2023-04-28 | 海光信息技术股份有限公司 | 数据的处理方法、处理装置以及存储系统 |
CN116028260B (zh) * | 2023-01-09 | 2024-02-27 | 海光信息技术股份有限公司 | 数据的处理方法、处理装置以及存储系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10019312B2 (en) | Error monitoring of a memory device containing embedded error correction | |
US20190079836A1 (en) | Predictive memory maintenance | |
US9471423B1 (en) | Selective memory error reporting | |
US8185800B2 (en) | System for error control coding for memories of different types and associated methods | |
US9940457B2 (en) | Detecting a cryogenic attack on a memory device with embedded error correction | |
US9128868B2 (en) | System for error decoding with retries and associated methods | |
US8171377B2 (en) | System to improve memory reliability and associated methods | |
US8181094B2 (en) | System to improve error correction using variable latency and associated methods | |
US8352806B2 (en) | System to improve memory failure management and associated methods | |
US20140372838A1 (en) | Bad disk block self-detection method and apparatus, and computer storage medium | |
KR101679530B1 (ko) | 이용 가능한 메모리 공간에 기초한 이중화 저장 장치 구성의 선택 | |
US20140047265A1 (en) | Enhanced storage of metadata utilizing improved error detection and correction in computer memory | |
CN114360623A (zh) | 用于存储器纠错的方法、存储器控制器及计算机系统 | |
US8185801B2 (en) | System to improve error code decoding using historical information and associated methods | |
EP3462318B1 (en) | Memory controller error checking process using internal memory device codes | |
KR20180086816A (ko) | 사전-검사된 에러율에 따른 적응형 에러정정을 수행하는 메모리장치 및 전자장치와, 메모리장치의 동작방법 | |
US9626242B2 (en) | Memory device error history bit | |
US20160139988A1 (en) | Memory unit | |
US10756764B2 (en) | Memory system and control method | |
US20160147598A1 (en) | Operating a memory unit | |
US11321166B2 (en) | Device for determining soft error occurred in a memory having stacked layers, and computer readable medium storing program thereon for determining the soft error | |
JP2014137833A (ja) | 半導体メモリ及び誤り訂正ビット数の出力方法 | |
CN114356645A (zh) | 用于数据纠错的方法、装置、电子设备及存储介质 | |
US11609813B2 (en) | Memory system for selecting counter-error operation through error analysis and data process system including the same | |
CN114356984B (zh) | 标记存储器的风险状态的方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |