一种内存数据获取方法、系统、内存管理中间件及介质与流程

文档序号:16467597发布日期:2019-01-02 22:52阅读:222来源:国知局
一种内存数据获取方法、系统、内存管理中间件及介质与流程

本申请涉及内存高可靠性领域,特别涉及一种内存数据获取方法、系统、内存管理中间件以及计算机可读存储介质。



背景技术:

内存故障会导致计算机数据永久丢失或系统宕机,从而给个人或企业带来无法估计的灾难,所有计算机需要保证内存的可靠性。

内存镜像是目前常用的提高内存可靠性的方法,其工作原理与硬盘的热备份类似,内存镜像是将内存数据做两个拷贝,分别放在主内存和镜像内存中。一旦主内存发生故障(或者数据传输错误),内存控制器就会将数据转移到镜像内存上,有效防止了由于内存通道故障导致的数据丢失,从而提高系统的可靠性和稳定性,保证计算机系统正常运行。

具体的,该方案(如图1)是直接在计算机的处理器上挂两个或多个内存条,由处理器控制两个或多个内存条的读写操作,系统工作时,由处理器向两个或多个内存中同时写入数据,在读操作时处理器采用某种纠错机制来选择几个内存中数据正确的那个内存。可以明显看出,此种方式下所做的工作全部交由处理器完成,会极大影响处理器处理其他任务的性能,同时对硬件上不支持双路或多路的系统也是无法实现内存镜像功能的,对硬件要求更高。

因此,如何克服现有提升内存数据可靠性方案中存在的各项技术缺陷,提供一种处理器压力更小、对硬件要求更低的提升内存可靠性的方案是本领域技术人员亟待解决的问题。



技术实现要素:

本申请的目的是提供一种内存数据获取方法,应用于一端与cpu上的内存控制器相连、另一端分别连接预设数量内存的内存管理中间件,通过使用这个额外增设的硬件,将原先需要由处理器完成的用于实现内存镜像目的操作和处理步骤全部转嫁至该内存管理中间件,使得处理器端可以当做仅存在单一内存时的处理步骤来进行,由该内存管理中间件完成解析、多份转发、收集反馈数据并进行差错校验,并最终将正确的反馈数据返回至处理器,使得处理器压力更小、占用系统资源更少,同时也将应用场景拓宽至单通道系统,实际使用效果更佳。

本申请的另一目的在于提供了一种内存数据获取系统、内存管理中间件以及计算机可读存储介质。

为实现上述目的,本申请提供一种内存数据获取方法,应用于内存管理中间件,该方法包括:

接收内存控制器发起的读请求命令;其中,所述内存控制器位于cpu上;

解析所述读请求命令,并将得到的解析后命令以内存可读取格式同时发送至与自身相连的各内存,以使各所述内存返回相应的读反馈数据;

对接收到的各读反馈数据进行ecc差错校验,得到差错校验结果,并根据所述差错校验结果确定目标内存;其中,所述目标内存为经所述ecc差错校验后确定不存在错误的内存;

将所述目标内存返回的读反馈数据以所述内存可读取格式返回至所述内存控制器。

可选的,该内存数据获取方法还包括:

为所有连接于所述内存管理中间件的各内存设置不同的优先级;

当根据所述差错校验结果确定所述目标内存的数量大于1时,选取其中拥有最大优先级的内存作为优选内存;

对应的,将所述目标内存返回的读反馈数据以所述内存可读取格式返回至所述内存控制器,具体为:

将所述优选内存返回的读反馈数据以所述内存可读取格式返回至所述内存控制器。

可选的,该内存数据获取方法还包括:

根据所述差错校验结果统计各所述内存返回的读反馈数据中未发生错误的次数,并与总次数做商,得到正确率;

统计同一时段内各所述内存各自的正确率,并使用新内存替换所述正确率低于预设正确率阈值的内存。

为实现上述目的,本申请还提供了一种内存数据获取系统,应用于内存管理中间件,该系统包括:

读请求命令接收单元,用于接收内存控制器发起的读请求命令;其中,所述内存控制器位于cpu上;

解析及分发单元,用于解析所述读请求命令,并将得到的解析后命令以内存可读取格式同时发送至与自身相连的各内存,以使各所述内存返回相应的读反馈数据;

差错校验及目标内存确定单元,用于对接收到的各读反馈数据进行ecc差错校验,得到差错校验结果,并根据所述差错校验结果确定目标内存;其中,所述目标内存为经所述ecc差错校验后确定不存在错误的内存;

