一种内存故障处理的方法、装置、电子设备及介质与流程

文档序号:32402344发布日期:2022-12-02 19:26阅读:100来源:国知局
一种内存故障处理的方法、装置、电子设备及介质与流程

1.本技术涉及计算机技术领域,特别是涉及一种内存故障处理的方法、装置、电子设备及介质。


背景技术:

2.随着超大规模实时事务需要处理,对服务器的要求也越来越高。服务器的可靠性、可用性以及可服务性对于大型关键应用主机来说尤为关键,能够让主机容忍各类软硬件故障,可以显著延长系统平均无故障时间,保证客户业务持续稳定运行,是保障系统高可用性的技术基础。但是内存错误和故障是引发系统硬件故障的原因之一,在计算、电信、信息论和编码理论中,采用纠错码(error correction code,ecc)在不可靠或有噪声的通信信道上控制数据中的错误,在带有ecc功能的内存上面,可以检测并纠正的内存错误。内存错误分为可纠正错误(corrected error,ce)和不可纠正错误(uncorrected error,ue),其中ce是在硬件平台的容错范围内可以被纠正的数据错误,通常是单bit数据错误,系统或应用不会因此类型错误停止运行,而ue已经超出了硬件平台的容错范围,通常是多bit数据错误,会导致系统宕机或应用停止运行。内存故障包括ce内存故障、ce内存故障中筛选出的scrub降级ue内存故障以及ue内存故障,且故障等级程度依次增加。
3.当前对于故障隔离的方式是主机厂商在主机固件上的指定位置上对故障进行隔离,只有使用指定厂商的服务器,并且需要特定基本输入输出系统(basic input output system,bios)版本才支持故障隔离固化特性,因此当前在固件层面进行的故障隔离固化受到服务器或bios版本的限制。对于在bios或服务器不支持特性时,系统关机后内存故障隔离状态会丢失,当系统关机后再次开机时由于已发现的内存故障存在且没有提前处理(没有恢复隔离状态),会导致系统的可靠性降低。
4.由此可见,如何对ue内存故障进行隔离固化,是本领域技术人员亟待解决的问题。


技术实现要素:

5.本技术的目的是提供一种内存故障处理的方法、装置、电子设备及介质,用于对ue内存故障进行隔离固化。
6.为解决上述技术问题,本技术提供一种内存故障处理的方法,包括:
7.在检测到系统存在内存故障的情况下,确定所述内存故障的类型;
8.根据所述内存故障的类型获取对应的隔离数据;
9.将所述隔离数据存放至文件系统以便于根据所述文件系统中的所述隔离数据对所述内存故障进行故障修复。
10.优选地,所述内存故障的类型包括:ue内存故障、ce内存故障中筛选出的scrub降级ue内存故障、ce内存故障;
11.所述根据所述内存故障的类型获取对应的隔离数据包括:
12.在所述内存故障为所述ue内存故障或所述ce内存故障中筛选出的scrub降级ue内
存故障的情况下,获取所述ue内存故障对应的隔离地址以及所述ue内存故障地址对应偏移的标记字段值;
13.在所述内存故障为所述ce内存故障的情况下,获取所述ce内存故障地址对应偏移的标记字段值,其中所述ce内存故障为ce内存故障中除所述scrub降级ue内存故障之外的ce内存故障。
14.优选地,在获取所述ue内存故障对应的隔离数据之后,所述将所述隔离数据存放至文件系统之前,还包括:
15.在所述ue内存故障未隔离的情况下,将所述ue内存故障对应的故障内存页进行hard offline隔离。
16.优选地,所述获取所述ce内存故障地址对应偏移的标记字段值包括:
17.按照预设值扩展当前所述ce内存故障地址;
18.获取从当前所述ce内存故障地址到扩展后的地址之间的范围作为待确定的隔离区范围;
19.在所述待确定的隔离区范围不包含所述ue内存故障地址的情况下,将所述待确定的隔离区范围记在所述ce内存故障地址对应偏移的标记字段值中;
20.在所述待确定的隔离区范围包含所述ue内存故障地址的情况下,剔除所述待确定的隔离区范围中的所述ue内存故障地址以便获取新的隔离区范围,将新的所述隔离区范围记在所述ce内存故障地址对应偏移的标记字段值中。
21.优选地,在将所述隔离数据存放至所述文件系统之后,还包括:
22.重启所述系统;
23.获取所述文件系统中的所述隔离数据;
24.根据所述隔离数据将对应的内存故障进行隔离。
25.优选地,在所述重启所述系统之后,所述获取所述文件系统中的所述隔离数据之前,还包括:
26.在预设时间内未出现内存故障的宕机日志的情况下,则进入所述获取所述文件系统中的所述隔离数据的步骤;
27.在所述预设时间内出现所述内存故障的宕机日志的情况下,强制结束使用所述ue内存故障对应的故障内存页的进程并隔离所述故障内存页,进入所述获取所述文件系统中的所述隔离数据的步骤。
28.优选地,还包括:
29.在所述系统的内存条更换的情况下,备份所述隔离数据。
30.为了解决上述技术问题,本技术还提供一种内存故障处理的装置,包括:
31.确定模块,用于在检测到系统存在内存故障的情况下,确定所述内存故障的类型;
32.获取模块,用于根据所述内存故障的类型获取对应的隔离数据;
33.存放模块,用于将所述隔离数据存放至文件系统以便于根据所述文件系统中的所述隔离数据对所述内存故障进行故障修复。
34.为了解决上述技术问题,本技术还提供一种电子设备,包括:
35.存储器,用于存储计算机程序;
36.处理器,用于执行所述计算机程序时实现上述的内存故障处理方法的步骤。
37.为了解决上述技术问题,本技术还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述的内存故障处理方法的步骤。
38.本技术所提供的内存故障处理的方法,该方法在检测到系统存在内存故障的情况下,首先确定内存故障的类型,然后根据内存故障的类型获取对应的隔离数据,最后将隔离数据存放至文件系统。该方法中,由于文件系统属于操作系统层面,因此相比于现有的在固件层面上对内存故障进行隔离固化方法,本技术的在操作系统层面对内存故障进行隔离固化的方法不受服务器或bios版本的限制,在系统重启后根据文件系统中的隔离数据对内存故障进行故障修复从而保障已出现过的内存故障位置不再影响系统整体可靠性。
39.此外,本技术还提供一种内存故障处理的装置、一种电子设备以及计算机可读存储介质,具有上述提到的内存故障处理方法相同的有益效果。
附图说明
40.为了更清楚地说明本技术实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
41.图1为服务器系统的四个层面示意图;
42.图2为本技术提供的一种内存故障处理的方法流程图;
43.图3为在固化隔离文件中的隔离数据的示意图;
44.图4为本技术的一实施例提供的内存故障处理装置的结构图;
45.图5为本技术另一实施例提供的电子设备的结构图;
46.图6为本技术实施例提供的内存页隔离状态固化的流程图;
47.图7为本技术实施例提供的设备重启后的固化隔离的流程图。
具体实施方式
48.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他实施例,都属于本技术保护范围。
49.本技术的核心是提供一种内存故障处理的方法、装置、电子设备及介质,用于对ue内存故障进行隔离固化。
50.为了便于理解,下面对本技术的技术方案所使用的硬件结构进行介绍。本技术提供的内存故障处理的硬件架构主要包括处理器、硬盘、内存条等。处理器监测日志来检测是否有内存故障触发,并对出现的内存故障进行处理。为了尽可能地减少已经出现过的内存故障对系统整体可靠性的影响,本技术将隔离数据存放在硬盘中,在系统重启之后,可以根据硬盘中存放的隔离数据对故障进行处理。此外,在对故障处理的过程中,若内存条被更换也会对内存故障的处理产生影响。
51.图1为服务器系统的四个层面示意图。如图1所示,服务器系统分别为硬件(平台)层1、固件层2、操作系统层3以及应用层4。当位于应用层4的虚拟机读取内存时,通过ecc校
验可能会发现存在内存故障。目前主要是在固件层2上对内存故障进行隔离固化,但是容易受到服务器或bios版本的限制,只有指定厂商才支持在固件层2上进行内存故障隔离固化,本技术中在操作系统层面上对内存故障进行隔离固化,不受服务器或bois版本的限制,因此本技术提供的在操作系统层面上对故障进行隔离固化更灵活以及适用范围更加广泛。需要说明的是,本技术中对于内存故障的处理主要包含两部分,一部分是对内存故障进行隔离固化,即将隔离数据存放至文件系统;另一部分是对内存故障进行固化隔离,即根据文件系统中的隔离数据将已经出现过的内存故障进行隔离,尽可能地保障已出现过的内存故障位置不再影响系统整体可靠性。
52.为了使本技术领域的人员更好地理解本技术方案,下面结合附图和具体实施方式对本技术作进一步的详细说明。图2为本技术提供的一种内存故障处理的方法流程图,如图2所示,该方法包括:
53.s10:在检测到系统存在内存故障的情况下,确定内存故障的类型。
54.当服务器系统运行时,会监测mcelog日志来检测是否有新的内存故障触发。当有新的内存故障触发时,操作系统会通过mcelog日志以追加的方式把内存故障信息记录到mcelog日志中。即在更新后的meclog日志中记录故障地址、故障类型、故障时间等信息,如meclog日志中如果记载“uncorrected error”,说明是ue内存故障,记载“corrected error”说明是ce内存故障。对于检测系统是否存在内存故障的频率不作限定,可以是实时监测,也可以是按照预设频率进行检测,通常情况下是按照每30s检测系统内存是否出现内存故障。
55.在meclog日志中记录故障是ce内存故障还是ue内存故障。ce内存故障被检测到是因为内存存储单元某个位出现错误,如果此时同一个存储单元另一个位出现错误的话,就会产生一个ue类的错误,或者内存一个字某位出错了,但是系统无法纠正,在这种情况下仍然认为是ue类错,也就是ce内存故障中筛选出的scrub降级ue内存故障,因此最终确认的内存故障类型包括ce内存故障、ce内存故障中筛选出的scrub降级ue内存故障以及ue内存故障,三者的故障等级从低到高依次增加。当确定是ce内存故障时,通常是通过mscod对ce内存故障作出进一步的判断,确认其是ce内存故障还是筛选出的scrub降级ue内存故障。当内存故障触发时,寄存器的值会出现在meclog日志中的一个字段中,而mscod是寄存器值的一部分,为16进制的4位。当mscod为0x0010时,确认此时的内存故障为ce内存故障中筛选出的scrub降级ue内存故障;当mscod不为0x0010时,确认此时的内存故障为ce内存故障。
56.s11:根据内存故障的类型获取对应的隔离数据。
57.在步骤s10中确定了内存故障的类型,因此可以根据内存故障类型获取对应的隔离数据。隔离数据为包含对应内存故障的故障地址、隔离状态等的隔离数据。根据meclog日志获取内存故障对应的隔离数据,如在meclog日志中的addr字段中记载1f29ed8700,说明该地址为内存故障地址。由于ce内存故障是在硬件平台的容错范围内可以被纠正的数据错误,而ue内存故障已经超出了硬件平台的容错范围,因此对于不同类型的内存故障获取的隔离数据也会存在差异。当内存故障为ce内存故障时获取的隔离数据可以是ce内存故障地址对应偏移的标记字段值,而当内存故障为ue内存故障时,由于ue内存故障会导致宕机,因此ue内存故障对应的数据除了是ue内存故障地址对应偏移的标记字段值,还包括将ue内存故障地址单独存放在文件中,便于开机重启后提前处理ue所在内存页。需要说明的是,由于
ce内存故障中筛选出的scrub降级ue内存故障仍会导致系统宕机,因此对于ce内存故障中筛选出的scrub降级ue内存故障获取的隔离数据与ue内存故障获取的隔离数据包含的内容一致。
58.s12:将隔离数据存放至文件系统以便于根据文件系统中的隔离数据对内存故障进行故障修复。
59.在上述步骤s11中根据内存故障的类型获取了对应的隔离数据。若将隔离数据存放在内存中,当系统关机后内存故障隔离状态会丢失,当系统关机后再次开机时由于已发现的内存故障存在且没有提前处理,会导致系统的可靠性降低,因此优选地实施方式是将隔离数据保存在文件系统里。具体地,在文件系统中可以建立固化隔离文件将隔离数据存放在固化隔离文件中。文件系统是操作系统用于明确存储设备,常见文件系统包括磁盘,固态硬盘等。文件系统属于操作系统层面,因此不受服务器或bios版本的影响。将隔离数据存放在文件系统后,当系统重新启动时,可以根据文件系统中的隔离数据对内存故障进行隔离,从而提高系统的可靠性。
60.本实施例所提供的内存故障处理的方法,该方法在检测到系统存在内存故障的情况下,首先确定内存故障的类型,然后根据内存故障的类型获取对应的隔离数据,最后将隔离数据存放至文件系统。该方法中,由于文件系统属于操作系统层面,因此相比于现有的在固件层面上对内存故障进行隔离固化方法,本实施例提供的在操作系统层面对内存故障进行隔离固化的方法不受服务器或bios版本的限制,在系统重启后根据文件系统中的隔离数据对内存故障进行故障修复从而保障已出现过的内存故障位置不再影响系统整体可靠性。
61.在上述实施例中,内存故障的类型包括ue内存故障、ce内存故障中筛选出的scrub降级ue内存故障、ce内存故障。为了较完整地获取到隔离数据,包括隔离地址以及隔离状态等数据,在实施中,作为优选地实施方式,根据内存故障的类型获取对应的隔离数据包括:
62.在内存故障为ue内存故障或ce内存故障中筛选出的scrub降级ue内存故障的情况下,获取ue内存故障对应的隔离地址以及ue内存故障地址对应偏移的标记字段值;
63.在内存故障为ce内存故障的情况下,获取ce内存故障地址对应偏移的标记字段值,其中ce内存故障为ce内存故障中除scrub降级ue内存故障之外的ce内存故障。
64.在实施中,获取ue内存故障对应的隔离数据时包含两部分的数据,一部分为在对应偏移位标记ue内存故障以及记录故障标记位、扩展标记位、ue标记位等代表隔离状态的数据,其中,偏移位为物理地址与0x0的相对偏移量,隔离状态值的长度为1个字节,另一部分为单独存放ue内存故障地址的文件,对应ue内存故障所在内存页(4k范围),用于开机重启后提前处理ue所在内存页。图3为在固化隔离文件中的隔离数据的示意图。在获取ce内存故障地址对应偏移的标记字段值包括在对应偏位移标记ue内存故障以及记录故障标记位、扩展标记位、ue标记位等代表隔离状态的数据。如图3所示,在固化隔离文件5中,故障标记位为1,代表该地址为故障地址,故障地址为0,代表该地址不是故障地址;扩展标记位为1,代表对该故障地址进行了扩展,扩展标记位为0时,代表未对该故障地址进行扩展;ue标记位为1,代表是ue内存故障,ue标记位为0,代表是ce内存故障。如在图3中前三行数据代表的是出现ce内存故障,第四行的数据代表的是出现ue内存故障。此外,由于ce内存故障是在硬件平台的容错范围内可以被纠正的数据错误,因此ce内存故障数据中可以包含单独存放ce内存故障地址的文件,也可以不包含单独存放ce内存故障地址的文件,此处不作限定。
65.本实施例所提供的根据内存故障的类型获取对应的隔离数据方法,由于是获取到故障地址以及故障标记位、扩展标记位、ue标记位等信息,因此获取到的隔离数据较完整,从而保证在系统重启后尽可能地对所有的故障进行隔离。此外,在ue内存故障的情况下,单独存放ue内存故障地址的文件,在开机重启后提前处理ue所在内存页,从而保证系统的正常运行。
66.为了避免对已经隔离的内存故障再次进行隔离,提高系统的运行效率。在实施中,可以只对未隔离的内存故障进行隔离,对于已经隔离的内存故障不再进行隔离。优选地实施方式是,在获取ue内存故障对应的隔离数据之后,将隔离数据存放至文件系统之前,还包括:
67.在ue内存故障未隔离的情况下,将ue内存故障对应的故障内存页进行hard offline隔离。
68.由于系统在启动过程中会对内存故障进行隔离的操作或之前已经对内存故障进行隔离,因此会存在部分内存故障被隔离,部分内存故障未被隔离的情况。为了避免对内存故障进行重复隔离,提高系统的运行效率,在获取ue内存故障对应的隔离数据之后,对已经被隔离的内存故障不再进行隔离,直接进入将隔离数据存放至文件系统;对于未隔离的内存故障,将ue内存故障对应的故障隔离页进行隔离。由于内存故障为ue内存故障时,会导致系统宕机,因此需要对ue内存故障进行hard offline隔离。
69.在进行hard offline隔离的过程中,通过hard offline_early_kill接口,传递需要进行隔离的故障内存页所在的物理地址给操作系统,操作系统根据物理地址开始进行hard offline操作。首先会给对应故障内存页标记为hwpoison状态,然后判断物理地址对应的内存页是否是大页(非普通4k页),如果是大页,在大页是空闲页的情况下,直接分解大页为普通内存页,并结束隔离流程,在大页是非空闲页的情况下(也就是有进程在使用),会查找具体使用该内存页的进程并进行处理,在处理的过程中,如果该内存页属于特殊进程(结束该进程会造成系统异常),则记录日志触发宕机;如果该内存页属于特殊类型页,比如内核提供的共享内存页(virtual dynamic shared object,vdso),隔离后会造成系统异常,则记录日志触发宕机;对于所有使用该内存页的进程,并向对应进程发送sigbus信号,强制结束对应的进程。如果是小页(普通4k内存页),在小页是空闲页的情况下,记录日志并退出,在小页是非空闲页的情况下,会查找具体使用该页的进程进行处理,处理的过程和大页是非空闲也页的情况时的处理过程相同。
70.本实施例所提供的在获取ue内存故障对应的隔离数据之后,将隔离数据存放至文件系统之前,只对在ue内存故障未隔离的情况下,将ue内存故障对应的故障内存页进行hard offline隔离。该方法避免对内存故障进行重复隔离,提高系统的运行效率。
71.当内存存储单元某个位出现错误时,如果此时同一个存储单元另一个位出现错误的话,就会产生一个ue类的错误,因此在对ce内存故障进行隔离固化时,通常将ce内存故障地址进行扩展作为ce故障的隔离区。在ce故障隔离区内可能会出现ue故障地址,当存在ue故障地址时可能会导致系统宕机,进而导致系统的可靠性下降。因此,在实施中,获取ce内存故障地址对应偏移的标记字段值包括:
72.按照预设值扩展当前ce内存故障地址;
73.获取从当前ce内存故障地址到扩展后的地址之间的范围作为待确定的隔离区范
围;
74.在待确定的隔离区范围不包含ue内存故障地址的情况下,将待确定的隔离区范围记在ce内存故障地址对应偏移的标记字段值中;
75.在待确定的隔离区范围包含ue内存故障地址的情况下,剔除待确定的隔离区范围中的ue内存故障地址以便获取新的隔离区范围,将新的隔离区范围记在ce内存故障地址对应偏移的标记字段值中。
76.在ce内存故障进行隔离固化时,通常将ce内存故障地址进行扩展作为ce故障的隔离区。通常是按照预设值扩展当前ce内存故障地址,在实施中,对于具体的预设值不作限定,优选地,预设值为1m,即按照1m扩展当前ce内存故障地址,并且从当前ce内存故障地址向当前ce内存故障地址的前一个地址进行扩展。如对于一个3m的内存,在第1m地址上存放int1数据,在第2m地址上存放int2数据,在第3m地址上存放int3数据,假设第3m地址上为ce内存故障地址,向前扩展1个地址,即ce故障隔离区为第2m地址到第3m地址。由于隔离区内可能会存在ue内存故障地址,因此还需要对ce故障的隔离区进行进一步的确定。当待确定的隔离区范围中不包含ue内存故障地址时,此时待确定的隔离区范围即为最终的ce隔离区范围,并将该ce隔离区范围记在ce内存故障地址对应偏移的标记字段值中;当待确定的隔离区中包含ue内存故障地址时,需要把ue内存故障地址从待确定的ce隔离区中剔除得到新的ce隔离区范围,将新的隔离区范围记在ce内存故障地址对应偏移的标记字段值中。如上文中的例子中,当第2m地址不为ue内存故障时,得到的ce隔离区为第2m地址到第3m地址;当第2m地址为ue内存故障地址时,在剔除第2m地址后,得到的新的ce隔离区范围仍然是第3m地址。在ce内存故障地址对应偏移的标记字段值中对隔离区范围的记载体现在待确定的隔离区范围不包含ue内存故障地址的情况下,ce扩展标记位为1,在待确定的隔离区范围包含ue内存故障地址的情况下,ce扩展标记位为0;ue标记位为0,即代表为ce故障隔离区。
77.本实施例所提供的在获取ce内存故障地址对应偏移的标记字段值的过程中,对ce故障隔离区是否存在ue内存故障地址进行判断,并剔除ce故障隔离区中包含的ue内存故障地址,防止存在ue内存故障导致系统宕机,进而提高系统的可靠性。
78.上述实施例中将故障隔离数据存放在文件系统中,当系统重启后,可以根据文件系统中的隔离数据对故障进行隔离。在隔离的过程中,由于ce是在硬件平台的容错范围内可以被纠正的数据错误,系统或应用不会因此类型错误停止运行,而ue已经超出了硬件平台的容错范围,会导致系统宕机或应用停止运行,进而在系统重启之后,需要对不同类型的内存故障采取不同的隔离策略。因此在将隔离数据存放至文件系统之后,还包括:
79.重启系统;
80.获取文件系统中的隔离数据;
81.根据隔离数据将对应的内存故障进行隔离。
82.将故障隔离数据存放在文件系统中,当重启系统后,由于在系统的文件系统中包含隔离数据,因此可以根据隔离数据对应的内存故障进行隔离。在隔离数据中如果扩展标记位为0,代表隔离区只包含对应的内存故障地址,如果扩展标记位为1,代表对内存故障地址进行了扩展,经过扩展后,隔离区包括对应的内存故障地址以及对应的内存故障地址的前一个地址;如果ue标记位的值为1,代表对应的内存故障地址为ue内存故障地址,如果ue标记位的值为0,代表对应的内存故障地址为ce内存故障地址。
83.在对隔离数据进行分析之后,得出对应的内存故障情况,进而对不同类型的内存故障进行隔离。对于ue内存故障,本技术中采用的是hard offline_early_kill隔离接口进行隔离,在固化隔离时强制隔离ue各章地址。与hard offline不同,hard offline_early_kill会强制隔离指定的ue故障内存地址,如果该地址已被进程占用,会强制kill该进程,并隔离指定ue故障内存地址。对于ce内存故障,采用soft offline进行隔离。soft offline的隔离过程是通过操作系统驱动接口soft_offline_free_page传递物理内存地址给操作系统,操作系统会将对应内存页标记为hwpoison状态。对于非空闲页,操作系统会申请新的内存页,然后拷贝故障内存页的数据到新内存页,重新建立进程与新的内存页之间的映射关系。对于空闲大页,分解大页为普通页,然后结束隔离流程。需要说明的是,对于ce内存故障中筛选出的scrub降级ue内存故障也认为是ue内存故障,与ue内存故障的分析方法以及处理方法一致。
84.本实施例所提供的在系统重启之后,根据隔离数据对不同类型的内存故障采用不同的隔离策略,尽可能地实现对内存故障地址的隔离,从而提高系统的可靠性。
85.在上述实施例的基础上,在系统重启之后,可能会出现内存故障的宕机日志,说明系统出现故障,若未对故障进行处理,则会导致系统宕机,进而影响系统的可靠性。因此,作为优选地实施方式,在重启系统之后,获取文件系统中的隔离数据之前,还包括:
86.在预设时间内未出现内存故障的宕机日志的情况下,则进入获取文件系统中的隔离数据的步骤;
87.在预设时间内出现内存故障的宕机日志的情况下,强制结束使用ue内存故障对应的故障内存页的进程并隔离故障内存页,进入获取文件系统中的隔离数据的步骤。
88.在系统重启之后,检测预设时间内是否出现内存故障的宕机日志,当出现内存故障的宕机日志,需要先对内存故障进行处理,避免出现系统宕机的情况。对于预设时间的设置不作限定,根据实际情况选择合适的预设时间。通常情况下,设置的预设时间为30min,即在系统重启之后检测30min内是否出现内存故障的宕机日志。由于需要对已经出现的内存故障根据隔离数据对对应的内存故障进行隔离,因此对于在超出预设时间的内存故障的宕机日志忽略处理。对于出现的故障的处理的方法是从宕机日志中过滤出内存ue故障地址。在其他服务启动之前就通过hard_offline_early_kill接口隔离,强制隔离指定的ue故障内存地址,如果该地址已被进程占用,会强制kill该进程,并隔离指定ue故障内存地址。在对隔离日志进行处理之后,再获取文件系统中的隔离数据,从而根据隔离数据对已经出现过内存故障的地址进行隔离。在预设时间内未出现内存宕机日志的情况下,就可以直接获取文件系统中的隔离数据,从而根据隔离数据对已经出现过内存故障的地址进行隔离。
89.本实施例所提供的在系统重启之后,若出现内存故障的宕机日志,先对对应的内存故障进行处理,然后再根据文件系统中的隔离数据对已出现的内存故障进行隔离,可以有效减少新出现的内存故障对系统可靠性的影响,从而提高系统的可靠性。
90.在实施中,可能会出现内存条被更换,导致内存物理地址映射发生改变或故障内存被换走,进而导致正常内存地址被隔离。因此,在系统重启之后,判断内存条是否更换,若检测到系统的内存条被更换,为了方便查找之前的内存故障情况,作为优选地实施方式,在系统的内存条更换的情况下,备份隔离数据。
91.在系统重启之后,首先会根据上次记录的内存条的序列号(sn)判断服务器内存条
是否更换,防止更换内存条后,内存物理地址映射发生改变或故障内存被换走,从而导致正常内存地址被隔离。如果内存条有更换,若不备份原有的隔离数据,则无法知道之前出现故障的地址以及隔离情况则备份原有的隔离数据。因此可以对原有的隔离数据进行备份,通过备份原有的隔离数据进而可以根据原有的隔离数据了解之前的内存故障情况。在备份时,对原有的隔离数据所在的文件进行重命名。如果内存条没有更换,则继续获取文件系统中的隔离数据,进而根据隔离数据对内存故障进行隔离。
92.本实施例所提供的在系统重启之后,在内存条更换的情况下,备份原有的隔离数据,方便用户查询之前的内存故障情况。
93.在上述实施例中,对于内存故障处理的方法进行了详细描述,本技术还提供一种内存故障处理装置以及一种电子设备对应的实施例。需要说明的是,本技术从两个角度对装置部分的实施例进行描述,一种是基于功能模块的角度,另一种是基于硬件的角度。
94.图4为本技术的一实施例提供的内存故障处理装置的结构图。本实施例基于功能模块的角度,包括:
95.确定模块10,用于在检测到系统存在内存故障的情况下,确定内存故障的类型;
96.获取模块11,用于根据内存故障的类型获取对应的隔离数据;
97.存放模块12,用于将隔离数据存放至文件系统以便于根据文件系统中的隔离数据对内存故障进行故障修复。
98.由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
99.本实施例所提供的内存故障处理装置,该装置首先在检测到系统存在内存故障的情况下,通过确定模块确定内存故障的类型,然后通过获取模块根据内存故障的类型获取对应的隔离数据,最后通过存放模块将隔离数据存放至文件系统以便于根据文件系统中的隔离数据对内存故障进行故障修复。该装置中,由于文件系统属于操作系统层面,在系统重启后根据文件系统中的隔离数据对内存故障进行故障修复从而保障已出现过的内存故障位置不再影响系统整体可靠性。
100.图5为本技术另一实施例提供的电子设备的结构图。本实施例基于硬件角度,如图5所示,该电子设备包括:
101.存储器20,用于存储计算机程序;
102.处理器21,用于执行计算机程序时实现如上述实施例中所提到的内存故障处理的方法的步骤。
103.本实施例提供的电子设备可以包括但不限于智能手机、平板电脑、笔记本电脑或台式电脑等。
104.其中,处理器21可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器21可以采用数字信号处理器(digital signal processor,dsp)、现场可编程门阵列(field-programmable gate array,fpga)、可编程逻辑阵列(programmable logic array,pla)中的至少一种硬件形式来实现。处理器21也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称中央处理器(central processing unit,cpu);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器21可以在集成有图像处理器(graphics processing unit,
gpu),gpu用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器21还可以包括人工智能(artificial intelligence,ai)处理器,该ai处理器用于处理有关机器学习的计算操作。
105.存储器20可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器20还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器20至少用于存储以下计算机程序201,其中,该计算机程序被处理器21加载并执行之后,能够实现前述任一实施例公开的内存故障处理方法的相关步骤。另外,存储器20所存储的资源还可以包括操作系统202和数据203等,存储方式可以是短暂存储或者永久存储。其中,操作系统202可以包括windows、unix、linux等。数据203可以包括但不限于上述所提到的内存故障处理方法所涉及到的数据等。
106.在一些实施例中,电子设备还可包括有显示屏22、输入输出接口23、通信接口24、电源25以及通信总线26。
107.本领域技术人员可以理解,图5中示出的结构并不构成对电子设备的限定,可以包括比图示更多或更少的组件。
108.本技术实施例提供的电子设备,包括存储器和处理器,处理器在执行存储器存储的程序时,能够实现如下方法:内存故障处理方法,效果同上。
109.最后,本技术还提供一种计算机可读存储介质对应的实施例。计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述方法实施例中记载的步骤。
110.可以理解的是,如果上述实施例中的方法以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
111.本技术提供的计算机可读存储介质包括上述提到的内存故障处理方法,效果同上。
112.为了使本领域的技术人员更好的理解本技术的技术方案,下面结合附图6和附图7对上述本技术作进一步的详细说明,图6为本技术实施例提供的内存页隔离状态固化的流程图。图7为本技术实施例提供的设备重启后的固化隔离的流程图。
113.如图6所示,内存页隔离状态固化的过程具体包括以下步骤:
114.s13:检测到内存故障;
115.s14:判断是否ce内存故障;若否,则进入步骤s15至步骤s19;若是,则进入步骤s20;
116.s15:对应偏移标记ue内存故障;
117.s16:判断是否已经隔离;若是,则进入步骤s18,若否,则进入步骤s17;
118.s17:hard offline隔离;
119.s18:在固化隔离文件中标记ue内存故障;
120.s19:单独记录ue内存故障地址,并结束;
121.s20:判断是否是scrub降级ue内存故障,若是,则进入步骤s15至步骤s19;若否,则进入步骤s21;
122.s21:计算ce隔离区范围;
123.s22:判断ce隔离区是否已标记ue,若是,则进入步骤s23;若否,则进入步骤s24;
124.s23:重新计算执行ce隔离部分区域;
125.s24:在固化隔离文件中标记ce内存故障;
126.s25:soft offline,并结束。
127.由此可见,在内存页隔离状态固化的过程中,根据故障的类型获取到对应的隔离数据,将隔离数据存放在固化隔离文件中即实现对内存页隔离状态固化。固化隔离文件如图3所示,前面16字节为元数据区域,元数据之后的区域为数据存储区,记录内存故障区地址和隔离状态。其中偏移量为物理地址与0x0相对偏移量。状态值长度为一个字节。前三位分别代表故障标记位,扩展标记位和ue标记位。ue标记位为1时表示该隔离区为ue隔离区。该方法中,由于文件系统属于操作系统层面,因此在系统重启后根据文件系统中的隔离数据对内存故障进行故障修复从而保障已出现过的内存故障位置不再影响系统整体可靠性。
128.如图7所示,设备重启后的固化隔离的过程具体包括以下步骤:
129.s25:检测内存条是否更换,若是,则进入步骤s26;若否,则进入步骤s27;
130.s26:备份旧固化隔离文件,创建新文件;
131.s27:检测半小时内是否有内存宕机日志;若是,则进入步骤s28;若否,则进入步骤s30;
132.s28:抓取宕机内存故障地址;
133.s29:调用hard_offline_page_early_kill隔离;
134.s30:检测是否有固化隔离文件;若否,则进入步骤s31;若是,则进入步骤s32;
135.s31:生成固化隔离文件元数据,并结束;
136.s32:解析文件取出一个保存的故障隔离区;
137.s33:判断是否ue隔离区;若否,则进入步骤s34,若是,则进入步骤s35;
138.s34:调用soft_offline_free_page隔离;
139.s35:调用hard_offline_page_early进行隔离;
140.s36:判断故障地址是否全部处理;若是,则结束,若否,则返回步骤s32。
141.在设备重启后的固化隔离中,根据固化隔离文件,将已出现过的内存故障的位置进行隔离,进而保障已经出现过内存故障的位置不再影响系统整体的可靠性。
142.以上对本技术所提供的一种内存故障处理的方法、装置、电子设备及介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本技术原理的前提下,还可以对本技术进行若干改进和修饰,这些改进和修饰也落入本技术权利要求的保护范围内。
143.还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将
一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1