发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种缩短服务器开机时间的方法及***,可选择性进行内存初始化程序,缩短服务器开机时间。
本发明第一方面提供一种缩短服务器开机时间的方法,其包括步骤:
服务器上电后,如果服务器内存配置与前一次运行相同,且前一次运行过程中未出现不可纠正错误、以及可纠正错误的有效计数小于错误阈值,上述服务器获取前一次上电存储的内存训练参数,并通过回填的方式快速完成内存初始化;
否则,上述服务器重新进行完整内存初始化,并存储新的内存训练参数。
基于第一方面,在可能的实施例中,设立一个内存训练的标志位,上述服务器运行过程中,通过基板管理控制器BMC实时监视内存错误类型和错误计数;
当出现不可纠正错误时,内存训练的标志位置1;
当可纠正错误的有效计数大于或等于错误阈值时,内存训练的标志位置1;
当未出现不可纠正错误、且可纠正错误的有效计数小于错误阈值时,内存训练的标志位置0。
基于第一方面,在可能的实施例中,每次服务器上电后,当服务器内存配置与前一次运行相同时,先读取内存训练的标志位,如果标志位为0,说明前一次上电存储的内存训练参数可用,服务器获取前一次上电存储的内存训练参数,并通过回填的方式快速完成内存初始化;
如果标志位为1,说明前一次上电存储的内存训练参数不可用,上述服务器重新进行完整内存初始化,并存储新的内存训练参数;
上述内存配置包括配置的内存条数量、所配置的内存条规格、各内存条所在的槽位及各槽位上内存的序列号
基于第一方面,在可能的实施例中,获取错误阈值具体包括:
获取上述可纠正错误的过滤参数、周期参数与倍数参数;
计算上述过滤参数、周期参数与倍数参数的乘积,得到上述错误阈值;
上述过滤参数为每秒允许的可纠正错误数量;上述周期参数为设定的对可纠正错误的判断周期;上述倍数参数为设定的周期内出现的可纠正错误的放大倍数。
基于第一方面,在可能的实施例中,获取可纠正错误的有效计数,具体包括:
计算上述过滤参数和周期参数的乘积,得到周期内允许的可纠正错误的周期阈值;
获取当前周期新增错误数量,减去上述周期阈值,得到当前周期的有效计数;
计算上述当前周期的有效计数与上一周期的有效计数之和,得到上述可纠正错误的有效计数。
基于第一方面,在可能的实施例中,上述服务器首次上电时,通过基本输入输出***BIOS程序进行完整内存初始化,执行标准内存训练过程,并将得到的内存训练参数通过上述BMC存储至存储装置。
基于第一方面,在可能的实施例中,上述完整内存初始化具体包括:
对内存控制器进行初始化,并对内存控制器参数进行内存训练,找到满足训练要求的参数集;
从上述参数集中逐个扫描找到最佳相位匹配参数,作为内存训练参数;
将上述内存训练参数由SMBUS总线传递至上述BMC,并存储至存储装置。
基于第一方面,在可能的实施例中,上述内存训练参数包括地址Addr或命令Cmd信号对时钟CLK的延迟值,以及双向数据控制DQ信号对双向数据控制引脚DQS的延迟值。
本发明第二方面提供一种缩短服务器开机时间的***,其设置于服务器,其包括:
判断模块,用于在服务器上电后,判断服务器内存配置与前一次运行是否相同、前一次运行过程中是否出现不可纠正错误、以及可纠正错误的有效计数是否小于错误阈值;
初始化模块,用于在判断模块判断服务器内存配置与前一次运行相同、未出现不可纠正错误、且可纠正错误的有效计数小于错误阈值时,获取前一次上电存储的内存训练参数,并通过回填的方式快速完成内存初始化;还用于在判断模块判断其他情况时,重新进行完整内存初始化,得到新的内存训练参数;
存储模块,其用于存储上述新的内存训练参数。
基于第二方面,在可能的实施例中,还包括BMC模块,其用于设立一个内存训练的标志位,以及实时监视述服务器运行过程中的内存错误类型和错误计数;
当出现不可纠正错误时,上述内存训练的标志位置1;
当可纠正错误的有效计数大于或等于错误阈值时,上述内存训练的标志位置1;
当未出现不可纠正错误、且可纠正错误的有效计数小于错误阈值时,上述内存训练的标志位置0;
每次服务器上电时,上述判断模块判断服务器内存配置与前一次运行相同后,还用于读取内存训练的标志位,如果标志位为0,上述初始化模块用于获取前一次上电存储的内存训练参数,并通过回填的方式快速完成内存初始化;
如果标志位为1,上述初始化模块用于重新进行完整内存初始化,并存储新的内存训练参数。
与现有技术相比,本发明的优点在于:
(1)本发明的缩短服务器开机时间的方法,在服务器下电后再次上电时,根据服务器当前内存配置与前一次运行是否相同、前一次运行过程中是否出现不可纠正错误、以及可纠正错误的有效计数是否超过错误阈值,判断前一次上电后存储的内存训练参数是否可用,来选择性地进行完整内存初始化,与现有的开机初始化过程相比,即不必每次上电都重新进行完整的内存训练,也不是单纯的直接进行内存训练参数回填以完成初始化,极大缩短了服务器开机所需时间,提高服务器的可用度。
(2)本发明的缩短服务器开机时间的方法,具有广泛的适用性,通过管理单元BMC实时监视服务器运行过程中内存错误类型和错误计数,对内存训练的标志位置0或1,以便于下一次上电时以此选择是否重新做内存训练,增强了服务器的可靠性和稳定性。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
本发明提供一种缩短服务器开机时间的方法的实施例,其包括步骤:
服务器上电后,如果服务器内存配置与前一次运行相同,且前一次运行过程中未出现不可纠正错误、以及可纠正错误的有效计数小于错误阈值,服务器获取前一次上电存储的内存训练参数,并通过回填的方式快速完成内存初始化;
否则,该服务器重新进行完整内存初始化,并存储新的内存训练参数。
其中,上述内存配置是指服务器中配置的内存部件,具体包括配置的内存条数量、所配置的内存条规格、各内存条所在的槽位及各槽位上内存的序列号。服务器内存配置与前一次运行相同是指:服务器中配置的内存部件,跟上一次一模一样,其数量一样、配置规格相同、所安装的位置也没有发生变化。即,一旦硬件发生了变化,就需要重新初始化。
参见图1所示,本实施例的方法具体包括:
S1.服务器上电后,判断服务器内存配置与前一次运行是否相同,若是,转向S2,若否,转向S4。
S2.判断前一次运行过程中是否未出现不可纠正错误、且可纠正错误的有效计数小于错误阈值,若是,转向S3,若否,转向S4。
S3.服务器获取前一次上电存储的内存训练参数,并通过回填的方式快速完成内存初始化,结束。
S4.该服务器重新进行完整内存初始化,并存储新的内存训练参数,结束。
本实施例的缩短服务器开机时间的方法,在服务器下电后再次上电时,根据服务器当前内存配置与前一次运行是否相同、前一次运行过程中是否出现不可纠正错误、以及可纠正错误的有效计数是否超过错误阈值,判断前一次上电后存储的内存训练参数是否可用,来选择性地进行完整内存初始化。若判断前一次上电存储的内存训练参数可用,则可直接获取该内存训练参数,并通过回填的方式,即跳过内存训练,以达到快速完成内存初始化的目的;若判断该内存训练参数不可用,则表明运行环境如温度、电压等发生了变化,可能导致内存读写错误,因此需要选择重新进行完整内存初始化,并存储新的内存训练参数。
本实施例与现有的开机初始化过程相比,即不必每次上电都重新进行完整的内存训练,也不是单纯的直接进行内存训练参数回填以完成初始化,极大缩短了服务器开机所需时间,提高服务器的可用度。
在上一个实施例的基础上,本实施例方法还包括设立一个内存训练的标志位,服务器运行过程中,通过BMC(Baseboard ManagementController,基板管理控制器)实时监视基本输入输出***BIOS程序发送的内存错误类型和错误计数,并根据判断规则对内存训练的标志位置0或1。
上述判断规则为:当出现不可纠正错误时,内存训练的标志位置1;当可纠正错误的有效计数大于或等于错误阈值时,内存训练的标志位置1;当未出现不可纠正错误、且可纠正错误的有效计数小于错误阈值时,内存训练的标志位置0。
本实施例中,每次服务器上电后,当服务器内存配置与前一次运行相同时,先读取内存训练的标志位,如果标志位为0,说明前一次上电存储的内存训练参数可用,服务器获取前一次上电存储的内存训练参数,并通过回填的方式快速完成内存初始化;如果标志位为1,说明前一次上电存储的内存训练参数不可用,服务器重新进行完整内存初始化,并存储新的内存训练参数。
参见下表1,上述内存错误类型包括可纠正错误和不可纠正错误。其中,上述不可纠正错误包括突发致命错误、可选择处理的不可纠正错误、不需要处理的不可纠正错误、必须处理的不可纠正错误以及巡检不可纠正错误。可纠正错误包括巡检可纠正错误、读写可纠正错误以及迁移可纠正错误。上述8种错误在X86架构服务器内存技术中,为通用分类错误,具体可参见:《
64and IA-32Architectures Software Developer’s Manual》。
表1
本实施例的方法,具有广泛的适用性,通过BMC实时监视服务器运行过程中内存错误类型和错误计数,来对内存训练的标志位置0或1,以便于下一次上电时以此选择是否重新做内存训练,增强了服务器的可靠性和稳定性。
在第二个实施例的基础上,本实施例中,获取上述错误阈值具体包括:
首先,获取告警为可纠正错误时的过滤参数、周期参数与倍数参数。然后计算上述过滤参数、周期参数与倍数参数的乘积,得到上述错误阈值,即错误阈值=过滤参数×周期参数×倍数参数。
由于内存错误产生的数量会随着运行时间累计增加,若是单纯以累计计数的方式进行计算,不考虑时间维度的因素,很容易出现误报。因为即使是在可纠正错误出现的频率很低的情况下,经过连续几个小时或更长时间累加,总计数量也会超过错误阈值。为了避免这种情况发生,需要对错误计数采用过滤的方式,即设置一个错误的过滤参数,每秒从总错误计数中减掉一个固定的数值,以避免错误数量随时间过度积累,得到有效错误计数。因此,上述过滤参数为每秒允许的可纠正错误数量。可选地,过滤参数的取值范围为1-10个/秒。
服务器在运行过程中,若内存短时间产生大量错误,可能是受外界电磁干扰,瞬时造成较多的内存报错而并非是持续性的,这类内存错误会很快被纠正,在一定时间后则不会再次产生该类错误。为了避免这类错误对计数的干扰,可对一定周期内的错误数据进行累计判断,即设置一个周期参数。上述周期参数为设定的对可纠正错误的判断周期。可选地,周期参数的取值范围为3-60秒。
本实施例中,倍数参数为设定的周期内出现的可纠正错误的放大倍数。该倍数参数代表对可纠正错误的出现频次的容忍程度,倍数参数越小,则对内存错误的敏感度越高,倍数参数越大,则对内存错误的敏感度越低。可选地,倍数参数的取值范围为10-100。
进一步地,错误阈值越小,对内存错误纠正的要求越严格。当错误阈值较小时,极容易出现可纠正错误累计超出错误阈值,变成不可纠正错误,因此对错误类型的漏报情况较少,但判断的准确性较低。
可选地,对错误判断的准确性要求不高但不可漏报的极端情况,设置过滤参数为1个/秒,周期参数为3秒,倍数参数为10,则错误阈值为30。
可选地,对错误判断的准确性要求较高但同时也考虑少漏报的实用平衡情况,设置过滤参数为1个/秒,周期参数为60秒,倍数参数为100,则错误阈值为6000。
可选地,对错误判断的准确性要求很高的极端情况,设置过滤参数为10个/秒,周期参数为60秒,倍数参数为100,则错误阈值为60000。
在上述实施例的基础上,本实施例中,获取可纠正错误的有效计数,具体包括:
首先计算上述过滤参数和周期参数的乘积,得到周期内允许的可纠正错误的周期阈值。
然后获取当前周期新增错误数量,减去上述周期阈值,得到当前周期的有效计数。
最后计算上述当前周期的有效计数与上一周期的有效计数之和,得到当前时刻的上述可纠正错误的有效计数。
即,可纠正错误的有效计数=上一周期的有效计数+当前周期新增错误数量-过滤参数×周期参数。因此,当可纠正错误的有效计数超过错误阈值时,内存训练的标志位置1。
参见图2所示,本实施例中,标志位置0或1的具体流程如下:
A1、获取可纠正错误的过滤参数、周期参数与倍数参数;
A2、然后计算上述过滤参数、周期参数与倍数参数的乘积,得到上述错误阈值;
A3、判断是否存在内存错误,若是,则转向A5,若否,则转向A4;
A4、内存训练的标志位置0,结束。
A5、判断内存错误是否为可纠正错误,若是,转向A6,若否,转向A7。
A6、判断可纠正错误的有效计数是否超过错误阈值,若是,则转向A7,若否,则转向A4;
A7、内存训练的标志位置1,结束。
在上述实施例的基础上,本实施例中,服务器首次上电时,需要通过基本输入输出***BIOS程序进行完整内存初始化,执行标准内存训练过程,并将得到的内存训练参数通过上述BMC存储至存储装置。可选地,存储装置为串行外设接口闪存(SPI flash)。
本实施例中,上述完整内存初始化具体包括:
首先通过BIOS程序对内存控制器进行初始化,并对内存控制器参数进行内存训练,找到满足训练要求的参数集。然后从上述参数集中逐个扫描找到最佳相位匹配参数,作为内存训练参数,从而保证内存训练参数的裕量最大。
另外,完成内存训练后,BIOS程序还要将上述内存训练参数由SMBUS(SystemManagement Bus,***管理总线)总线传递至上述BMC,并存储至SPI flash。存储至SPIflash的内存训练参数在服务器下电后不会丢失。
本实施例中,上述内存训练参数包括Addr(Address,地址)信号或Cmd(Command,命令)信号对CLK(Clock,时钟)的延迟值,以及DQ(Bi-directional Data,双向数据控制)信号对DQS(Bi-directional Data Strobe,双向数据控制引脚)的延迟值。
本发明还提供一种缩短服务器开机时间的***的实施例,该***设置于服务器,该具体包括判断模块、初始化模块和存储模块。
上述判断模块用于在服务器上电后,判断服务器内存配置与前一次运行是否相同、前一次运行过程中是否出现不可纠正错误、以及可纠正错误的有效计数是否小于错误阈值。
上述初始化模块用于在判断模块判断服务器内存配置与前一次运行相同、未出现不可纠正错误、且可纠正错误的有效计数小于错误阈值时,获取前一次上电存储的内存训练参数,并通过回填的方式快速完成内存初始化;还用于在判断模块判断其他情况时,重新进行完整内存初始化,得到新的内存训练参数。
当重新进行完整内存初始化后,上述存储模块用于存储新的内存训练参数,将其本身存储的前一次上电的内存训练参数覆盖。
在上述实施例的基础上,本实施例的***还包括BMC模块。上述BMC模块用于设立一个内存训练的标志位,以及实时监视述服务器运行过程中的内存错误类型和错误计数。
当出现不可纠正错误时,内存训练的标志位置1;当可纠正错误的有效计数大于或等于错误阈值时,内存训练的标志位置1;当未出现不可纠正错误、且可纠正错误的有效计数小于错误阈值时,内存训练的标志位置0。
每次服务器上电时,判断模块判断服务器内存配置与前一次运行相同后,还用于读取内存训练的标志位,如果标志位为0,说明前一次上电存储的内存训练参数可用,初始化模块用于获取前一次上电存储的内存训练参数,并通过回填的方式快速完成内存初始化;如果标志位为1,说明前一次上电存储的内存训练参数不可用,初始化模块用于重新进行完整内存初始化,并存储新的内存训练参数。
本实施例的***,适用于上述各方法,在服务器上电时,通过判断前一次上电存储的内存训练参数是否可用,来选择性地进行完整内存初始化,极大缩短了服务器开机所需时间,提高服务器的可用度。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。