一种应对内存自然老化的方法和装置与流程

文档序号:17396309发布日期:2019-04-13 00:51阅读:366来源:国知局
一种应对内存自然老化的方法和装置与流程

本申请涉及计算机技术领域,特别涉及一种应对内存自然老化的方法和装置。



背景技术:

当前随着互联网和物联网技术的飞速发展,网络设备之间的业务数据量急剧增加,导致网络设备的cpu和内存之间交互数据的速率越来越快,交互数据的信息量也越来越大,相互之间数据的交互也越来越频繁,而且网络设备一旦上线将会持续运行,直到设备出现故障,这就造成设备的内存器件长期处于满载工作状态。同时网络设备应用于各行各业,实际安装环境也各不相同,由于受到高温、高湿、灰尘等环境因素的影响,内存器件的自然老化相对其他器件更加严重。

内存器件的老化有两种表现:一是内存性能下降,二是部分内存颗粒读写不稳定。设备运行一段时间后,若其内存器件出现老化,会导致存储的数据发生变化,设备使用到这部分数据就容易产生宕机事故或部分业务功能不正常的问题。现有技术中尚未有方案可以有效解决内存自然老化的问题,当遇到该类问题时,即使设备整机当前还未达到维修周期或者使用寿命,也只能将设备返厂维修或者直接报废购买新设备。



技术实现要素:

有鉴于此,本申请提供一种应对内存自然老化的方法和装置,以延长内存器件正常工作的时间。

具体地,本申请是通过如下技术方案实现的:

一种应对内存自然老化的方法,所述方法用于安装有内存的设备,所述方法包括:

获取目标内存区域;

将所述目标内存区域按预设规则分组,分别记录每组内存读写相同数据量的耗时;

从所述目标内存区域中剔除耗时超过指定限度的内存分组;

对所述目标内存区域进行写数据和读数据操作,标记出读写不一致的内存区域;

从所述目标内存区域中剔除所述读写不一致的内存区域;

将所述目标内存区域传递给操作系统。

一种应对内存自然老化的装置,所述装置用于安装有内存的设备,所述装置包括:

内存获取单元,用于获取目标内存区域;

第一筛选单元,用于将所述目标内存区域按预设规则分组,分别记录每组内存读写相同数据量的耗时;从所述目标内存区域中剔除耗时超过指定限度的内存分组;

第二筛选单元,用于对所述目标内存区域进行写数据和读数据操作,标记出读写不一致的内存区域;从所述目标内存区域中剔除所述读写不一致的内存区域;

内存传递单元,用于将所述目标内存区域传递给操作系统。

由以上本申请提供的技术方案可见,在本方案中,通过两轮筛选剔除有问题的内存区域:先检测内存读写性能,即对内存区间进行遍历,将读写性能较差的内存区域标记出来,将其从内存区间中剔除,再检测内存是否稳定,即对上一轮处理后的内存区间再次遍历,将读写不稳定的内存区域标记出来并加以剔除。这样经过两轮遍历后得到的内存区域便是使用本方案优化后的内存,最后将这部分内存传递给操作系统,从而可保证操作系统使用的内存都是高速和稳定的,避免了因个别内存区域老化而使内存器件出现问题的情况,延长了内存器件正常工作的时间,进而提高了设备使用寿命,减少了因设备内存问题而带来的维护成本。

附图说明

图1为本申请示出的一种应对内存自然老化的方法的流程图;

图2为本申请示出的剔除读写性能较差的内存的流程图;

图3为本申请示出的剔除稳定性较差的内存的流程图;

图4为本申请示出的一种应对内存自然老化的方法的流程图;

图5为本申请示出的一种应对内存自然老化的方法的流程图;

图6为本申请示出的一种应对内存自然老化的装置的示意图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

请参见图1,图1为本申请示出的一种应对内存自然老化的方法的流程图。该方法可用于安装有内存的设备,如网络设备等。该方法可以包括以下步骤:

步骤s101,获取目标内存区域。

目标内存区域即空闲内存区域,也即待优化的内存区域。作为示例,在本实施例或本发明其他某些实施例中,所述方法在bootloader下内存初始化后进行。

以嵌入式操作系统为例,bootloader在操作系统内核运行之前运行,是系统在加电后执行的第一段代码。bootloader可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在它完成cpu和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装在到内存中然后跳转到操作系统所在的空间,启动操作系统运行。对于bootloader本实施例不再赘述。

作为示例,本发明实施例中的方案可在bootloader下内存初始化后进行,此时bootloader程序还没有搬移到内存,仍运行在flash中,故不需要为bootloader保留运行内存,可以优化的内存区间最大。而且当内存优化完毕后,将bootloader搬移到优化后的内存运行,也防止了bootloader运行在不稳定的内存区间而导致设备无法启动操作系统的问题。

