CN115878365A - 内存纠错方法、装置及相关设备 - Google Patents
内存纠错方法、装置及相关设备 Download PDFInfo
- Publication number
- CN115878365A CN115878365A CN202111137528.XA CN202111137528A CN115878365A CN 115878365 A CN115878365 A CN 115878365A CN 202111137528 A CN202111137528 A CN 202111137528A CN 115878365 A CN115878365 A CN 115878365A
- Authority
- CN
- China
- Prior art keywords
- memory
- data
- error correction
- memory data
- error
- 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
Classifications
-
- 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
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本申请实施例提供一种内存纠错方法、装置及相关设备,应用于计算机领域。其中,该方法可以包括确定第一内存数据存在内存错误,内存错误包含在预设时间或者预设次数内无法对第一内存数据进行纠正的错误;在内存通道空闲的情况下,读取第一内存数据;根据纠错算法对第一内存数据进行内存纠错。采用本申请实施例,能够在不影响正常数据通信的情况下,修复在预设时间或者预设次数内无法进行纠正的错误,提高数据的可靠性。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种内存纠错方法、装置及相关设备。
背景技术
在计算机领域,内存数据的可靠性对整个系统的性能至关重要,特别是系统核心数据或重要的应用程序数据,其数据的可靠性直接影响整个系统的运行。为此,数据纠错技术便应运而生,通过采用纠错技术通过预定的纠错算法判定当前的数据是否为正确数据,而确定当前读取的数据的可靠性。
一般会采用错误纠正码(Error Correction Code,ECC)技术实现数据纠错,ECC纠错技术虽然具备一定的错误校验能力以及纠错能力,但是纠错能力仅适用于在预设次数或者预测时间内对内存数据进行纠错,如果没有在预设次数或者预设时间内没有对内存数据完成内存纠错,则会放弃纠正该内存数据。因此,内存数据的纠错能力有限,无法满足确保数据可靠性的应用需求。
发明内容
本申请实施例提供的一种内存纠错方法、装置及相关设备,能够在不影响正常数据通信的情况下,修复在预设时间或者预设次数内无法进行纠正的错误,提高数据的可靠性。
第一方面,本申请实施例提供了一种内存纠错方法,该方法可以包括:确定第一内存数据存在内存错误,所述内存错误包含在预设时间或者预设次数内无法对第一内存数据进行纠正的错误;在内存通道空闲的情况下,读取所述第一内存数据;对所述第一内存数据进行内存纠错。
上述方法可以应用于服务器,由服务器或者服务器内部的部件(例如芯片、软件模块或集成电路)来执行。
一般来说,若在预设时间或者预设次数内可以对内存数据完成纠错,则可以直接对该内存数据进行纠错并回写。若在预设时间或者预设次数内无法对内存数据进行纠错,说明该内存数据中存在的内存错误需要更多的时间或更多的次数来进行纠正。在上述情况下,现有技术是选择忽视这种内存错误,不会对存在上述内存错误的内存数据进行纠正。本申请实施例中,在不影响正常数据通信的情况下,也即在内存通道空闲的情况下,可以读取存在上述内存错误的第一内存数据,对第一内存数据进行内存纠错。因此,可以尽可能的发挥纠错能力,确保数据的可靠性。
在第一方面的一种可能的实施方式中,所述确定第一内存数据存在内存错误之前,所述在内存通道空闲的情况下,读取所述第一内存数据之后,还包括:将所述第一内存数据的第一地址存储到内存控制器的寄存器中。
可以看出,寄存器是内存控制器内部用来存放数据的存储区域,将第一内存数据的地址存放在寄存器中,可以便于在内存通道空闲时,内存控制器根据寄存器中存储的地址来快速地读取内存数据。
在第一方面的一种可能的实施方式中,所述在内存通道空闲时,读取所述第一内存数据,包括:在内存通道空闲时,根据所述寄存器中存储的所述第一地址读取所述第一内存数据。
可以看出,寄存器中存储有存在内存错误的内存数据的地址,因此在内存通道空闲时可以通过寄存器中存储的地址来读取内存数据,从而提高对内存数据进行纠错的速度。
在第一方面的一种可能的实施方式中,所述对所述第一内存数据进行内存纠错,包括:在读取的所述第一内存数据中存在第一标记的情况下,对所述第一内存数据进行内存纠错,其中,所述第一标记用于标识所述第一内存数据存在所述内存错误。
可以看出,为了避免资源的浪费,比如说纠错不需要进行纠错的数据,因此在读取的数据具有标识内存错误的标记时,对该内存数据进行纠错。
在第一方面的一种可能的实施方式中,所述对所述第一内存数据进行内存纠错,包括:在对第一内存数据进行内存纠错的过程中,在读取的第一内存数据被进行读操作或者写操作的情况下,则停止对第一内存数据进行内存纠错。
可以看出,为了避免发生系统紊乱,比如说纠错了正在被进行读操作或者写操作的数据。因此在对第一内存数据进行内存纠错的过程中,若读取的第一内存数据被进行读操作或者写操作的情况下,需要停止对第一内存数据进行内存纠错。也即,需要在该内存数据没有被进行读操作和写操作的情况下,对该内存数据进行纠错。
在第一方面的一种可能的实施方式中,所述通过纠错算法对所述第一内存数据进行内存纠错,包括:将所述第一内存数据划分为两个或两个以上部分,每个部分包含多个所述内存颗粒对应的数据位;将第一部分中的第一数据位的进行翻转并保持翻转后的数据不变,将第二部分中的多个第二数据位依次翻转,直至翻转得到的数据校验成功;其中,所述第一部分为所述两个或两个以上部分中的任意一个,所述第二部分包括所述两个或两个以上部分中除去所述第一部分以外的部分。
可以看出,通过划分两个或两个以上部分来对第一内存数据进行纠错,可以提高试错的效率和准确性。
在第一方面的一种可能的实施方式中,所述根据纠错算法对所述第一内存数据进行内存纠错之后,还包括:将进行内存纠错后的第一内存数据写回到所述第一地址对应的内存单元中。
第二方面,本申请实施例提供的一种内存纠错装置,该装置可以包括:
处理单元,用于确定第一内存数据存在内存错误,所述内存错误包含在预设时间或者预设次数内无法对第一内存数据进行纠正的错误;
通信单元,用于在内存通道空闲的情况下,读取所述第一内存数据;
所述处理单元,还用于对所述第一内存数据进行内存纠错。
在第二方面的一种可能的实施方式中,所述处理单元,还用于:
将所述第一内存数据的第一地址存储到内存控制器的寄存器中。
在第二方面的一种可能的实施方式中,所述通信单元,具体用于:
根据所述寄存器中存储的所述第一地址读取所述第一内存数据。
在第二方面的一种可能的实施方式中,所述处理单元,具体用于:
在读取的所述第一内存数据中存在第一标记的情况下,对所述第一内存数据进行内存纠错,其中,所述第一标记用于标识所述第一内存数据存在所述内存错误。
在第二方面的一种可能的实施方式中,所述处理单元,具体用于:
在对所述第一内存数据进行内存纠错的过程中,在读取的所述第一内存数据被进行读操作或者写操作的情况下,则停止对所述第一内存数据进行内存纠错。
在第二方面的一种可能的实施方式中,所述处理单元,具体用于:
将所述第一内存数据划分为两个或两个以上部分,每个部分包含多个所述内存颗粒对应的数据位;
将第一部分中的第一数据位的进行翻转并保持翻转后的数据不变,将第二部分中的多个第二数据位依次翻转,直至翻转得到的数据校验成功;其中,所述第一部分为所述两个或两个以上部分中的任意一个,所述第二部分包括所述两个或两个以上部分中除去所述第一部分所剩下的部分。
在第二方面的一种可能的实施方式中,所述通信单元,还用于:
将进行内存纠错后的第一内存数据写回到所述第一地址对应的内存单元中。
第三方面,本申请实施例提供一种计算设备,该计算设备包括处理器和存储器;存储器中存储有计算机程序;处理器执行计算机程序时,计算设备执行前述第一方面和第二方面任一项所描述的方法。
需要说明的是,上述第三方面所描述的计算设备所包含的处理器,可以是专门用于执行这些方法的处理器(便于区别称为专用处理器),也可以是通过调用计算机程序来执行这些方法的处理器,例如通用处理器。可选的,至少一个处理器还可以既包括专用处理器也包括通用处理器。
可选的,上述计算机程序可以存在存储器中。示例性的,存储器可以为非瞬时性(non-transitory)存储器,例如只读存储器(Read Only Memory,ROM),其可以与处理器集成在同一块器件上,也可以分别设置在不同的器件上,本申请实施例对存储器的类型以及存储器与处理器的设置方式不做限定。
在一种可能的实施方式中,上述至少一个存储器位于上述计算设备之外。
在又一种可能的实施方式中,上述至少一个存储器位于上述计算设备之内。
在又一种可能的实施方式之中,上述至少一个存储器的部分存储器位于上述计算设备之内,另一部分存储器位于上述计算设备之外。
本申请中,处理器和存储器还可能集成于一个器件中,即处理器和存储器还可以被集成在一起。
第四方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在至少一个处理器上运行时,实现前述第一方面和第二方面任一项所描述的方法。
第五方面,本申请提供了一种计算机程序产品,计算机程序产品包括计算机指令,当所述指令在至少一个处理器上运行时,实现前述第一方面和第二方面任一项所描述的方法。该计算机程序产品可以为一个软件安装包,在需要使用前述方法的情况下,可以下载该计算机程序产品并在计算设备上执行该计算机程序产品。
本申请第二至第五方面所提供的技术方法,其有益效果可以参考第一方面的技术方案的有益效果,此处不再赘述。
附图说明
以下对本申请实施例用到的附图进行介绍。
图1是本申请实施例提供的一种内存的示意图;
图2是本申请实施例提供的一种计算机系统的结构示意图;
图3是本申请实施例提供的一种内存纠错方法的流程示意图;
图4是本申请实施例提供的一种对内存数据进行内存纠错的示意图;
图5是本申请实施例提供的一种内存纠错装置的结构示意图;
图6是本申请实施例提供的一种计算设备的结构示意图。
具体实施方式
下面结合本申请实施例中的附图对本申请实施例进行描述。
本申请的说明书和权利要求书及所述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
首先,对本申请中的部分用于进行解释说明,以便于本领域技术人员理解。
1.缓存行(cache line),是指处理器中的缓存模块(cache unit)缓存一笔数据的大小。根据处理器的不同,cache line的大小是不一样的。当前主流的电脑和服务器中,cache line的大小为64字节(Byte)。一般来说,处理器内部搬运可被缓存的数据也采用同样大小64Byte。
2.内存颗粒(device),是内存条核心的部件,是内存的存储介质,可以直接关系到内存的性能。请参见图1,图1是本申请实施例提供的一种内存的示意图。从图1可以看出,内存100是由一个或多个内存颗粒组成的,根据内存颗粒中存放内容不同,内存颗粒又分为数据颗粒101和ECC颗粒102,通常有X4 device、X8 device和X16 device,X4、X8和X16分别代表每个内存颗粒对外的数据线路是4通道(lane)、8lane和16lane。
3.不可纠正错误(Uncorrectable Error,UCE),是指在预设时间或者预设次数内无法对第一内存数据进行纠正的错误。也即,在现有技术所提供的纠错算法中会规定若在预设次数或者预设时间可以完成对内存数据的纠错,认为是可纠正错误(CorrectableError,CE),则可以直接对其进行纠错。若是不可纠错错误,则不会对其进行纠错。
为了便于理解本申请实施例,下面先分析并提出本申请所具体要解决的技术问题。
可以理解的是,控制器需要先发现错误再进行纠错,从图1可以看出,内存包括两个ECC颗粒,其中一个内存颗粒用于存放循环冗余校验(Cyclic Redundancy Check,CRC)信息,用于进行侦错,另一个内存颗粒用于存放奇偶校验(Parity)信息,用于配置纠正错误。其中,Parity基本功能是发现内存数据中是否有bit翻转,发现方法是统计内存数据中1的个数,如果是偶校验,当内存数据中1的个数是偶数时,Parity为0,否则为1,所以Parity需要一个bit可以发现内存数据中是否有一个bit的数据翻转(0到1或者1到0)。当然对于奇数个bit都有一样的检测效果。但是,当偶数bit翻转的时候,Parity将无法知道。
通过CRC校验可以验证读取的内存数据是正确还是错误的,设计一个除数,让内存数据(被除数)去除以这个除数,然后会得到商和余数。通常余数比设计的除数要小。在存储一个cache line大小的内存数据到内存条上的时候,控制器可以计算CRC的值,并存放到CRC的内存颗粒中。从内存上读取的时候会再计算一遍,然后和内存条读回来的CRC的值进行比较。如果一致,则认为读取的内存数据没有发生变化。否则,认为读取的内存数据出错。
在这种情况下,先假设出现了可纠正错误(correctable error,CE)问题。控制器可以通过Parity信息反算内存颗粒中的数据,但是,需要一个内存颗粒一个内存颗粒的翻转,然后将重新计算得到的CRC和之前存储的CRC进行比较。一般来说,存在18个内存颗粒,因此需要翻转18次,也即纠错的预设次数可以是18次。若将全部内存颗粒翻转完毕,也即在预设次数18次内,计算得到的CRC和之前存储的CRC对不上,说明在预设次数内无法对该内存数据进行纠正。同理可得,若某一纠错算法是以时间为限定,在预设时间计算得到的CRC和之前存储的CRC对不上,说明在预设时间内无法对该内存数据进行纠正。因此,内存错误可以包含在预设次数内无法对该内存数据进行纠正的错误。而常用的技术一般会放弃将上述内存错误进行纠错,所有无法满足确保数据可靠性的应用需求。
基于上述的描述,本申请所要解决的技术问题可以包括:在不影响正常数据通信的情况下,修复在预设时间或者预设次数内无法对第一内存数据进行纠正情况。
为解析上述技术问题,首先,本申请实施例提供的一种系统。请参见图2,图2是本申请实施例提供的一种计算机系统的结构示意图。图2所示的计算机系统120可以包括处理器121、内存控制器122、寄存器124和内存100。
需要说明的是,内存控制器122可以集成在处理器121中,也可以不集成在处理器121中。另外,除图2所示的器件外,计算机系统120还可以包括通信接口以及作为外存的磁盘等其他器件,在此本申请实施例不做限制。
处理器(Processor)121是计算机系统120的运算核心和控制核心,处理器121中可以包括一个或多个处理器核(core)125。处理器121可以是一块超大规模的集成电路,在处理器121中安装有操作系统和其他软件程序,从而处理器121能够实现对内存100、缓存及磁盘的访问,处理器121还可以处理来自计算机系统120外部的数据访问请求。可以理解的是,在本申请实施例中,处理器121中的处理器核125可以是中央处理器(Central Processingunit,CPU),还可以是其他特定集成电路(Application Specific Integrated Circuit,ASIC)。实际应用中,计算机系统120也可以包括多个处理器。
内存控制器(Memory Controller)122是计算机系统120内部控制内存100并用于管理与规划从内存100到处理器核125间数据传输的总线电路控制器。通过内存控制器122,内存100与处理器核125之间可以交换数据。内存控制器122可以是一个单独的芯片,并通过系统总线与处理器核125连接。内存控制器122也可以被集成到处理器121中(如图2所示),也可以被内置于北桥中,还可以是一块独立的内存控制器芯片,本申请实施例不对内存控制器122的具体位置和存在形式进行限定。在实际应用中,内存控制器122可以控制必要的逻辑以将数据写入内存100或从内存100中读取数据。内存控制器122可以是通用处理器、专用加速器、GPU、FPGA、嵌入式处理器等处理器系统中的内存控制器。
内存100是计算机系统120的主存,内存100可通过双倍速率(double data rate,DDR)总线和处理器121相连。内存100通常用来存放操作系统中各种正在运行的软件。输入和输出数据以及与外存交换的信息等。为了提高处理器121的访问速度,内存100需要具备访问速度快的优点。在传统的计算机系统架构中,通常采用动态随机存取存储器(DynamicRandom Access Memory,DRAM)作为内存100。处理器121能够通过内存控制器122高速访问内存100,对内存100中的任意一个存储单元进行读操作和写操作。
其中,内存控制器122包括扫描引擎123,在实际应用中,在内存通道空闲的时候,也即内存控制器没有通过内存通道对内存100进行读操作和写操作的时候。内存控制器可以控制扫描引擎123去扫描内存100中所有的缓存行cache line数据,若在预设时间或者预设此时内可以对某一笔cache line数据进行纠错,则扫描引擎123可以对该笔cache line数据进行纠错并回写。若在预设时间或者预设次数内无法对某一笔cache line数据进行纠正,说明该笔cache line数据存在内存错误则扫描引擎123可以将该笔cache line数据打上第一标记,然后再回写。可以理解的是,第一标识用于标识某一笔cache line数据存在预设时间或者预设次数内无法对某一笔cache line数据进行纠正的错误。
其中,内存控制器122还可以包括寄存器124,若内存控制器122发现某笔cacheline数据存在内存错误,内存控制器122可以将存在内存错误的内存数据的地址存储到寄存器中。可以理解的是,寄存器中可以存储一个或多个存在内存错误的内存数据的地址。
因此,当内存通道空闲的时候,内存控制器122确定内存100中存储的内存数据存在内存错误,则内存控制器122可以根据寄存器124中存储的地址去读取存在内存错误的内存数据,从而可以在内存通道空闲的时候对该内存数据进行内存纠错,并将纠错后的内存数据回写到对应的内存中。
在对存在UCE错误的数据纠错完毕后,内存控制器122将释放寄存器124中存储的对应的地址。
请参见图3,图3是本申请实施例提供的一种内存纠错方法的流程示意图,该方法应用于图2所示的计算机系统120,该方法包括但不限于如下步骤:
步骤S301:确定第一内存数据存在内存错误。
具体地,在内存中,由于内存位宽一般较宽,例如32位或64位,而每个内存颗粒(Device)一般为4位或者8位,因此需要将多个内存颗粒并联,从而达到所需的内存位宽。CPU向内存写入数据时,会按照CPU的数据位宽,将数据的各数据位的比特数值同时写入并联的各内存颗粒,而且还会将各数据位的比特数值按照预设算法生成校验码。一旦其中任何一个内存颗粒失效,内存控制器可以根据该校验码以及存储在其他内存颗粒中的数据位的比特数值,重新构造失效的内存颗粒中“失去”的数据,从而使计算机系统可以继续正常工作。若在预设时间或者预设此时内无法对构造失效的内存颗粒中“失去”的数据,则认为第一内存数据存在内存错误。可以理解的是,内存错误也可是包含分布在两个或多个不同的内存颗粒中的错误数据位,比如说第一内存颗粒中的数据位的比特数值出现了bit翻转,第二内存颗粒中的数据位的比特数值出现了bit翻转,第三内存颗粒中的数据位的比特数值出现了bit翻转。
在一种可能的实现方式中,在确定第一内存数据存在内存错误后,内存控制器可以通过第一标记(比如说Posion)来标志该第一内存数据。可以理解的是,第一标记用于标识第一内存数据存在内存错误。
在一种可能的实现方式中,在确定第一内存数据存在内存错误后,内存控制器可以将第一内存数据的第一地址存储到寄存器中。可以理解的是,存在内存错误的内存数据的数量可以是多个,因此寄存器中可以存储多个存在内存错误的内存数据的地址。
进一步地,在确定第一内存数据存在内存错误后,内存控制器可以将第一内存数据读到内部的静态随机存取存储器(Static Random-Access Memory,SRAM)中暂存。
步骤S302:在内存通道空闲时,读取第一内存数据。
具体地,在内存通道空闲时,内存控制器可以通过扫描引擎来扫描内存,来查看内存中是否有数据存在内存错误。若确定第一内存数据存在内存错误,可以读取第一内存数据。
在一种可能的实施方式中,内存控制器可以根据寄存器中存储的第一地址从内存中读取第一内存数据,若该第一内存数据中存在内存错误标记,说明该第一内存数据存在内存错误,则内存控制器可以读取第一内存数据。
在一种可能的实施方式,在内存控制器没有检测到第一内存数据被进行读操作或者写操作的情况下,内存控制器可根据寄存器中存储的第一地址读取第一内存数据。
步骤S303:对第一内存数据进行内存纠错。
具体地,在内存控制器读取到第一内存数据时,内存控制器可以根据纠错算法对第一内存数进行内存纠错。进一步地,若第一内存数据存储在内部的SRAM中,则内存控制器可以在内存通道空闲的时候,根据纠错算法对第一内存数据进行内存纠错(比如说bit翻转、CRC验证等等)。再进一步地,在内存通道空闲的时候,若内存控制器通过扫描引擎扫描到存在内存错误的第一内存数据时,内存控制器可以根据纠错算法对第一内存数据进行内存纠错。
在一种可能的实现方式中,若内存控制器根据寄存器中的地址读取到第一内存数据,若第一内存数据存在第一标记,则根据纠错算法对第一内存数据进行内存纠错。
在一种可能的实现方式中,若内存控制器在对第一内存数据进行内存纠错的过程中,检测到第一内存数据有被写操作的情况,说明该第一内存数据已被别的数据所覆盖。内存控制器可以停止纠错,并释放寄存器中存储第一地址的空间。若内存控制器在对第一内存数据进行内存纠错的过程中,检测到第一内存数据有被读操作的情况,说明第一内存数据已被使用。内存控制器可以停止纠错,并向上层软件上报错误,等待上层软件的决策。
因此,在对第一内存数据进行纠错的过程中,内存控制器可以检测第一内存数据是否有被进行读操作或者写操作,若内存控制器没有检测到第一内存数据被读操作或者写操作的情况下,则可以继续根据纠错算法对第一内存数据进行内存纠错。
在一种可能的实现方式中,请参见图4,图4是本申请实施例提供的一种对内存数据进行内存纠错的示意图。可以理解的是,在预设时间或者预设次数内无法对第一内存数据进行纠正的错误可以是出现bit翻转的数据为分布在两个或两个以上的内存颗粒中。根据处理器的不同,处理器中缓存的一笔cache line数据的大小也不同,因此内存数据的大小也不同。在当前主流的个人电脑和服务器中,cache line的大小为64字节Byte。因此,处理器内部搬运可被缓存的内存数据也采用同样的大小64Byte。所以,图4以第一内存数据的大小为64Byte来说明。从图4的(a)可以看出,第一内存数据中包含数据颗粒和ECC颗粒,数据颗粒包含16个内存颗粒(分别是内存颗粒0、内存颗粒1、内存颗粒2…、内存颗粒15),ECC颗粒包含奇偶颗粒和CRC颗粒。当内存颗粒的数据线路是4通道,每个内存颗粒一次需要提供8笔数据,每笔数据中包含每个内存颗粒所提供的4bit数据,从而可以获得4*16*8=64Byte大小的内存数据。因此,第一内存数据可以包含每个内存颗粒所提供的8笔数据。
将第一数据中每个内存颗粒所提供的数据按照行排列可以得到图4的(b)所示的示意图,其中,图4的(b)中的每个数据位代表1bit,因此在第一数据中每一列对应于内存颗粒所提供的32bit大小的数据,每一行对应于在内存颗粒所提供的每笔数据中,所有内存颗粒的每个数据线路所提供的数据。而内存错误包含分布在两个或多个不同的内存颗粒中的错误数据位,也即在内存颗粒0、内存颗粒1、内存颗粒2、…、内存颗粒15中的任意两个中出现了bit翻转。对于上述内存错误,内存控制器可以将第一内存数据划分为两个或两个以上部分,比如说可以按列将32bit平均分成两部分、四部分或者八部分,每个部分中包含每个内存颗粒对应的数据位,也即每个部分的行数据包含所有内存颗粒的每个数据线路对应的数据位。可以理解的是,存在不同程度的纠错能力,当划分的部分越细纠错能力就越高。
假设错误数据位分布在不同部分的不同内存颗粒中,因此内存控制器可以先将第一部分中的第一内存数据位进行翻转并保持翻转后的数据不变,也即内存控制器可以根据奇偶颗粒从第一部分中选择第一数据位,根据该第一内存数据位对应的奇偶颗粒将第一数据位的bit进行翻转,并保持该bit翻转后的数据不变。然后内存控制器再将第二部分中的多个第二数据位依次翻转,直至翻转得到的数据经CRC校验成功。其中,第一部分为两个或两个以上部分中的任意一个,第二部分包含两个或两个以上部分中除去第一部分以外的部分。
假设将第一内存数据分为四部分,分别是第一部分、第二部分、第三部分和第四部分,则内存控制器可以先将第一部分中的第一数据位进行翻转并保持翻转后的数据不变,再依次翻转第二部分、第三部分和第四部分中的多个第二数据位。其中,翻转第二部分、第三部分和第四部分中的第二数据位可以理解为,将第二部分、第三部分和第四部分中的多个第二数据位分别依次翻转。当每次翻转完毕后,可以通过CRC颗粒来确定是否纠错正确。然后,保证第二部分中的第一数据位的翻转不变,依次翻转第一部分、第三部分和第四部分中的多个第二数据位。保证第三部分中的第一数据位的翻转不变,依次翻转第一部分、第二部分和第四部分中的第二数据位。保证第四部分中的第一数据位的翻转不变,依次翻转第一部分、第二部分和第三部分中的第二数据位。
举例来说,将如图4的(b)所示的第一内存数据分为两个部分,因此第一部分包含第1行、第2行、第3行、第4行、…、第15行所对应的数据,第二部分包含第16行、…、第28行、第29行、第30行、第31行对应的数据。假设有两块数据出现了翻转,这两块数据中的一块出现在第一部分,另一块出现在第二部分。内存控制器可以先保证第一部分中的每一行的数据位根据奇偶颗粒的翻转不变,然后将第二部分中的每一行的数据位根据奇偶颗粒来依次翻转,每次对第二部分中的某一行的数据位翻转完毕后,可以通过CRC颗粒来验证是否有翻转正确,若验证翻转正确,则停止内存纠错;若验证翻转不正确,则继续纠错。也即,第一次保证第一部分中的第一行的数据位的翻转不变,依次翻转第二部分中的每一行的数据位。第二次保证第一部分中的第二行的数据位的翻转不变,依次翻转第二部分中的每一行的数据位。直至将第一部分中的每一行的数据位翻转完毕,或者根据CRC颗粒验证翻转正确,则停止内存纠错。
需要说明的是,本申请实施例所提供的内存纠错方法可以适用于其他纠错算法,不限于本申请实施例所提供的。
上述详细阐述了本申请实施例的方法,下面提供了本申请实施例的装置。
请参见图5,图5是本申请实施例提供的一种内存纠错装置500的结构示意图,该内存纠错装置500可以为服务器或用户设备,也可以为服务器或用户设备中的一个器件,例如芯片、软件模块、集成电路等。该内存纠错装置500用于实现前述的内存纠错方法,例如图3所示实施例中的内存纠错方法。
一种可能的实施方式中,该内存纠错装置500可以为前述实施中的内存控制器。
一种可能的设计中,上述内存纠错装置500包括处理单元501和通信单元502。
在一种可能的实施方式中,处理单元,用于确定第一内存数据存在内存错误,内存错误包含在预设时间或者预设次数内无法对第一内存数据进行纠正的错误;
通信单元,用于在内存通道空闲的情况下,读取第一内存数据;
处理单元,还用于对第一内存数据进行内存纠错。
在又一种可能的实施方式中,处理单元,还用于:
将第一内存数据的第一地址存储到内存控制器的寄存器中。
在又一种可能的实施方式中,通信单元,具体用于:
根据寄存器中存储的第一地址读取第一内存数据。
在又一种可能的实施方式中,处理单元,具体用于:
在读取的第一内存数据中存在第一标记的情况下,对第一内存数据进行内存纠错,其中,第一标记用于标识第一内存数据存在内存错误。
在又一种可能的实施方式中,处理单元,具体用于:
在对第一内存数据进行内存纠错的过程中,在读取的第一内存数据被进行读操作或者写操作的情况下,则停止对第一内存数据进行内存纠错。
在又一种可能的实施方式中,处理单元,具体用于:
将第一内存数据划分为两个或两个以上部分,每个部分包含多个内存颗粒对应的数据位;
将第一部分中的第一数据位的进行翻转并保持翻转后的数据不变,将第二部分中的多个第二数据位依次翻转,直至翻转得到的数据校验成功;其中,第一部分为两个或两个以上部分中的任意一个,第二部分包括两个或两个以上部分中除去第一部分所剩下的部分。
需要说明的是,各个单元的实现还可以对应参照图3所示的内存纠错方法实施例的相应描述。
请参见图6,图6是本申请实施例提供的一种计算设备60的结构示意图,该计算设备60可以为独立设备(例如服务器、或用户设备等等中的一个或者多个),也可以为独立设备内部的部件(例如芯片、软件模块或者硬件模块等)。该计算设备60可以包括至少一个处理器601。可选的还可以包括至少一个存储器603。进一步可选的,计算设备60还可以包括通信接口602。更进一步可选的,还可以包含总线604,其中,处理器601、通信接口602和存储器603通过总线604相连。
其中,处理器601是进行算术运算和/或逻辑运算的模块,具体可以是中央处理器(central processing unit,CPU)、图片处理器(graphics processing unit,GPU)、微处理器(microprocessor unit,MPU)、专用集成电路(Application Specific IntegratedCircuit,ASIC)、现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA)、复杂可编程逻辑器件(Complex programmable logic device,CPLD)、协处理器(协助中央处理器完成相应处理和应用)、微控制单元(Microcontroller Unit,MCU)等处理模块中的一种或者多种的组合。
通信接口602可以用于为至少一个处理器提供信息输入或者输出。和/或,通信接口602可以用于接收外部发送的数据和/或向外部发送数据,可以为包括诸如以太网电缆等的有线链路接口,也可以是无线链路(Wi-Fi、蓝牙、通用无线传输、车载短距通信技术以及其他短距无线通信技术等)接口。可选的,通信接口602还可以包括与接口耦合的发射器(如射频发射器、天线等),或者接收器等。
存储器603用于提供存储空间,存储空间中可以存储操作系统和计算机程序等数据。存储器603可以是随机存储记忆体(random access memory,RAM)、只读存储器(read-only memory,ROM)、可擦除可编程只读存储器(erasable programmable read onlymemory,EPROM)、或便携式只读存储器(compact disc read-only memory,CD-ROM)等等中的一种或者多种的组合。
该计算设备60中的至少一个处理器601用于执行前述的内存纠错方法,例如图3所示实施例所描述的内存纠错方法。
可选的,处理器601,可以是专门用于执行这些方法的处理器(便于区别称为专用处理器),也可以是通过调用计算机程序来执行这些方法的处理器,例如通用处理器。可选的,至少一个处理器还可以既包括专用处理器也包括通用处理器。可选的,在计算设备包括至少一个处理器601的情况下,上述计算机程序可以存在存储器603中。
在一种可能的实施方式中,该计算设备60中的至少一个处理器601用于执行调用计算机指令,以执行以下操作:确定第一内存数据存在内存错误,内存错误包含在预设时间或者预设次数内无法对第一内存数据进行纠正的错误;在内存通道空闲的情况下,读取第一内存数据;对第一内存数据进行内存纠错。
在一种可能的实施方式中,处理器601通过通信接口602还用于:将第一内存数据的第一地址存储到内存控制器的寄存器中。
在一种可能的实施方式中,处理器601具体用于:在内存通道空闲时,根据寄存器中存储的第一地址读取第一内存数据。
在一种可能的实施方式中,处理器601具体用于:在读取的第一内存数据中存在第一标记的情况下,对第一内存数据进行内存纠错,其中,第一标记用于标识第一内存数据存在内存错误。
在一种可能的实施方式中,处理器601具体用于:在对第一内存数据进行内存纠错的过程中,在读取的第一内存数据被进行读操作或者写操作的情况下,则停止对第一内存数据进行内存纠错。
在一种可能的实施方式中,处理器601具体用于:将第一内存数据划分为两个或两个以上部分,每个部分包含多个内存颗粒对应的数据位;
将第一部分中的第一数据位的进行翻转并保持翻转后的数据不变,将第二部分中的多个第二数据位依次翻转,直至翻转得到的数据校验成功;其中,第一部分为两个或两个以上部分中的任意一个,第二部分包括两个或两个以上部分中除去第一部分以外的部分。
在一种可能的实施方式中,处理器601通过通信接口602还用于:将进行内存纠错后的第一内存数据写回到第一地址对应的内存单元中。
本申请还提供了一种算机可读存储介质,计算机可读存储介质中存储有指令,当指令在至少一个处理器上运行时,实现前述的版本管理方法,例如图3所示的内存纠错方法。
本申请还提供了一种计算机程序产品,该计算机程序产品包括计算机指令,在被计算设备执行时,实现前述的版本管理方法,例如图3所示的内存纠错方法。
本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其他实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
本申请中实施例提到的“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a、b、或c中的至少一项(个),可以表示:a、b、c、(a和b)、(a和c)、(b和c)、或(a和b和c),其中a、b、c可以是单个,也可以是多个。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A、同时存在A和B、单独存在B这三种情况,其中A、B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。
以及,除非有相反的说明,本申请实施例使用“第一”、“第二”等序数词是用于对多个对象进行区分,不用于限定多个对象的顺序、时序、优先级或者重要程度。例如,第一用户设备和第二用户设备,只是为了便于描述,而并不是表示这第一用户设备和第二用户设备的结构、重要程度等的不同,在某些实施例中,第一用户设备和第二用户设备还可以是同样的设备。
上述实施例中所用,根据上下文,术语“当……时”可以被解释为意思是“如果……”或“在……后”或“响应于确定……”或“响应于检测到……”。以上仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的构思和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
Claims (16)
1.一种内存纠错方法,其特征在于,包括:
确定第一内存数据存在内存错误,所述内存错误包含在预设时间或者预设次数内无法对所述第一内存数据进行纠正的错误;
在内存通道空闲的情况下,读取所述第一内存数据;
对所述第一内存数据进行内存纠错。
2.根据权利要求1所述的方法,其特征在于,所述确定第一内存数据存在内存错误之前,所述在内存通道空闲的情况下,读取所述第一内存数据之后,还包括:
将所述第一内存数据的第一地址存储到内存控制器的寄存器中。
3.根据权利要求2所述的方法,其特征在于,所述在内存通道空闲时,读取所述第一内存数据,包括:
在内存通道空闲时,根据所述寄存器中存储的所述第一地址读取所述第一内存数据。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述对所述第一内存数据进行内存纠错,包括:
在读取的所述第一内存数据中存在第一标记的情况下,对所述第一内存数据进行内存纠错,其中,所述第一标记用于标识所述第一内存数据存在所述内存错误。
5.根据权利要求1至3任一项所述的方法,其特征在于,所述对所述第一内存数据进行内存纠错,包括:
在对所述第一内存数据进行内存纠错的过程中,在读取的所述第一内存数据被进行读操作或者写操作的情况下,则停止对所述第一内存数据进行内存纠错。
6.根据权利要求1至5任一项所述的方法,其特征在于,所述对所述第一内存数据进行内存纠错,包括:
将所述第一内存数据划分为两个或两个以上部分,每个部分包含多个所述内存颗粒对应的数据位;
将第一部分中的第一数据位的进行翻转并保持翻转后的数据不变,将第二部分中的多个第二数据位依次翻转,直至翻转得到的数据校验成功;其中,所述第一部分为所述两个或两个以上部分中的任意一个,所述第二部分包括所述两个或两个以上部分中除去所述第一部分以外的部分。
7.根据权利要求1至6任一项所述的方法,其特征在于,所述根据纠错算法对所述第一内存数据进行内存纠错之后,还包括:
将进行内存纠错后的第一内存数据写回到所述第一地址对应的内存单元中。
8.一种内存纠错装置,其特征在于,包括:
处理单元,用于确定第一内存数据存在内存错误,所述内存错误包含在预设时间或者预设次数内无法对所述第一内存数据进行纠正的错误;
通信单元,用于在内存通道空闲的情况下,读取所述第一内存数据;
所述处理单元,还用于对所述第一内存数据进行内存纠错。
9.根据权利要求8所述的装置,其特征在于,所述处理单元,还用于:
将所述第一内存数据的第一地址存储到内存控制器的寄存器中。
10.根据权利要求9所述的装置,其特征在于,所述通信单元,具体用于:
根据所述寄存器中存储的所述第一地址读取所述第一内存数据。
11.根据权利要求10所述的装置,其特征在于,所述处理单元,具体用于:
在读取的所述第一内存数据中存在第一标记的情况下,根据所述纠错算法对所述第一内存数据进行内存纠错,其中,所述第一标记用于标识所述第一内存数据存在所述内存错误。
12.根据权利要求10所述的装置,其特征在于,所述处理单元,具体用于:
在对所述第一内存数据进行内存纠错的过程中,在读取的所述第一内存数据被进行读操作或者写操作的情况下,则停止对所述第一内存数据进行内存纠错。
13.根据权利要求8至12任一项所述的装置,其特征在于,所述处理单元,具体用于:
将所述第一内存数据划分为两个或两个以上部分,每个部分包含多个所述内存颗粒对应的数据位;
将第一部分中的第一数据位的进行翻转并保持翻转后的数据不变,将第二部分中的多个第二数据位依次翻转,直至翻转得到的数据校验成功;其中,所述第一部分为所述两个或两个以上部分中的任意一个,所述第二部分包括所述两个或两个以上部分中除去所述第一部分所剩下的部分。
14.根据权利要求8至13任一项所述的装置,其特征在于,所述通信单元,还用于:
将进行内存纠错后的第一内存数据写回到所述第一地址对应的内存单元中。
15.一种计算设备,其特征在于,所述计算设备包括处理器和存储器;
所述存储器中存储有计算机程序;
所述处理器执行所述计算机程序时,所述计算设备执行前述权利要求1至7中任一项所述的方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当所述指令在至少一个处理器上运行时,实现如权利要求1至7中任一项所述的方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111137528.XA CN115878365A (zh) | 2021-09-27 | 2021-09-27 | 内存纠错方法、装置及相关设备 |
EP22871851.6A EP4390698A1 (en) | 2021-09-27 | 2022-09-13 | Memory error correction method and apparatus, and related device |
PCT/CN2022/118458 WO2023045803A1 (zh) | 2021-09-27 | 2022-09-13 | 内存纠错方法、装置及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111137528.XA CN115878365A (zh) | 2021-09-27 | 2021-09-27 | 内存纠错方法、装置及相关设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115878365A true CN115878365A (zh) | 2023-03-31 |
Family
ID=85719719
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111137528.XA Pending CN115878365A (zh) | 2021-09-27 | 2021-09-27 | 内存纠错方法、装置及相关设备 |
Country Status (3)
Country | Link |
---|---|
EP (1) | EP4390698A1 (zh) |
CN (1) | CN115878365A (zh) |
WO (1) | WO2023045803A1 (zh) |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101178922B (zh) * | 2006-11-06 | 2010-09-01 | 凌阳科技股份有限公司 | 高内存使用效率的纠错处理装置 |
CN102203740B (zh) * | 2011-05-27 | 2013-06-05 | 华为技术有限公司 | 数据处理方法、装置及系统 |
CN103019883B (zh) * | 2012-12-31 | 2015-08-26 | 华为技术有限公司 | 一种内存纠错方法及系统 |
CN103984630B (zh) * | 2014-05-27 | 2017-02-01 | 中国科学院空间科学与应用研究中心 | 一种基于at697处理器的单粒子翻转故障处理方法 |
CN105511982A (zh) * | 2015-12-18 | 2016-04-20 | 山东海量信息技术研究院 | 一种容忍dram颗粒失效的内存存取方法 |
US10802909B2 (en) * | 2018-08-17 | 2020-10-13 | Micron Technology, Inc. | Enhanced bit flipping scheme |
-
2021
- 2021-09-27 CN CN202111137528.XA patent/CN115878365A/zh active Pending
-
2022
- 2022-09-13 EP EP22871851.6A patent/EP4390698A1/en active Pending
- 2022-09-13 WO PCT/CN2022/118458 patent/WO2023045803A1/zh active Application Filing
Also Published As
Publication number | Publication date |
---|---|
EP4390698A1 (en) | 2024-06-26 |
WO2023045803A1 (zh) | 2023-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10230402B2 (en) | Data processing apparatus | |
JP4071940B2 (ja) | メモリ設計のための共有式誤り訂正 | |
CN108268340B (zh) | 校正存储器中的错误的方法 | |
US7328377B1 (en) | Error correction for programmable logic integrated circuits | |
US8010875B2 (en) | Error correcting code with chip kill capability and power saving enhancement | |
US11281526B2 (en) | Optimized error-correcting code (ECC) for data protection | |
US9092349B2 (en) | Storage of codeword portions | |
US20120079346A1 (en) | Simulated error causing apparatus | |
US9003260B2 (en) | Partial-writes to ECC (error check code) enabled memories | |
US8918707B2 (en) | Codeword error injection via checkbit modification | |
US20140344643A1 (en) | Hybrid memory protection method and apparatus | |
EP3462318B1 (en) | Memory controller error checking process using internal memory device codes | |
KR20180086816A (ko) | 사전-검사된 에러율에 따른 적응형 에러정정을 수행하는 메모리장치 및 전자장치와, 메모리장치의 동작방법 | |
US8707133B2 (en) | Method and apparatus to reduce a quantity of error detection/correction bits in memory coupled to a data-protected processor port | |
CN111625199A (zh) | 提升固态硬盘数据通路可靠性的方法、装置、计算机设备及存储介质 | |
CN220064808U (zh) | 一种片上系统以及汽车 | |
CN115878365A (zh) | 内存纠错方法、装置及相关设备 | |
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 | |
US10579470B1 (en) | Address failure detection for memory devices having inline storage configurations | |
CN114333968A (zh) | 存储器的控制方法、存储器控制器及电子装置 | |
US10740179B2 (en) | Memory and method for operating the memory | |
US11809272B2 (en) | Error correction code offload for a serially-attached memory device | |
CN117290154A (zh) | 一种基于汽车功能安全的axi_dma冗余设计方法 | |
JP2010140132A (ja) | メモリシステム及びメモリコントローラ | |
JPS63279348A (ja) | 記憶装置のチエツク方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |