一种服务器内存故障预警方法及系统
技术领域
本申请涉及服务器内存技术领域,特别涉及一种服务器内存故障预警方法及系统。
背景技术
在服务器应用领域,读写速率最快的存储外设是内存,而且服务器内存插槽众多,容量非常大,属于最容易出现故障的服务器外设,同时服务器引导软件BIOS(Basic InputOutput System,基本输入输出系统)每次启动都会对内存进行初始化,如果内存出现故障,会导致内存初始化失败,服务器出现宕机事件,造成的后果非常严重。
目前服务器引导软件BIOS或服务器监控管理软件BMC(Baseboard ManagerController,基板管理控制器)常用的方法是当BIOS发现内存有故障的时候,BIOS会通过IPMI(Intelligent Platform Management Interface,智能平台管理接口)向BMC发送内存条故障告警事件,BMC只是将内存故障告警事件记录下来供用户主动查询,但是BIOS上报的只是内存条故障事件,并没有对故障内存条出现故障的可能性做出预测,由于BIOS只会在重启阶段对内存进行故障检测,CPU重启后,ECC(Error Checking and Correcting,错误检查和纠正)内存计数会清0,所以无法检测在OS运行阶段的情况下,内存是否发生过故障,使得上报给BMC的内存故障告警有极大的局限性,不能准确反映内存故障状态。
发明内容
本申请实施例提供一种服务器内存故障预警方法及系统,以解决相关技术中无法对内存条出现故障的可能性进行预测、以及反映内存故障状态不够准确的问题。
第一方面,本申请提供了一种服务器内存故障预警方法,其包括步骤:
服务器引导软件BIOS注册管理信息结构SMI中断服务器程序,所述SMI中断服务器程序的函数包括读取内存错误检查和纠正ECC数的函数和内存读写次数的函数,并读取内存ECC数和内存读写次数;
BIOS判断读取到的内存ECC数和内存读写次数是否满足预设的内存预警条件,若是,则通过智能平台管理接口IPMI向BMC发送所述读取到的内存ECC数和内存读写次数;
服务器监控管理软件BMC接收所述内存ECC数和内存读写次数,根据预设的预警算法进行内存故障预警的预判处理,并在产生内存故障预警后,触发显示告警事件。
一些实施例中,所述根据预设的预警算法进行内存故障预警的预判处理的具体步骤包括:
根据内存ECC数和接收ECC数的时间间隔计算内存ECC数的变化速率,结合内存ECC数、内存ECC数的变化速率、内存读写次数、预设的预警算法进行内存故障预警的预判处理。
一些实施例中,所述预设的预警算法包括:
根据预设的内存条的理论寿命,计算得到每个内存条的预警值,计算公式为:
预警值=内存ECC数*内存ECC数的变化速率*内存读写次数/内存条的理论寿命;
设定一个预警阈值,当内存条的预警值超过设定的预警阈值时,则产生内存故障预警,否则,则不产生内存故障预警。
一些实施例中,在所述BIOS注册管理信息结构SMI中断服务器程序之前,还包括步骤:
BIOS初始化内存及CPU的内存控制器MC,当初始化内存条失败时,则通过IPMI向BMC发送该内存条不可用的严重告警信息,并跳过该内存条,继续初始化其他内存条;
BMC接收BIOS发送的该内存条不可用的严重告警信息,并根据该内存条不可用的严重告警信息进行内存故障预警。
一些实施例中,还包括步骤:BMC预先存储预设的内存预警条件;
BMC持续监听内存预警条件更新事件,并在监听到内存预警条件有更新时,BMC更新已存储的内存预警条件;
当BIOS向BMC请求内存预警条件时,若BMC监听到内存预警条件更新,则BMC通过IPMI向BIOS发送更新后的内存预警条件;若BMC没有监听到内存预警条件更新,则BMC通过IPMI向BIOS发送预设的内存预警条件。
一些实施例中,所述BMC接收所述内存ECC数和内存读写次数的具体步骤包括:
BMC初始化链条,所述链表用于存放BIOS发送的内存ECC数、内存读写次数及预警标志位,并初始化所述预警标志位;
BMC接收所述内存ECC数和内存读写次数,并查询所述链条,记录接收到的内存ECC数和内存读写次数;
在产生内存故障预警后,更新所述预警标志位。
一些实施例中,所述内存预警条件包括:内存ECC数超过预设的ECC数阈值,或者内存读写次数超过预设的读写次数阈值;
所述BIOS判断读取到的内存ECC数和内存读写次数是否满足所述内存预警条件的具体步骤包括:
判断所述内存ECC数是否超过ECC数阈值,并判断所述内存读写次数是否超过读写次数阈值;
当所述内存ECC数不超过ECC数阈值,且所述内存读写次数不超过读写次数阈值时,则内存ECC数和内存读写次数不满足所述内存预警条件,否则内存ECC数和内存读写次数满足所述内存预警条件。
第二方面,本申请提供了一种服务器内存故障预警系统,所述服务器内存故障预警系统包括:
第一模块,所述第一模块用于执行服务器引导软件BIOS的所有功能,所述服务器引导软件BIOS用于注册管理信息结构SMI中断服务器程序,所述SMI中断服务器程序的函数包括读取内存ECC数的函数和内存读写次数的函数,读取内存ECC数和内存读写次数,判断读取到的内存错误检查和纠正ECC数和内存读写次数是否满足预设的内存预警条件,若是,则通过智能平台管理接口IPMI向BMC发送所述读取到的内存ECC数和内存读写次数;
第二模块,所述第二模块用于执行服务器监控管理软件BMC的所有功能,所述服务器监控管理软件BMC用于接收内存ECC数和内存读写次数,根据预设的预警算法进行内存故障预警的预判处理,并在产生内存故障预警后,触发显示告警事件。
一些实施例中,所述服务器监控管理软件BMC具体用于:
根据内存ECC数和接收ECC数的时间间隔计算内存ECC数的变化速率,结合内存ECC数、内存ECC数的变化速率、内存读写次数、预设的预警算法进行内存故障预警的预判处理。
一些实施例中,所述服务器引导软件BIOS还用于初始化内存及CPU的内存控制器MC,当初始化内存条失败时,则通过IPMI向BMC发送该内存条不可用的严重告警信息,并跳过该内存条,继续初始化其他内存条;
所述服务器监控管理软件BMC还用于接收BIOS发送的该内存条不可用的严重告警信息,并根据该内存条不可用的严重告警信息进行内存故障预警。
本申请提供的技术方案带来的有益效果包括:可以对内存条出现故障的可能性进行预测,并且可以更加准确地反映内存故障状态,从而使得服务器内存故障预警的可靠性更好。
本申请提供了一种服务器内存故障预警方法,一方面,由于是根据内存ECC数和内存读写次数来进行内存故障预警,可以预测内存存在相同ECC数的情况下根据内存读写次数来进行预警,并且也可以预测内存读写次数相同的情况下根据内存ECC数来进行预警,也可以综合ECC数和内存读写次数来进行预警,进而实现对内存条出现故障的可能性进行预测,使得此种服务器内存故障预警的方法更加科学准确。
另一方面,由于是通过SMI中断服务器程序来读取内存ECC数和内存读写次数,SMI优先级最高,响应更快,提高了内存故障预警的实时性,再者,可以检测在BIOS和OS运行阶段的内存发生过故障的情况,可以更加准确地反映内存故障状态,进而提高内存故障预警的可靠性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的服务器内存故障预警方法的流程图;
图2为本申请实施例提供的BIOS侧内存预警流程图;
图3为本申请实施例提供的BMC侧内存预警流程图;
图4为本申请实施例提供的服务器内存故障预警系统的结构框图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
参见图1所示,本申请实施例提供了一种服务器内存故障预警方法,其包括步骤:
S1:服务器监控管理软件BMC存储内存预警条件;
S2:服务器引导软件BIOS向BMC请求内存预警条件;
S3:BIOS注册管理信息结构SMI中断服务器程序,所述SMI中断服务器程序的函数包括读取内存错误检查和纠正ECC数的函数和内存读写次数的函数;
S4:BIOS读取内存ECC数和内存读写次数;
S5:BIOS判断读取到的内存ECC数和内存读写次数是否满足预设的内存预警条件,若是,则转入步骤S6,若否,则转入步骤S4,此处预设的内存预警条件即为BIOS向BMC请求的内存预警条件;
S6:通过智能平台管理接口IPMI向BMC发送所述读取到的内存ECC数和内存读写次数;
S7:BMC接收所述内存ECC数和内存读写次数,根据预设的预警算法进行内存故障预警的预判处理,并在产生内存故障预警后,触发显示告警事件。
本申请实施例提供的一种服务器内存故障预警方法,一方面,由于是根据内存ECC数和内存读写次数来进行内存故障预警,可以预测内存存在相同ECC数的情况下根据内存读写次数来进行预警,并且也可以预测内存读写次数相同的情况下根据内存ECC数来进行预警,也可以综合ECC数和内存读写次数来进行预警,进而实现对内存条出现故障的可能性进行预测,使得此种服务器内存故障预警的方法更加科学准确。
另一方面,由于是通过SMI中断服务器程序来读取内存ECC数和内存读写次数,SMI优先级最高,响应更快,提高了内存故障预警的实时性,再者,可以检测在BIOS和OS运行阶段的内存发生过故障的情况,可以更加准确地反映内存故障状态,进而提高内存故障预警的可靠性。
更进一步地,在本申请实施例中,步骤S7中所述根据预设的预警算法进行内存故障预警的预判处理的具体步骤包括:
根据内存ECC数和接收ECC数的时间间隔计算内存ECC数的变化速率,结合内存ECC数、内存ECC数的变化速率、内存读写次数、预设的预警算法进行内存故障预警。
在本申请实施例中,在进行内存故障预警时,不仅考虑到了内存ECC数和内存读写次数,而且考虑到了内存ECC数的变化速率,可以提高内存故障预警的准确性,方法更为可靠。
需要说明的是,本申请实施例中结合内存ECC数、内存ECC数的变化速率、内存读写次数、预设的预警算法进行内存故障预警的预判处理,具体为:
当所述内存ECC数、内存ECC数的变化速率、内存读写次数满足预设的预警算法,则产生内存故障预警;
当所述内存ECC数、内存ECC数的变化速率、内存读写次数不满足预设的预警算法,则不产生内存故障预警。
具体地,本申请实施例中,所述预设的预警算法为:
根据预设的内存条的理论寿命,计算得到每个内存条的预警值,计算公式为:
预警值=内存ECC数*内存ECC数的变化速率*内存读写次数/内存条的理论寿命;
设定一个预警阈值,当内存条的预警值超过设定的预警阈值时,则产生内存故障预警,否则,则不产生内存故障预警。
更进一步地,在本申请实施例中,由于内存条的预警值越大,表明内存条发送故障的可能性越大,则优先进行预警,在产生内存故障预警时,也会根据内存条预警值的大小进行优先级排序,预警值越大的内存条优先进行预警。
更进一步地,在本申请实施例中,所述服务器内存故障预警方法,在所述BIOS注册管理信息结构SMI中断服务器程序之前,还包括步骤:
BIOS初始化内存及CPU的内存控制器MC,当初始化内存条失败时,则通过IPMI向BMC发送该内存条不可用的严重告警信息,并跳过该内存条,继续初始化其他内存条;
BMC接收BIOS发送的该内存条不可用的严重告警信息,并根据该内存条不可用的严重告警信息进行内存故障预警。
在本申请实施例中,当内存条在初始化过程中,出现初始化内存条失败时,则表示该内存条存在故障,BIOS会向BMC发送该内存条不可用的严重告警信息,BMC进行相应的内存故障预警,即在本申请实施例的内存故障预警还会考虑是否初始化内存条失败,可以提高内存故障预警的准确性,方法更为可靠。
更进一步地,在本申请实施例中,所述服务器内存故障预警方法还包括步骤:
BMC预先存储预设的内存预警条件;
BMC持续监听内存预警条件更新事件,并在监听到内存预警条件有更新时,BMC更新已存储的内存预警条件;
当BIOS向BMC请求内存预警条件时,若BMC监听到内存预警条件更新,则BMC通过IPMI向BIOS发送更新后的内存预警条件;若BMC没有监听到内存预警条件更新,则BMC通过IPMI向BIOS发送预设的内存预警条件。
在本申请实施例中,内存预警条件可以根据实际需要进行设定和更新,当内存预警条件更新后,BMC会监听到内存预警条件更新事件,当BIOS向BMC请求内存预警条件时,BIOS会请求得到更新后的内存预警条件,并根据更新后的内存预警条件来决定是否向BMC发送内存ECC数和内存读写次数,使得本申请实施例的服务器内存故障预警方法可以适用于多种不同情况,适用性性更广,通用性更强。
更进一步地,在本申请实施例中,所述BMC接收所述内存ECC数和内存读写次数的具体步骤包括:
BMC初始化链条,所述链表用于存放BIOS发送的内存ECC数、内存读写次数及预警标志位,并初始化所述预警标志位;
BMC接收所述内存ECC数和内存读写次数,并查询所述链条,记录接收到的内存ECC数和内存读写次数;
在产生内存故障预警后,更新所述预警标志位。
更进一步地,在本申请实施例中,所述内存预警条件包括:内存ECC数超过预设的ECC数阈值,或者内存读写次数超过预设的读写次数阈值;
所述BIOS判断读取到的内存ECC数和内存读写次数是否满足所述内存预警条件的具体步骤包括:
判断所述内存ECC数是否超过ECC数阈值,并判断所述内存读写次数是否超过读写次数阈值;
当所述内存ECC数不超过ECC数阈值,且所述内存读写次数不超过读写次数阈值时,则内存ECC数和内存读写次数不满足所述内存预警条件,否则内存ECC数和内存读写次数满足所述内存预警条件。
在本申请实施例中,当所述内存ECC数超过ECC数阈值,或者所述内存读写次数超过读写次数阈值时,则内存ECC数和内存读写次数满足所述内存预警条件。
在本申请实施例中,BIOS进行第一次预警判断,根据预设的阈值来判断是否向BMC发送内存ECC数和内存读写次数,可以减小BMC的CPU的使用率,提高该方法的可靠性。
从不同主体的角度来看,本申请实施例的服务器内存故障预警方法分为两个部分流程来完成,分别为BIOS侧内存预警流程、BMC侧内存预警流程。
参见图2所示,BIOS侧内存预警流程包括步骤:
S101:初始化内存及CPU的内存控制器MC,当初始化内存条失败时,则通过IPMI向BMC发送该内存条不可用的严重告警信息,并跳过该内存条,继续初始化其他内存条;
S102:向BMC请求内存预警条件;
S103:注册管理信息结构SMI中断服务器程序,所述SMI中断服务器程序的函数包括读取内存错误检查和纠正ECC数的函数和内存读写次数的函数;
S104:读取内存ECC数和内存读写次数;
S105:判断读取到的内存ECC数和内存读写次数是否满足所述内存预警条件,若是,则转入步骤S106,若否,则转入步骤S104;
S106:通过智能平台管理接口IPMI向BMC发送所述读取到的内存ECC数和内存读写次数。
参见图3所示,BMC侧内存预警流程包括步骤:
S201:预先存储预设的内存预警条件;
S202:监听内存预警条件更新事件,并在监听到内存预警条件有更新时,更新已存储的内存预警条件;
S203:当BIOS向BMC请求内存预警条件时,若BMC监听到内存预警条件更新,则BMC通过IPMI向BIOS发送更新后的内存预警条件;若BMC没有监听到内存预警条件更新,则BMC通过IPMI向BIOS发送预设的内存预警条件;
S204:接收BIOS发送的内存ECC数和内存读写次数;
S205:根据内存ECC数和接收ECC数的时间间隔计算内存ECC数的变化速率,结合内存ECC数、内存ECC数的变化速率、内存读写次数、预设的预警算法进行内存故障预警的预判处理;
S206:在产生内存故障预警后,触发web前端显示告警事件,并记录预警日志;
S207:BMC web前端显示故障内存条的告警信息,并记录事件。
参见图4所示,本申请实施例还提供了一种服务器内存故障预警系统,所述服务器内存故障预警系统包括第一模块和第二模块。
所述第一模块用于执行服务器引导软件BIOS的所有功能,所述服务器引导软件BIOS用于注册管理信息结构SMI中断服务器程序,所述SMI中断服务器程序的函数包括读取内存ECC数的函数和内存读写次数的函数,读取内存ECC数和内存读写次数,判断读取到的内存错误检查和纠正ECC数和内存读写次数是否满足预设的内存预警条件,若是,则通过智能平台管理接口IPMI向BMC发送所述读取到的内存ECC数和内存读写次数;
所述第二模块用于执行服务器监控管理软件BMC的所有功能,所述服务器监控管理软件BMC用于接收内存ECC数和内存读写次数,根据预设的预警算法进行内存故障预警的预判处理,并在产生内存故障预警后,触发显示告警事件。
更进一步地,在本申请实施例的服务器内存故障预警系统中,所述服务器监控管理软件BMC具体用于:
根据内存ECC数和接收ECC数的时间间隔计算内存ECC数的变化速率,结合内存ECC数、内存ECC数的变化速率、内存读写次数、预设的预警算法进行内存故障预警。
更进一步地,在本申请实施例的服务器内存故障预警系统中,所述服务器引导软件BIOS还用于初始化内存及CPU的内存控制器MC,当初始化内存条失败时,则通过IPMI向BMC发送该内存条不可用的严重告警信息,并跳过该内存条,继续初始化其他内存条;
所述服务器监控管理软件BMC还用于接收BIOS发送的该内存条不可用的严重告警信息,并根据该内存条不可用的严重告警信息进行内存故障预警。
更进一步地,在本申请实施例的服务器内存故障预警系统中,所述服务器监控管理软件BMC还用于:
BMC预先存储预设的内存预警条件;
BMC持续监听内存预警条件更新事件,并在监听到内存预警条件有更新时,BMC更新已存储的内存预警条件;
当BIOS向BMC请求内存预警条件时,若BMC监听到内存预警条件更新,则BMC通过IPMI向BIOS发送更新后的内存预警条件;若BMC没有监听到内存预警条件更新,则BMC通过IPMI向BIOS发送预设的内存预警条件。
更进一步地,在本申请实施例的服务器内存故障预警系统中,所述服务器监控管理软件BMC还用于:
BMC初始化链条,所述链表用于存放BIOS发送的内存ECC数、内存读写次数及预警标志位,并初始化所述预警标志位;
BMC接收所述内存ECC数和内存读写次数,并查询所述链条,记录接收到的内存ECC数和内存读写次数;
在产生内存故障预警后,更新所述预警标志位。
更进一步地,在本申请实施例的服务器内存故障预警系统中,所述内存预警条件包括:内存ECC数超过预设的ECC数阈值,或者内存读写次数超过预设的读写次数阈值。
所述服务器引导软件BIOS具体用于:
判断所述内存ECC数是否超过ECC数阈值,并判断所述内存读写次数是否超过读写次数阈值;
当所述内存ECC数不超过ECC数阈值,且所述内存读写次数不超过读写次数阈值时,则内存ECC数和内存读写次数不满足所述内存预警条件,否则内存ECC数和内存读写次数满足所述内存预警条件。
本申请实施例提供的一种服务器内存故障预警系统,一方面,由于是根据内存ECC数和内存读写次数来进行内存故障预警,可以预测内存存在相同ECC数的情况下根据内存读写次数来进行预警,并且也可以预测内存读写次数相同的情况下根据内存ECC数来进行预警,也可以综合ECC数和内存读写次数来进行预警,进而实现对内存条出现故障的可能性进行预测,使得此种服务器内存故障预警的方法更加科学准确。
另一方面,由于是通过SMI中断服务器程序来读取内存ECC数和内存读写次数,SMI优先级最高,响应更快,提高了内存故障预警的实时性,再者,可以检测在BIOS和OS运行阶段的内存发生过故障的情况,可以更加准确地反映内存故障状态,进而提高内存故障预警的可靠性。
在本申请的描述中,需要说明的是,术语“上”、“下”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本申请和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请的限制。除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本申请中的具体含义。
需要说明的是,在本申请中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本申请的具体实施方式,使本领域技术人员能够理解或实现本申请。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。