CN116483600A - 内存故障处理方法及计算机设备 - Google Patents

内存故障处理方法及计算机设备 Download PDF

Info

Publication number
CN116483600A
CN116483600A CN202310187974.4A CN202310187974A CN116483600A CN 116483600 A CN116483600 A CN 116483600A CN 202310187974 A CN202310187974 A CN 202310187974A CN 116483600 A CN116483600 A CN 116483600A
Authority
CN
China
Prior art keywords
memory
fault
cpu
address
uncorrectable
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
Application number
CN202310187974.4A
Other languages
English (en)
Inventor
张飞
俞伟生
肖艳林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
XFusion Digital Technologies Co Ltd
Original Assignee
XFusion Digital Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by XFusion Digital Technologies Co Ltd filed Critical XFusion Digital Technologies Co Ltd
Priority to CN202310187974.4A priority Critical patent/CN116483600A/zh
Publication of CN116483600A publication Critical patent/CN116483600A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions

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

本申请提供了一种内存故障处理方法及计算机设备,涉及内存技术领域。该方法中,在内存中的数据发生不可纠正故障后,CPU获取该不不纠正故障的故障信息,该故障信息包括故障地址,若故障地址所属的目标内存页为未使用状态,则CPU对目标内存页执行页隔离操作,这样,该目标内存页将不会分配给任何进程使用,从而也就避免了应用程序、操作系统使用内存中发生了不可纠正故障的数据。可见,由于在内存中发生了不可纠正故障的数据被使用之前就被隔离了,因此,有效减少了内存中的故障数据对计算机设备所运行的应用程序、操作系统的影响,这样,有助于避免造成系统宕机、重启以及应用程序崩溃等问题,进而有助于提高计算机设备的运行稳定性。

Description

内存故障处理方法及计算机设备
技术领域
本申请涉及内存技术领域,尤其涉及一种内存故障处理方法及计算机设备。
背景技术
内存是计算机设备的主要部件之一,主要用于存储数据。计算机设备运行过程中,内存中存储数据通常会发生故障,如,从内存的存储单元中读出的数据与写入该存储单元中的数据不一致等。
相关技术中,在检测到内存中存在故障数据、且故障级别为不可纠正故障(uncorrectable error,UCE)时,会将该故障数据打上中毒(Poison)标签,并在该故障数据被使用时,触发机械检查错误(machine check error,MCERR)中断信号,使得计算机设备执行MCERR Handle(句柄)处理程序,以对故障数据进行处理。然而,这种故障处理方式下,应用程序、操作系统会由于使用了故障数据而发生崩溃,严重影响了计算机设备的运行稳定性。
发明内容
本申请实施例提供一种内存故障处理方法及计算机设备,能够避免应用程序、操作系统使用故障数据,有助于提高计算机设备的运行稳定性。
为达到上述目的,本申请的实施例采用如下技术方案:
第一方面,提供了一种内存故障处理方法,用于计算机设备的中央处理器CPU,该计算机设备包括与CPU连接的内存;该方法包括:在内存中的数据发生不可纠正故障的情况下,CPU获取该不可纠正故障的故障信息;故障信息包括不可纠正故障对应的故障地址;若故障地址所属的目标内存页为未使用状态,CPU对目标内存页执行页隔离操作;未使用状态是指目标内存页未分配给CPU当前运行的进程使用。
该方案中,在内存中的数据发生不可纠正故障后,CPU获取该不可纠正故障的故障信息,该故障信息包不可纠正故障对应的故障地址,若故障地址所属的目标内存页为未使用状态,则CPU对目标内存页执行页隔离操作,这样,该目标内存页将不会分配给任何进程使用,从而也就避免了应用程序、操作系统使用目标内存页对应的内存地址中的数据,换言之,避免了应用程序、操作系统使用内存中发生了不可纠正故障的数据。可见,由于在内存中发生了不可纠正故障的数据被使用之前就被隔离了,因此,有效减少了内存中的故障数据对计算机设备所运行的应用程序、操作系统的影响,这样,有助于避免造成系统宕机、重启以及应用程序崩溃等问题,进而有助于提高计算机设备的运行稳定性。
在一种可能的实现方式中,故障信息还包括不可纠正故障的故障类型;若故障地址对应的目标内存页为未使用状态,CPU对目标内存页执行页隔离操作,包括:若故障类型为不需要处理UCNA故障或选择处理SRAO故障、且故障地址所对应的目标内存页为未使用状态,CPU对目标内存页执行页隔离操作。
该实现方式中,通过设置故障信息包括的故障类型为不需要处理UCNA故障或选择处理SRAO故障的情况下,CPU对目标内存页执行隔离操作,从而实现对不同故障类型的数据故障进行隔离处理,有助于提高页隔离操作的针对性。
另一种可能的实现方式中,该计算机设备还包括内存控制器,内存控制器分别与内存、CPU连接;在内存中的数据发生不可纠正故障的情况下,CPU获取不可纠正故障的故障信息,包括:CPU运行操作系统OS的过程中,CPU响应于内存控制器发送的系统管理中断SMI信号,执行目标操作:CPU由运行OS切换至运行基本输入输出系统BIOS,并由BIOS获取不可纠正故障的故障信息;该目标操作还包括:BIOS向OS上报不可纠正故障的故障信息,该上报的不可纠正故障的故障信息用于指示OS基于该上报的不可纠正故障的故障信息执行页隔离操作;其中,SMI信号是在内存中的数据发生故障的情况下内存控制器所触发的。
该实现方式中,内存控制器在检测内存中的数据发生不可纠正故障的情况下,触发SMI信号,使得CPU由运行OS切换为运行BIOS,以由BIOS获取不可纠正故障的故障信息,并向OS上报该不可纠正故障的故障信息,从而指示OS基于上报的不可纠正故障的故障信息执行页隔离操作,相对于相关技术中只能依赖MCERR触发的方式进行内存故障处理,通过设置BIOS向OS上报不可纠正故障的故障信息的方式触发OS执行页隔离操作,提高了内存故障处理的灵活性。
另一种可能的实现方式中,该不可纠正故障的故障信息还包括不可纠正故障的故障类型;BIOS向OS上报不可纠正故障的故障信息,包括:若故障类型为UCNA故障或SRAO故障,BIOS向OS上报不可纠正故障的故障信息。
该实现方式中,通过设置故障类型为UCNA故障或SRAO故障,BIOS向OS上报不可纠正故障的故障信息,从而实现对不同故障类型的数据故障进行隔离处理,有助于提高隔离操作的针对性。
另一种可能的实现方式中,若故障地址所属的目标内存页为未使用状态,CPU对目标内存页执行页隔离操作,包括:CPU运行OS的过程中,OS响应于BIOS上报的不可纠正故障的故障信息,若上报的不可纠正故障的故障信息包括的故障地址所属的目标内存页为未使用状态,CPU对目标内存页执行页隔离操作。
该实现方式中,内存中的数据发生不可纠正故障时,CPU运行OS的过程中,OS响应于BIOS上报的不可纠正故障的故障信息,对上报的故障信息中的故障地址所属的目标内存页执行隔离操作,相对于相关技术中只能依赖MCERR触发的方式进行内存故障处理,通过设置BIOS向OS上报故障信息的方式触发OS执行页隔离操作,提高了内存故障处理的灵活性。
另一种可能的实现方式中,计算机设备还包括管理控制器;该方法还包括:CPU向管理控制器发送不可纠正故障对应的故障地址,以使管理控制器将不可纠正故障的故障地址保存至管理控制器的非易失性存储介质中。
在该实现方式中,通过将向管理控制器发送不可纠正故障的故障地址,并由管理控制器将不可纠正故障的故障地址保存至非易失存储介质中,从而实现永久保存该不可纠正故障的故障地址。这样,计算机设备重启后,CPU就可以从管理控制器获取到该不可纠正故障的故障地址,不必等到再次检测到不可纠正故障时,才能确定不可纠正故障的故障地址,有助于计算机设备重启后,在发生了不可纠正故障的数据被使用,对内存的不可纠正故障进行处理。
另一种可能的实现方式中,在计算机设备重启时,CPU从管理控制器获取第一内存地址,第一内存地址为内存的多个内存地址中发生过不可纠正故障的内存地址,第一内存地址包括不可纠正故障的故障地址;CPU基于内存的多个内存地址中的第二内存地址,确定待分配内存页,第二内存地址为内存的多个内存地址中未发生过不可纠正故障的内存地址;CPU将待分配内存页分配给当前正在运行的进程使用。
在该实现方式中,由于计算机设备重启后,重启之前对内存页的隔离操作会失效,换言之,重启之前被隔离的内存页会重新分配给进程使用。基于此,在计算机设备重启的情况下,CPU从管理控制器获取内存的多个内存地址中发生过不可纠正故障的内存地址(即第一内存地址),并基于内存的多个内存地址中未发生过不可纠正故障的内存地址(即第二内存地址),确定待分配内存页,这样,就能够避免待分配内存页指示的存储单元中存储有故障数据,从而也就避免了应用程序、操作系统使用内存中的故障数据,进而实现在计算机设备重启后,自动隔离内存的历史故障数据,避免了内存中的历史故障数据对计算机设备所运行的应用程序、操作系统的影响。相对于相关技术中,只要计算机设备重启,之前执行的隔离操作就会全部失效,本申请实施例有助于避免计算机设备重启后因历史故障数据所造成系统宕机、重启以及应用程序崩溃等问题,进而有助于提高计算机设备重启后的运行稳定性。
另一种可能的实现方式中,在计算机设备重启的情况下,CPU从管理控制器获取第一内存地址,包括:在计算机设备重启后,CPU运行BIOS的过程中,BIOS从管理控制器获取第一内存地址;CPU基于内存的多个内存地址中的第二内存地址,确定待分配内存页,包括:CPU运行BIOS的过程中,BIOS向OS上报内存的多个内存地址;CPU运行OS的过程中,OS基于内存的多个内存地址中的第二内存地址,确定待分配内存页。
该实现方式中,由于计算机设备重启后,CPU首先运行BIOS,因此,在CPU运行BIOS的过程中,BIOS从管理控制器获取第一内存地址(即内存的历史故障地址),并将内存的多个内存地址上报给OS,使得OS可以直接基于多个内存地址中的第二内存地址确定待分配内存页,这样,就可以将第一内存地址与待分配内存页隔离,从而避免待分配内存页所指示的内存的物理位置中存储故障数据。相对于基于第一内存地址确定内存页后,再对第一内存地址所属的内存地址隔离,操作更加简单。
另一种可能的实现方式中,第二内存地址的属性为可使用状态;CPU基于内存的多个内存地址中的第二内存地址,确定待分配内存页,包括:CPU将第一内存地址的属性设置为非可用状态;CPU基于属性为可用状态的第二内存地址,确定待分配内存页。
该实现方式中,提供了一种基于内存的第二内存地址确定内存页的具体方式。该方式中,通过将第一内存地址的属性设置为非可用状态,从而使得CPU基于属性为可用状态的第二内存地址确定内存页,从而将第一内存地址与待分配内存页隔离,使得待分配内存页所对应的内存地址不包括第一内存地址,确定过程简单、方便、准确性高。
另一种可能的实现方式中,CPU从管理控制器获取第一内存地址,包括:CPU向管理控制器发送获取请求;获取请求用于请求获取内存发生过不可纠正故障的内存地址;CPU接收管理控制器返回的第一内存地址。
该实现方式中,计算机设备重启后,CPU通过向管理控制器发送获取请求,以实现获取故障地址,实现过程简单、方便。
另一种可能的实现方式中,该方法还包括:CPU向管理控制器发送内存的当前配置信息;当前配置信息包括内存的内存条标识以及与内存条标识对应的内存插槽标识;其中,第一内存地址是管理控制器在确定第一对应关系与第二对应关系相同的情况下向CPU发送的,第一对应关系包括当前配置信息中的内存条标识与内存插槽标识之间的对应关系,第二对应关系包括历史配置信息中的内存条标识与内存插槽标识之间的对应关系。
该实现方式中,通过向管理控制器发送内存的当前配置信息,使得管理控制器可以在内存的当前配置信息与内存的历史配置信息相同的情况下,返回内存的历史故障地址(即第一内存地址),这样,有助于保证计算设备重启前,第一内存地址所指示的历史物理位置,与计算机设备重启后第一内存地址所指示的当前物理位置相同,进而有助于保证页隔离操作搜索隔离的故障数据的准确性。
第二方面,提供了一种内存故障处理方法,用于计算机设备的管理控制器,计算机设备还包括内存和中央处理器CPU,管理控制器中存储有CPU发送的内存的历史故障地址,历史故障地址指示的物理位置发生过不可纠正故障;该方法包括:在计算机设备重启的情况下,管理控制器接收CPU发送的获取请求;获取请求用于请求获取内存发生过不可纠正故障的内存地址;管理控制器响应于获取请求,向CPU返回内存的第一内存地址,以使CPU基于除第一内存地址之外的第二内存地址确定待分配内存页;第一内存地址包括内存的多个内存地址中发生过不可纠正故障的内存地址。
该方案中,计算机设备重启后,管理控制器响应于CPU的获取请求,向CPU返回第一内存地址,以使得CPU可以基于除第一内存地址之前的其他内存地址确定内存页,从而将历史故障地址与内存页隔离,这样,就可以避免内存页所指示的存储单元中存储有故障数据,从而也就避免了应用程序、操作系统使用内存中的故障数据,进而实现在计算机设备重启后,自动隔离内存的历史故障数据,避免了内存中的历史故障数据对计算机设备所运行的应用程序、操作系统的影响。相对于相关技术中,只要计算机设备重启,之前执行的隔离操作就会全部失效,本申请实施例有助于避免计算机设备重启后因历史故障数据所造成系统宕机、重启以及应用程序崩溃等问题,进而有助于提高计算机设备重启后的运行稳定性。
在一种可能的实现方式中,管理控制器响应于获取请求,向CPU返回第一内存地址,包括:管理控制器接收CPU发送的内存的当前配置信息;当前配置信息包括内存的内存条标识以及与内存条标识对应的内存插槽标识;若第一对应关系与第二对应关系相同,管理控制器向CPU返回第一内存地址;第一对应关系包括当前配置信息中的内存条标识与内存插槽标识之间的对应关系,第二对应关系包括历史配置信息中的内存条标识与内存插槽标识之间的对应关系。
该实现方式中,管理控制器接收CPU发送的内存的当前配置信息,并在当前配置信息与历史配置信息相同的情况下,向CPU返回第一内存地址,这样,有助于保证计算设备重启前,第一内存地址所指示的历史物理位置,与计算机设备重启后第一内存地址所指示的当前物理位置相同,进而有助于保证页隔离操作隔离故障数据的准确性。
第三方面,提供了一种内存故障处理装置,该装置包括:用于执行第一方面提供的任意一种方法的功能单元,各个功能单元所执行的动作通过硬件实现或通过硬件执行相应的软件实现。例如,内存故障处理装置可以包括:获取单元和处理单元;获取单元,用于在内存中的数据发生不可纠正故障的情况下,CPU获取不可纠正故障的故障信息;不可纠正故障的故障信息包括不可纠正故障对应的故障地址;处理单元,用于若故障地址所属的目标内存页为未使用状态,CPU对目标内存页执行页隔离操作;未使用状态是指目标内存页未分配给CPU当前运行的进程使用。
第四方面,提供了另一种内存故障处理装置,该装置包括:用于执行第二方面提供的任意一种方法的功能单元,各个功能单元所执行的动作通过硬件实现或通过硬件执行相应的软件实现。例如,该内存处理装置可以包括:接收单元和发送单元;接收单元,用于在计算机设备重启的情况下,管理控制器接收CPU发送的获取请求;获取请求用于请求获取内存发生过不可纠正故障的内存地址;发送单元,用于管理控制器响应于获取请求,向CPU返回内存的第一内存地址,以使CPU基于除第一内存地址之外的第二内存地址确定待分配内存页;第一内存地址包括内存的多个内存地址中发生过不可纠正故障的内存地址。
第五方面,提供了一种计算机设备,包括:包括:处理器和存储器,处理器与存储器连接。存储器用于存储计算机执行指令,处理器执行存储器存储的计算机执行指令,从而实现第一方面提供的任意一种方法,或者,实现第二方面提供的任意一种方法。
第六方面,提供了一种芯片,芯片包括:处理器和接口电路;接口电路,用于接收代码指令并传输至处理器;处理器,用于运行代码指令以执行上述第一方面提供的任意一种方法,或者,执行上述第二方面提供的任意一种方法。
第七方面,提供了一种计算机可读存储介质,存储有计算机执行指令,当计算机执行指令在计算机上运行时,使得计算机执行上述第一方面提供的任意一种方法,或者,执行上第二方面提供的任意一种方法。
第八方面,提供了一种计算机程序产品,包括计算机执行指令,当计算机执行指令在计算机上运行时,使得计算机执行上述第一方面提供的任意一种方法,或者,执行上述第二方面提供的任意一种方法。
其中,第三方面至第八方面中任一种实现方式所带来的技术效果可参见第一方面中不同实现方式所带来的技术效果,此处不再赘述。
附图说明
图1为本申请实施例提供的一种计算机设备的系统架构图;
图2为本申请实施例提供的一种内存的结构示意图;
图3为本申请实施例提供的一种内存故障处理方法的流程图;
图4为本申请实施例提供的一种内存故障处理原理图;
图5为本申请实施例提供的另一种内存故障处理方法的流程图;
图6为本申请实施例提供的另一种内存故障处理原理图;
图7为本申请实施例提供的一种内存故障处理装置的示意图;
图8为本申请实施例提供的另一种内存故障处理装置的示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
其中,在本申请的描述中,除非另有说明,“/”表示前后关联的对象是一种“或”的关系,例如,A/B可以表示A或B;本申请中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况,其中A,B可以是单数或者复数。
并且,在本申请的描述中,除非另有说明,“多个”是指两个或多于两个。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。
另外,为了便于清楚描述本申请实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。同时,在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念,便于理解。
首先,对本申请实施例的应用场景进行示例性介绍。
随着内存架构演进,为了在同样面积硅片中放入更多存储单元,并进行更快速度的读写,内存的制程越来越小,工作频率越来越高。为控制发热,内存的工作电压被迫不断降低,使内存介质本身的可靠性不断降低,失效率越来越高。这些因素,导致内存故障已经成为计算机设备领域最普遍的故障源之一。
其中,内存故障还可以分为硬件故障和数据故障,硬件故障是指内存的硬件发生了故障,数据故障是指内存中存储的数据发生了故障,该发生了故障的数据也称为故障数据。相关技术中,在检测到内存中存在故障数据、且故障级别为不可纠正故障(uncorrectable error,UCE)时,会将该故障数据打上中毒(Poison)标签。之后,在该故障数据正在被使用时,触发机械检查错误(machine check error,MCERR)中断信号,使得计算机设备执行MCERR Handle(句柄)处理程序,以对故障数据进行处理。具体地,若该故障数据被内核态进程使用,则会导致内核错误,引起操作系统崩溃,造成系统宕机或重启。若该故障数据被用户态进程使用,则会终止(kill)该用户态进程,这时,若该用户态进程属于应用程序,则会导致应用程序崩溃,若该用户态进程属于操作系统,则会导致操作系统崩溃。
可见,这种故障处理方式下,应用程序、操作系统会由于使用了故障数据而发生崩溃,严重影响了计算机设备的运行稳定性。
有鉴于此,本申请实施例提供了一种内存故障处理方法,在内存中的数据发生不可纠正故障后,CPU获取该不可纠正故障的故障信息,该故障信息包不可纠正故障对应的故障地址,若故障信息包括的故障地址所对应的目标内存页为未使用状态,则CPU对目标内存页执行页隔离操作,这样,该目标内存页将不会分配给任何进程使用,从而也就避免了应用程序、操作系统使用目标内存页对应的内存地址中的数据,换言之,避免了应用程序、操作系统使用内存中发生了不可纠正故障的数据。可见,由于在内存中发生了不可纠正故障的数据被使用之前就被隔离了,因此,有效减少了内存中的故障数据对计算机设备所运行的应用程序、操作系统的影响,这样,有助于避免造成系统宕机、重启以及应用程序崩溃等问题,进而有助于提高计算机设备的运行稳定性。
其次,对本申请实施例的系统架构进行示例性介绍。
如图1所示,为本申请实施例提供的计算机设备的架构图。
在硬件方面,该计算机设备包括内存、内存控制器和中央处理器(centralprocessing unit,CPU)。其中,CPU通过内存控制器与内存通信连接,内存控制器用于控制内存以及负责内存和CPU之间的数据交换。
示例性的,内存控制器可以集成于CPU的基板上。或者,内存控制器也可以设置于计算机设备的北桥芯片内。
需要说明的,本申请实施例对内存控制器的设置位置不做限制,以下,仅以内存控制器集成于CPU的基板上为例,对本申请实施例进行示例性说明。
可选地,CPU故障寄存器。该故障寄存器与内存控制器连接,用于保存内存的故障信息,设置于CPU内部。
在本申请实施例中,内存控制器包括控制固件(Firmware),控制固件用于对内存中存储的数据进行检错/纠错,并在检测到内存故障时,如,读内存中的数据时检测到数据错误、向内存写回数据时检测到数据错误等,将内存的故障信息记录在故障寄存器中等。
可选地,该计算机设备该包括管理控制器。该管理控制器包括非易失性存储介质,非易失性存储介质用于存储不可纠正故障的故障地址。
管理控制器,完全独立于计算机设备的CPU之外,通过计算机设备的带外管理接口与中央处理器进行通信。并且,通过专用的数据通道对计算机设备进行远程维护和管理。
示例性的,管理控制器可以是计算机设备外部的监控管理单元、处理器外的管理芯片中的管理系统、基板管理控制器(baseboard management controller,BMC)、系统管理模块(systemmanagement mode,SMM)中的一个。需要说明的,本申请实施例对管理控制器的具体形式并不限定,以上仅为示例性说明。在下述实施例中,以管理控制器为BMC为例进行说明。
需要说明的是,不同计算机设备对BMC有不同的称呼,例如,一些计算机设备称为BMC,一些计算机设备称为iLO,另一计算机设备称为iDRAC。不论是叫BMC,还是叫iLO或iDRAC,都可以理解为是本申请实施例中的BMC。
在本申请实施例中,管理控制器包括管理固件(Firmware),管理固件用于将内存的故障信息存储至非易失存储介质等,以及响应于处理器固件发送的获取请求,向处理器固件返回内存的历史故障地址等。
需要说明的,关于处理器固件的相关说明,将在后续进行说明,此处不再赘述。
在软件方面,该计算机设备包括操作系统(operating system,OS)和处理器固件。其中,OS和处理器固件由CPU运行。
示例性的,处理器固件(也称为处理器固件程序)可以为Firmware、基本输入输出系统(basic input output system,BIOS)、管理引擎(management engine,ME)、微码或智能管理单元(intelligent management unit,IMU)等固件。需要说明的,本申请实施例对处理器固件的具体形式并不限定,以上仅为示例性说明。在下述实施例中,以处理器固件为BIOS为例进行说明。
在本申请实施例中,BIOS,用于响应系统管理中断(system managementinterrupt,SMI)信号,从故障寄存器获取故障信息,并将获取到的故障信息发送给OS,以及在计算机设备重启的情况下,从BMC获取历史故障地址,并将历史故障地址的属性设置为不可用状态等。
在本申请实施例中,OS,用于接收BIOS发送的不可纠正故障的故障信息,并对故障信息中的故障地址指示的内存页执行隔离操作。
如图2所示,为图1所示的内存的结构示意图。以下,结合图2,对本申请实施例中的内存进行示例性介绍。
可选地,内存可以是单边接触内存模组(single in-line memory module,SIMM)、双列直插式存储模块(dual-inline-memory-modules,DIMM)、小外形双列直插式内存模块(small outline dual in-line memory module,SO-DIMM)、全缓冲内存模组(fullybuffered-DIMM,FB-DIMM)等。需要说明的,本申请实施例对内存的具体形式并不限定,以上仅为示例性说明。在下述实施例中,以内存为DIMM为例进行说明。
参见图2,内存具有至少一个内存列(Rank),如内存列0、内存列1。每个内存列分别位于内存的一个面上,每个内存列包括一个或多个内存芯片(Device),如内存芯片00和内存芯片01等。每个内存芯片被划分为多个存储阵列组(BankGroup),每个存储阵列组包括多个存储阵列(Bank),如存储阵列0、存储阵列1等。每个存储阵列被划分为多个存储单元(Ccell),每个存储单元具有一个内存行(Row)地址和一个内存列(Column)地址,每个存储单元包括一个或多个比特位(图2中未示出)。
在一种划分方式中,内存从上级至下级可以依次划分为内存芯片、存储阵列组、存储阵列,存储行/存储列、存储单元。
在另一种划分方式中,CPU基于分页机制将内存划分为多个内存页(page),一个内存页对应一个内存的多个存储单元。其中,内存页的地址为虚拟地址,虚拟地址需要转换后才会变为真实的物理地址。
以下,对本申请涉及的关键技术和术语进行简要介绍。
内存故障,内存故障按照故障级别可以分为可纠正故障(correctable error,CE)和不可纠正故障。其中,CE是计算机设备可以纠正的,不会影响系统的正常运行。UCE是计算机设备无法纠正的,通常会导致系统异常,如系统宕机、重启等。
可纠正故障可以包括:
巡检可纠正故障(CE patrol error):发生在未被使用的内存页,是被处理器的巡检引擎发现的内存可纠正故障。
读写可纠正故障(CE read/write error):发生在系统正在使用的内存页。
搬移可纠正故障(CE sparing error):发生在触发硬件颗粒(即内存芯片)搬移之后,例如,BIOS使用自适应双颗粒数据纠正(adaptive double device data correction,ADDDC)功能后发生的故障。
镜像回写失败故障(mirrorscrub failover error):是使能了内存镜像功能后,通过回写机制无法纠正,但能使用镜像数据保证BIOS层正常向OS层上报故障信息的故障。
镜像回写成功故障(mirrorscrub error):是使能了内存镜像功能后,通过回写机制纠正成功的错误,BIOS可以成功向OS上报该故障的故障信息。
不可纠正故障可以包括:
不需要处理(uncorrected non action,UCNA)故障:是可以暂不处理的不可纠正故障。示例性的,内存控制器在检测到从内存中读取到高速缓冲(Cache)存储器中的数据存在故障时,如,内存的存储单元中读出的数据与之前写入该存储单元中的数据不一致,则会将此类故障记为UCNA故障。
选择处理(software recoverable action optional,SRAO)故障:是可以自行选择是否需要处理的不可纠正故障。示例性的,CPU通过巡检机制检测到内存中的数据发生了不可纠正故障,或检测到Cache存储器中存在不可纠正故障的数据被写回到内存中时,则会将此类故障记为SRAO故障。
突发致命故障(fatal error):是由于内存实体硬件故障造成系统宕机的不可纠正故障。
基于上述,可以理解的,不可纠正故障中,UCNA故障、SRAO为数据故障,而突发致命故障为硬件故障。
系统管理中断(system management interrupt,SMI):是服务器中的最高优先级的中断,无法被屏蔽。系统管理中断被触发后,CPU进入系统管理模式(system managementmode,SMM),并执行SMI所指示的中断处理程序。
系统管理模式:是英特尔(Intel)x86体系结构的一种CPU执行模式。目前,系统管理模式只能通过系统管理中断进入。在系统管理模式下,其他经过CPU的操作都被屏蔽。此时,操作OS处于一种“被冻住”的状态,其他所有中断都无法处理。
需要说明的,本申请实施例描述的系统架构以及应用场景是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域普通技术人员可知,随着系统架构的演变和新应用场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
为了便于理解,以下结合附图对本申请提供的内存故障处理方法进行示例性介绍。该方法适用于图1所示的计算机设备以及图2所示的内存。
本申请以下实施例将分成两部分对内存故障处理方法的方案进行示例性介绍。
第一部分,结合图3至图4,介绍内存发生不可纠正故障时,CPU对内存的故障地址所对应的目标内存页执行页隔离操作的过程。
第二部分,结合图5至图6,介绍计算机设备重启时,CPU对内存的历史故障地址进行隔离的过程。
图3是根据一示例性实施例示出的一种内存故障处理方法的流程图。示例性的,该方法包括S301-S308。
S301:内存控制器检测到内存中的数据发生故障时,将该故障的故障信息写入故障寄存器中。
内存包括多个存储单元,该多个存储单元包括目标存储单元,内存控制器将目标数据写入目标存储单元中。其中,目标存储单元可以为多个存储单元中的任意一个存储单元。
以下,以目标存储单元为例,对如何检测内存中的数据发生故障进行示例性介绍。
在一些实施例中,在需要使用目标存储单元中的数据时,内存控制器从目标存储单元中读取数据,若读取的数据与之前写入目标存储单元中的目标数据不同,则确定目标存储单元中的数据发生了故障。
在另一些实施例中,在需要使用目标存储单元中的数据时,内存控制器将目标存储单元中的目标数据读取至Cache中进行缓存。之后,在Cache中需要缓存其他数据时,内存控制器需要先将Cache中的数据写回目标存储单元,若从Cache中写回目标存储单元的数据与之前写入Cache中的目标数据不同,则确定目标存储单元中的数据发生了故障。
在又一些实施例中,内存控制器基于巡检机制对目标存储单元进行巡检时,若检测到目标存储单元当前存储的数据与之前写入目标存储单元中的目标数据不同,则确定目标存储单元中的数据发生了故障。
可选地,故障信息包括故障地址,用于指示发生故障的数据所在的存储单元。
示例性的,故障地址包括处理器标识(CPU ID)、通道标识(Channel ID)、内存条标识(Dimm ID)、内存列标识(Rank ID)、子内存列标识(SubRank ID)、内存芯片标识(DeviceID)、存储阵列组标识(BankGruop ID)、存储阵列标识(Bank ID)、行(Row ID)标识、列(Column ID)标识等。
可选地,故障信息包括故障级别,故障级别包括不可纠正故障或可纠正故障。
可选地,故障信息包括故障类型,故障类型包括不需要处理UCNA错误、选择处理SRAO错误、巡检可纠正故障或读写可纠正故障等。
可选地,故障信息包括故障码,用于指示故障形态。其中,故障形态包括数据故障。
示例性,故障码指示了从内存中读数据时发现故障、向内存写回数据时发现故障或巡检内存时发现故障等,基于此,故障形态为数据故障。
可选地,故障信息中的不同内容(如故障地址、故障码、故障级别、故障类型等)存储于故障寄存器的不同比特位。换言之,故障寄存器中的不同比特位中存储的内容指示了故障信息中的不同内容。
示例性的,故障寄存器包括多个比特位。其中,多个比特位包括第一比特位,第一比特位中存储的内容用于指示故障地址。多个比特为还包括第二比特位,第二比特位中存储的内容用于指示故障类型。多个比特位还包括第三比特位,第三比特位用于指示故障级别。多个比特位还包括第四比特位,第四比特位中存储的内容用于指示故障码。
S302:内存控制器触发SMI信号,以指示CPU执行目标操作。
其中,目标操作包括以下S304-S306。
内存控制器检测到内存中的数据发生故障后,将故障信息写入故障寄存器。之后,内存控制器触发SMI信号,以指示CPU执行目标操作,从而将故障信息上报给CPU。
S303:CPU响应SMI信号,执行目标操作。
在一些实施例中,CPU响应SMI信号,进入SMM。在SMM下,CPU运行BIOS,并由BIOS执行目标操作。
示例性的,计算机设备中包括与SMI信号对应的中断处理程序,该中断处理程序指示了目标操作。CPU进入SMM后,BIOS调用中断处理程序,从而实现执行目标操作。
S304:CPU从故障寄存器获取故障信息,该故障信息包括故障地址和故障级别。
如图4所示,为一种内存故障处理方法的原理图。
参见图4,S304的实现过程包括:BIOS从故障寄存器中获取故障信息。
S305:CPU判断故障级别是否为不可纠正故障。
若判断结果为是,则执行S306。若判断结果为否,则结束或者执行第一操作。
参见图4,S305的实现过程包括:BIOS判断故障级别是否为不可纠正故障,若判断结果为是,则BIOS执行S306或通过高级配置和电源管理接口(advanced configurationand power management interface,ACPI)向OS上报故障信息,若判断结果为否,也即,故障级别为可纠正故障,则结束或执行第一操作。
示例性的,第一操作可以是相关技术中对可纠正故障所执行的操作。
(可选地)S306:CPU判断故障类型是否为UCNA故障或SRAO故障。
若判断结果为是,则执行S307。若判断结果为否,则结束或执行第二操作。
需要说明的,S306为可选步骤。换言之,在S305的判断结果为是时,CPU也可以跳过S306,直接执行S307。
参见图4,S306的实现过程包括:BIOS判断故障信息包括的故障类型是否为不需要处理UCNA故障或选择处理SRAO故障,若判断结果为是,则BIOS通过ACPI向OS上报故障信息。若判断结果为否,则结束或执行第二操作。
示例性的,第二操作可以是相关技术中对不需要处理UCNA故障或选择处理SRAO故障之外的其他不可纠正故障(如上述的突发致命故障)所执行的操作。
可选地,BIOS还可以向OS上报故障源。其中,故障源包括部件标识。其中,该部件标识为故障信息所属部件的标识信息。示例性的,若故障信息为内存发生故障时得到的信息,换言之,故障信息属于内存,则故障源所包括的部件标识为内存的标识。
由于计算机设备上的部件发生故障后,通常先由BIOS获取该发生故障的部件的故障信息。BIOS获取计算机设备上的大部分部件的故障信息后,都会上报给OS,因此,通过为上报给OS的故障信息中配置故障源,使得OS可以确定接收到的故障信息所属的部件是否为内存,这样,有助于保证OS所执行的隔离操作的准确性,避免故障源为其他部件时,对目标内存页执行页隔离操作。
需要说明的,BIOS可以同时向OS上报故障信息和故障源,或者,也可以是分开上报故障信息和故障源,本申请实施例不做限制。
其中,BIOS向OS上报故障信息之后,退出SMM,CPU由运行BIOS切换为运行OS。
在一些实施例,BIOS向OS上报的故障信息的内容,与BIOS从故障寄存器获取的故障信息的内容部分相同,例如,BIOS从故障寄存器获取的故障信息包括故障级别、故障地址和故障类型,而BIOS向OS上报的故障信息可以包括故障级别和故障地址,而不包括故障类型。换言之,BIOS可以向OS上报故障信息中的故障地址,或者,BIOS还可以向OS上报故障信息中故障地址和故障级别。
需要说明的,BIOS向OS上报的故障信息的内容,也可以与BIOS从故障寄存器获取的故障信息的内容完全相同,本申请实施例对此不做限制。
需要说明的,S301-S306可以认为是“在内存中的数据发生不可纠正故障的情况下,CPU获取不可纠正故障的故障信息,不可纠正故障的故障信息包括不可纠正故障对应的故障地址”的一种实现方式。
S307:CPU判断故障地址所属的目标内存页是否为未使用状态。
若判断结果为是,则执行S308,若判断结果为否,则结束或执行第三操作。
示例性的,第三操作可以是相关技术中对处于使用状态的内存页所执行操作,如,终止(kill)使用故障数据(即目标内存页指示的物理位置上存储的数据)的进程等。
其中,未使用状态是指目标内存页未分配给CPU当前运行的进程使用。
可以理解的,CPU运行进程的过程中,若该进程需要使用内存中的目标数据,则CPU会将目标数据所属的目标内存页分配给进程使用,这种被分配给CPU当前运行的进程使用的内存页处于使用状态,反之,未分配给CPU当前运行的进程使用的内存页处于未使用状态。
可选地,计算机设备中存储有内存页与内存地址之间的映射关系。由于一个内存页由内存的多个存储单元组成,因此,一个内存页与该内存页所包括的多个存储单元之间具有对应关系,其中,一个内存地址为一个存储单元在内存中的物理地址,换言之,一个内存页对应多个内存地址,而一个内存地址仅属于一个内存页。基于该映射关系,可以确定故障地址所属的内存页(即该故障地址所指示的存储单元所属的内存页)。
参见图4,S307的实现过程包括:OS获取BIOS上报的故障信息后,判断该上报的故障信息包括的故障级别是否为不可纠正故障,若判断结果为是,则判断上报的故障信息包括的故障地址所对应的目标内存页是否为未使用状态,若判断结果为否,则结束或执行第三操作。
该实施例中,由于内存发生可纠正故障或不可纠正故障后,首先由BIOS获取内存的故障信息。之后,BIOS会将获取到的故障信息上报给OS。换言之,BIOS不仅会向OS上报不可纠正故障的故障信息,也会向OS上报可纠正故障的故障信息,因此,通过设置上报的故障信息包括的故障级别,且OS在获取BIOS上报的故障信息后,判断故障级别是否为不可纠正故障,以及故障地址所对应的目标内存页是否为未使用状态,有助于保证对OS目标内存页所执行的隔离操作的可靠性,避免OS对可纠正故障的故障信息所指示的内存页执行隔离操作,造成不必要的存储资源浪费。
可选地,S307包括:若故障信息所属的故障源为内存,则CPU判断故障地址所属的目标内存页是否为未使用状态。
基于上述,由于CPU会获取计算机设备上大部分部件的故障信息,因此,通过设置故障信息所属的故障源为内存时,判断故障地址所属的目标内存页是否为未使用状态,能够避免在故障信息不属于内存时判断目标内存页的使用状态,有助于避免在执行无效的判断操作。此外,这样,还有助于保证OS所执行的隔离操作的准确性,避免故障源为其他部件时,对目标内存页执行页隔离操作。
S308:CPU对目标内存页执行页隔离操作。
在一些实施例中,对目标内存页执行页隔离操作,可以是为目标内存页设置内存页故障(HW Poison)标记,该目标内存页故障标记用于指示目标内存页存在不可纠正故障,换言之,该目标内存页不可以使用。
参见图4,S308的实现过程包括:OS为目标内存页设置内存页故障标记。
基于此,由于OS会将未设置内存页故障标记的内存页分配给进程使用,因此,在为目标内存页设置内存页故障标记后,该目标内存页将不会分配给任何进程出去,从而实现将该目标内存页与应用程序、操作系统的进程隔离,进而避免应用程序、操作系统使用目标内存页对应的内存地址中存储的数据,换言之,避免了应用程序、操作系统等使用内存中的故障数据。
上述实施例中,在内存中的数据发生不可纠正故障后,CPU获取该不可纠正故障的故障信息,该故障信息包不可纠正故障对应的故障地址,若故障地址所属的目标内存页为未使用状态,则CPU对目标内存页执行页隔离操作,这样,该目标内存页将不会分配给任何进程使用,从而也就避免了应用程序、操作系统使用目标内存页对应的内存地址中的数据,换言之,避免了应用程序、操作系统使用内存中发生了不可纠正故障的数据。可见,由于在内存中发生了不可纠正故障的数据被使用之前就被隔离了,因此,有效减少了内存中的故障数据对计算机设备所运行的应用程序、操作系统的影响,这样,有助于避免造成系统宕机、重启以及应用程序崩溃等问题,进而有助于提高计算机设备的运行稳定性。
另外,由于可纠正故障对计算机设备的影响较小,因此,通过设置故障级别为不可纠正故障时对目标内存页执行页隔离操作,有助于提高页隔离操作的针对性和必要性。
以下,结合图5至图6,介绍本申请实施例的第二部分。
图5是根据一示例性实施例示出的另一种内存故障处理方法的流程图。示例性的,该方法包括S501-S510。
S501:CPU向管理控制器发送不可纠正故障对应的故障地址。
参见图6,在S301-S306的基础上,S501的实现过程包括:在S305的判断结果为是的情况下,或S306的判断结果为是的情况下,BIOS向管理固件(即管理控制器的固件)发送不可纠正故障对应的故障地址。
S502:管理控制器接收CPU发送的故障地址,并将故障地址存储在管理控制器的非易失性存储介质中。
参见图6,S502的实现过程包括:管理固件接收BIOS发送的故障地址,并将故障地址保存在非易失性存储介质中,以实现永久保存该不可纠正故障的故障地址。
(可选地)S503:在计算机设备重启的情况下,CPU向管理控制器发送内存的当前配置信息。
参见图6,S503的实现过程包括:计算机设备启动后,CPU首先运行BIOS,BIOS向管理固件发送内存的当前配置信息。
其中,当前配置信息包括内存的内存条标识以及与内存条标识对应的内存插槽标识。
在一些实施例中,计算机设备重启后,BIOS对内存进行初始化配置,例如,确定内存的内存条以及内存条标识对应的内存插槽标识等。之后,BIOS基于内存的初始化配置信息,确定内存的多个内存地址,该多个内存地址指示了内存上的多个存储单元。
可以理解的,该多个内存地址通常为内存的全部内存地址。另外,内存地址为物理地址,内存地址的具体形式可以参考上述S301中的故障地址的形式,此处不再赘述。
(可选地)S504:管理控制器接收CPU发送的内存的当前配置信息。
参见图6,S504的实现过程包括:管理固件接收BIOS发送的内存的当前配置信息。
S505:CPU向管理控制器发送获取请求。
其中,获取请求用于请求获取内存上发生过不可纠正故障的内存地址。
参见图6,S505的实现过程包括:CPU运行BIOS的过程中,BIOS向管理固件发送获取请求,以请求获取内存上发生过不可纠正故障的内存地址,也即,内存上的历史故障地址。
(可选地)S506:管理控制器判断内存的当前配置信息与历史配置信息是否相同。
若判断结果为是,则执行S507。若判断结果为否,则结束或返回空值。
参见图6,S506的实现过程包括:管理固件判断内存的当前配置信息与历史配置信息是否相同。
管理控制器中预先存储有计算机设备上一次启动时,BIOS所发送的内存的配置信息(即历史配置信息)。基于此,在接收到获取请求后,管理固件判断内存的当前配置信息(即计算机设备本次启动时,BIOS所发送内存的配置信息)与历史配置信息是否相同,若相同,则说明计算机设备的内存配置未发生变化,也即,内存条未被更换,且内存条在内存插槽上的位置也未发生变化,基于此,可以确定不可纠正故障的故障地址所指示的物理位置未发生变化。若不同,则说明计算机设备的内存配置发生了变化,即不可纠正故障的故障地址所指示的物理位置发生了变化,这样,该不可纠正故障的故障地址所指示的物理位置便不再是内存上发生过不可纠正故障的物理位置。
示例性的,当前配置信息与历史配置信息相同,包括:当前配置信息中内存插槽与内存条之间的第一对应关系与历史配置信息中的内存插槽与内存条之间的第二对应关系相同。
可以理解的,内存插槽与内存条的对应关系未发生变化,说明计算机设备的内存条未增加、也未减少、且内存条的位置也未发生变化,基于此,可以确定,故障地址所指示的物理位置在计算机设备重启前后,也未发生变化。
在一些实施例中,若判断结果为否,则管理控制器删除非易失性存储介质中的故障地址。
可以理解的,由于判断结果为否时,说明计算机设备上的内存条与内存插槽之间的对应关系已发生变化,此时,故障地址已无法准确指示当前内存上发生故障的物理位置,因此,通过删除非易失性存储介质的故障数据,有助于避免占用非易失存储介质的存储空间。
S507:管理控制器响应于获取请求,向CPU返回第一内存地址。
其中,第一内存地址为内存的多个内存地址中发生过不可纠正故障的内存地址。
其中,第一内存地址包括不可纠正故障对应的故障地址。
参见图6,S507的实现过程包括:管理固件响应获取请求,向BIOS返回第一内存地址。
S508:CPU接收管理控制器返回的第一内存地址。
其中,S508的实现过程包括:BIOS接收管理固件发送的第一内存地址。
S509:CPU基于多个内存地址中除第一内存地址之外的第二内存地址,确定待分配内存页。
其中,第二内存地址为多个内存地址中未发生过不可纠正故障的内存地址,换言之,第二内存地址是内存上未发生过不可纠正故障的物理位置的内存地址。
在一些实施例中,计算机设备重启以后,BIOS确定的多个内存地址,该多个地址包括第一内存地址,也即,内存上发生过不可纠正故障的物理位置的内存地址。CPU在获取到第一内存地址后,可以从多个内存地址中确定第二内存地址(即多个内存地址中除第一内存地址之外的内存地址),并基于第二地址确定内存页。
由于内存页是基于第二内存地址确定的,而第二内存地址所指示的存储单元中所存储的数据未发生过不可纠正故障,因此,内存页所指示的存储单元未存储有故障数据,因此,CPU运行的进程使用内存页时,也不会使用到内存中的故障数据。
其中,S509的实现过程包括:CPU运行BIOS的过程中,BIOS向OS上报多个内存地址;CPU运行OS的过程中,OS获取BIOS上报的多个内存地址,并基于多个内存地址中的第二内存地址,确定待分配内存页。
示例性的,多个内存地址包括内存地址1、内存地址2和内存地址3,其中,内存地址3为第一内存地址,换言之,内存地址3中存储的数据发生了不可纠正故障。在此基础上,OS基于第二内存地址(即内存地址1、内存地址2),确定待分配内存页。
可选地,S509包括以下S509a-S509b。
S509a:CPU将第一内存地址的属性设置为非可用状态。
参见图6,S509a的实现过程包括:CPU运行BIOS的过程中,BIOS将第一内存地址的属性的设置为非可用状态。
BIOS将第一内存地址的属性的设置为非可用状态,将内存的多个内存地址以及多个内存地址中每个内存地址的属性上报给OS。
需要说明的,内存地址的初始属性为可用状态,也即,第二内存地址的属性为可用状态。
基于此,内存的多个内存地址包括第一内存地址和第二内存地址。其中,第一内存地址是发生过不可纠正故障的物理位置的内存地址,第一内存地址的属性为非可用状态。第二内存地址是未发生过不可纠正故障的物理位置的内存地址,第二内存地址的属性为可用状态。
S509b:CPU基于属性为可用状态的内存地址,确定待分配内存页。
参见图6,S509b的实现过程包括:CPU运行OS的过程中,OS接收BIOS上报的多个内存地址以及多个内存地址中每个内存地址的属性,并基于属性为可用状态的内存地址,确定待分配内存页。
由于OS基于属性为可用状态的内存地址确定待分配内存页,而第一内存地址的属性为非可用状态,因此,待分配内存页所对应的内存地址为第二内存地址。
需要说明的,基于内存地址,确定待分配内存页的实现过程,可以参考相关技术中确定待分配内存页的过程,此处不再赘述。
S510:CPU将待分配内存页分配给当前正在运行的进程使用。
由于相关技术中计算机设备重启后,重启之前对内存页的隔离操作会失效,换言之,重启之前被隔离的内存页会重新分配给进程使用。基于此,在上述实施例中,将第一内存地址(即内存的多个内存地址中发生过不可纠正故障的内存地址)永久保存在管理控制器的非易失性存储介质中,在计算机设备重启的情况下,CPU从管理控制器获取内存的多个内存地址中发生过不可纠正故障的内存地址(即第一内存地址),并基于多个内存地址中除第一内存地址之外的第二地址确定内存页,这样,就可以将第一内存地址与待分配内存页隔离,从而避免待分配内存页所指示的存储单元中存储有故障数据,从而也就避免了应用程序、操作系统使用内存中的故障数据,进而实现在计算机设备重启后,自动隔离内存的历史故障数据,避免了内存中的历史故障数据对计算机设备所运行的应用程序、操作系统的影响。
相对于相关技术中,只要计算机设备重启,之前执行的隔离操作就会全部失效,本申请实施例有助于避免计算机设备重启后因历史故障数据所造成系统宕机、重启以及应用程序崩溃等问题,进而有助于提高计算机设备重启后的运行稳定性。
上述主要从方法的角度对本申请实施例提供的方案进行了介绍。为了实现上述功能,内存故障处理装置包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法,示例性的对内存故障处理装置进行功能模块的划分,例如,内存故障处理装置可以包括对应各个功能划分的各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
示例性的,图7示出了上述实施例中所涉及的一种内存故障处理装置(记为内存故障处理装置700)的一种可能的结构示意图,该内存故障处理装置700包括获取单元701和处理单元702。获取单元701,用于在内存中的数据发生不可纠正故障的情况下,获取不可纠正故障的故障信息;不可纠正故障的故障信息包括不可纠正故障对应的故障地址。例如,图3所示的S301-S304。处理单元702,用于若故障地址所属的目标内存页为未使用状态,对目标内存页执行页隔离操作;未使用状态是指目标内存页未分配给CPU当前运行的进程使用。例如,图3所示的S305-S308。
可选地,处理单元702具体用于:若故障类型为不需要处理UCNA故障或选择处理SRAO故障、且故障地址所对应的目标内存页为未使用状态,对目标内存页执行页隔离操作。
可选地,计算机设备还包括内存控制器;获取单元701具体用于:CPU运行OS的过程中,响应于内存控制器发送的系统管理中断SMI信号,执行目标操作:控制CPU由运行OS切换至运行BIOS,并获取不可纠正故障的故障信息;处理单元702还用于:向OS上报不可纠正故障的故障信息,上报的不可纠正故障的故障信息用于指示OS基于该上报的不可纠正故障的故障信息执行页隔离操作;其中,SMI信号是内存控制器在检测到内存中的数据发生不可纠正故障的情况下触发的。
可选地,故障信息还包括故障类型;处理单元702具体用于:若且故障类型为UCNA故障或SRAO故障,向OS上报不可纠正故障的故障信息。
可选地,处理单元702具体用于:CPU运行OS的过程中,响应于上报的不可纠正故障的故障信息,若上报的不可纠正故障的故障信息包括的故障地址所属的目标内存页为未使用状态,对目标内存页执行页隔离操作。
可选地,计算机设备还包括管理控制器;处理单元702还用于:向管理控制器发送不可纠正故障对应的故障地址,以使管理控制器将不可纠正故障对应的故障地址保存至管理控制器的非易失性存储介质中。
可选地,处理单元702还用于:在计算机设备重启的情况下,从管理控制器获取第一内存地址,第一内存地址为内存的多个内存地址中发生过不可纠正故障的内存地址;CPU基于多个内存地址中除第一内存地址之外的第二内存地址,确定待分配内存页;将待分配内存页分配给CPU当前正在运行的进程使用。
可选地,第二内存的属性为可使用状态;处理单元702具体用于:CPU将第一内存地址的属性设置为非可用状态;CPU基于属性为可用状态的第二内存地址,确定待分配内存页。
可选地,处理单元702具体用于:计算机设备重启后,在CPU运行BIOS的过程中,从管理控制器获取第一内存地址;处理单元702具体用于:在计算机设备重启的情况下,CPU运行BIOS的过程中,向OS上报多个内存地址;CPU运行OS的过程中,基于多个内存地址中除第一内存地址之外的第二内存地址,确定待分配内存页。
可选地,处理单元702具体用于:向管理控制器发送获取请求;获取请求用于请求获取内存发生过不可纠正故障的内存地址;接收管理控制器返回的第一内存地址。
可选地,处理单元702具体用于:向管理控制器发送内存的当前配置信息;当前配置信息包括内存的内存条标识以及与内存条标识对应的内存插槽标识;其中,第一内存地址是管理控制器在确定第一对应关系与第二对应关系相同的情况下向CPU发送的,第一对应关系包括当前配置信息中的内存条标识与内存插槽标识之间的对应关系,第二对应关系包括历史配置信息中的内存条标识与内存插槽标识之间的对应关系。
关于上述可选方式的具体描述可以参见前述的方法实施例,此处不再赘述。此外,上述提供的任一种内存故障处理装置700的解释以及有益效果的描述均可参考上述对应的方法实施例,不再赘述。
示例性的,图8示出了上述实施例中所涉及的另一种内存故障处理装置(记为内存故障处理装置800)的一种可能的结构示意图,该内存故障处理装置800包括接收单元801和发送单元802。接收单元801,用于在计算机设备重启的情况下,接收CPU发送的获取请求;获取请求用于请求获取内存发生过不可纠正故障的内存地址。例如,图5所示的S505。发送单元802,用于响应于获取请求,向CPU返回内存的第一内存地址,以使CPU基于第一内存地址之外的其他内存地址确定内存页;第一内存地址包括不可纠正故障的故障地址。例如,图5所示的S507。
可选地,接收单元801还用于:接收CPU发送的内存的当前配置信息;当前配置信息包括内存的内存条标识以及与内存条标识对应的内存插槽标识;发送单元802具体用于:若第一对应关系与第二对应关系相同,向CPU返回第一内存地址;第一对应关系包括当前配置信息中的内存条标识与内存插槽标识之间的对应关系,第二对应关系包括历史配置信息中的内存条标识与内存插槽标识之间的对应关系。
关于上述可选方式的具体描述可以参见前述的方法实施例,此处不再赘述。此外,上述提供的任一种内存故障处理装置800的解释以及有益效果的描述均可参考上述对应的方法实施例,不再赘述。
本申请实施例还提供了一种计算机设备,该计算机设备包括处理器和存储器,处理器与存储器连接,存储器存储有计算机执行指令,处理器执行该计算机执行指令时实现上述实施例中的数据处理方法。本申请实施例对计算机设备的具体形式不作任何限制。例如,计算机设备具体可以是终端装置,也可以是网络设备。其中,终端装置可以被称为:终端、用户设备(user equipment,UE)、终端设备、接入终端、用户单元、用户站、移动站、远方站、远程终端、移动设备、用户终端、无线通信设备、用户代理或用户装置等。终端装置具体可以是手机、增强现实(augmented reality,AR)设备、虚拟现实(virtual reality,VR)设备、平板电脑、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本、个人数字助理(personal digital assistant,PDA)等。网络设备具体可以是服务器等。其中,服务器可以是一个物理或逻辑服务器,也可以是有两个或两个以上分担不同职责的物理或逻辑服务器、相互协同来实现服务器的各项功能。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当该计算机程序在计算机上运行时,使得该计算机执行上文提供的任一种计算机设备所执行的方法。
关于上述提供的任一种计算机可读存储介质中相关内容的解释及有益效果的描述,均可以参考上述对应的实施例,此处不再赘述。
本申请实施例还提供了一种芯片。该芯片中集成了用于实现上述计算机设备的功能的控制电路和一个或者多个端口。可选的,该芯片支持的功能可以参考上文,此处不再赘述。本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可通过程序来指令相关的硬件完成。所述的程序可以存储于一种计算机可读存储介质中。上述提到的存储介质可以是只读存储器,随机接入存储器等。上述处理单元或处理器可以是中央处理器,通用处理器、特定集成电路(application specific integrated circuit,ASIC)、微处理器(digital signal processor,DSP),现场可编程门阵列(field programmable gatearray,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。
本申请实施例还提供了一种包含指令的计算机程序产品,当该指令在计算机上运行时,使得计算机执行上述实施例中的任意一种方法。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可以用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,DVD)、或者半导体介质(例如SSD)等。
应注意,本申请实施例提供的上述用于存储计算机指令或者计算机程序的器件,例如但不限于,上述存储器、计算机可读存储介质和通信芯片等,均具有非易失性(non-transitory)。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式来实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(digitalsubscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可以用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,DVD)、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。
尽管在此结合各实施例对本申请进行了描述,然而,在实施所要求保护的本申请过程中,本领域技术人员通过查看附图、公开内容、以及所附权利要求书,可理解并实现公开实施例的其他变化。在权利要求中,“包括”(comprising)一词不排除其他组成部分或步骤,“一”或“一个”不排除多个的情况。单个处理器或其他单元可以实现权利要求中列举的若干项功能。相互不同的从属权利要求中记载了某些措施,但这并不表示这些措施不能组合起来产生良好的效果。
尽管结合具体特征及其实施例对本申请进行了描述,显而易见的,在不脱离本申请的精神和范围的情况下,可对其进行各种修改和组合。相应地,本说明书和附图仅仅是所附权利要求所界定的本申请的示例性说明,且视为已覆盖本申请范围内的任意和所有修改、变化、组合或等同物。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (10)