目标内存数据返回单元,用于将所述目标内存返回的读反馈数据以所述内存可读取格式返回至所述内存控制器。

可选的,该内存数据获取系统还包括:

优先级设置单元,用于为所有连接于所述内存管理中间件的各内存设置不同的优先级;

按优先级选择单元,用于当根据所述差错校验结果确定所述目标内存的数量大于1时,选取其中拥有最大优先级的内存作为优选内存;

对应的,所述目标内存数据返回单元具体为:

将所述优选内存返回的读反馈数据以所述内存可读取格式返回至所述内存控制器。

可选的,该内存数据获取系统还包括:

正确率计算单元,用于根据所述差错校验结果统计各所述内存返回的读反馈数据中未发生错误的次数,并与总次数做商,得到正确率;

内存替换单元,用于统计同一时段内各所述内存各自的正确率,并使用新内存替换所述正确率低于预设正确率阈值的内存。

为实现上述目的,本申请还提供了一种内存管理中间件,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如上述内容所描述的内存数据获取方法的步骤。

为实现上述目的,本申请还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述内容所描述的内存数据获取方法的步骤。

显然,本申请所提供的一种内存数据获取方法,应用于一端与cpu上的内存控制器相连、另一端分别连接预设数量内存的内存管理中间件,通过使用这个额外增设的硬件,将原先需要由处理器完成的用于实现内存镜像目的操作和处理步骤全部转嫁至该内存管理中间件,使得处理器端可以当做仅存在单一内存时的处理步骤来进行,由该内存管理中间件完成解析、多份转发、收集反馈数据并进行差错校验,并最终将正确的反馈数据返回至处理器,使得处理器压力更小、占用系统资源更少,同时也将应用场景拓宽至单通道的系统,实际使用效果更佳。本申请同时还提供了一种内存数据获取系统、内存管理中间件及计算机可读存储介质,具有上述有益效果,在此不再赘述。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为一种现有基于内存镜像方式提升内存可靠性的结构示意图;

图2为本申请提供的一种基于内存镜像方式提升内存可靠性的结构示意图;

图3为本申请实施例提供的一种内存数据获取方法的流程图;

图4为本申请实施例提供的另一种内存数据获取方法的流程图;

图5为本申请实施例提供的一种内存管理中间件的逻辑结构示意图;

图6为本申请实施例提供的一种内存数据获取系统的结构框图。

具体实施方式

本申请的核心是提供一种内存数据获取方法、系统、内存管理中间件及计算机可读存储介质,通过新增一端与cpu上的内存控制器相连、另一端分别连接预设数量内存的内存管理中间件,将原先需要由处理器完成的用于实现内存镜像目的操作和处理步骤全部转嫁至该内存管理中间件,使得处理器端可以当做仅存在单一内存时的处理步骤来进行,由该内存管理中间件完成解析、多份转发、收集反馈数据并进行差错校验,并最终将正确的反馈数据返回至处理器,使得处理器压力更小、占用系统资源更少,同时也将应用场景拓宽至单通道系统,实际使用效果更佳。

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。

实施例一

以下结合图3,图3为本申请实施例提供的一种内存数据获取方法的流程图,图3所示的方法应用于一端与cpu上的内存控制器相连、另一端分别连接预设数量内存的内存管理中间件,连接关系如图2所示,具体步骤如下:

s101:接收内存控制器发起的读请求命令;

本步骤旨在接收由上层操作系统发起的内存请求,本实施例以读请求命令为例,目的在于从内存中读取一些数据返回上层操作系统,写请求命令与此类似,只是目的在于将上层操作系统的数据写入内存中而已,本领域技术人员在根据本申请提供的读请求命令可以轻易的递推至写请求命令的实现过程,此处不再赘述。

需要说明的是,本步骤描述的读请求命令是cpu上的内存控制器“以为”均仅存在一个外接内存时发出的读请求命令,因为如图2所示,在cpu看来,与其连接的内存管理中间件就是唯一存在的内存,因此cpu只需要按照最普通的处理操作来执行即可。

s102:解析读请求命令,并将得到的解析后命令以内存可读取格式同时发送至各内存,以使各内存返回相应的读反馈数据;