作为示例,在本实施例或本发明其他某些实施例中,获取目标内存区域,具体可以包括:

获取所述设备的内存资源以及当前正在被使用的内存;

根据所述内存资源和当前正在被使用的内存,确定空闲内存;

将所述空闲内存作为所述目标内存区域。

换句话说,获取当前设备的内存资源,包括内存的起始地址和终止地址,以及当前正在被使用的内存,进而确定bootloader下空闲的内存。

步骤s102,将所述目标内存区域按预设规则分组,分别记录每组内存读写相同数据量的耗时。

从本步骤开始将对目标内存区域进行两轮筛选优化,本步骤属于第一轮,目的是对空闲内存进行遍历,筛选出性能较差的区域。

对于分组的预设规则本实施例并不进行限制,本领域技术人员可以根据不同需求\不同场景而自行选择、设计,可以在此处使用的这些选择和设计都没有背离本发明的精神和保护范围。

作为示例,可以将内存按照cacheline×1024为单位进行分组,其中cacheline即缓存行。然后计算出每组以uncache(任何读写操作都不经过cache)方式读写cacheline×1024长度的内存的耗时时间。当然也可以计算出每组以cache方式进行读写的耗时,对此本实施例并不进行限制,只要对每组的读写方式相同即可,以保障各组的耗时具有可比性。

步骤s103,从所述目标内存区域中剔除耗时超过指定限度的内存分组。

对于如何剔除耗时超过指定限度的内存分组,本实施例并不进行限制,本领域技术人员可以根据不同需求\不同场景而自行选择、设计,可以在此处使用的这些选择和设计都没有背离本发明的精神和保护范围。

请参见图2,作为示例,在本实施例或本发明其他某些实施例中,从所述目标内存区域中剔除耗时超过指定限度的内存分组,具体可以包括:

步骤s1031,将各内存分组的耗时按照大小顺序排列。

例如可以将耗时时间按照递增的顺序进行排列。

步骤s1032,排除耗时最大和最小的分组。

步骤s1033,计算其余各分组的耗时的平均值。

步骤s1034,将耗时超出所述平均值指定限度的内存分组剔除。

例如重新遍历各组耗时时间,将耗时时间大于平均值×110%的分组标记为性能较差区域加以剔除。

步骤s104,对所述目标内存区域进行写数据和读数据操作,标记出读写不一致的内存区域。

本步骤开始进行第二轮筛选,即进行内存稳定性的筛选。

当设备具有多个cpu时,为了增大测试压力,对内存进行更深入的检测,可以进行多核测试。容易理解的是,在本发明实施例中,多核可以指一个cpu的多个内核,也可以指多个cpu。

参见图3所示,在本实施例或本发明其他某些实施例中,当所述设备具有多个cpu时,对所述目标内存区域进行写数据和读数据操作,具体可以包括以下步骤:

步骤s1041,将所述目标内存区域平均分配给各个cpu。

可以根据当前系统cpu的个数,将上述内存区间平均分配给各个cpu。

步骤s1042,驱动所述多个cpu同时对各自所分配的内存进行写数据和读数据操作。通过启动多核保证多个cpu同时运行内存稳定性测试程序对其各自分配到的内存进行检测。

步骤s105,从所述目标内存区域中剔除所述读写不一致的内存区域。

步骤s106,将所述目标内存区域传递给操作系统。

在本实施例中,通过两轮筛选剔除有问题的内存区域:先检测内存读写性能,即对内存区间进行遍历,将读写性能较差的内存区域标记出来,将其从内存区间中剔除,再检测内存是否稳定,即对上一轮处理后的内存区间再次遍历,将读写不稳定的内存区域标记出来并加以剔除。

这样经过两轮遍历后得到的内存区域便是使用本方案优化后的内存,最后将这部分内存传递给操作系统,从而可保证操作系统使用的内存都是高速和稳定的,避免了因个别内存区域老化而使内存器件出现问题的情况,延长了内存器件正常工作的时间,进而提高了设备使用寿命,减少了因设备内存问题而带来的维护成本。

下面以bootloader场景为例,对本发明方案作进一步描述。当然以该应用场景为例仅为示例性的,在实际应用中,也可以适用于其它应用场景。

请参见图4~图5,图4~图5为本申请示出的一种应对内存自然老化的方法的流程图:

步骤s401,获取当前bootloader下的空闲内存起始地址。

步骤s402,将空闲内存按照cacheline×1024为单位进行分组。当然对于分组的预设规则本实施例并不进行限制,本领域技术人员可以根据不同需求\不同场景而自行选择、设计。

步骤s403,设置内存的访问方式为uncache。当然在其他实施例中也可以以cache方式进行读写,对此本实施例并不进行限制,只要对每组的读写方式相同即可,以保障各组的耗时具有可比性。