1.一种内存故障处理方法,其特征在于,用于计算机设备的中央处理器CPU;所述方法包括:
在内存中的数据发生不可纠正故障的情况下,所述CPU获取所述不可纠正故障的故障信息,所述不可纠正故障的故障信息包括所述不可纠正故障对应的故障地址;
若所述故障地址所属的目标内存页为未使用状态,所述CPU对所述目标内存页执行页隔离操作;所述未使用状态是指所述目标内存页未分配给所述CPU当前运行的进程使用。
2.根据权利要求1所述的方法,其特征在于,所述故障信息还包括所述不可纠正故障的故障类型;所述若所述故障地址所属的目标内存页为未使用状态,所述CPU对所述目标内存页执行页隔离操作,包括:
若所述故障类型为不需要处理UCNA故障或选择处理SRAO故障、且所述故障地址所对应的目标内存页为未使用状态,所述CPU对所述目标内存页执行页隔离操作。
3.根据权利要求1或2所述的方法,其特征在于,所述计算机设备还包括内存控制器;
所述在所述内存中的数据发生不可纠正故障的情况下,所述CPU获取所述不可纠正故障的故障信息,包括:所述CPU运行操作系统OS的过程中,所述CPU响应于所述内存控制器发送的系统管理中断SMI信号,执行目标操作:所述CPU由运行OS切换至运行基本输入输出系统BIOS,所述BIOS获取所述不可纠正故障的故障信息;
所述目标操作还包括:所述BIOS向所述OS上报所述不可纠正故障的故障信息,以指示所述OS基于所述上报的不可纠正故障的故障信息执行页隔离操作;
其中,所述SMI信号是在所述内存中的数据发生不可纠正故障的情况下所述内存控制器所触发的。
4.根据权利要求3所述的方法,其特征在于,所述不可纠正故障的故障信息还包括所述不可纠正故障的故障类型;所述BIOS向所述OS上报所述故障信息,包括:
若所述故障类型为UCNA故障或SRAO故障,所述BIOS向所述OS上报所述不可纠正故障的故障信息。
5.根据权利要求1-4中任一项所述的方法,其特征在于,所述计算机设备还包括管理控制器;所述方法还包括:
所述CPU向所述管理控制器发送所述不可纠正故障对应的故障地址,以使所述管理控制器将所述不可纠正故障对应的故障地址保存至所述管理控制器的非易失性存储介质中。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
在所述计算机设备重启的情况下,所述CPU从所述管理控制器获取第一内存地址,所述第一内存地址为所述内存的多个内存地址中发生过不可纠正故障的内存地址;
所述CPU基于所述多个内存地址中除所述第一内存地址之外的第二内存地址,确定待分配内存页;所述第二内存地址为所述多个内存地址中未发生过不可纠正故障的内存地址;
所述CPU将所述待分配内存页分配给当前正在运行的进程使用。
7.根据权利要求6所述的方法,其特征在于,
所述在所述计算机设备重启的情况下,所述CPU从所述管理控制器获取第一内存地址,包括:在所述计算机设备重启后,所述CPU运行BIOS的过程中,所述BIOS从所述管理控制器获取所述第一内存地址;
所述CPU基于所述内存的多个内存地址中的第二内存地址,确定待分配内存页,包括:在所述计算机设备重启的情况下,所述CPU运行BIOS的过程中,所述BIOS向OS上报所述内存的多个内存地址;所述CPU运行所述OS的过程中,所述OS基于所述多个内存地址中除所述第一内存地址之外的第二内存地址,确定所述待分配内存页。
8.根据权利要求6或7所述的方法,其特征在于,所述第二内存地址的属性为可使用状态;所述CPU基于所述内存的多个内存地址中除第一内存地址之外的第二内存地址,确定待分配内存页,包括:
所述CPU将所述第一内存地址的属性设置为非可用状态;
所述CPU基于属性为可用状态的第二内存地址,确定所述待分配内存页。
9.根据权利要求6-8中任一项所述的方法,其特征在于,所述方法还包括:
所述CPU向所述管理控制器发送所述内存的当前配置信息;所述当前配置信息包括所述内存的内存条标识以及与所述内存条标识对应的内存插槽标识;
其中,所述第一内存地址是所述管理控制器在确定第一对应关系与第二对应关系相同的情况下向所述CPU发送的,所述第一对应关系包括所述当前配置信息中的内存条标识与内存插槽标识之间的对应关系,所述第二对应关系包括所述历史配置信息中的内存条标识与内存插槽标识之间的对应关系。
10.一种计算机设备,其特征在于,包括:处理器;
所述处理器与存储器连接,所述存储器用于存储计算机执行指令,所述处理器执行所述存储器存储的所述计算机执行指令,以使所述计算机设备实现如权利要求1-9中任一项所述的方法。
CN202310187974.4A 2023-03-01 2023-03-01 内存故障处理方法及计算机设备 Pending CN116483600A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310187974.4A CN116483600A (zh) 2023-03-01 2023-03-01 内存故障处理方法及计算机设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310187974.4A CN116483600A (zh) 2023-03-01 2023-03-01 内存故障处理方法及计算机设备

