CN114860432A - 一种内存故障的信息确定方法及装置 - Google Patents
一种内存故障的信息确定方法及装置 Download PDFInfo
- Publication number
- CN114860432A CN114860432A CN202210437693.5A CN202210437693A CN114860432A CN 114860432 A CN114860432 A CN 114860432A CN 202210437693 A CN202210437693 A CN 202210437693A CN 114860432 A CN114860432 A CN 114860432A
- Authority
- CN
- China
- Prior art keywords
- memory
- page
- virtual machine
- fault
- virtual
- 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
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本说明书一个或多个实施例提供一种内存故障的信息确定方法及装置,其中,所述方法包括:获取内存错误数据,所述内存错误数据包括发生故障的内存页的页地址;在所述内存页是由虚拟存储管理模块管理并分配到多个虚拟机中的一个虚拟机使用的内存页的情况下,根据所述页地址查询虚拟机地址空间数据库,确定所述内存故障的内存故障信息;所述内存故障信息包括:所述内存页所分配到的虚拟机的虚拟机标识;所述虚拟机地址空间数据库包括:所述多个虚拟机中的任一虚拟机的虚拟机标识、与该虚拟机被分配的内存页的页地址之间的映射关系。本方法能够确定非内核而是虚拟存储管理模块所管理的内存中发生的故障的影响范围。
Description
技术领域
本说明书一个或多个实施例涉及计算机技术领域,尤其涉及一种内存故障的信息确定方法及装置。
背景技术
在相关技术中,计算节点的内存一般由内核进行管理,当出现内存故障时,会上报包含故障所在page(内存页)的页地址的内存故障上报信息。对于提供虚拟机服务的计算节点而言,计算节点的内存可以分配/售卖给不同的VM(Virtual Machine,虚拟机)进行使用,分配/售卖出去的多个虚拟机所使用的这部分内存不再由内核而是由独立于内核的虚拟存储管理模块进行管理,当这部分内存出现故障时,内核将无法根据故障所在内存页的页地址感知到内存故障所在的存储空间具体是由哪个虚拟机所使用。即,当内存故障发生时,不能知道该内存故障的影响范围,或者说,不能确定关于该内存故障的足够的信息,进而不能对该故障进行精细化的处理,只能整体性地对整个内存进行处理,使得未发生故障的内存的运行也受到影响。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种内存故障的信息确定方法及装置。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种内存故障的信息确定方法,所述方法包括:
获取内存错误数据,所述内存错误数据包括发生故障的内存页的页地址;
在所述内存页是由虚拟存储管理模块管理并分配到多个虚拟机中的一个虚拟机使用的内存页的情况下,根据所述页地址查询虚拟机地址空间数据库,确定所述内存故障的内存故障信息;所述内存故障信息包括:所述内存页所分配到的虚拟机的虚拟机标识;所述虚拟机地址空间数据库包括:所述多个虚拟机中的任一虚拟机的虚拟机标识、与该虚拟机被分配的内存页的页地址之间的映射关系。
根据本说明书一个或多个实施例的第二方面,提出了一种内存故障的信息确定装置,所述装置包括:
错误数据获取模块,用于获取内存错误数据,所述内存错误数据包括发生故障的内存页的页地址;
数据库查询模块,用于在所述内存页是由虚拟存储管理模块管理并分配到多个虚拟机中的一个虚拟机使用的内存页的情况下,根据所述页地址查询虚拟机地址空间数据库,确定所述内存故障的内存故障信息;
所述内存故障信息包括:所述内存页所分配到的虚拟机的虚拟机标识;所述虚拟机地址空间数据库包括:所述多个虚拟机中的任一虚拟机的虚拟机标识、与该虚拟机被分配的内存页的页地址之间的映射关系。
根据本说明书一个或多个实施例的第三方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现上述的内存故障的信息确定方法。
根据本说明书一个或多个实施例的第四方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现上述的内存故障的信息确定方法。
根据本说明书一个或多个实施例的第五方面,提出了一种计算机程序,所述计算机程序被处理器执行时实现上述的内存故障的信息确定方法。
本说明书一个或多个实施例中,当内存故障发生时,获取包括发生故障的内存页的页地址的内存错误数据,在该内存页是由虚拟存储管理模块管理并分配给虚拟机使用的内存页的情况下,内核无法感知到该故障的内存页会对具体哪个虚拟机的运行产生影响,而本方案根据页地址查询虚拟机地址空间数据库,找到虚拟机地址空间数据库中存储的该页地址与虚拟机的虚拟机标识之间的映射关系,确定内存故障所影响到的虚拟机,从而能够对内存故障进行精细化的处理,不会干扰到其他未发生故障的内存的正常运行,提升了对内存故障的处理能力。
附图说明
图1是一示例性实施例提供的一种内存故障的信息确定方法的流程图。
图2是一示例性实施例提供的又一种内存故障的信息确定方法的流程图。
图3是一示例性实施例提供的一种系统框架示意图。
图4是一示例性实施例提供的一种基于中心服务器的内存故障的信息确定方法的实现流程图。
图5是一示例性实施例提供的一种内存故障的信息确定装置的框图。
图6是一示例性实施例提供的一种设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
一般来讲,计算节点的内存管理,比如个人计算机、服务器等的内存管理,是由操作系统中的内核执行的,内核在进行内存管理时,会在硬件的物理内存和进程所使用的内存(称作虚拟内存)之间建立一种映射关系,即内存映射机制,这种映射是以进程为单位。物理内存一般被划分成多个内存页,当硬件的物理内存中出现内存故障时,会上报包含故障所在内存页的页地址的内存故障上报信息。内核能够基于内存映射机制查找到使用该故障所在内存页的进程,从而确定此内存故障涉及到的进程,也就知道了此内存故障所影响的范围。
而对于提供虚拟机服务的计算节点而言,计算节点的内存可以分配/售卖给不同的虚拟机进行使用,分配/售卖出去的多个虚拟机所使用的这部分内存不再由内核管理,而是由独立于内核的虚拟存储管理模块进行管理,对于不由内核管理的内存,也就不存在内存映射机制,当这部分内存出现故障时,将无法根据故障所在内存页的页地址由内核接口直接获取内存故障所在的物理存储空间具体是由哪个虚拟机所使用。即,当内存故障发生时,不能知道该内存故障的影响范围,或者说,不能确定关于该内存故障的足够的信息,进而不能对该故障进行精细化的处理,比如,将该虚拟机所占用的所有存储空间进行隔离,避免故障恶化影响到其他虚拟机使用的内存,而是只能整体性地对整个内存进行处理,比如,重启整个内存,这使得未发生故障的内存的运行也受到影响。
基于此,本说明书提出了一种内存故障的信息确定方法,该方法能够在故障所在的内存页是由虚拟存储管理模块管理并分配到多个虚拟机中的一个虚拟机使用的内存页的情况下,确定包含故障所影响到的具体虚拟机的内存故障信息,即确定内存故障所在的物理存储空间具体是由哪个虚拟机所使用,或者说,对分配给虚拟机使用的内存中发生的内存故障进行受损定界,确定受损的虚拟机。
接下来将对本说明书提供的至少一种内存故障的信息确定方法进行详细说明。
如图1所示,图1是本说明书示出的一种内存故障的信息确定方法的流程图,该方法可以由发生内存故障的计算节点执行,可以由管理计算节点的中心服务器执行,包括以下步骤:
在步骤102中,获取内存错误数据。
本步骤中,内存错误数据可以是内存错误检测工具在检测到内存发生故障后,生成包括发生故障的内存页在硬件内存中的页地址的错误信息。按照错误类型时,发生的内存故障可以分为CE(Correctable Error,可修正错误)或者UCE(Un-Correctable Error,不可修正错误);也可以按照场景将发生的内存故障分为内存读写错误、内存巡检错误。其中,页地址可以是物理内存中内存页的地址或者页号。
具体的,当硬件中的内存发生错误时,内存错误检测工具能够查询到错误发生的内存页并且上报或者打印错误信息。本实施例中,内存错误检测工具可以是MCElog log(Machine Check Exceptions log log,硬件诊断日志搜集工具),EDAC(Error DetectionAnd Correction,错误检测与纠正工具),SEl(SystemEventlog,系统事件日志)或者寄存器错误检测等各种类型的工具。
在步骤104中,在所述内存页是由虚拟存储管理模块管理并分配到多个虚拟机中的一个虚拟机使用的内存页的情况下,根据所述页地址查询虚拟机地址空间数据库,确定所述内存故障的内存故障信息。
其中,内存故障信息包括:内存页所分配到的虚拟机的虚拟机标识;虚拟机地址空间数据库包括:多个虚拟机中的任一虚拟机的虚拟机标识、与该虚拟机被分配的内存页的页地址之间的映射关系。这里在存储虚拟机被分配的每个内存页的页地址时,可以是用连续的内存页的起始地址和结束地址来表示这其中的多个内存页,也可以是将每个内存页的页地址都单独进行存储。
vmem模块(virtual memory manager,虚拟存储管理模块)是一个独立于内核的模块,能够将内存分配给不同的虚拟机使用并对这些被分配给虚拟机的内存进行管理。内核无法知悉这些由vmem模块进行管理的内存具体是由哪个虚拟机使用。可以说,vmem模块对内存的管理与内核对内存的管理是两套并列的管理方案。
在内存发生故障后,当发生故障的内存页位于内核所管理的内存时,内核可以根据硬件的物理内存和进程所使用的内存之间的映射关系,找到该故障影响到的进程,这些进程可以认为是正在运行的vmm(virtual machine monitor,虚拟管理组件),比如:虚拟IO(Input/Output,输入/输出)服务,虚拟计算服务,虚拟网络服务,以及虚拟存储服务等。这些虚拟管理组件一旦发生故障,很可能会影响到所有虚拟机对于内存的使用。内核可以直接确定该故障影响到的进程并上报,以使得对于故障所影响到的进程及时进行针对性的修复,比如中断或重启该进程,避免错误加剧。
在内存发生故障后,当发生故障的内存页位于虚拟存储管理模块所管理的内存时,此时,内核无法确定该故障影响到的虚拟机,本方法中能够根据发生故障的内存页的页地址查询虚拟机地址空间数据库,确定内存故障影响到的虚拟机。
虚拟机地址空间数据库用于记录vmem模块管理的内存地址,维护分配给多个虚拟机使用的所有页地址空间,在虚拟机地址空间数据库中,不同的虚拟机使用不同的虚拟机标识来表示,某个虚拟机的虚拟机标识与该虚拟机被分配的所有内存页的页地址之间存在映射关系。该虚拟机被分配的所有内存页的页地址即该虚拟机所能够使用的内存空间地址。
示例性的,当计算节点的内存包含512GB的存储空间时,这512GB的存储空间一般采用页式存储管理或者段页式存储管理。其中,有少部分内存由内核使用和管理,以维护虚拟管理组件和其他关键服务的正常运行。而大部分内存将由vmem模块管理和分配,vmem模块可以将这部分内存分配给不同的虚拟机使用,在给虚拟机分配内存空间时,可以是将连续的一段内存空间分配给某个虚拟机,该段内存空间由多个内存页组成,这些内存页的起始地址和结束地址之间的地址空间是连续的;也可以是将不连续的一段内存空间分配给某个虚拟机,该段内存空间也由多个内存页组成,但这些内存页的起始地址和结束地址之间的地址空间并不是连续的。比如,同样是将8GB内存分配给虚拟机使用,可以分配给一台虚拟机连续的8GB,分配给另一台虚拟机一段4GB内存,两段1GB内存和一段2GB内存,这四段内存是不连续的。
虚拟机地址空间数据库可以对vmem模块给虚拟机分配的内存空间地址自动进行记录,可以是由人工的将vmem模块给虚拟机分配的内存空间地址记录到虚拟机地址空间数据库,可以是由虚拟机地址空间数据库从其他设备导入vmem模块给虚拟机分配的内存空间地址。
在一个例子中,可以是监听虚拟存储管理模块的内存分配操作,响应于监听到所述内存分配操作,根据所述内存分配操作更新所述虚拟机地址空间数据库。比如,设置一个服务组件地址空间管理模块持续监听vmem模块的操作,当vmem模块进行内存分配操作时,该服务组件地址空间管理模块能够获取内存分配操作所实施的虚拟机和该虚拟机所占有的地址空间的变化,并以此更新虚拟机地址空间数据库。该服务组件地址空间管理模块不会侵入vmem模块,能够更加轻量和独立的来维护这个虚拟机地址空间数据库。
其中,内存分配操作包括如下任一项:将内存页分配给虚拟机、收回已分配给虚拟机的内存页。将内存页分配给虚拟机可以是在虚拟存储管理模块创建新的虚拟机所使用的内存时,也可以是在对已创建的虚拟机所使用的内存进行扩容时。收回已分配给虚拟机的内存页可以是虚拟存储管理模块在已创建的虚拟机不再存在时释放该虚拟机所占用的内存,也可以是对已创建的虚拟机所使用的内存进行缩容。这些内存分配操作能够触发对虚拟机地址空间数据库的更新,更新虚拟机地址空间数据库可以是为新建的虚拟机创建一个虚拟机标识与该虚拟机所被分配的内存页的页地址之间的映射,可以是修改原有映射中虚拟机所被分配的内存页的页地址,也可以是在虚拟机所分配的内存被取消时删除原有的映射。
本步骤中,根据内存页的页地址查询虚拟机地址空间数据库,当查询到该页地址与某个虚拟机标识存在映射关系,或者该页地址所处的地址段与某个虚拟机标识存在映射关系,则确定该发生故障的内存页所影响到虚拟机为该虚拟机标识对应的虚拟机,输出内存故障信息,其中包括:内存页所分配到的虚拟机的虚拟机标识。
事实上,在内存发生故障时,往往采用将故障对应的进程进行隔离或者中断重启该进程的方式进行解决,如果不能确定具体哪个进程发生的故障,则只能大面积的对所有内存对应的进程进行处理,这使得正常运行的业务也被影响,降低了效率。同样对于将内存分配给多个虚拟机使用的计算节点,如果不能将故障进行定界,则无法对故障真正影响到的虚拟机进行处理,只能粗糙地对大范围的内存进行重启或者重置等处理。
本实施例所示的内存故障的信息确定方法中,当内存故障发生时,获取包括发生故障的内存页的页地址的内存错误数据,在该内存页是由虚拟存储管理模块管理并分配给虚拟机使用的内存页的情况下,内核无法感知到该故障的内存页会对具体哪个虚拟机的运行产生影响,而本方案根据页地址查询虚拟机地址空间数据库,找到虚拟机地址空间数据库中存储的该页地址与虚拟机的虚拟机标识之间的映射关系,确定内存故障所影响到的虚拟机,从而能够对内存故障进行精细化的处理,不会干扰到其他未发生故障的内存的正常运行,提升了对内存故障的处理能力。
在发生内存故障(比如,CE)的时候,由于CE基本是burst(突发)形态,一旦发生故障在短时间会大量的上报错误信息,此时如果系统针对每一条错误信息都查询关联page的进程会导致内核hang(夯)死,而且扫描page使用的进程本身就涉及到内核多个锁,这使得无可避免地导致内核死锁。以及,系统日志服务可以查询使用此发生故障的page的所有进程,然后进行打印,如果某一个page被多个进程共享使用,由于内核多个锁的存在时会导致查询时耗时过多,影响系统性能,也会导致内核死锁。而且,内存故障是会恶化的,如果不能及时发现故障的根源并进行处理,则初始的CE极有可能转化成UCE,带来内存的永久受损。
基于此,本说明书提供了另一种内存故障的信息确定方法,图2是本说明书示出的另一种内存故障的信息确定方法的流程图,该方法可以包括如下处理,其中,与图1的流程相同的步骤将不再详述。
为了更方便地对本实施例中的方法进行说明,我们引进一个关键服务组件的概念,该关键服务组件用于划定内存故障对于运行的业务的影响范围,主要分为两部分,一部分是虚拟管理组件,对于内核所管理的内存,该部分的内存所影响到的关键服务组件为虚拟管理组件,虚拟管理组件是一个泛概念,包含虚拟IO服务,虚拟计算服务,虚拟网络服务,以及虚拟存储服务等;另一部分是多个虚拟机,对于虚拟存储管理模块所管理的内存,该部分的内存所影响到的关键服务组件为多个虚拟机中的一个或者几个。本实施例中的内存故障的信息确定方法可以认为是一种内存故障对关键服务组件受损定界的方法。
在步骤202中,接收预设时间段内的多条内存故障上报信息。
其中,每一条所述内存故障上报信息中包括:发生故障的内存页的页地址。预设时间段可以由本领域技术人员根据实际需要进行设置。
本实施例中不再是直接使用在内存错误检测工具检测到内存发生故障后上报的错误信息,这会使得要进行查询的内存页过多,消耗大量时间,发生在内核所管理的内存时甚至导致内核死锁。而是先接收预设时间段内内存错误检测工具上报的多条内存故障上报信息。
这里可以是接收内存故障上报模块在预设时间段内上报的多条内存故障上报信息,内存故障上报模块可以包括MCElog log、EDAC等内存错误检测工具。该内存故障上报模块在daemon(守护进程)中执行,daemon是一段连续运行的程序,用于执行特定的系统任务。
在步骤204中,将包括相同的页地址的至少一条内存故障上报信息进行聚合处理,得到一条内存错误数据,所述内存错误数据中包括:所述相同的页地址。
对于内存故障导致的大量内存故障上报,其中,有不少内存故障上报信息是对某个发生故障的内存页的重复上报,本步骤中,可以对接收的多条内存故障上报信息进行统计分析,将包括相同的页地址的至少一条内存故障上报信息进行聚合处理,对于该页地址得到一条内存错误数据。
比如,在1秒钟内,接收上报的100条内存故障上报信息,其中,有30条内存故障上报信息均是对于发生在page1的内存故障上报,有50条内存故障上报信息均是对于发生在page2的内存故障上报,还有20条内存故障上报信息均是对于发生在page3的内存故障上报。经过聚合处理之后,得到3条内存错误数据,分别包含page1,page2和page3。接下来可以只对这3条内存错误数据进行后续处理,可以避免短时间大量的内存故障导致大量服务进程的查询带来额外系统开销以及夯机风险。
这里可以使用一个故障聚合模块对接收到的预设时间段内的多条内存故障上报信息进行解析得到page id以及进行聚合处理。
在一个例子中,在进行聚合处理得到内存错误数据时,还包括:
统计包括相同的页地址的至少一条内存故障上报信息的信息数量,并记录所述信息数量与所述相同的页地址之间的映射关系。
记录内存错误数据的示例如下:
page count
0x223ff 30
其中,0x223ff为发生故障的内存页的页地址,count为包括0x223ff的内存故障上报信息的信息数量。
在步骤206中,在所述内存页是由虚拟存储管理模块管理并分配到多个虚拟机中的一个虚拟机使用的内存页的情况下,根据所述页地址查询虚拟机地址空间数据库,确定所述内存故障的内存故障信息。
本实施例中,可以设置一个服务进程查询模块,该模块提供两个子模块,一个子模块是针对内核管理的内存的进程查询,该子模块使用内核kernel提供的内核接口即可实现。在内存页是由内核管理的内存页的情况下,所述内存错误数据中的页地址用于由内核查询使用内存页的进程。该服务进程查询模块可以基于故障聚合模块所记录的数据进行查询,查询到的结果也进行记录,示例性的,内核根据page调用内核接口进行查询得到的结果如下所示:
page pid list count
0x223ff 332,123 30
其中,pid list为使用内存页0x223ff的进程的列表,可见,此次故障所影响到的进程为332,123。
另一个子模块是针对vmem管理的内存的进程查询,该子模块是一个可选模块,因为我们并不要求找到虚拟机所使用的进程,本领域技术人员可以根据实际需要设置该模块。
由于内存错误数据为聚合处理后的数据,在根据内存错误数据中的页地址查询使用该内存页的进程时,查询量大大减少,可以灵活地查询,不会阻塞日志链路,也不会导致夯机和死锁。
在内存页是由虚拟存储管理模块管理并分配到多个虚拟机中的一个虚拟机使用的内存页的情况下,在根据内存错误数据中的页地址查询虚拟机地址空间数据库,确定内存故障的内存故障信息时,查询量同样地会大大减少,提升了查询效率和确定内存故障信息的速度。
在一个例子中,本实施例中方法可以是应用于中心服务器,中心服务器可以管理一个或多个计算节点。对各计算节点中的vmem模块进行监听的服务组件地址空间管理模块可以设置在该中心服务器,比如,当监听到某个计算节点的vmem模块进行内存分配操作时,通过该计算节点和中心服务器之间基于本地的可选链路传输该内存分配操作包含的信息,以更新虚拟机地址空间数据库,通过本地的可选链路可以减少虚拟机所使用的网络的堵塞。该虚拟机地址空间数据库也位于该中心服务器,由中心服务器进行管理和维护,可以记录一个或多个计算节点中各自的vmem模块管理的内存地址。
在获取内存错误数据时,由中心服务器获取至少一个计算节点中内存的内存错误数据,并对不同计算节点中的内存错误数据分别进行处理,在某个内存错误数据中的内存页是由虚拟存储管理模块管理并分配到多个虚拟机中的一个虚拟机使用的内存页的情况下,根据所述页地址查询虚拟机地址空间数据库。本方法实施在中心服务器时,可以不占用服务器的计算和存储资源,使得用于售卖/分配的计算节点的内存的售卖/分配率更高,不会影响到计算节点中的业务。
在一个例子中,在确定内存故障的内存故障信息之后,还可以将上述信息存到关键服务组件-内存故障数据库中,以便于对发生的故障进行统计分析。
具体的,可以使用一个关键服务组件-内存故障映射模块将进程、关键服务组件、内存页等进行映射,示例性,关键服务组件-内存故障数据库中记录的映射关系,可以如下所示:
其中,avs表示虚拟网络服务,instance1为虚拟机的虚拟机标识,发生故障的内存页为0x223ff,该故障影响到了虚拟网络服务和虚拟机instance1,影响的进程为内核管理的进程332,123和虚拟机中的进程2345。
请参见图3,图3表示了在实现本实施例中的内存故障的信息方法的过程中,所使用到的故障聚合模块、服务进程查询模块、服务组件地址空间管理模块、关键服务组件-内存故障映射模块以及关键服务组件-内存故障数据库所组成的系统框架图。
本实施例所示的内存故障的信息确定方法中,当内存故障发生时,接收预设时间段内的多条内存故障上报信息,获取包括发生故障的内存页的页地址的内存错误数据,将包括相同的页地址的至少一条内存故障上报信息进行聚合处理,无论对于内核所管理的内存还是虚拟存储管理模块所管理的内存,均大大地减少了根据内存页的页地址需要进行的查询量;而且,在该内存页是由虚拟存储管理模块管理并分配给虚拟机使用的内存页的情况下,根据页地址查询虚拟机地址空间数据库,找到虚拟机地址空间数据库中存储的该页地址与虚拟机的虚拟机标识之间的映射关系,确定内存故障所影响到的虚拟机,从而能够对内存故障进行精细化的处理,不会干扰到其他未发生故障的内存的正常运行,提升了对内存故障的处理能力。
图4示出了一种基于中心服务器的内存故障的信息确定方法的实现流程图,如图4所示,在本实施例中,由中心服务器管理多个计算节点,并对每个计算节点的内存故障信息进行确定,虚拟机地址空间数据库(即图中VMs地址空间DB,local指的是该数据库位于中心服务器,为本地数据库)也位于该中心服务器,由中心服务器进行管理和维护,可以记录多个计算节点中各自的vmem模块管理的内存地址。
该方法在实际实施中可以分为两个流程,空心圆圈表示流程的起点,实心圆圈表示流程的结束。
首先,对左边的流程进行说明:可以始终运行一个监听vmem的内存分配操作的进程,即“Vmem分配监听”,当监听到内存分配操作,即“是否有vm创建/释放/扩容/缩容操作”时,根据内存分配操作更新虚拟机地址空间数据库,即“VMs地址空间更新”。比如,在中心服务器设置一个服务组件地址空间管理模块持续监听各个计算节点中的vmem模块的内存操作,当监听到某个计算节点的vmem模块进行内存分配操作时,该服务组件地址空间管理模块能够获取内存分配操作所实施的vm和该vm所占有的地址空间的变化,并通过该VM所在的计算节点和中心服务器之间基于本地的可选链路传输该内存分配操作包含的上述信息,以此更新虚拟机地址空间数据库。该服务组件地址空间管理模块不会侵入vmem模块,能够更加轻量和独立的来维护这个虚拟机地址空间数据库,通过本地的可选链路可以减少虚拟机所使用的网络的堵塞。
接着,对右边的流程进行说明:可以始终运行mcelog/edac/sel/寄存器检测等任一项或几项内存错误检测工具,当检测到内存故障时,内存错误检测工具将上报大量错误信息,即“内存CE上报”;实时将包括相同的page的多个错误信息进行聚合处理,得到一条内存错误数据,内存错误数据中包括:相同的page,即“实时错误聚合”,对于聚合后得到的内存错误数据,可以按照page查询进程,大大地减少了根据page需要进行的查询量。
如果该page不是vmem内存,则是内核管理的内存,可以通过调用内核接口查询所在的进程,并通过查询到的进程与该故障所在page建立映射,即建立“关键服务组件-内存故障映射”,流程结束。如果该page是vmem内存,即vmem模块管理的内存,则通过读取虚拟机地址空间数据库(VMs地址空间DB)的缓存得到该page所对应的vm,并建立该vm和该故障所在page的映射,即建立“关键服务组件-内存故障映射”,流程结束。
如图5所示,图5是本说明书根据一示例性实施例示出的一种内存故障的信息确定装置,所述装置包括:
错误数据获取模块301,用于获取内存错误数据,所述内存错误数据包括发生故障的内存页的页地址。
数据库查询模块302,用于在所述内存页是由虚拟存储管理模块管理并分配到多个虚拟机中的一个虚拟机使用的内存页的情况下,根据所述页地址查询虚拟机地址空间数据库,确定所述内存故障的内存故障信息。
其中,所述内存故障信息包括:所述内存页所分配到的虚拟机的虚拟机标识;所述虚拟机地址空间数据库包括:所述多个虚拟机中的任一虚拟机的虚拟机标识、与该虚拟机被分配的内存页的页地址之间的映射关系。
在一个例子中,错误数据获取模块301具体用于:接收预设时间段内的多条内存故障上报信息,每一条所述内存故障上报信息中包括:发生故障的内存页的页地址;将包括相同的页地址的至少一条内存故障上报信息进行聚合处理,得到一条内存错误数据,所述内存错误数据中包括:所述相同的页地址。
在一个例子中,错误数据获取模块301还用于:统计所述包括相同的页地址的至少一条内存故障上报信息的信息数量,并记录所述信息数量与所述相同的页地址之间的映射关系。
在一个例子中,在所述内存页是由内核管理的内存页的情况下,所述内存错误数据中的页地址用于由所述内核查询使用所述内存页的进程。
在一个例子中,数据库查询模块302,还用于:监听所述虚拟存储管理模块的内存分配操作;响应于监听到所述内存分配操作,根据所述内存分配操作更新所述虚拟机地址空间数据库。
在一个例子中,所述内存分配操作包括如下任一项:将内存页分配给虚拟机、收回已分配给虚拟机的内存页。
在一个例子中,所述方法应用于中心服务器,所述中心服务器包含所述虚拟机地址空间数据库;错误数据获取模块301具体用于:所述中心服务器获取至少一个计算节点中内存的内存错误数据。
上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
如图6所示,图6示出了上述实施例中的内存故障的信息确定装置所在计算机设备的一种硬件结构图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述的内存故障的信息确定方法。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本说明书还提供一种计算机程序,该计算机程序执行时,实现上述的内存故障的信息确定方法。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。
Claims (11)
1.一种内存故障的信息确定方法,所述方法包括:
获取内存错误数据,所述内存错误数据包括发生故障的内存页的页地址;
在所述内存页是由虚拟存储管理模块管理并分配到多个虚拟机中的一个虚拟机使用的内存页的情况下,根据所述页地址查询虚拟机地址空间数据库,确定所述内存故障的内存故障信息;所述内存故障信息包括:所述内存页所分配到的虚拟机的虚拟机标识;所述虚拟机地址空间数据库包括:所述多个虚拟机中的任一虚拟机的虚拟机标识、与该虚拟机被分配的内存页的页地址之间的映射关系。
2.根据权利要求1所述的方法,
所述获取内存错误数据,包括:
接收预设时间段内的多条内存故障上报信息,每一条所述内存故障上报信息中包括:发生故障的内存页的页地址;
将包括相同的页地址的至少一条内存故障上报信息进行聚合处理,得到一条内存错误数据,所述内存错误数据中包括:所述相同的页地址。
3.根据权利要求2所述的方法,
所述将包括相同的页地址的至少一条内存故障上报信息进行聚合处理,得到一条内存错误数据,还包括:
统计所述包括相同的页地址的至少一条内存故障上报信息的信息数量,并记录所述信息数量与所述相同的页地址之间的映射关系。
4.根据权利要求2所述的方法,在所述内存页是由内核管理的内存页的情况下,所述内存错误数据中的页地址用于由所述内核查询使用所述内存页的进程。
5.根据权利要求1所述的方法,
所述方法还包括:
监听所述虚拟存储管理模块的内存分配操作;
响应于监听到所述内存分配操作,根据所述内存分配操作更新所述虚拟机地址空间数据库。
6.根据权利要求5所述的方法,
所述内存分配操作包括如下任一项:将内存页分配给虚拟机、收回已分配给虚拟机的内存页。
7.根据权利要求1-6任一项所述的方法,所述方法应用于中心服务器,所述中心服务器包含所述虚拟机地址空间数据库;
所述获取内存错误数据,包括:
所述中心服务器获取至少一个计算节点中内存的内存错误数据。
8.一种内存故障的信息确定装置,所述装置包括:
错误数据获取模块,用于获取内存错误数据,所述内存错误数据包括发生故障的内存页的页地址;
数据库查询模块,用于在所述内存页是由虚拟存储管理模块管理并分配到多个虚拟机中的一个虚拟机使用的内存页的情况下,根据所述页地址查询虚拟机地址空间数据库,确定所述内存故障的内存故障信息;
所述内存故障信息包括:所述内存页所分配到的虚拟机的虚拟机标识;所述虚拟机地址空间数据库包括:所述多个虚拟机中的任一虚拟机的虚拟机标识、与该虚拟机被分配的内存页的页地址之间的映射关系。
9.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-7中任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1-7中任一项所述方法的步骤。
11.一种计算机程序,所述计算机程序被处理器执行时实现如权利要求1-7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210437693.5A CN114860432A (zh) | 2022-04-19 | 2022-04-19 | 一种内存故障的信息确定方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210437693.5A CN114860432A (zh) | 2022-04-19 | 2022-04-19 | 一种内存故障的信息确定方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114860432A true CN114860432A (zh) | 2022-08-05 |
Family
ID=82633962
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210437693.5A Pending CN114860432A (zh) | 2022-04-19 | 2022-04-19 | 一种内存故障的信息确定方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114860432A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115495278A (zh) * | 2022-11-14 | 2022-12-20 | 阿里巴巴(中国)有限公司 | 异常修复方法、设备及存储介质 |
-
2022
- 2022-04-19 CN CN202210437693.5A patent/CN114860432A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115495278A (zh) * | 2022-11-14 | 2022-12-20 | 阿里巴巴(中国)有限公司 | 异常修复方法、设备及存储介质 |
CN115495278B (zh) * | 2022-11-14 | 2023-03-31 | 阿里巴巴(中国)有限公司 | 异常修复方法、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10503623B2 (en) | Monitoring containerized applications | |
US8595556B2 (en) | Soft failure detection | |
US6701464B2 (en) | Method and system for reporting error logs within a logical partition environment | |
US20100293270A1 (en) | Use Tag Clouds to Visualize Components Related to an Event | |
CN107844274B (zh) | 基于超融合存储系统的硬件资源管理方法、装置及终端 | |
CN108287769B (zh) | 一种信息处理方法及装置 | |
US9503341B2 (en) | Dynamic discovery of applications, external dependencies, and relationships | |
CN112698915A (zh) | 多集群统一监控告警方法、系统、设备及存储介质 | |
CN111258851A (zh) | 一种集群的告警方法、装置、设置及存储介质 | |
CN109586989B (zh) | 一种状态检查方法、装置及集群系统 | |
CN113067875A (zh) | 基于微服务网关动态流控的访问方法和装置以及设备 | |
GB2518151A (en) | Network anomaly detection | |
CN114860432A (zh) | 一种内存故障的信息确定方法及装置 | |
US7478404B1 (en) | System and methods for event impact analysis | |
CN111600771B (zh) | 网络资源探测系统、方法 | |
WO2021174684A1 (zh) | 一种割接信息处理方法、系统及装置 | |
CN112559565A (zh) | 一种异常检测方法、系统及装置 | |
CN114637656B (zh) | 基于Redis的监控方法、装置、存储介质和设备 | |
US10552456B2 (en) | Deriving dependency information from tracing data | |
CN115562933A (zh) | 作业监控数据的处理方法及装置、存储介质、电子设备 | |
CN115237889A (zh) | 数据库切换方法及装置、存储介质、计算机设备 | |
CN114265669A (zh) | 一种已销毁容器实例识别方法及装置 | |
CN112306989A (zh) | 数据库实例的处理方法及装置、存储介质、电子装置 | |
CN109426559B (zh) | 命令下发方法和装置、存储介质、处理器 | |
CN113741912A (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 |