在s101的基础上,本步骤旨在解析由cpu上的内存控制器发来的读请求命令,以提取出目标内容,该目标内容即为想要从内存中读取何种数据的指向信息,以便根据该指向信息从内存中找到这部分数据。同时,在解析完成后,还需要复制为多份,以便同时转发给连接于自身的多个内存。基于内存镜像的方式,至少存在一个主内存和至少一个镜像内存,但由于是两个不同的内存条,在复制和转发过程中还需要根据实际情况灵活调整一下路径和参数,以使的主内存和镜像内存均可以接收到内存控制器下发的命令。

在各内存接收到由内存中间管理件下发的命令后,根据这些命令在自身的存储空间中进行信息的读取,并将其反馈回内存管理中间件。

s103:对接收到的各读反馈数据进行ecc差错校验,得到差错校验结果,并根据差错校验结果确定目标内存;

在s102的基础上,本步骤旨在对多个内存返回的读反馈数据进行差错校验,以将未出现数据错误的读反馈数据返回至内存控制器,完成一次读请求命令的处理。其中,目标内存即为经ecc差错校验后确定不存在错误的内存。

ecc是errorcorrectingcode的英文缩写,中文名称是“错误检查和纠正”,ecc是一种能够实现“错误检查和纠正”的技术,ecc内存就是应用了这种技术的内存,一般多应用在服务器及图形工作站上,这将使整个电脑系统在工作时更趋于安全稳定。要了解ecc技术,就不能不提到parity(奇偶校验)。

在ecc技术出现之前,内存中应用最多的是另外一种技术,就是parity(奇偶校验)。在数字电路中,最小的数据单位就是叫“比特(bit)”,也叫数据“位”,“比特”也是内存中的最小单位,它是通过“1”和“0”来表示数据高、低电平信号的。在数字电路中8个连续的比特是一个字节(byte),在内存中不带“奇偶校验”的内存中的每个字节只有8位,若它的某一位存储出了错误,就会使其中存储的相应数据发生改变而导致应用程序发生错误。而带有“奇偶校验”的内存在每一字节(8位)外又额外增加了一位用来进行错误检测。比如一个字节中存储了某一数值(1、0、1、0、1、0、1、1),把这每一位相加起来(1+0+1+0+1+0+1+1=5)。若其结果是奇数,对于偶校验,校验位就定义为1,反之则为0;对于奇校验,则相反。当cpu返回读取存储的数据时,它会再次相加前8位中存储的数据,计算结果是否与校验位相一致。当cpu发现二者不同时就会尝试纠正这些错误。但parity的不足是:当内存查到某个数据位有错误时,却并不一定能确定在哪一个位,也就不一定能修正错误,所以带有奇偶校验的内存的主要功能仅仅是“发现错误”,并不能纠正部分简单的错误。

parity内存是通过在原来数据位的基础上增加一个数据位来检查当前8位数据的正确性,但随着数据位的增加parity用来检验的数据位也成倍增加,就是说当数据位为16位时它需要增加2位用于检查,当数据位为32位时则需增加4位,依此类推。特别是当数据量非常大时,数据出错的几率也就越大,对于只能纠正简单错误的奇偶检验的方法就显得力不从心了,正是基于这样一种情况,一种新的内存技术应运而生了,这就是ecc,这种技术也是在原来的数据位上外加校验位来实现的,不同的是两者增加的方法不一样,这也就导致了两者的主要功能不太一样。它与parity不同的是如果数据位是8位,则需要增加5位来进行ecc错误检查和纠正,数据位每增加一倍,ecc只增加一位检验位,也就是说当数据位为16位时ecc位为6位,32位时ecc位为7位,数据位为64位时ecc位为8位,依此类推,数据位每增加一倍,ecc位只增加一位。总之,在内存中ecc能够容许错误,并可以将错误更正,使系统得以持续正常地操作,不致因错误而中断,且ecc具有比parity更强大的自动识别、更正的能力,可以将parity无法检查出来的错误位查出并将错误修正。

需要说明的是,内存出错的概率比较小,在发生异常和故障时,工作状态较为稳定,因此有很大概率出现经ecc差错校验后存在多个目标内存,但并不需要同时返回多个目标内存的读反馈数据给内存控制器,因为都是一样的,因此还需要在此种情况出现时从中选取一个更为合适的内存的读反馈数据,方式多种多样,可以基于优先级的方式、基于编号排序、基于资源占用率等等方式,可根据实际情况下所有可能存在的影响因素灵活选择,此处并不做具体限定。

s104:将目标内存返回的读反馈数据以内存可读取格式返回至内存控制器。

在s103的基础上,本步骤将目标内存返回的读反馈数据以内存控制器可识别的形式返回至内存控制器,以完成一次读请求命令的处理。