Publications (1)

Publication Number Publication Date
CN116483600A true CN116483600A (zh) 2023-07-25

Family

ID=87212633

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310187974.4A Pending CN116483600A (zh) 2023-03-01 2023-03-01 内存故障处理方法及计算机设备

Country Status (1)

Country Link
CN (1) CN116483600A (zh)

Similar Documents

Publication Publication Date Title
US8751864B2 (en) Controlling memory redundancy in a system
US10061534B2 (en) Hardware based memory migration and resilvering
US10713128B2 (en) Error recovery in volatile memory regions
EP2048579B1 (en) System and method for managing memory errors in an information handling system
US8990646B2 (en) Memory error test routine
US8516298B2 (en) Data protection method for damaged memory cells
US10990463B2 (en) Semiconductor memory module and memory system including the same
EP3698251B1 (en) Error recovery in non-volatile storage partitions
US20230251931A1 (en) System and device for data recovery for ephemeral storage
US7831858B2 (en) Extended fault resilience for a platform
CN113568777A (zh) 一种故障处理方法、装置、网络芯片、设备及存储介质
EP4280064A1 (en) Systems and methods for expandable memory error handling
KR20190117077A (ko) 메모리 시스템 및 메모리 시스템의 동작 방법
CN116483600A (zh) 内存故障处理方法及计算机设备
CN115576734A (zh) 一种多核异构日志存储方法和系统
US11593209B2 (en) Targeted repair of hardware components in a computing device
US20210034446A1 (en) Host system and computing system including the host system
US20240004757A1 (en) Electronic device managing corrected error and operating method of electronic device
US11656929B2 (en) Memory module and operating method
US20230055136A1 (en) Systems and methods to flush data in persistent memory region to non-volatile memory using auxiliary processor
CN116302625A (zh) 故障上报方法、设备及存储介质
CN115904828A (zh) 一种内存检测方法及装置
CN116483630A (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