步骤s404,选取一个分组。

步骤s405,记录起始时间。

步骤s406,以dword向内存写入32bit随机数。

步骤s407,读出上述内存中的数据。

步骤s408,判断是否遍历完cacheline×1024长度的内存。

如果是,则进入步骤s409;如果否,则返回步骤s406。

步骤s409,记录结束时间,根据记录的起始时间和结束时间算出当前分组的耗时。

步骤s410,判断是否得到所有内存分组的耗时。

如果是,则进入步骤s411;如果否,则返回步骤s404。

步骤s411,将各组耗时按照递增排序,排除最大和最小值后算出各组耗时的平均值。

步骤s412,重新遍历各组耗时,将耗时大于平均值×110%的标记为性能较差区域。

步骤s413,将被标记为性能较差的内存区域剔除。

步骤s414,获取当前cpu数量;给每个cpu分配内存;启动多核,以保证同时运行内存稳定性测试程序。

步骤s415,以dword向内存写入32bit随机数。

步骤s416,读出上述写入内存的数据,并与写入的原数据对比。

步骤s417,若写入和读出的数据不同,则标记为不稳定。

步骤s418,判断各cpu分配的内存是否检测完毕。

如果是,则进入步骤s419;如果否,则返回步骤s415。

步骤s419,剔除不稳定的内存区域。

步骤s420,将经过两轮筛选后的内存区间传递给操作系统。

在本实施例中,通过两轮筛选剔除有问题的内存区域:先检测内存读写性能,即对内存区间进行遍历,将读写性能较差的内存区域标记出来,将其从内存区间中剔除,再检测内存是否稳定,即对上一轮处理后的内存区间再次遍历,将读写不稳定的内存区域标记出来并加以剔除。这样经过两轮遍历后得到的内存区域便是使用本方案优化后的内存,最后将这部分内存传递给操作系统,从而可保证操作系统使用的内存都是高速和稳定的,避免了因个别内存区域老化而使内存器件出现问题的情况,延长了内存器件正常工作的时间,进而提高了设备使用寿命,减少了因设备内存问题而带来的维护成本。

请参见图6,图6为本申请示出的一种应对内存自然老化的装置的示意图,该装置可用于安装有内存的设备例如网络设备。该装置可以包括:

内存获取单元601,用于获取目标内存区域。

第一筛选单元602,用于将所述目标内存区域按预设规则分组,分别记录每组内存读写相同数据量的耗时;从所述目标内存区域中剔除耗时超过指定限度的内存分组。

第二筛选单元603,用于对所述目标内存区域进行写数据和读数据操作,标记出读写不一致的内存区域;从所述目标内存区域中剔除所述读写不一致的内存区域。

内存传递单元604,用于将所述目标内存区域传递给操作系统。

作为示例,在本实施例或本发明其他某些实施例中,所述装置在bootloader下内存初始化后启动运行。

作为示例,在本实施例或本发明其他某些实施例中,所述内存获取单元具体用于:

获取所述设备的内存资源以及当前正在被使用的内存;根据所述内存资源和当前正在被使用的内存,确定空闲内存;将所述空闲内存作为所述目标内存区域。

在本实施例或本发明其他某些实施例中,所述第一筛选单元,具体包括:

分组子单元,用于将所述目标内存区域按预设规则分组;

计时子单元,用于分别记录每组内存读写相同数据量的耗时;

排序子单元,用于将各内存分组的耗时按照大小顺序排列;

计算子单元,用于排除耗时最大和最小的分组后计算其余各分组的耗时的平均值;

第一筛选子单元,用于将耗时超出所述平均值指定限度的内存分组剔除。

在本实施例或本发明其他某些实施例中,当所述设备具有多个cpu时,所述第二筛选单元,具体包括:

内存分配子单元,用于将所述目标内存区域平均分配给各个cpu;

压力测试子单元,用于驱动所述多个cpu同时对各自所分配的内存进行写数据和读数据操作;

第二筛选子单元,用于标记出读写不一致的内存区域,以及,从所述目标内存区域中剔除所述读写不一致的内存区域。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

在本实施例中,通过两轮筛选剔除有问题的内存区域:先检测内存读写性能,即对内存区间进行遍历,将读写性能较差的内存区域标记出来,将其从内存区间中剔除,再检测内存是否稳定,即对上一轮处理后的内存区间再次遍历,将读写不稳定的内存区域标记出来并加以剔除。这样经过两轮遍历后得到的内存区域便是使用本方案优化后的内存,最后将这部分内存传递给操作系统,从而可保证操作系统使用的内存都是高速和稳定的,避免了因个别内存区域老化而使内存器件出现问题的情况,延长了内存器件正常工作的时间,进而提高了设备使用寿命,减少了因设备内存问题而带来的维护成本。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1