进一步的,通常基于内存镜像的方式来提升内存可靠性,由一个主内存和一个镜像内存组成,以便在主内存发生故障时,镜像内存还可以及时替换,以使数据不丢失和中断。从原理上来说,镜像内存的数量越多,内存可靠性越高,但在实际应用过程中,多内存协调过程的难度会随着镜像内存数量的增多显著提升,不仅对中间件提出了更高的性能要求,还需要更高的实现成本,因此通常采用一主一镜像的方式足以满足大部分的应用场景,但也不排除基于其它目的设置更多镜像内存的方式,可根据实际情况灵活选择。

更进一步的,当连接于内存管理中间件的某个内存故障无法使用时,可以及时提出预警信息提醒更换,当连接的内存大于等于3个时,可以初步启用两个,当其中一个损坏时,直接关闭损坏内存插槽的连接,同时启用之前未启用的备用内存,以至少使用两个内存来实现提升内存可靠性的目的。

更进一步的,还可以根据差错校验结果统计各内存返回的读反馈数据中未发生错误的次数,并与总次数做商,得到正确率;统计同一时段内各内存各自的正确率,并使用新内存替换正确率低于预设正确率阈值的内存。即通过此种方式及时发现存在异常或故障趋势的内存。

基于上述技术方案,本申请实施例提供的一种内存数据获取方法,应用于一端与cpu上的内存控制器相连、另一端分别连接预设数量内存的内存管理中间件,通过使用这个额外增设的硬件,将原先需要由处理器完成的用于实现内存镜像目的操作和处理步骤全部转嫁至该内存管理中间件,使得处理器端可以当做仅存在单一内存时的处理步骤来进行,由该内存管理中间件完成解析、多份转发、收集反馈数据并进行差错校验,并最终将正确的反馈数据返回至处理器,使得处理器压力更小、占用系统资源更少,同时也将应用场景拓宽至单通道系统,实际使用效果更佳。

实施例二

以下结合图4,图4为本申请实施例提供的另一种内存数据获取方法的流程图,本实施例在实施例一的基础上,提供了一种基于优先级来在目标内存的数量大于1时选取一个优选内存的方式,具体实施步骤如下:

s201:接收内存控制器发起的读请求命令;

s202:解析读请求命令,并将得到的解析后命令以内存可读取格式同时发送至各内存,以使各内存返回相应的读反馈数据;

s203:对接收到的各读反馈数据进行ecc差错校验,得到差错校验结果,并根据差错校验结果确定目标内存;

s204:为所有连接于内存管理中间件的各内存设置不同的优先级;

s205:当目标内存的数量大于1时,选取其中拥有最大优先级的内存作为优选内存;

本实施例首先为所有连接于内存管理中间件的各内存设置不同的优先级,并在当目标内存的数量大于1时,选取其中拥有最大优先级的内存作为优选内存,优先级最高意味着这个内存更适合。进一步的,为各内存设置的优先级还可以根据各内存的工作状态进行动态调整,以使得每次在此种情况都将工作状态最好的内存选做优选内存。

s206:将优选内存返回的读反馈数据以内存可读取格式返回至内存控制器。

实施例三

在上述实施例的基础上,本实施例给出一种使用fpga(fieldprogrammablegatearray,现场可编程门阵列)构成的内存管理中间件,并通过多有由io原语构成的模块来实现各步骤的操作,包括:

phy_host模块:与内存控制器的接口模块,实现ddr(双倍速率同步动态随机存储器,一种内存规格)io的输入输出;

命令解析模块:完成解析cpu控制器发送的cmd命令,并同时发送给两个phy_dev模块;

phy_devx模块:io原语实现的内存控制器功能;

冗余控制模块:接收两个内存条的回读数据进行检验,并完成通路选择。

以下请参见图5,以cpu发起读请求命令为例进行依次说明:

cpu内存控制器发起读请求命令,phy_host模块使用原语正确采样输入的ddr读命令发送给命令解析模块,命令解析模块完成读请求命令的解析后同时发送给两个phy_dev模块,phy_dev模块分别把读请求命令以ddr的格式发送给内存条,内存条返回读数据给phy_dev模块,phy_dev模块使用原语正确采样输入的ddr读数据发送给冗余控制模块,冗余控制模块进行ecc校验,选择校验没有错误的通路,主内存通路的优先级高于镜像内存的通路,读数据经冗余控制模块输出后给phy_host模块,phy_host模块把读数据已ddr的格式发送给cpu内存控制器。

