一种内存故障识别方法及一种内存故障隔离方法与流程

文档序号:31053896发布日期:2022-08-06 10:11阅读:385来源:国知局
1.本说明书一个或多个实施例涉及终端
技术领域
:,尤其涉及一种内存故障识别方法及一种内存故障隔离方法。
背景技术
::2.内存故障是影响计算机运行性能的一个重要因素,发现内存故障时,需要将该故障的地址对应的内存页(page)下线(也就是使操作系统不能继续往该内存页写入数据,下线后的内存页即为被隔离的内存页),防止计算机访问该内存页而影响计算机运行性能。3.内存故障分为permanentfault(永久故障,又称hardfault)和transientfault(瞬时性故障,又称softfault),其中,softfault是一种短暂性的故障,故障发生一段时间后就会恢复,因此softfault并不需要隔离,需要隔离的是会反复频发的hardfault。4.对于操作系统而言,由于当某一内存单元发生故障时,操作系统就会上报可修正错误(correctableerror,ce)。换言之,不论hardfault和softfault,操作系统发现时都会上报ce,操作系统无法区分两种故障。5.相关技术中,一般是通过守护进程(deamon)来识别hardfault,由于hardfault具备重复性,因此一定时间(比如24小时)内,如果一个内存页出现两次ce,deamon则认为该内存页存在hardfault。6.而相关技术中识别hardfault方式并不准确,对于一些对内存容量要求高或者对于性能要求高的领域来说,这种识别hardfault方式会对运行性能造成影响,或者使得内存容量达不到要求。技术实现要素:7.有鉴于此,本说明书一个或多个实施例提供一种内存故障识别方法及一种内存故障隔离方法。8.根据本说明书一个或多个实施例的第一方面,提出了一种内存故障识别方法,预先配置故障数据库,所述故障数据库中记录有所有内存单元的全生命周期的故障记录,每一内存单元故障记录至少包括该内存单元全生命周期内发生ce的次数;所述方法包括:9.在内存单元发生可修正错误ce的情况下,更新故障数据库;10.针对每一内存单元,在故障数据库中该内存单元全生命周期内发生ce的次数超过次数阈值的情况下,确定该内存单元存在hardfault。11.根据本说明书一个或多个实施例的第二方面,提出了一种内存故障隔离方法,所述方法包括:12.根据上述的内存故障识别方法,确定各内存单元的故障结果;各内存单元的结果类型用于表征各内存单元是否存在hardfault;13.根据各内存页对应的内存单元故障结果,确定故障内存页;其中,所述故障内存页存在的故障导致不可修正错误ue的可能性大于可能性阈值;14.隔离所述故障内存页。15.根据本说明书实施例的第三方面,提供一种内存故障识别装置,预先配置故障数据库,所述故障数据库中记录有所有内存单元的全生命周期的故障记录,每一内存单元故障记录至少包括该内存单元全生命周期内发生ce的次数;所述装置包括:16.故障数据库更新模块,用于在内存单元发生可修正错误ce的情况下,更新故障数据库;17.内存故障识别模块,用于针对每一内存单元,在故障数据库中该内存单元全生命周期内发生ce的次数超过次数阈值的情况下,确定该内存单元存在hardfault。18.根据本说明书实施例的第四方面,提供一种内存故障隔离装置,所述装置包括:19.故障结果确定模块,用于根据前述的故障识别方法,确定各内存单元的故障结果;各内存单元的结果类型用于表征各内存单元是否存在hardfault;20.故障内存页确定模块,用于根据各内存页对应的内存单元故障结果,确定故障内存页;其中,所述故障内存页存在的故障导致不可修正错误ue的可能性大于可能性阈值;21.内存页隔离模块,用于隔离所述故障内存页。22.根据本说明书实施例的第五方面,提供一种内存故障隔离系统,所述内存故障隔离系统包括若干服务器,和用于管理若干服务器的中心设备;23.所述服务器在发生ce的情况下,将ce上报给中心设备;24.所述中心设备至少用于通过上述的内存故障识别方法识别存在hardfault的内存单元,或通过上述的内存故障隔离方法确定需要隔离的内存页,并通知服务器隔离该内存页。25.根据本说明书实施例的第六方面,提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现上述的内存故障识别方法或上述的内存故障隔离方法。26.根据本说明书实施例的第七方面,提供一种电子设备,包括:27.处理器;28.用于存储处理器可执行指令的存储器;29.其中,所述处理器通过运行所述可执行指令以实现上述的内存故障识别方法或上述的内存故障隔离方法。30.本说明书提供了一种内存故障识别方法和一种内存故障隔离方法,预先配置故障数据库,所述故障数据库中记录有所有内存单元的全生命周期的故障记录,每一内存单元故障记录至少包括该内存单元全生命周期内发生ce的次数;在内存单元发生可修正错误ce的情况下,更新故障数据库;针对每一内存单元,在故障数据库中该内存单元全生命周期内发生ce的次数超过次数阈值的情况下,确定该内存单元存在hardfault。31.通过记录有各个内存单元全生命周期ce次数的故障数据库来进行内存故障的隔离,可以提升隔离的准确度和覆盖率,减少了softfault误识别成hardfault的概率,提高了hardfault被隔离的概率。32.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。附图说明33.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。34.图1是本说明书示出的相关技术一种内存故障隔离方法的流程图。35.图2a是本说明书根据一示例性实施例示出的一种内存故障识别方法的流程图。36.图2b是本说明书根据一示例性实施例示出的一种故障类型的示意图。37.图3是本说明书根据一示例性实施例示出的一种内存故障隔离方法的流程图。38.图4a是本说明书根据一具体实施例示出的一种内存故障隔离方法的示意图。39.图4b是本说明书根据一具体实施例示出的一种内存故障隔离方法的流程图。40.图5是本说明书根据一示例性实施例示出的一种内存故障识别装置的框图。41.图6是本说明书根据一示例性实施例示出的一种内存故障隔离装置的框图。42.图7是本说明书根据一示例性实施例示出的一种内存故障识别装置或一种内存故障隔离装置所在电子设备的一种硬件结构图。具体实施方式43.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。44.需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。45.内存是计算机的重要部件之一,是与处理器(centralprocessingunit,cpu)沟通的桥梁,所有程序的运行均是在内存中进行,内存的性能对计算机的影响非常大。内存也被称为内存储器,用于暂时存放cpu中的运算数据,以及与外部存储器(如硬盘等)交换数据,只要计算机在运行过程中,cpu就会将需要运算的数据调到内存中运算,当运算完成后,cpu再将结果读取出来。46.内存可能会发生故障,内存故障也就是某一内存单元(cell)一直维持高电平或低电平(换言之,内存故障的最小单位是内存单元),且无法被修改状态。内存故障一般分为hardfault和softfault,hardfault也就是同一地址会反复出现的故障,即表征该地址对应的内存单元已经损坏;softfault也就是随机性的故障,一般一个地址只出现一次故障,这种故障一般是由高能射线或电磁干扰所引发的内存单元短暂性损坏。47.由于内存单元损坏的情况下,如果操作系统使用了该损坏的内存单元,将无法正常访问该内存单元,所以在内存单元发现上述情况时,就会上报ce错误,并使用纠错算法查找其他可用内存单元。且在存在过多的故障(fault)的情况下,可能还会导致不可纠正错误(uncorrectableerror,ue),如果ue对应的内存页被内核态使用,还可能使得系统宕机。48.可见,如果存在损坏的内存单元,操作系统将的性能将会被影响,且在内存故障太多的情况下,还可能会导致系统宕机。因此在发生内存故障的情况下,需要将故障的内存单元隔离,也就是使得操作系统不再访问该内存单元,这样才能确保操作系统的执行效率,并且避免ue给操作系统带来太多影响。49.对于softfault来说,其是随机性故障,也就是过一段时间该故障就会恢复,因此softfault并不需要隔离,需要隔离的是造成实质性损坏的hardfault。因此操作系统需要区分hardfault和softfault才能完成对内存故障的隔离。对于操作系统来说,由于softfault是瞬时性的,也就是一个内存单元只会发生一次,而hardfault是永久性的故障,其发作频率较高,因此可以通过上报ce的频率来区分hardfault和softfault。50.相关技术中,守护进程识别hardfault的流程图如图1所示,在硬件上报ce的情况下,守护进程便会判断上报的ce对应内存页在预定时间(一般是24小时)内ce次数是否大于等于2,如果大于等于2,则调用内核的pageoffline(内存页下线)接口,使该内存页下线。51.这种方法存在以下问题:相关技术中守护进程运行在内核,为了减少守护进程对系统执行效率的影响,守护进程不能占用太多的资源,因此这种故障隔离方法只是基于简单的阈值来识别,这样可能会造成识别准确率不高,且覆盖率低。52.具体而言,首先,因为是基于内存页查找的,而一个内存页包括很多的内存单元,一定时间内一个内存页中出现的两个ce可能是不同内存单元上报的,存在一定的概率是两个ce都是对应内存单元第一次发生ce,这样就会错误的将softfault识别成hardfault。如果在此基础上再隔离内存页,将导致的ce对应的内存页隔离掉,浪费主机的可用内存。53.其次,由于是基于内存页查找,如果预定时间(上文的预定时间)太长则会导致查找错误率较高(因为时间越长,这个内存页的内存单元发生softfault的个数越多),因此为了降低错误率并缩减守护进程占用的内存,预定时间一般也比较短(一般为24小时),而存在hardfault的内存单元被访问到才会触发ce事件,被访问到是一个比较随机的过程,可能几分钟,几天,甚至几个月才会被连续访问到,预定时间不能太长这个限制使得大量的hardfault无法被发现。54.此外,如果在发现hardfault后,处理hardfault的方式是隔离内存页,那将产生以下问题:将内存页隔离一般是通过调用内核的pageoffline接口实现的,由于pageoffline并不是一个必须成功的接口(trybest),使得有些情况下内存页无法成功隔离,比如在内核中当一个内存页被进程使用中,那么这个内存页是无法隔离成功的。可见相关技术中的方法,内存页隔离成功率不高。55.对于相关技术中的内存故障隔离方法而言,其对于大部分的应用场景而言,虽然准确率不高,但是对于系统的运行影响不大,因此还是一个比较有效的方法。但是对于一些对内存稳定性要求高,且希望内存实际容量和标称值越接近的场景而言,上述方法会将softfault识别成hardfault,造成不需要隔离的内存页被错误的隔离,使得内存实际容量变小;且上述方法会漏掉一些hardfault,使得故障内存单元影响内存稳定性,从而影响系统运行性能。56.比如对于公有云的云计算场景而言,第一,其对系统运行性能要求较高,且大规模云计算场景下内存故障导致的服务受损(服务不可用,服务降级)占比是top2,是影响弹性计算稳定性的关键大头;第二,由于云计算场景下单个服务器的每根内存容量较大,由于内存制造工艺的限制,使得每根内存的故障率更高,这样使得单个服务器发生ce和ue的故障数也更高;且云计算场景中,一个服务器上承载的服务数量较多,如果服务器发生ce或ue,其可能影响的服务数量也较高,因此,其对内存故障更加敏感,存在需要识别所有hardfault的需求;第三,对于公有云而言,其会将云计算服务租给不同的用户,用户希望自己买到的服务是和标称值更为近似,因此,公有云的云计算场景中,更希望内存实际容量和标称值更为接近,也就是更不能接受将softfault错误识别成hardfault,进而将softfault所在的内存页隔离的情况。57.根据上述理由,对于公有云的云计算场景,需要一种准确率、覆盖率(即查找ce的时间范围)和成功率更高的内存故障识别方法和处理方法。58.基于此,本说明书考虑到对于相关技术中前两个缺点而言,可以不再在内核设置守护进程,而是在用户态进行故障的隔离分析,也就是收集ce数据,形成全生命周期的故障数据库(虽然这个过程可能相比相关技术更耗时,且故障数据库占用了一定的存储空间,但是相比于ue带来的较大影响,本说明书中的方法接收消耗一定的内存和存储空间去完成hardfault的识别,以避免更大的危害),根据故障数据库来确定在每个内存单位上发生ce的次数,从而可以判定每个内存单元是否发生了hardfault。59.此外,对于故障的处理而言,如果沿用相关技术中的隔离内存页的方法,考虑到如果一个内存页只有一个内存单元发生了hardfault,该内存页导致ue的可能性较低。且内存页中不同的内存单元可能分布在不同的内存条中,只是基于内存页对应的各内存单元存在的故障很难分析出该故障是否可能导致ue,因此可以进一步地对故障进行不同级别的分类,比如可以基于内存库(bank)的级别进行分类,根据内存库中各内存单元的故障和各内存单元的物理关系确定内存库的故障类型。从而可以根据各内存库的故障类型,确定是否隔离各内存库所映射到的内存页。进一步还可以根据双列直插式存储模块(dual-inline-memory-modules,dimm)中各内存库的故障类型,确定各dimm的故障类型,进一步确定是否对内存进行维修处理等。60.此外,本说明书中还可以根据每个内存页包括的各个内存单元的故障结果,判断故障的严重程度,进而实现了对内存页的隔离,对于影响不大的内存页,可以先不隔离,这样使得租用服务的用户可用内存空间更大。61.最后,对于trybest的pageoffline接口而言,可以循环执行pageoffline直至隔离成功,这样提升了隔离的成功率。62.换言之,本说明书提供了一种内存故障识别方法和一种内存故障隔离方法,预先配置故障数据库,所述故障数据库中记录有所有内存单元的全生命周期的故障记录,每一内存单元故障记录至少包括该内存单元全生命周期内发生ce的次数;在内存单元发生可修正错误ce的情况下,更新故障数据库;针对每一内存单元,在故障数据库中该内存单元全生命周期内发生ce的次数超过次数阈值的情况下,确定该内存单元存在hardfault。63.通过记录有各个内存单元全生命周期ce次数的故障数据库来进行内存故障的隔离,可以提升隔离的准确度和覆盖率,减少了softfault误识别成hardfault的概率,提高了hardfault被隔离的概率。64.换言之,相比于相关技术中基于内存页粒度来识别hardfault,本说明书提供的方法基于内存单元(cell)的粒度来识别hardfault,减少了softfault误被隔离的概率。且通过记录有各个内存单元全生命周期ce次数的故障数据库来确定每个内存单元是否存在hardfault,考虑了较多的历史数据,即使内存单元隔了很久才被访问到,也能识别出hardfault。65.接下来将对本说明书所提供的内存故障识别方法进行详细说明。如图2a所示,图2a是本说明书根据一示例性实施例示出的一种内存故障识别方法的流程图,包括以下步骤:66.步骤201,在内存单元发生可修正错误ce的情况下,更新故障数据库。67.在执行上述方法之前,还预先配置故障数据库,所述故障数据库中记录有所有内存单元的全生命周期的故障记录,每一内存单元故障记录至少包括该内存单元全生命周期内发生ce的次数。68.换言之,故障数据库中存储有以内存单元为粒度的全生命周期内的故障记录,通过故障数据库,可以得知每个内存单元历史故障记录,从而确定了究竟是哪个内存单元损坏。69.接下来将对步骤201中涉及的多个名词进行说明。70.首先对内存单元的概念进行介绍,内存单元也就是内存cell,内存单元在内存中年按矩阵排列,每一行和每一列都对应于一个行地址线路(wordline)和列地址线路(bitline),每个cell对应于一个行地址线路和列地址线路,内存的地址就是通过该cell对应的行和列的编号确定的。71.ce和内存故障详见上文描述,需要说明的是,本文中的故障(fault)指的是内存物理上发生的故障,错误(error)指的是操作系统运行中所遇到的问题。72.接下来将对与故障数据库有关的名词进行说明,全生命周期也就指的是从服务器开始运行/开始投入使用以来,所有的记录。故障数据库是本说明书提供的方法中新增的一个用于存储故障记录的数据库,其除了存储每个内存单元全生命周期内发生ce的次数外,还可以存储ce的原始日志文件或按照指定格式输出的ce记录;或在后文确定每个内存单元是否存在hardfault后,还可以存储每个内存单元是否存在hardfault;以及在后文确定了每个内存单元的故障类型(errorpattern)后,还可以存储每个内存单元的故障类型。此外,内存单元全生命周期内发生ce的次数,指的是上报的ce是该内存单元故障所导致的ce。73.对于故障数据库来说,更新故障数据库指的是根据ce,更新故障数据库中存储的数据。如果故障数据库内仅存储有每个内存单元全生命周期内的发生ce次数,则在任一内存单元导致ce的情况下,将该内存单元全生命周期内发生ce的次数+1,其他情况(故障数据库还存储有其他数据)也类似,在此暂不赘述。74.还需要说明的是,在内存条发生更换的情况下,对应的故障数据库也应该随着内存条的更换而重置,从而使得故障数据库中的记录更加准确。75.在对步骤201中涉及的各个词句进行说明后,接下来将说明一种步骤201的具体实现方式,当然,步骤201的具体实现方式不限于此。76.相关技术中,守护进程运行在内核(kernel),其会对内核中的数据进行读写,由于对内核数据进行写的过程风险较多,容易造成系统宕机,因此,为了避免系统宕机,本说明书中示出的方法可以应用于用户态,这样只需对内核的数据进行读取操作,故障数据库也不位于内核,无需对内核进行写。那么为了使得运行在用户态的进程能知晓ce,本说明书中的方法还包括监听上报ce,然后按照规定的格式输出ce记录,使得用户态进程可以知晓ce的发生。77.换言之,步骤201具体包括:获取内存单元发生的ce对应日志文件;对获取的日志文件进行解析,输出预定格式的故障记录;所述预定格式的故障记录至少包括发生ce的内存单元的地址;将预定格式的故障记录存储至故障数据库,并更新故障数据库中对应内存单元发生ce的次数。78.步骤203,针对每一内存单元,在故障数据库中该内存单元全生命周期内发生ce的次数超过次数阈值的情况下,确定该内存单元存在hardfault。79.换言之,通过将全生命周期内每个内存单元发生ce的次数和次数阈值相比,确定了超过次数阈值的内存单元存在hardfault,从而可以对hardfault进行处理。80.首先需要对将ce的次数和次数阈值进行比较的原因进行说明。对于内存故障来说,除非将内存条从主机上拆下并通过机器进行检测,否则无法知道每个内存单元发生的故障究竟是hardfault还是softfault。因此,考虑到softfault是一种短暂性的损坏,hardfault是一种永久性的损坏,对于softfault来说,由于这种故障会恢复,在发生故障时间段内系统访问该内存单元多次的概率较低,且同一内存单元发生多次softfault的概率较低,因此可以将只发生过少数几次ce的内存单元认为是存在过softfault的内存单元,而将发生了多次ce的内存单元确定为hardfault。81.其中,次数阈值可以根据需要进行设定,可以设定为2。在服务器运行时间较长时,考虑到每个内存单元发生softfault的概率会上升,也可以将次数阈值设定为大于2的任意值。82.对于步骤201和步骤203的执行时机而言,步骤203可以在步骤201更新故障数据库后执行,步骤203的执行时机也可以是和步骤201没有没关系,比如步骤203按照独立于步骤201的周期来执行。83.此外还需要说明的是,本说明书中可以更为准确的检测出hardfault是基于全生命周期进行检测和基于内存单元粒度进行检测共同作用的结果,如果只基于两者中任一者,均无法提高hardfault的识别准确率。84.具体而言,如果基于全生命周期的故障记录,以内存页为粒度进行检测,则由于内存页内不同内存单元发生softfault的概率较高,则容易将更多的softfault误识别成hardfault,进一步使得内存可用空间变小。如果基于一定时间内的故障记录,以内存单元为粒度来检测hardfault,则可能由于预定时间太短而无法识别出部分hardfault,造成hardfault的漏检。85.上述方法中,通过将全生命周期内的每个内存单元发生ce的次数进行统计,并基于此识别hardfault,由于是以内存单元为粒度来记录ce次数,降低了将softfault识别成hardfault的概率。且由于是基于全生命周期来检测hardfault,使得hardfault识别覆盖率提升,更容易识别到hardfault。86.此外,在识别出hardfault后,为了进一步丰富故障数据库的记录以便评判各内存单元的故障程度,并为后续故障处理做好准备,还可以进一步确定其他级别的故障类型。87.从物理上来说,若干内存单元组成了一个内存库(bank),且内存库中各内存单元的物理位置也会影响故障的严重程度,比如坏对于内存库而言,在存在hardfault的内存单元数量相同的情况下,故障的内存单元的不同分布可能会使得故障的严重程度也有所不同,因此可以根据内存库中各内存单元的故障结果,和各内存单元的物理位置,基于内存库级别来对各内存库的故障类型进行判定,从而确定内存库中的故障类型,从而可以根据内存库的故障类型确定各内存页的故障可能会影响系统运行的可能性,进一步评判其会引发ue的概率。88.换言之,所述方法还包括:针对每个内存库,根据故障数据库中该内存库包含的内存单元全生命周期的故障记录和各内存单元的物理位置关系,确定该内存库的故障类型;所述内存库的故障类型用于表征内存库故障的严重程度。89.比如,结合图2b来说明具体的如何确定内存库的故障类型。其中,图2b中的大方框代表一个内存库小方块代表发生过ce的内存单元,旁边的数字代表发生ce的次数,图2b中n为大于1的任意值。90.如果一个内存库中只有较少数量(比如1个)的内存单元发生过ce,且发生ce的内存单元中不存在hardfault,则可以认定该内存单元的故障类型为单一故障,这种故障类型标识内存库的故障不严重。这种情况在次数阈值为1时,如图2b中(a)所示。91.如果一个内存库中只有较少数量的内存单元发生过ce(且不存在故障行或故障列),但是发生过ce的内存单元中存在至少一个hardfault的内存单元,那么可以确定该内存库的故障类型为重复故障,重复故障则比单一故障稍微严重一点。这种情况在次数阈值为1时,如图2b中(b)所示。92.换言之,在该内存库中发生过ce的内存单元数量小于第一数量阈值,且至少1个发生过ce的内存单元存在hardfault,则确定该内存库的故障类型为重复故障。其中,第一数量阈值可以根据实际需求来取,比如可以取2,也可以取其他值,本说明书对此不作限定。93.如果一个内存库中存在:一行或者一列中多个内存单元发生过ce,且发生过ce的内存单元中不存在hardfault,则认为内存库中存在故障行或故障列。如果一个内存库中存在故障行或故障列(且不存在严重故障行或故障列),则认为该内存库的故障类型为行故障/列故障。行故障/列故障比重复故障更严重一点。这种情况在次数阈值为1时,如图2b中(c)所示。94.换言之,在该内存库中存在故障行或故障列,则确定该内存库的故障类型为行或列故障;所述故障行或故障列中发生过ce的内存单元数量大于等于第一数量阈值,且所述故障行或故障列中不存在hardfault。95.如果一行或一列中存在多个发生过ce的内存单元,且至少一个内存单元中存在hardfault,则认为该内存库中存在严重故障行或严重故障列,如果严重故障行或严重故障列的数量不超过第二数量遇着,则认为该内存库的故障类型为严重行故障/严重列故障,严重行故障/严重列故障比行故障/列故障更严重。这种情况在次数阈值为1时,如图2b中(d)所示。96.换言之,在该内存库中存在严重故障行或严重故障列,且严重故障行和/或严重故障列的数量小于第二数量阈值,则确定该内存库的故障类型为严重行或列故障;所述严重故障行或严重故障列中发生过ce的内存单元数量大于等于第一数量阈值,且所述严重故障行或严重故障列中至少一个内存单元存在hardfault。97.此外,如果内存库中存在数量较多的内存单元发生过ce(比如超过100个),且发生过ce内存单元分布的行和列的总数超过一个较大的值(比如超过50个),那么认为该内存单元存在严重故障,严重故障比严重行故障/严重列故障更严重。这种情况在次数阈值为1时,如图2b中(e)所示。98.换言之,在该内存库中发生过ce的内存单元数量大于第三数量阈值,且发生过ce的行和列的总数大于第四数量阈值的情况下,确定该内存库的故障类型为严重故障;所述第三数量阈值大于所述第一数量阈值,所述第四数量阈值大于所述第二数量阈值。99.此外,确定内存库的故障类型的方式不限于此,也可以基于其他方式来确定,本说明书不对确定内存库故障类型的方法进行限定。100.这样便可以确定每个存在故障的内存库的故障类型,从而更好的判断内存单元故障的严重程度。101.此外,考虑到若干个内存库会组成一个dimm,可以基于dimm级别进一步识别故障类型,从而在整个dimm的故障较为严重时,可以对整个dimm进行处理。102.换言之,所述方法还包括:针对每一双列直插式存储模块dimm,根据该dimm中包含的各内存库的故障类型,确定该dimm的故障类型;所述dimm的故障类型用于表征dimm故障的严重程度。103.具体的,在内存库的故障类型包括单一故障、重复故障、行故障、列故障、严重行故障、严重列故障和严重故障的基础上,如何确定dimm的故障类型可以基于如下方案:104.在整个dimm上只有1个内存库存在故障,且该内存库的故障类型为单一故障的情况下,则确定该dimm的故障类型为简单单一故障。105.在整个dimm上有多个内存库存在故障,且这些内存库的故障类型均为单一故障的情况下,则确定该dimm的故障类型为混合单一故障。混合单一故障比简单单一故障更严重。106.在整个dimm上只有1个内存库存在故障,且该内存库的故障类型为重复故障的情况下,则确定该dimm的故障类型为简单重复故障。简单重复故障比混合单一故障更严重。107.在整个dimm上有多个内存库存在故障,且这些内存库的中最严重的故障的故障类型为重复故障的情况下,则确定该dimm的故障类型为混合重复故障。混合重复故障比简单重复故障更严重。108.在整个dimm上有1个内存库存在故障,且这些内存库的中最严重的故障的故障类型为行故障或列故障的情况下,则确定该dimm的故障类型为简单行列故障,简单行列故障比混合重复故障更严重。109.在整个dimm上有多个内存库存在故障,且这些内存库的中最严重的故障的故障类型为行故障或列故障的情况下,则确定该dimm的故障类型为混合行列故障。混合行列故障比简单行列故障更严重。110.在整个dimm上只有1个内存库存在故障,且该内存库的故障类型为严重行故障/严重列故障的情况下,则确定该dimm的故障类型为单一严重行列故障。单一严重行列故障比混合行列故障更严重。111.在整个dimm上有多个内存库存在故障,且这些内存库的中最严重的故障的故障类型为严重行故障或严重列故障的情况下,则确定该dimm的故障类型为混合严重行列故障,混合严重行列故障比单一严重行列故障更严重。112.在整个dimm上只有1个内存库存在故障,且该内存库的故障类型为严重故障的情况下,则确定该dimm的故障类型为单一严重故障,单一严重故障比混合严重行列故障更严重。113.在整个dimm上有多个内存库存在故障,且这些内存库的中最严重的故障的故障类型为严重故障的情况下,则确定该dimm的故障类型器为混合严重故障,混合严重故障比单一严重故障更严重。114.在识别出hardfault后,需要对hardfault进行处理,以免影响系统的正常运行。115.对于hardfault的处理而言,一般是通过内存故障隔离来避免影响操作系统的正常运行。当然,对存在hardfault的内存单元或内存页也可以有其他处理方式,本说明书只是以内存隔离为例进行说明。116.对于内存故障隔离而言,可以只隔离发生hardfault的内存单元。当然考虑到,相关技术中存在现有内核提供的故障隔离接口pageoffline,因此可以基于该接口,根据每个内存页中包括的内存单元的故障,对故障较为严重的内存页进行隔离。117.接下来将详细叙述本说明书中的一种内存故障隔离方法,如图3所示,图3是本说明书根据一示例性实施例示出的一种内存故障隔离方法的流程图,包括以下步骤:118.步骤301,根据上述的内存故障识别方法,确定各内存单元的故障结果。119.各内存单元的结果类型用于表征各内存单元是否存在hardfault。120.换言之,根据前述的内存故障识别方法,可以确定出存在hardfault的内存单元,从而进一步完成故障的隔离。121.步骤303,根据各内存页对应的内存单元故障结果,确定故障内存页。122.其中,所述故障内存页存在的故障导致不可修正错误ue的可能性大于可能性阈值。123.具体而言,对于单个内存单元来说,重复上报ce的次数越多,表明其对系统运行影响越严重,因此需要根据内存单元发生ce的次数来确定其对系统运行影响的严重程度。124.此外,考虑到内存页是操作系统所划分的一个内存页,内存页中地址连续的两个内存单元可能在内存条中的物理分布并不连续,因此可以基于内存单元故障的物理分布来确定故障内存页。125.比如,在有些情况下,两个内存页中存在hardfault的内存单元数量相同,但是一个内存页中存在hardfault的内存单元集中与少数几个内存库,另一个内存页中存在hardfault的内存单元分散在多个内存库中,这种情况下两种内存页导致ue的可能性是不相同的,因此需要根据内存库的故障类型来确定故障内存页。126.此外,并不是内存页中出现故障的内存单元就需要隔离,由于是按照内存页来隔离内存故障,考虑到如果某个内存页只有一个内存单元存在hardfault,在这种情况下,该内存单元对系统运行影响不大,如果直接将该内存页隔离,则浪费了内存空间,使得可用内存减少。因此需要隔离的是对操作系统运行影响较大的内存页,比如可以是更容易导致ue的内存页,或可能造成ce频发的内存页。127.具体的如何根据内存库的故障类型来确定故障内存页,可以根据实际情况进行设置,比如某个应用对内存故障容忍度较低,那么可以在内存库中存在行故障或列故障的情况下,就隔离掉故障行或故障列相关的内存页,如果某个应用内存故障容忍度较高,那么可以在内存库中的故障更为严重的情况下,再去隔离相关的内存页。本说明书对于故障内存页的确定方法不作限定,只要确定出的故障内存页导致ue的可能性大于可能性阈值,都能作为本说明书确定故障内存页的方法。128.步骤305,隔离所述故障内存页。129.要说明的是,隔离内存页,也就是通过pageoffline接口使该内存页下线,使操作系统无法继续使用该内存页,将该内存页和可用的内存页隔离开来。具体而言,操作系统里存储有可访问页表,里面记录了操作系统可以访问的页,内存页下线后,即将该内存页从可访问页表中删除,或在可访问页表中标记该内存页为坏页,使得操作系统无法继续访问该内存页。130.此外,考虑到pageoffline在下线内存页时,如果进程正在使用需要下线的内存页,则会导致pageoffline失败,为了使得pageoffline成功,可以在pageoffline失败的情况下,循环执行pageoffline,直至需要下线的内存页下线成功。131.换言之,步骤305包括:调用预设的隔离内存页接口对所述故障内存页进行隔离;在隔离所述故障内存页失败的情况下,循环执行以下步骤直至所述故障内存页隔离成功:在达到指定周期的情况下,调用预设的隔离内存页接口对所述故障内存页进行隔离。132.通过上述方法,隔离了对系统运行具有更大影响的内存页,使得可用内存页更加充足,同时隔离了故障较为严重的内存页,使系统运行效率不受影响。需要说明的是,本说明书中的方法虽然需要存储故障数据库,但是对于云计算场景而言,其更关系内存故障识别的准确率和覆盖范围,所以虽然上述方法相比相关技术多了故障数据库,但是能很好的解决上文中提及的云计算领域所遇到的问题,对于云计算场景而言是值得的。133.在对本说明书提供的两个方法进行说明后,还需要说明的是两个方法的执行主体。上述方法可以单机运行,也可以应用于管理多个电子设备的中心设备上。134.具体而言,对于存在多个电子设备和管理多个电子设备的中心设备的场景下,为了使得识别hardfault或内存隔离更快更高效(如果需要和远程通信,由远程其他设备来确定hardfault,则会较慢),可以将上述两个方法或上述两个方法中的任一应用于单台电子设备上,用于识别该电子设备上存在hardfault的内存单元,和/或用于将该电子设备上的内存页下线。135.此外,由于如果电子设备在运行中出现故障,丢失了该电子设备上存储的故障数据库,则可能会影响识别hardfault的准确度。因此,为了提升识别hardfault的覆盖率,可以通过中心设备来执行上述两个方法或上述两个方法中的任一项。136.需要说明的是,如果是中心设备执行上述两个方法,那么故障数据库中存储的是中心设备所管理的多个设备的全生命周期的以内存单元为粒度的故障记录,步骤201中更新故障数据库,是在获取到各个设备上报ce的基础上执行的,步骤305隔离该内存页是向对应的电子设备下发隔离该内存页的指令,并由内存页执行上述方法。137.换言之,本说明书还提供一种内存故障隔离系统,所述内存故障隔离系统包括若干服务器,和用于管理若干服务器的中心设备。所述服务器在发生ce的情况下,将ce上报给中心设备。所述中心设备至少用于通过前述的内存故障识别方法识别存在hardfault的内存单元,或通过前述的内存故障隔离方法确定需要隔离的内存页,并通知服务器隔离该内存页。138.此外,上述方法还可以由中心设备和单机共同运行,以使得故障隔离效果更好。139.接下来将通过一具体实施例来对本说明书提供的内存故障识别方法和内存故障隔离方法进行详细说明。140.该方法应用于管理多个服务器的中心设备,如图4a所示,每个服务器上都有错误数据解析组件和故障隔离执行组件,中心设备上有故障类型计算组件、故障数据库以及故障隔离调度组件,各个组件的功能如下。141.错误数据解析组件401,负责监听服务基于带内和带外(部分)的上报的错误数据,并将内存故障中原始的日志以及寄存器数据做数据解析,将故障数据以统一的结构化格式发送给中心设备便于计算errorpattern。142.其中,带内指的是通过操作系统所上传的ce数据,带外指的是通过基板管理控制器(baseboardmanagementcontroller,bmc)所上传的ce数据,由于ce可能通过操作系统上传,也可能通过bmc上传,因此需要监听两者所上报的ce数据。143.内存故障中原始的日志和寄存器中的数据都是ce数据,两者有不同,因此需要综合两者的数据来输出故障数据。144.其中,原始日志以及寄存器数据可以通过edac或mcelog来获取。输出的统一格式的故障数据至少包括ce对应的内存单元的空间信息、ce的影响范围等。145.故障类型计算组件411,接受错误数据解析组件所上传的ce记录,更新中心设备上的故障数据库413,并基于从服务器上线至今的所有故障数据,确定该发生ce的内存单元是否存在hardfault。并基于各内存单元的故障记录,确定以各内存库的故障类型,从而可以确定故障分布,故障的影响范围等,确定每个内存库的故障类型后,将该内存库的故障类型也更新至故障数据库413中。146.故障隔离调度组件412,具有三个功能,第一,根据每个内存页包含的各个内存单元的故障类型,确定该内存页的故障类型,从而确定需要隔离的内存页。147.第二,负责执行pageoffline的调度,也就是向服务器下发pageoffline的指令。此外,充分考虑到内核pageoffline是一个trybest的操作,并不能完全确保一定能够将一个pageoffline隔离,多以调度器特别设计支持基于事件触发和定时循环调度的策略,组件内部根据故障数据库存储的内存页的故障类型来触发隔离,在隔离执行失败的时候确定隔离失败的原因,在合适的时机再次调度来执行隔离操作。如果隔离成功,还可以在故障数据库413中记录该内存页的隔离状态。此外,还可以在服务器重启上线时,对该服务器过去曾隔离的内存页进行隔离。148.第三,维护故障数据库,比如在内存条维修后,需要在故障数据库内清除该内存条对应的故障数据。149.故障数据库413,用于记录每个内存单元全生命周期的故障记录,故障记录可以包括发生ce的次数、401输出的故障数据、内存单元的故障类型,每个内存页包括的各个故障类型的内存单元的个数,以及内存页的隔离状态等等。150.最后,故障隔离执行组件402,用于在接收到服务器下发的pageoffline指令的情况下,调用内核的pageoffline接口,实现内存页的隔离;并在内存隔离失败的情况下,向服务器上报隔离失败的原因;在隔离成功时,向服务器上报隔离成功的消息。151.还需要说明的是,同一设备内的不同组件可以并行执行也可以串行执行,本说明书中将各个组件分离开来为了方便解释各个步骤如何执行,并不表示对本说明书中组件的限定。152.在通过多个组件的功能描述对本说明书示出的方法进行说明后,接下来将通过处理留来来详细叙述本说明书示出的两种方法。153.任一服务器和中心设备之间的交互如图4b所示:154.步骤431,服务器解析原始故障数据,输出格式化的故障数据并将其发送给中心设备。155.步骤441,中心设备接收到上报的故障数据后,确定该故障数据对应的内存单元的故障类型,并将故障数据、该内存单元的ce次数和故障类型更新至故障数据库。156.步骤442,针对每个内存页,中心设备确定是否满足内存故障隔离标准,如果满足,将该隔离任务加入故障隔离调度队列。157.步骤443,中心设备根据故障隔离调度队列,向服务器发送pageoffline指令。158.步骤432,服务器根据中心设备发送的指令,调用内核的pageoffline接口,使对应的内存页下线。159.步骤433,服务器将下线成功或下线失败的结果和原因(下线失败的原因)反馈给中心设备。160.步骤444,中心设备在下线成功的情况下,更新故障数据库中对应内存页的下线状态,在下线失败的情况下,重新将该下线任务加入故障隔离调度队列。161.与前述方法的实施例相对应,本说明书还提供了一种内存故障识别装置、一种内存故障隔离装置及其所应用的电子设备的实施例。162.如图5所示,图5是本说明书根据一示例性实施例示出的一种内存故障识别装置的框图,预先配置故障数据库,所述故障数据库中记录有所有内存单元的全生命周期的故障记录,每一内存单元故障记录至少包括该内存单元全生命周期内发生ce的次数;所述装置包括:163.故障数据库更新模块510,用于在内存单元发生可修正错误ce的情况下,更新故障数据库。164.内存故障识别模块520,用于针对每一内存单元,在故障数据库中该内存单元全生命周期内发生ce的次数超过次数阈值的情况下,确定该内存单元存在hardfault。165.其中,故障数据库更新模块510具体用于:获取内存单元发生的ce对应日志文件;对获取的日志文件进行解析,输出预定格式的故障记录;所述预定格式的故障记录至少包括发生ce的内存单元的地址;将预定格式的故障记录存储至故障数据库,并更新故障数据库中对应内存单元发生ce的次数。166.其中,该装置还可以包括内存库故障类型确定模块530(图中未示出),用于针对每个内存库,根据故障数据库中该内存库包含的内存单元全生命周期的故障记录和各内存单元的物理位置关系,确定该内存库的故障类型;所述内存库的故障类型用于表征内存库故障的严重程度。167.其中,内存库故障类型确定模块530具体用于:在该内存库中发生过ce的内存单元数量小于第一数量阈值,且至少1个发生过ce的内存单元存在hardfault,则确定该内存库的故障类型为重复故障;在该内存库中存在故障行或故障列,则确定该内存库的故障类型为行或列故障;所述故障行或故障列中发生过ce的内存单元数量大于等于第一数量阈值,且所述故障行或故障列中不存在hardfault;在该内存库中存在严重故障行或严重故障列,且严重故障行和/或严重故障列的数量小于第二数量阈值,则确定该内存库的故障类型为严重行或列故障;所述严重故障行或严重故障列中发生过ce的内存单元数量大于等于第一数量阈值,且所述严重故障行或严重故障列中至少一个内存单元存在hardfault;在该内存库中发生过ce的内存单元数量大于第三数量阈值,且发生过ce的行和列的总数大于第四数量阈值的情况下,确定该内存库的故障类型为严重故障;所述第三数量阈值大于所述第一数量阈值,所述第四数量阈值大于所述第二数量阈值。168.其中,该装置在包括内存库故障类型确定模块530的基础上,还可以包括dimm故障类型确定模块540(图中未示出),该模块用于:针对每一双列直插式存储模块dimm,根据该dimm中包含的各内存库的故障类型,确定该dimm的故障类型;所述dimm的故障类型用于表征dimm故障的严重程度。169.如图6所示,图6是本说明书根据一示例性实施例示出的一种内存故障隔离装置的框图,包括:170.故障结果确定模块610,用于根据上述的内存故障识别方法,确定各内存单元的故障结果;各内存单元的结果类型用于表征各内存单元是否存在hardfault。171.故障内存页确定模块620,用于根据各内存页对应的内存单元故障结果,确定故障内存页;其中,所述故障内存页存在的故障导致不可修正错误ue的可能性大于可能性阈值。172.内存页隔离模块630,隔离所述故障内存页173.其中,内存页隔离模块630具体用于,调用预设的隔离内存页接口对所述故障内存页进行隔离;在隔离所述故障内存页失败的情况下,循环执行以下步骤直至所述故障内存页隔离成功:在达到指定周期的情况下,调用预设的隔离内存页接口对所述故障内存页进行隔离。174.上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。175.对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。176.如图7所示,图7示出了实施例内存故障识别装置或内存故障隔离装置所在电子设备的一种硬件结构图,该设备可以包括:处理器1010、用于存储处理器可执行指令的存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。177.处理器1010可以采用通用的cpu、微处理器、应用专用集成电路(applicationspecificintegratedcircuit,asic)、或者一个或多个集成电路等方式实现,用于运行所述可执行指令以实现上述的内存故障识别方法或内存故障隔离方法。178.存储器1020可以采用rom(readonlymemory,只读存储器)、ram(randomaccessmemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。179.输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。180.通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如usb、网线等)实现通信,也可以通过无线方式(例如移动网络、wifi、蓝牙等)实现通信。181.总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。182.需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。183.本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述的内存故障识别方法或内存故障隔离方法。184.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。185.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。186.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1