一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

内存错误处理方法、装置、内存控制器及处理器与流程

2022-05-21 11:44:49 来源:中国专利 TAG:


1.本技术实施例涉及计算机领域,具体涉及一种内存错误处理方法、装置、内存控制器及处理器。


背景技术:

2.随着计算机存储器的数据传输速率和芯片内部工作频率的提高,内存命令和数据信号在传输过程中的出错概率也大大提高,通常通过数据校验码对内存是否出错进行检错。根据数据校验码是否具有纠错功能,内存错误通常分为可恢复错误和不可恢复错误,当为可恢复错误时,可以根据数据校验码(错误信号)的纠错功能将出错数据直接纠正为正确数据,当为不可恢复错误时,则通常只能重启复位soc系统。
3.现有技术通常利用系统软件或基板管理控制器确定出错内存位置,处理内存错误,但系统软件和基板管理控制器的介入减缓了对可恢复错误的纠正速度,同时,因为soc系统的重启复位时间较长,即对不可恢复错误的处理速度较慢,因此现有技术存在内存错误处理效率较低的问题。
4.可见,如何提高内存错误处理效率,成为本领域技术人员亟需解决的技术问题。


技术实现要素:

5.有鉴于此,本技术实施例提供一种内存错误处理方法、装置、内存控制器及处理器,以连续地对数据流进行带宽监控。
6.为实现上述目的,本技术实施例提供如下技术方案:
7.第一方面,本技术实施例提供一种内存错误处理方法,包括:
8.获取内存错误的错误信号,所述错误信号包括所述内存错误的类型信息和所述内存错误的错误内存标识;
9.当根据所述错误信号的类型信息,确定所述内存错误能够根据所述内存错误的数据校验码进行纠正或者确定预先存储的恢复命令序列中有与所述内存错误相对应的恢复命令时,根据所述错误内存标识和预先存储的全部内存信息,确定所述内存错误发生的内存,根据所述数据校验码纠正所述内存或将所述恢复命令发送至所述内存。
10.第二方面,本技术实施例提供一种内存错误处理装置,包括:
11.错误信号获取模块,获取内存错误的错误信号,所述错误信号包括所述内存错误的类型信息和所述内存错误的错误内存标识;
12.内存错误处理模块,适于当根据所述错误信号的类型信息,确定所述内存错误能够根据所述内存错误的数据校验码进行纠正或者确定预先存储的恢复命令序列中有与所述内存错误相对应的恢复命令时,根据所述错误内存标识和预先存储的全部内存信息,确定所述内存错误发生的内存,根据所述数据校验码纠正所述内存或将所述恢复命令发送至所述内存。
13.第三方面,本技术实施例提供一种内存控制器,包括如上述第二方面所述的内存
错误处理装置
14.第四方面,本技术实施例提供一种处理器,包括如上述第二方面所述的内存错误处理装置。
15.本技术实施例所提供的内存错误处理方法,适用于内存控制器,通过根据所述错误信号的类型信息,确定所述内存错误能够根据所述内存错误的数据校验码进行纠正或者确定预先存储的恢复命令序列中有与所述内存错误相对应的恢复命令时,根据所述错误内存标识和预先存储的全部内存信息,确定所述内存错误发生的内存,然后根据所述数据校验码纠正所述内存或将所述恢复命令发送至所述内存,使内存中的错误得以纠正或者从错误状态恢复到正常工作状态。
16.可见,本技术实施例所提供的内存错误处理方法,通过在内存控制器中预先存储全部内存信息,在内存控制器内部就可以根据内存错误的错误内存标识,确定对应内存错误发生的内存,这样,当根据所述错误信号的类型信息,确定所述内存错误能够根据所述内存错误的数据校验码进行纠正时,可以直接根据所述数据校验码纠正对应的内存;另外,还可以在内存控制器中预先存储与内存错误的类型相对应的恢复命令,从而在确定预先存储的恢复命令序列中有与所述内存错误相对应的恢复命令时,可以利用对应的恢复命令实现内存从错误状态到正常工作状态的恢复,进一步实现对于不能直接根据错误信号进行纠错的内存错误,能够在不重启soc的情况下恢复内存。可以看出,整个处理过程主要涉及内存控制器和内存,信号的传输路径较短,处理逻辑简单,内存从因出现内存错误而进入的错误状态恢复到正常工作状态的恢复时间较短,可以提高内存错误处理效率。
附图说明
17.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
18.图1为内存错误处理方法的一系统框图;
19.图2为本技术实施例所提供的内存错误处理方法适用的处理器框图;
20.图3为本技术实施例所提供的内存错误处理方法适用的另一处理器框图;
21.图4为本技术实施例所提供的内存错误处理方法的一流程图;
22.图5为本技术实施例所提供的内存错误处理方法的另一流程图;
23.图6为本技术实施例所提供的内存错误处理方法的又一流程图;
24.图7为本技术实施例所提供的内存错误处理方法的再一流程图;
25.图8为本技术实施例所提供的内存错误处理装置的框图。
具体实施方式
26.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
27.下面对现有的错误处理方法进行介绍。
28.请参考图1,图1为内存错误处理方法的一系统框图。
29.如图1所示,内存错误处理方法的系统主要包括内存110、中央处理器(cpu)120和基板管理控制器(bmc)130,其中cpu120分别与内存110及bmc130连接。
30.cpu120检测内存110是否产生了可纠正错误,cpu120寄存器上存储有各种对应内存槽位的参数,即根据内存的物理地址、逻辑地址及线性地址配置内存的在位信息,根据在位信息可以找到对应的内存的dimm槽位,或者自身上的逻辑地址及物理地址。bmc130内存有根据在位信息配置根据bmc130代码实现的告警程序,bmc130读取cpu120寄存器中的内存在位信息后,告警程序分析该在位信息从而定位出现可纠正错误的所述内存,并根据该在位信息将内存对应的插槽号进行指示。
31.进一步地,告警程序分析该在位信息从而定位出现可纠正错误的所述内存后,既可以通知的方式告知用户出现了该错误,又可根据通过数据校验码的纠错功能直接纠错得出的正确数据更新替换出错内存中的错误数据。
32.值得注意的是,因为现有技术处理不可纠正错误时无法对其进行纠正,只能重启片上系统(soc),因此又将可以通过数据校验码(错误信号)直接纠正错误数据为正确数据的可纠正错误称为可恢复错误,称不可纠正错误为不可恢复错误。但本技术实施例处理不可纠正错误时可以在不重启soc的前提下对现有技术的不可纠正错误进行恢复,因此本文中所述的可恢复错误包括可纠正错误和可以被本技术实施例恢复的不可纠正错误,即所有可以通过本技术实施例所提供的内存错误处理方法能够被恢复的错误。
33.但是,现有的通过bmc的参与来处理内存可纠正错误的方式,增加了实际应用的复杂度,具体的,存错误信号要先被cpu120采集到,cpu120再通过寄存器通知bmc130对该错误进行处理,这样会增加对该错误的处理延迟,而内存错误处理结束之前cpu120不能访问出错内存,从而影响系统性能。
34.除了通过bmc130处理可纠正错误外,还可直接通过操作系统处理可纠正错误,但如是则会占用业务数据带宽,破坏计算机服务的连续性,并且操作系统的介入进一步增大了内存错误处理时间。
35.并且,对于不可以通过数据校验码(错误信号)直接纠正错误数据,现有技术通常只能重启soc,soc重启时间相较于上述可纠正错误的处理时间还要长,从而使得本就不高的内存错误处理效率进一步降低。
36.可见,如何提高内存错误处理效率,成为本领域技术人员亟需解决的技术问题。
37.为了解决前述问题,本技术实施例提供一种内存错误处理方法。为方便描述,首先介绍适用本技术实施例所提供的内存错误处理方法的处理器。请参考图2和图3,图2为本技术实施例所提供的内存错误处理方法适用的一处理器框图,图3为本技术实施例所提供的内存错误处理方法适用的另一处理器框图。
38.如图2所示,本技术实施例所提供的内存错误处理方法使用的处理器中包括cpu核心210、内存控制器220、微处理器230等器件模块,各器件模块通过控制网络传递控制信号,通过数据网络传递数据信息,从而完整实现处理器的功能。
39.处理器中访存内存的起点或终点是cpu核心210,直接与内存交互的则是内存控制器220,内存控制器220通过内部的协议转换模块向内存发送内存访存命令、内存刷新命令
等内存命令或者从内存接收内存读取数据或内存报错信号等控制信息。因此,内存控制器都是出现内存错误后处理器中首先获得内存错误信号的器件模块,具体的,内存控制器220在从内存中读取到内存数据时通过校验码校验发现出现内存错误,得到内存错误的错误信号,或者接收内存反馈的自身发现的内存错误,得到内存错误的错误信号。
40.微处理器230用来初始化内存控制器220的寄存器,还用来初始化内存控制器220的恢复命令序列,并且还用于复位包括内存控制器220的内存子系统。
41.如图3所示,内存错误处理方法的系统包括微处理器230、系统管理单元240和内存控制器220,其中内存控制器220包括图3所示除微处理器230和系统管理单元240外的模块。
42.如前所述,微处理器230可以初始化内存控制器220的寄存器、初始化内存控制器220的恢复命令序列,以及复位内存子系统;具体地,可以在系统启动时,初始化内存控制器220的寄存器和内存控制器220的恢复命令序列;当内存错误为不能根据所述内存错误的数据校验码进行纠正且预先存储的恢复命令序列中没有与所述内存错误相对应的恢复命令时,重启或复位内存子系统。
43.系统管理单元240,用来解析微处理器230的访问操作,还负责将内存控制器220在内存错误为不能根据所述内存错误的数据校验码进行纠正且预先存储的恢复命令序列340中没有与所述内存错误相对应的恢复命令时,产生的信号通过接口发给微处理器230,以便微处理器230重启或复位内存子系统。
44.内存控制器220,具体包括:ecc模块2201、读写数据队列2202、crc模块2203、错误信号获取模块310、内存错误处理模块320、重发命令模块330、恢复命令序列340、错误报告模块2204、刷新控制模块2205、仲裁模块2206和奇偶校验模块2207和dfi协议转换模块2208。其中:
45.ecc模块2201,负责计算写数据的ecc校验码,并对读数据做ecc校验,当发生读数据ecc校验错误时,会将读数据ecc错误的错误信号报告给错误信号获取模块310;
46.读写数据队列2202,负责暂存ecc模块发下来的写数据和ecc校验码,还负责暂存读数据和读取的ecc校验码;
47.crc模块2203,用来实现写数据的crc校验码的计算和读数据的crc校验,当检测到读数据crc错误时会将读数据crc错误的错误信号报告给错误信号获取模块310;
48.dfi协议转换模块2208,将仲裁后的命令进行dfi协议转换,发送至dfi接口,并将内存错误的错误信号报告给错误信号获取模块310;
49.错误信号获取模块310,适于获取内存错误的错误信号,所述错误信号包括所述内存错误的类型信息和所述内存错误的错误内存标识;
50.恢复命令序列340,适于存储与各个错误信号的类型信息相对应的恢复命令,如前所述,在系统启动时,通过微处理器230进行初始化。
51.内存错误处理模块320,适于根据错误信号获取模块310获取的错误信号的类型信息,确定所述内存错误是否能够根据所述内存错误的数据校验码进行纠正或者确定预先存储的恢复命令序列340中是否有与所述内存错误相对应的恢复命令,当能够纠正或者存在相对应的恢复命令时,根据所述错误内存标识和预先存储的全部内存信息,确定所述内存错误发生的内存,根据所述数据校验码纠正所述内存或将所述恢复命令发送至所述内存;
52.重发命令模块330,包含两个子队列,非刷新命令队列和刷新命令队列。
53.其中:
54.非刷新命令队列根据内存控制器接收的内存错误的错误类型存储发往内存的命令,当重发命令队列收到对应命令的成功执行的反馈信号,表示该命令已经被成功执行,非刷新命令队列将该命令从该队列中移除。
55.刷新命令队列存储图中刷新控制模块发出的刷新命令,为了不违反内存的刷新周期时间,刷新命令队列中的命令优先级高于重发命令队列中的命令。
56.错误报告模块2204,适于在内存错误为不能根据所述内存错误的数据校验码进行纠正且预先存储的恢复命令序列中没有与所述内存错误相对应的恢复命令时,产生信号,并发送给系统管理单元240。
57.刷新控制模块2205,用于定时发起刷新命令以保持内存(dram)中的数据。
58.仲裁模块2206,适于对发送至内存的命令进行仲裁。
59.奇偶校验模块2207,适于对命令或地址进行奇偶校验。
60.了解本技术实施例所提供的内存控制器的基本模块后,为方便了解本技术的内容,下面结合附图3,详细说明本技术实施例所提供的内存错误处理方法,具体请参考图4,图4为本技术实施例所提供的内存错误处理方法的一流程图。
61.如图4所示,本技术实施例所提供的内存错误处理方法,适用于内存控制器,具体可以包括以下步骤:
62.在步骤s310中,获取内存错误的错误信号。
63.在进行内存错误处理时,首先需要获取内存错误的错误信号。
64.容易理解的是,本文所述的获取内存错误的错误信号是指当有内存错误产生时,获取到内存错误的错误信号,当没有内存错误产生时,则不会获取内存错误的错误信号。
65.具体地,错误信号包括内存错误的类型信息和所述内存错误的错误内存标识,其中类型信息用于后续确定对应内存错误的处理方式,而错误内存标识则用于确定具体发生错误的内存是哪个,确定后续进行修改或恢复的对象。
66.基于内存错误的来源的不同,如前所述,内存控制器获取的内存错误的错误信号可以包括读数据ecc报错信号、读数据crc报错信号、写数据crc报错信号、命令或地址奇偶校验错误,其中,对于读数据ecc报错信号和读数据crc报错信号,在内存控制器中设置执行相应校验码校验功能的硬件模块(ecc模块2201和crc模块2203)。
67.对于各个类型的错误信号,可以预先设置连接对应的错误信号产生的硬件模块的错误信号连线,并进行配置,当产生错误时,使得错误信号连线上产生有效信号,从而获取到对应的错误信号。
68.比如:对于读数据ecc报错信号,在内存控制器中设置ecc模块,设置与ecc模块连接的获取读数据ecc报错信号的错误信号连线,当产生读数据ecc报错信号时,错误信号连线上产生有效信号,比如高电平,从而获取到错误信号。
69.因此,具体的,所述获取内存错误的错误信号的步骤可以为:
70.获取预先配置并连接的错误信号连线的有效信号。
71.基于错误信号的不同类型信息,可以包括读数据ecc报错信号的错误信号连线、读数据crc报错信号的错误信号连线、写数据crc报错信号的错误信号连线、命令或地址奇偶校验错误的错误信号连线。
72.需要注意的是,不同类型的错误信号连线可以是同一根错误信号连线,具体在ddr4/ddr5内存子系统中,写数据crc报错信号的错误信号连线和命令或地址奇偶校验错误的错误信号连线共用同一根信号,当然,此时需要预先配置区分信息来区分写数据crc报错信号和命令或地址奇偶校验错误的错误信号,具体可以是低电平脉冲宽度,内存可以用不同的低电平脉冲宽度来表示两种不同的错误,较短的低电平脉冲宽度表示写数据crc错误,较长的低电平脉冲宽度表示命令或地址奇偶校验错误,内存控制器会对该信号的低电平时间进行计数来确定发生的是哪种错误。
73.哪一种错误信号连线产生有效信号,那么所获取的错误信号的信号类型对应即为哪一种错误信号。
74.在一些实施例中,所述有效信号可以通过软件在内存控制器的初始化时,设置于寄存器中;在另一些实施例中,则可以在内存控制器硬件生产时直接烧入其中。容易理解的是,通过软件的方式有利于后续的维护更新,通过硬件的方式则有利于保证可靠性。
75.当然,当执行本技术实施例所述的内存错误处理方法的获取内存错误的错误信号步骤时,各个硬件模块以及错误信号连线均已设置完成,并且有效信号的配置也已经完成。
76.在步骤s320中,根据所述错误信号的类型信息,确定所述内存错误是否能够根据所述内存错误的数据校验码进行纠正,如果是,执行步骤s340,如果否,执行步骤s330。
77.当获取到内存错误的错误信号时,进一步根据错误信号的类型信息,确定内存错误的类型,如果该内存错误的类型不能被纠正,则执行步骤s330,进一步根据所述错误信号的类型信息,确定预先存储的恢复命令序列中是否有与所述内存错误相对应的恢复命令,如果该内存错误的类型能被纠正,执行步骤s340,根据所述错误内存标识和预先存储的全部内存信息,确定所述内存错误发生的内存。
78.具体地,能够根据所述内存错误的数据校验码进行纠正的内存错误可以包括可纠错的ecc错误。
79.在步骤s330中,根据所述错误信号的类型信息,确定预先存储的恢复命令序列中是否有与所述内存错误相对应的恢复命令,如果是则执行步骤s340,如果否则执行步骤s380。
80.如果经过判断,确定内存错误是不能根据所述内存错误的数据校验码进行纠正的错误,那么进一步确定预先存储的恢复命令序列中是否有与所述内存错误相对应的恢复命令。
81.具体地,可以在内存控制器中预先存储恢复命令序列,在一种具体实施方式中,可以在微处理器对内存控制器初始化时写入。
82.容易理解的是,因为恢复命令序列与内存错误的错误类型是对应关系,因此需要基于错误类型在预先储存的恢复命令序列中进行查找。为方便理解,现举例如下:
83.当获取到读数据crc报错信号时,则在恢复命令序列中查找对应的恢复命令:预充电(precharge)命令,从而预充电(precharge)命令可以将内存激活的行全部关闭,使内存恢复到正常工作状态。
84.当获取到写数据crc报错信号,则在恢复命令序列中查找对应的预充电(precharge)命令、读dram模式寄存器中的写crc错误状态位的命令和将dram模式寄存器中的写crc错误状态位清零的命令,从而经过各个命令的执行,使内存恢复到正常工作状态。
85.当然,在一些实施例中,所述恢复命令序列可以通过软件在内存控制器的初始化时写入;在另一些实施例中,所述恢复命令序列还可以在处理器生产时直接烧入内存控制器中。通过软件的方式有利于后续的维护更新,通过硬件的方式则有利于保证可靠性。
86.容易理解的是,在其他实施例中,步骤s320和步骤s330的执行顺序,可以根据需要进行调整,本实施例仅对一种情况进行示例。
87.在步骤s340中,根据所述错误内存标识和预先存储的全部内存信息,确定所述内存错误发生的内存。
88.当根据所述错误信号的类型信息,确定所述内存错误能够根据所述内存错误的数据校验码进行纠正或者确定预先存储的恢复命令序列中有与所述内存错误相对应的恢复命令时,进一步根据错误信号中的错误内存标识和预先存储的内存控制器对应的全部内存信息,确定内存错误发生的内存。
89.需要说明的是,本文所述的全部内存信息是指内存控制器所管理的全部内存的标识和各个内存标识所对应的内存地址信息,基于内存地址信息可以确定对应的内存,并在后续将恢复命令发送至对应的内存。
90.在一种具体实施方式中,内存地址信息可以为前述的内存对应的插槽号。
91.由于内存控制器中预先存储有全部内存信息,当获取到错误内存标识后,根据错误内存标识进行查找,进而就可以实现对于内存的确定。
92.在步骤s350中,根据所述数据校验码纠正所述内存或将所述恢复命令发送至所述内存错误发生的内存。
93.当确定了内存错误发生的内存后,进一步根据所述数据校验码纠正所述内存或将所述恢复命令发送至所述内存错误发生的内存。
94.容易理解的是,当内存错误为能够根据所述内存错误的数据校验码进行纠正的错误时,根据所述数据校验码纠正所述内存,即纠正内存中存储的数据;如果内存错误为相对应的恢复命令在预先存储的恢复命令序列中时,则将所述恢复命令发送至所述内存错误发生的内存,从而使内存恢复到正常工作状态。
95.如果恢复命令能够使内存恢复到正常工作状态,则内存可继续接收内存控制器的命令,而无需进行芯片重启,仅需要较短的时间就可以恢复内存。
96.可见,本技术实施例所提供的内存错误处理方法,通过在内存控制器中预先存储全部内存信息,在内存控制器内部就可以根据内存错误的错误内存标识,确定对应内存错误发生的内存,这样,当根据所述错误信号的类型信息,确定所述内存错误能够根据所述内存错误的数据校验码进行纠正时,可以直接根据所述数据校验码纠正对应的内存;另外,还可以在内存控制器中预先存储与内存错误的类型相对应的恢复命令,从而在确定预先存储的恢复命令序列中有与所述内存错误相对应的恢复命令时,可以利用对应的恢复命令实现内存从错误状态到正常工作状态的恢复,进一步实现对于不能直接根据错误信号进行纠错的内存错误,能够在不重启soc的情况下恢复内存。可以看出,整个处理过程主要涉及内存控制器和内存,信号的传输路径较短,处理逻辑简单,内存从因出现内存错误而进入的错误状态恢复到正常工作状态的恢复时间较短,可以提高内存错误处理效率。
97.在另一具体实施方式中,为了降低由于内存错误造成的破坏,提高内存错误发生后的命令处理效率,请继续参考图4,本技术实施例所提供的内存错误处理的方法,还可以
包括:
98.在步骤s360中,判断内存是否恢复到正常工作状态,如果是,则执行步骤s371,如果否,则执行步骤s380。
99.发送恢复命令到错误发生的内存本身也是与内存的交互,因此有可能出现恢复命令顺利执行,内存恢复到正常工作状态的情况,也有可能出现内存错误,即当内存因发生内存错误进入只接收恢复命令的状态时,又在接收恢复命令时发生了内存错误。因此可以在发送恢复命令后,进一步判断恢复命令是否全部发送并执行完毕,只有恢复命令全部发送并执行完毕时,内存才会被恢复为正常工作状态。而当内存没有恢复到正常状态时,即发送恢复命令的过程中又发生新的内存错误致使内存无法执行内存恢复命令时,则需要进一步地的处理,在一种具体实施方式中,可以认为该内存错误是不可恢复错误,执行步骤s380。
100.在步骤s371中,重新向所述内存发送已经存储的所述重发命令。
101.当内存恢复到正常工作状态时,为了提高内存错误发生后的命令处理效率,可以重新向所述内存发送已经存储的所述重发命令。
102.容易理解的是,所述重发命令是指内存控制器中存储的已经向内存发送但未被执行完成的内存命令,在一些实施例中,可以通过队列的方式存储重发命令,重发命令队列中包含一个队列和队列指针控制电路,赢得仲裁的命令被发送至内存同时被存入重发命令队列中,队列写指针增加;当该命令被成功执行,对应读指针增加;当内存发生错误,将读指针与写指针之间的命令重发。
103.容易理解的是,所述仲裁是指内存控制器中的仲裁模块,该仲裁模块按照一定规则对待发送内存命令进行仲裁,一次仲裁后只发送一个内存命令。
104.需要注意的是,内存控制器并非存储所有的已向内存发送但未被执行完成的内存命令,而是有选择的对其中特定的内存命令进行存储,所述特定内存命令与内存控制器初始化时使能的错误信号对应,具体如当仅使能了写数据crc校验时,则只会存储已向内存发送但未被执行完成的内存命令中的读写命令。因为其他内存命令(比如dram寄存器操作命令mrs等)不受写数据crc校验保护。容易理解的是,当发生的内存错误既不是能够根据所述内存错误的数据校验码进行纠正的错误,也不在预先存储的恢复命令序列中时,内存控制器判断该错误为不可恢复错误,并不会有后续对内存的恢复以及恢复内存后的重发操作,因此也就不需要存储引起该内存错误的内存命令。
105.可见,通过存储未执行完毕的内存命令,在恢复内存至正常工作状态后重发该内存命令,从而可以精准消除内存出错时无法接收新的内存命令以及执行内存命令的影响,防止该部分内存命令的丢失,从而使内存错误造成的破坏最小化。
106.在一具体实施方式中,所述重发命令包括刷新命令和非刷新命令,所述刷新命令指刷新内存的命令。
107.在发射重发命令时按照刷新命令优先原则向所述内存重新发送所述重发命令,所述刷新命令优先原则指刷新命令优先于非刷新命令的内存命令发送。
108.这样,可以保证存储在内存中的数据不会因未及时刷新而丢失。
109.进一步地,在一具体实施方式中,所述按照刷新命令优先原则向所述内存重新发送所述刷新命令和所述非刷新命令的步骤,可以包括:
110.按照时序优先原则向所述内存重新发送各个所述刷新命令;
111.按照时序优先原则向所述内存重新发送各个所述非刷新命令,所述时序优先原则指先向内存发送的内存命令优先于后向内存发送的内存命令发送。
112.即在不违反刷新命令优先原则的前提下,按照时序优先原则向所述内存重新发送所述重发命令,所述时序优先原则指先向内存发送的内存命令优先于后向内存发送的内存命令重发。
113.这样,可以进一步地保证重新发送的重发命令的时序仍然符合仲裁规则,从而防止发生时序错误。
114.在一种具体实施方式中,为了方便控制单元了解内存的执行情况,在步骤s360中,判断内存已恢复到正常工作状态时,还可以执行以下步骤:
115.在步骤s372中,反馈发生的内存错误为已纠正错误。
116.反馈已纠正的错误给控制内存控制器的微处理器,并进一步反馈给操作系统。
117.可见,当已纠正可恢复错误后,本技术实施例所提供的错误处理方法,在实现纠正可恢复错误后通过向操作系统反馈发生已纠正错误,可以使控制单元(微处理器)等了解内存的执行情况,方便后续的处理。
118.在另一种具体实施方式中,步骤s330的结论为否,即当根据所述错误信号的类型信息,确定预先存储的恢复命令序列中没有与所述内存错误相对应的恢复命令时,或者当步骤s360的结论为否,即内存未恢复到正常工作状态时,在步骤s380中,发送重启或复位内存子系统的请求。
119.内存子系统包括内存、内存控制器,和所述内存与内存控制器之间的物理端口(phy),容易理解的是,当恢复命令序列中没有与内存错误相对应的恢复命令时,或者当发送了恢复命令但未被恢复时,该内存错误无法通过恢复命令恢复,只能通过重启或复位内存子系统的方式结束出错内存的错误状态。
120.值得注意的是,现有技术中需要重启整个soc,而本技术实施例所提供的内存错误处理方法仅通过内存子系统就可以完成对内存错误的处理,因此只需要重启内存子系统即可结束内存的错误状态,从而避免对soc内其他模块的工作造成影响。
121.需要说明的是,本技术实施例所提供内存错误处理方法本身不受内存子系统类型的限制,可以适用于多种内存子系统,包括ddr4 dram,udimm,rdimm,lrdimm、nvdimm-n和ddr5 dram,udimm,rdimm,lrdimm、nvdimm-n。
122.这样,通过发送重启或复位内存子系统的请求,可以实现对于无法通过恢复命令恢复的内存错误进行处理,保证在出现上述错误时,仍然可以进行内存错误的处理。
123.在一具体实施方式中,请参考图5,图5为本技术实施例所提供的内存错误处理方法的另一流程图。
124.需要说明的是,图5中大部分内容与图4相似,对这部分内容不展开描述。如图5所示,本技术实施例所提供的内存错误处理方法的具体步骤可以包括:
125.在步骤s410中,获取内存错误的错误信号。
126.步骤s410的具体内容,请参考图4所示的步骤s310的描述,在此不再赘述。
127.在步骤s420中,停止向内存发送内存命令。
128.当内存控制器获取到错误信号时,即发生了内存错误,且发生该内存错误的内存已进入错误状态,不能接收内存控制器除恢复命令外的命令,此时继续对内存发送命令只
会增加重发命令的数量,因此内存控制器可以停止向内存发送内存命令。
129.这样,可以减少在内存错误发生后发送到错误内存从而丢失的内存命令的数量或重发命令的数量,从而减少内存错误的影响。
130.在步骤s430中,根据所述错误信号的类型信息,确定所述内存错误是否能够根据所述内存错误的数据校验码进行纠正,如果是,执行步骤s450,如果否,执行步骤s440。
131.在步骤s440中,根据所述错误信号的类型信息,确定预先存储的恢复命令序列中是否有与所述内存错误相对应的恢复命令,如果是则执行步骤s450,如果否则执行步骤s490。
132.在步骤s450中,根据所述错误内存标识和预先存储的全部内存信息,确定所述内存错误发生的内存。
133.在步骤s460中,根据所述数据校验码纠正所述内存或将所述恢复命令发送至所述内存错误发生的内存。
134.在步骤s470中,判断内存是否恢复到正常工作状态,如果是,则执行步骤s480,如果否,则执行步骤s490。
135.在步骤s480中,重新向所述内存发送已经存储的所述重发命令。
136.在步骤s490中,发送重启或复位内存子系统的请求。
137.步骤s430-s490的具体内容,请参考图4所示的步骤s320-380的描述,在此不再赘述。
138.在一具体实施方式中,请参考图6,图6为本技术实施例所提供的内存错误处理方法的又一流程图。
139.如图6所示,内存错误处理方法的步骤可以包括:
140.在步骤s51中,获取内存错误的错误信号。
141.在步骤s52中,根据所述错误信号的类型信息,确定所述内存错误是否能够根据所述内存错误的数据校验码进行纠正,如果是,执行步骤s53,如果否,执行步骤s54。
142.在步骤s53中,根据所述错误内存标识和预先存储的全部内存信息,确定所述错误发生的内存。
143.在步骤s54中,根据所述错误信号的类型信息,确定预先存储的恢复命令序列中是否有与所述内存错位相对应的恢复命令,如果是,执行步骤s55,如果否,执行步骤s510。
144.步骤s51-s54的具体内容,请参考图4所示的步骤s310-s340的描述,在此不再赘述。
145.在步骤s55中,记录获取所述错误信号的累计错误次数。
146.每判断发生了一次属于可恢复错误的内存错误,都记录一次累计错误次数,具体的,可以是累计错误次数加1。
147.这样,可以清楚的得知错误发生的次数。
148.在一些实施例中,在步骤s55中记录获取所述错误信号的累计错误次数后,还包括:
149.在步骤s56中,判断累计错误次数是否小于阈值,如果是,执行步骤s53,如果否,则执行步骤s510。
150.每次对累计错误次数进行记录后,都要对累计错误此时是否达到阈值进行判断,
当然,所述阈值是预先设置好的。
151.这样,可以有效防止重复回到获取内存错误信号的步骤的次数过多甚至出现死锁的情况。所述死锁比如a恢复命令引起的内存错误需要b恢复命令,而b恢复命令又引起需要使用a恢复命令的内存错误,从而导致内存控制器不断重复内存错误处理操作。
152.在步骤s57中,根据所述数据校验码或错误信号纠正所述内存或将所述恢复命令发送至所述内存错误发生的内存。
153.步骤s57的具体内容,请参考图3所示的步骤s350,在此不再赘述。
154.在一些实施例中,在步骤s57后,还包括:
155.在步骤s58中,判断内存是否恢复到正常工作状态,如果是,执行步骤s591,如果否,重新执行步骤s51。
156.当判断内存是否恢复到正常工作状态的结果为否时,重新执行步骤s51,即重新获取内存错误的错误信号。当然,该重新获取的内存错误信号是恢复命令的发送引起的内存错误,具体的,在发送恢复命令的过程中,当再次获取到内存错误的错误信号时,再次根据所述错误信号的类型信息以及预先存储的恢复命令序列,确定是否获取到与所述内存错误相对应的恢复命令。
157.这样,当恢复命令引起的内存错误也是可恢复错误时,可以继续通过本技术实施例所提供的内存错误处理方法进行处理,直至恢复内存为正常工作状态或者重新认定最初发生的内存错误为不可恢复错误。
158.在步骤s591中,重新向所述内存发送已经存储的所述重发命令。
159.步骤s591的具体内容请参考图3所示的步骤s371,在此不再赘述。
160.在一种具体实施方式中,为了方便控制单元了解内存的执行情况,在步骤s58中,判断内存已恢复到正常工作状态时,还可以执行以下步骤:
161.在步骤s592中,设置所述累计错误次数为初始值。
162.当然,所述初始次数为0次。
163.这样,初始化为0后,下次发生内存错误时的累计错误次数会记录为1,从而使累计错误次数能代表非恢复命令的内存命令造成内存错误且被判断为可恢复错误后,内存控制器为处理该内存错误所尝试恢复内存的次数,从而保证对该累计错误次数的阈值设置即对最大尝试恢复内存的次数设置。
164.在另一种具体实施方式中,步骤s54的结论为否,即当根据所述错误信号的类型信息,确定预先存储的恢复命令序列中没有与所述内存错误相对应的恢复命令时,或者当步骤s56的结论为否,即累计错误次数达到阈值时,在步骤s510中,发送重启或复位内存子系统的请求。
165.步骤s510的具体内容请参考图3所示的步骤s380的描述,在此不再赘述。
166.容易理解的是,引起发送重启或复位内存子系统的请求的错误为不可恢复错误,因此因累计错误次数达到阈值大小而重新判断非恢复命令的内存命令造成的内存错误为不可恢复错误时,同样需要发送重启或复位内存子系统的请求。
167.具体的,所述重新判断非恢复命令的内存命令造成的错误为不可恢复错误是指,最初导致内存进入错误状态的内存错误虽然在累计错误为1时确认了有预先存储的与之对应的恢复命令序列,属于可恢复错误,但由于为处理该可恢复错误而后续发送的恢复命令
一次次造成内存错误,累计错误的次数达到了累计错误次数的阈值,认为该到达阈值的恢复命令造成的内存错误为不可恢复错误,按照不可恢复错误的流程操作,发送重启或复位内存子系统的请求,从而实质上重新判断认为累计错误次数记录为1时的内存错误为不可恢复错误。
168.可见,通过在到达累计恢复次数时停止对出错内存的恢复,转而进入重启或复位内存子系统,可以有效防止出现恢复次数过长甚至发生死锁的情况。
169.在一具体实施方式中,请参考图7,图7为本技术实施例所提供的内存错误处理方法的再一流程图。
170.如图7所示,所述内存错误处理方法的步骤可以包括:
171.在步骤s61中,获取内存错误的错误信号。
172.在步骤s62中,根据所述错误信号的类型信息,确定所述内存错误是否能够根据所述内存错误的数据校验码进行纠正,如果是,则执行步骤s64,如果否,则执行步骤s63。
173.在步骤s63中,根据所述错误信号的类型信息,确定预先存储的恢复命令序列中是否有与所述内存错误相对应的恢复命令,如果是则执行步骤s64,如果否则执行步骤s611。
174.在步骤s64中,根据所述错误内存标识和预先存储的全部内存信息,确定所述内存错误发生的内存。
175.在s65中,根据所述数据校验码纠正所述内存或将所述恢复命令发送至所述内存错误发生的内存。
176.在步骤s66中,判断内存是否恢复到正常工作状态,如果是,执行步骤s67,如果否,执行步骤s611。
177.步骤s61-s66的具体内容请参考图4所示步骤s310-s360的描述,在此不再赘述。
178.在步骤s67中,记录内存恢复到正常工作状态的累计恢复次数。
179.当恢复命令全部发送并执行完毕,内存恢复到正常工作状态时,记录该次内存成功恢复的次数至累计恢复次数中。
180.在步骤s68中,判断所述累计恢复次数是否小于预设阈值,如果是,则执行步骤s69,如果否,则执行步骤s610。
181.在内存恢复成功并记录该次累计恢复次数后,根据预设阈值对该累计恢复次数相比较,以判断后续执行的步骤,具体的,可以通过软件进行记录。
182.长时间工作后内存温度可能会升高,内存温度的变化会引起其输入输出接口的阻抗发生变化从而引起信号反射,信号反射会导致信号质量变差,严重会导致数据出错。因此,需要记录发生的内存错误次数,从而当内存的累计恢复次数达到阈值时采取消除温度带来的阻抗漂移的措施。
183.在步骤s69中,重新向所述内存发送已经存储的所述重发命令。
184.步骤s69的具体内容请参考图4所示步骤s371的描述,在此不再赘述。
185.在步骤s610中,执行内存阻抗校准操作。
186.当内存的累计恢复次数到达阈值时,需要采取消除温度带来的阻抗漂移的措施,具体的,可以是执行内存阻抗校准操作。当然,因为对出错内存进行阻抗校准时,该出错内存不能接收内存命令,所以需要优先进行累计恢复次数是否到达阈值的判断,再重新向所述内存发送已经存储的所述重发命令。
187.在步骤s611中,发送重启或复位内存子系统的请求。
188.步骤s611的具体内容,请参考图4所述的步骤s380,在此不再赘述。
189.为了解决前述问题,本技术实施例还提供一种内存错误处理装置,该装置可以认为是实现本技术实施例提供的内存错误处理方法所需设置的功能模块。本文描述的装置内容与上文描述方法内容相互对应参照。
190.请参考图8,图8为本技术实施例所提供的内存错误处理装置的框图。
191.该装置可适用于本技术实施例所提供的内存错误处理方法。如图8所示,本技术实施例所提供的内存错误处理装置可以包括:
192.错误信号获取模块310,适于获取内存错误的错误信号,所述错误信号包括所述内存错误的类型信息和所述内存错误的错误内存标识;
193.内存错误处理模块320,适于当根据所述错误信号的类型信息,确定所述内存错误能够根据所述内存错误的数据校验码进行纠正或者确定预先存储的恢复命令序列中有与所述内存错误相对应的恢复命令时,根据所述错误内存标识和预先存储的全部内存信息,确定所述内存错误发生的内存,根据所述数据校验码纠正所述内存或将所述恢复命令发送至所述内存。
194.可见,本技术实施例所提供的内存错误处理装置,通过在内存控制器中预先存储全部内存信息,在内存控制器内部就可以根据内存错误的错误内存标识,确定对应内存错误发生的内存,这样,当根据所述错误信号的类型信息,确定所述内存错误能够根据所述内存错误的数据校验码进行纠正时,可以直接根据所述数据校验码纠正对应的内存;另外,还可以在内存控制器中预先存储与内存错误的类型相对应的恢复命令,从而在确定预先存储的恢复命令序列中有与所述内存错误相对应的恢复命令时,可以利用对应的恢复命令实现内存从错误状态到正常工作状态的恢复,进一步实现对于不能直接根据错误信号进行纠错的内存错误,能够在不重启soc的情况下恢复内存。可以看出,整个处理过程主要涉及内存控制器和内存,信号的传输路径较短,处理逻辑简单,内存从因出现内存错误而进入的错误状态恢复到正常工作状态的恢复时间较短,可以提高内存错误处理效率。
195.在一些实施例中,还包括:
196.重发命令模块330,适于当所述内存恢复到正常工作状态时,重新向所述内存发送已经存储的重发命令,所述重发命令包括向所述内存发送但未被执行完成的内存命令。
197.在一些实施例中,所述重发命令包括刷新命令和非刷新命令;
198.重发命令模块330,适于重新向所述内存发送所述重发命令,包括:
199.按照刷新命令优先原则向所述内存重新发送所述刷新命令和非刷新命令,所述刷新命令优先原则指所述刷新命令优先于所述非刷新命令的内存命令发送。
200.在一些实施例中,按照时序优先原则向所述内存重新发送各个所述刷新命令;
201.按照时序优先原则向所述内存重新发送各个所述非刷新命令,所述时序优先原则指先向内存发送的内存命令优先于后向内存发送的内存命令发送。
202.在一些实施例中,还包括:
203.阻抗校准模块770,适于当所述内存恢复到正常工作状态时,记录内存恢复到正常工作状态的累计恢复次数,当所述累计恢复次数到达预设阈值时,执行内存阻抗校准操作。
204.在一些实施例中,还包括:
205.内存子系统重启或复位模块740,适于当根据所述错误信号的类型信息,确定预先存储的恢复命令序列中没有与所述内存错误相对应的恢复命令时,发送重启或复位内存子系统的请求。
206.在一些实施例中,内存子系统重启或复位模块740,适于发送重启或复位内存子系统的请求的步骤包括:
207.向控制单元发送重启或复位所述内存子系统的请求,所述控制单元适于初始化所述内存子系统的寄存器。
208.在一些实施例中,内存错误处理模块320,还适于:
209.当所述内存恢复到正常工作状态时,反馈发生的内存错误为已纠正错误。
210.在一些实施例中,还包括:
211.内存命令发送模块750,适于错误信号获取模块获取内存错误的错误信号之后,停止向内存发送内存命令。
212.在一些实施例中,内存错误处理模块320,还适于当再次获取到内存错误的错误信号时,再次根据所述错误信号的类型信息以及预先存储的恢复命令序列,确定是否获取到与所述内存错误相对应的恢复命令。
213.在一些实施例中,还包括:
214.累计错误次数记录模块760,适于错误信号获取模块获取内存错误的错误信号之后,获取所述错误信号的累计错误次数;
215.内存错误处理模块320,还适于当累计错误次数未达到次数阈值,且根据所述错误信号的类型信息,确定预先存储的恢复命令序列中有与所述内存错误相对应的恢复命令时,将所述恢复命令发送至所述内存错误发生的内存。
216.在一些实施例中,内存子系统重启或复位模块740,还适于当所述累计错误次数达到次数阈值时,发送重启或复位内存子系统的请求。
217.在一些实施例中,累计错误次数记录模块760,还适于当所述内存恢复到正常工作状态时,重新向所述内存发送所述重发命令的步骤之后,设置所述错误次数为初始次数,所述初始次数为0次。
218.本技术实施例还提供一种内存控制器,该处理器可以包括本技术实施例上述提供的内存错误处理装置。
219.可见,本技术实施例所提供的内存控制器,通过在内存控制器中预先存储全部内存信息,在内存控制器内部就可以根据内存错误的错误内存标识,确定对应内存错误发生的内存,这样,当根据所述错误信号的类型信息,确定所述内存错误能够根据所述内存错误的数据校验码进行纠正时,可以直接根据所述数据校验码纠正对应的内存;另外,还可以在内存控制器中预先存储与内存错误的类型相对应的恢复命令,从而在确定预先存储的恢复命令序列中有与所述内存错误相对应的恢复命令时,可以利用对应的恢复命令实现内存从错误状态到正常工作状态的恢复,进一步实现对于不能直接根据错误信号进行纠错的内存错误,能够在不重启soc的情况下恢复内存。可以看出,整个处理过程主要涉及内存控制器和内存,信号的传输路径较短,处理逻辑简单,内存从因出现内存错误而进入的错误状态恢复到正常工作状态的恢复时间较短,可以提高内存错误处理效率。
220.本技术实施例还提供一种处理器,该电子设备可以包括本技术实施例上述提供的
内存错误处理装置。
221.可见,本技术实施例所提供的处理器,通过在内存控制器中预先存储全部内存信息,在内存控制器内部就可以根据内存错误的错误内存标识,确定对应内存错误发生的内存,这样,当根据所述错误信号的类型信息,确定所述内存错误能够根据所述内存错误的数据校验码进行纠正时,可以直接根据所述数据校验码纠正对应的内存;另外,还可以在内存控制器中预先存储与内存错误的类型相对应的恢复命令,从而在确定预先存储的恢复命令序列中有与所述内存错误相对应的恢复命令时,可以利用对应的恢复命令实现内存从错误状态到正常工作状态的恢复,进一步实现对于不能直接根据错误信号进行纠错的内存错误,能够在不重启soc的情况下恢复内存。可以看出,整个处理过程主要涉及内存控制器和内存,信号的传输路径较短,处理逻辑简单,内存从因出现内存错误而进入的错误状态恢复到正常工作状态的恢复时间较短,可以提高内存错误处理效率。
222.上文描述了本技术实施例提供的多个实施例方案,各实施例方案介绍的各可选方式可在不冲突的情况下相互结合、交叉引用,从而延伸出多种可能的实施例方案,这些均可认为是本技术实施例披露、公开的实施例方案。
223.虽然本技术实施例披露如上,但本技术并非限定于此。任何本领域技术人员,在不脱离本技术的精神和范围内,均可作各种更动与修改,因此本技术的保护范围应当以权利要求所限定的范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献