phy_host模块和phy_dev模块分别使用了fpgai/o原语,延时小并且可以动态调整iodelay延时。使用到的i/o原语还包括iserdes/oserdes和iodelay,iserdes/oserdes可用来实现速率的转换,完成ddr的双倍速率数据与fpga内部单倍速率之间的速率转换;iodelay是一个可编程延时单元,可补偿ddr信号因pcb走线延时引起的采样问题。

本实施例将基于fpga原语的内存管理中间件作为桥梁,连接处理器和内存条,整个内存管理中间件+内存条在处理器看来只是一路内存,只需按一路的操作方法访问内存即可;而内存管理中间件可以连接两路或多路内存,多路内存的差错纠错功能都由该内存管理中间件完成;同时该内存管理中间件可在任何采用标准dimm(双列直插式存储模块,即内存条接口)接口的系统中使用,系统无需做任何改变。

需要说明的是,本实施例所涉及到的原语概念,在操作系统或计算机网络用语范畴内是指由若干条指令组成的,用于完成一定功能的一个过程,是由若干个机器指令构成的完成某种特定功能的一段程序,具有不可分割性,即原语的执行必须是连续的,在执行过程中不允许被中断。

区别于类似场景下的可能用于实现相同目的的ipcore(ip核,在嵌入式fpga设计中,指的是某些设计好的模块,分为软件模块和硬件模块),本实施例采用的原语几乎不占用fpga逻辑资源,且功能由用户搭建,灵活性和模块化较强,不仅能够满足ddrrl(readlatency,读取潜伏期)要求还可以以类似asic的方式进行需求定制,在工程实现层面来将才操作性更强,最重要的一点是由于其不可打断的特性使其得以满足内存读写的低延时要求。

而ip核的方式,虽然从理论上可以实现,但经过过程验证其无法满足ddrrl的读延时要求,因为其为满足通用需求,一般拥有较大的延时较大,且其源代码不可见,无法根据用户需求进行修改;同时依然由于其臃肿的结构使其会占用fpga逻辑资源较多,使其无法实际应用于工程上。

因为情况复杂,无法一一列举进行阐述,本领域技术人员应能意识到根据本申请提供的基本方法原理结合实际情况可以存在很多的例子,在不付出足够的创造性劳动下,应均在本申请的保护范围内。

下面请参见图6,图6为本申请实施例提供的一种内存数据获取系统的结构框图,该系统可以包括:

读请求命令接收单元100,用于接收内存控制器发起的读请求命令;其中,所述内存控制器位于cpu上;

解析及分发单元200,用于解析所述读请求命令,并将得到的解析后命令以内存可读取格式同时发送至与自身相连的各内存,以使各所述内存返回相应的读反馈数据;

差错校验及目标内存确定单元300,用于对接收到的各读反馈数据进行ecc差错校验,得到差错校验结果,并根据差错校验结果确定目标内存;其中,目标内存为经ecc差错校验后确定不存在错误的内存;

目标内存数据返回单元400,用于将目标内存返回的读反馈数据以内存可读取格式返回至内存控制器。

进一步的,该内存数据获取系统还可以包括:

优先级设置单元,用于为所有连接于内存管理中间件的各内存设置不同的优先级;

按优先级选择单元,用于当根据差错校验结果确定目标内存的数量大于1时,选取其中拥有最大优先级的内存作为优选内存;

对应的,目标内存数据返回单元400具体为:

将优选内存返回的读反馈数据以内存可读取格式返回至内存控制器。

进一步的,该内存数据获取系统还可以包括:

正确率计算单元,用于根据差错校验结果统计各内存返回的读反馈数据中未发生错误的次数,并与总次数做商,得到正确率;

内存替换单元,用于统计同一时段内各内存各自的正确率,并使用新内存替换正确率低于预设正确率阈值的内存。

基于上述实施例,本申请还提供了一种内存管理中间件,该中间件可以包括存储器和处理器,其中,该存储器中存有计算机程序,该处理器调用该存储器中的计算机程序时,可以实现上述实施例所提供的步骤。当然,该中间件还可以包括各种必要的网络接口、电源以及其它零部件等。

本申请还提供了一种计算机可读存储介质,其上存有计算机程序,该计算机程序被执行终端或处理器执行时可以实现上述实施例所提供的步骤。该存储介质可以包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

本文中应用了具体个例对本申请的原理及实施方式进行了阐述,且各个实施例间为递进关系,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,可参见对应的方法部分说明。以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其它变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。

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