实时嵌入式系统中基于非易失性混合式内存的软件优化方法与流程

文档序号:14910780发布日期:2018-07-10 23:21阅读:178来源:国知局

本发明属于计算机存储技术领域,具体涉及一种实时嵌入式系统中基于非易失性混合式内存的软件优化方法。



背景技术:

目前,作为内存的动态随机存取存储器(dynamic random access memory,DRAM),因其在扩展性和能耗方面的缺陷,成为制约嵌入式系统发展的关键因素之一。同时,新型非易失性存储器(non-volatile memory,NVM)具备内存的高速处理、外存的大容量、持久化存储、超低静态功耗等优势,已经成为突破“存储墙”和“能耗墙”等存储挑战的最为瞩目的新一代存储器,有望替代DRAM作为内存。

然而,NVM技术也给存储管理与设计带来了新挑战。首先,NVM普遍存在有限擦写耐久性能。如果NVM一个单元的写操作次数超过最大写操作次数,该单元将失去保存数据的能力。其次,相比DRAM存储器,NVM的写操作代价开销大。若要实现高性能和高可靠的存储系统,则需降低NVM对系统性能和耐久性等方面的负面影响,如何在嵌入式系统中充分有效利用NVM并发挥其优势,是亟待解决的重要问题。

因为主存是嵌入式系统中的主要能源分配,所以是优化存储子系统能耗的重点。为了嵌入式系统的能源优化,联合NVM,DRAM在同一存储层次的混合主存被提出。DRAM便宜,体积小,但是访问速度慢。NVM访问速度快,非易失,高密度,泄露功率低,但是动态能耗高,写延迟较长,写次数有限。两种存储器互有优劣,如何平衡NVM和DRAM的优缺点,成为了目前的研究热点。现如今,用于优化混合主存能耗的软件优化算法——数据分配和磨损均衡算法,正在被不断地发展和创新,不同的算法有各自不同的优势,当然也有各自的局限性。因此更加高效,更优性能的软件优化算法有待进一步的深入研究。然而,大部分现有研究工作都是基于给出的读写信息,进行建模,但实际上忽略了数据读写次数的重要性和嵌入式系统的实时性,是不精确的。



技术实现要素:

有鉴于此,本发明的目的在于提供一种实时嵌入式系统中基于非易失性混合式内存的软件优化方法,使用基于概率的程序profiling技术,提前预测多程序的数据读写次数,利用预测的数据信息进行软件层面的优化,减少内存消耗的同时,延长NVM在嵌入式系统混合式内存中的使用寿命,并且能保证实时程序在规定时间内完成,不需要任何硬件支持。

为达到上述目的,本发明提供如下技术方案:

一种实时嵌入式系统中基于非易失性混合式内存的软件优化方法,具体包括以下步骤:

S1:根据多个程序的特征结合profiling技术,统计每个程序中各个数据可能的读写操作次数和对应的概率,并且获得每个程序中每个数据的读写期望和最大读写次数;

S2:根据每个时间段内程序的预测运行数据,为各个数据分配合适的存放位置,建立整形线性规划模型和与之相对应的近似算法,编程时获得一个接近最优的结果,使非易失性混合式内存上的消耗和非易失性存储器(non-volatile memory,NVM)上的最大写操作次数尽量减小,并且确保程序在最差读写情况下也能按时完成;

S3:把编译好的程序,在实时嵌入式系统上执行,以获得非易失性混合内存上的软件优化。

进一步,所述步骤S1具体包括以下步骤:

S11:根据profiling技术,获得各个程序的分支执行概率,统计所有程序的分支执行概率,获得每个程序中各个数据可能的读写操作次数和对应的概率;

S12:根据每个程序中各个数据可能的读写操作次数和对应的概率,进行整合,获得各个数据在每个程序下对应的读写期望和最大读写次数。

进一步,所述步骤S2中的整形线性规划模型,是根据动态随机存取存储器(dynamic random access memory,DRAM)访问速度慢的特性和NVM访问速度快,泄露功率低,动态能耗高,写延迟较长,写次数有限的特性以及嵌入式系统的实时特性构建的模型,以期望在满足实时程序执行时间需求的情况下,将写次数多的数据存放于DRAM,将写次数少的数据存放于NVM已写次数少的单元,在满足NVM磨损均衡的同时获得最小的数据访问能耗。

进一步,所述步骤S2具体包括以下步骤:

S21:根据多程序的运行情况,包括程序执行序列和每个程序的执行起始时间,根据步骤S1的结果在规定的时间点τ预测并获得时间段[τ,τ+1]内运行的程序的每个数据读写期望的总和以及最大的读写次数,针对这个时间段的数据进行数据分配以确保每个程序能够按时完成;

S22:规定几个约束条件,建立一个基于概率模型的整形线性规划模型,确保数据分配的实用性:

约束条件1:每个变量必须存放在一个存储器;其中Xi,j,k=1等价于在程序j中的数据i地址为k,p表示为NVM分配p个存储地址,范围为1≤k≤p,为DRAM分配1个存储地址,地址为p+1,size(i)表示数据i的大小;

约束条件2:分配在NVM的数据总数不能超过它的存储容量;其中v表示NVM的存储容量;

约束条件3:变量分配在NVM的地址必须是连续的;其中l表示数据i的存储地址;

约束条件4:分配在NVM的写小于θ,确保磨损均衡;其中θ表示NVM各单元的写阈值,WTE(i)表示数据i的期望写次数;

约束条件5:约束时间段[τ,τ+1]的程序准时完成;其中BRD(i,j),BWT(i,j)分别表示数据在程序的最大读写次数,latencyr(k),latencyw(k)分别表示数据在不同存储器的读写延迟,tr表示每个实时程序对应的时间约束;

约束条件5的限制条件一:程序j中最大读写次数在NVM的读写延迟

约束条件5的限制条件二:程序j中最大读写次数在DRAM的读写延迟

约束条件5的约束函数:(Eq.(1)+Eq.(2))≤tr;

目标函数:在满足各个约束条件下的最小数据分配消耗;其中costr(k),costw(k)分别表示在不同存储器下的读写消耗;

目标函数的目标条件一:所有程序在NVM的期望读写消耗

目标函数的目标条件二:所有程序在SRAM和DRAM的期望读写消耗

目标函数:min(Eq.(3)+Eq.(4))。

进一步,所述步骤S3具体包括以下步骤:

S31:建立一个数组T(Di,Mk),表示数据Di分配在存储器Mk,虽然只有两个存储器,NVM和DRAM,但是为了能够考虑到NVM的磨损均衡,设定当1≤k≤p时,Mk表示NVM,Mp+1表示DRAM,根据不同的k值确定数据存放在NVM的哪个单元,在每个预测时间点获取数据存放初始数组;

S32:在获得初始数组后,找出变量存放位置大于2,即多余存放的情况,保留第一个存储器存放,移出其余存储器;依次获得[τ,τ+1]时间段内运行的程序,[τ,τ+1]时间段内运行所有程序所需调用的每个数据的总写次数;根据总写次数进行数据分配,分成三种情况:数据i在DRAM中;数据i在NVM中;数据i未存放在任何存储器;然后根据每种情况对应的NVM写阈值和容量进行分配,优先将数据分配至NVM。

本发明的有益效果在于:本发明首先分配之前先预测数据读写次数,并且同时兼顾磨损均衡和数据分配两个问题,更加全面;因为考虑到实时程序的执行时间问题,更加符合实际需求;并且本发明不需要依赖任何硬件,具有很好的实用性。

附图说明

为了使本发明的目的、技术方案和有益效果更加清楚,本发明提供如下附图进行说明:

图1为本发明的数据存储初始化流程图;

图2为NVM和DRAM混合式内存的结构图;

图3为在τ时刻对[τ,τ+1]时间段的运行程序的预测数据进行数据分配流程图。

具体实施方式

下面将结合附图,对本发明的优选实施例进行详细的描述。

为了延长NVM的使用寿命,需要对NVM进行磨损均衡,以均衡在NVM上各单元的写操作。如图2所示,为了节省内存消耗,需要对DRAM和NVM进行数据分配。

本发明首先统计各个程序分支预测的数据读写次数和对应的概率,获得各个程序的数据读写期望;然后根据下一个时间段内运行的所有程序信息,通过之前预测的程序信息,统计所有数据的读写期望,以该数据读写期望作为下一时间段内数据分配的基础,使数据分配结果能保证每个时间段实时程序的按时完成;合理分配数据存放在NVM和DRAM以达到数据消耗近乎最小,且该数据分配需要同时满足两个要求,分配在NVM的数据不能超过NVM的存储容量,分配在NVM的数据的总写次数不能超过NVM的写阈值。

图1是本发明的现有数据存放情况的初始化流程图,如图1所示,该流程开始于步骤101,输入一个n行2列数值为0的二维数组T(Di,Mk),T(Di,Mk)=1表示数据Di存放在存储器Mk,T(Di,Mk)=0表示数据Di未存放在存储器Mk,其中1≤i≤n,1≤k≤p+1,当1≤k≤p时,Mk表示NVM,Mp+1表示DRAM,也就是说,当1≤k≤p时,Mk只能存放一个数据,而Mp+1可以存放无数个数据。并且一个数据不能同时存放在NVM或者DRAM,然后:

在步骤102,初始化数据;

在步骤103,开始从D1到Dn的循环,当i≤n开始步骤104,当i>n则跳出循环,这时已经完全更新了数组T(Di,Mk),获得了目前所有数据的存放情况,但是数据需要满足只存放在一个存储器的约束,所以开始了步骤110。

在步骤104,初始化存储器;

在步骤106,开始从M1到Mp+1的循环,当k≤p+1时开始步骤108,当k>p+1时,则跳出循环开始步骤105,判断下一个数据Di+1的存放情况;

在步骤108,判断数据Di是否存放在存储器Mk,如果是,开始步骤109,改变T(Di,Mk)的数值为1,如果否,开始步骤107,判断数据Di是否存放在下一个存储器Mk+1;

在步骤110,初始化数据;

在步骤111,开始从D1到Dn的循环,当i≤n开始步骤113,当i>n则跳出循环,开始步骤119,输出目前数据在满足约束条件下的存放信息数组T(Di,Mk),数据的初始化即已完成。

在步骤113,创建一个新的变量sum,赋值为0。初始化存储器。

在步骤115,开始从M1到Mp+1的循环,当当k≤p+1时开始步骤116,当k>p+1时,则跳出循环开始步骤111,判断下一个数据Di+1的存放情况;

在步骤116,sum为数据i存放的存储器个数的和,计算和之后开始步骤117,以判断数据i是否同时存放在两个存储器或者NVM的两个存储空间中,如果是,开始步骤118,使数据i只存放在一个存储器的一个存储空间,然后开始步骤114,使下一个存储器也不能存放数据i,如果否,直接开始步骤114。

在τ时刻对[τ,τ+1]时间段的运行程序的预测数据进行数据分配流程图如图3所示。该流程图开始于步骤301,输入T(Di,Mk),pro(j,ts,te),θ,NVMTS,τ,其中,T(Di,Mk)为图1的输出,pro(j,ts,te)表示程序j在时刻ts开始运行,在时刻te结束运行的数组,v为NVM的存储空间,θ为NVM的写操作阈值,NVMTS为目前为止NVM的总写操作数。

在步骤302,初始化程序。

在步骤303,开始从j1到jn的循环,当j≤n开始步骤305,当i>n则跳出循环,开始步骤307。

在步骤305,判断程序j是否在[τ,τ+1]时间段运行,如果是,到步骤306,其中exe[j]=1表示程序j是在[τ,τ+1]时间段内运行的程序,如果否,到步骤304,判断下一个程序是否在该时间段内运行。

在步骤307,初始化数据。

在步骤309,开始从i1到in的循环,当i≤n开始步骤310,当i>n则跳出循环,开始步骤315。

在步骤310,初始化程序。

在步骤312,开始从j1到jn的循环,当j≤n开始步骤313,当j>n则跳出循环,开始步骤308,判断下一个数据是否在该时间段内运行。

在步骤313,判断程序j是否是在[τ,τ+1]时间段内运行的程序,如果是,开始步骤314,对程序j中的数据i的读写次数进行累加,之后开始步骤311,对程序j+1中数据i的读写次数进行累加,如果否,直接到步骤311。

在步骤315,初始化数据。

在步骤317,开始从i1到in的循环,当i≤n开始步骤318,当i>n则跳出循环,这时已经完成了对[τ,τ+1]时间段内运行数据的分配,于是开始步骤334,输出分配数组。

在步骤318,判断数据i是否是在[τ,τ+1]时间段内运行的数据,如果是,开始步骤319,如果否,开始步骤316,判断数据i+1是否是在[τ,τ+1]时间段内运行的数据。

在步骤319,判断数据i是否已经存放在DRAM,如果是,开始步骤320,如果否,开始步骤322,判断数据i是否已经存放在NVM。

在步骤320,判断数据i是否满足移动至NVM历史写次数最低单元的条件即移动至该单元后这个单元的总写次数小于或等于NVM的写阈值,如果是,开始步骤321,即移动数据i,并更新该单元的历史写次数,开始步骤316,如果否,开始步骤322。

在步骤322,初始化存储器。

在步骤324,开始从M1到Mp的循环,当k≤p开始步骤325,当k>p则跳出循环,开始步骤330,判断数据i是否未存放在任何存储器。

在步骤325,判断数据i是否已经存放在NVM,如果是,开始步骤326,计数器,当count=1时,已经存放在NVM,当count=0,未存放在任何存储器,计数之后开始步骤327,如果否,开始步骤323,判断数据i是否存放在NVM的k+1单元处。

在步骤327,判断数据i是否满足从当前NVM单元至NVM历史写次数最低单元的条件,如果是,开始步骤328,即移动数据i,并更新该单元的历史写次数,开始步骤316,如果否,开始步骤329,将数据i从当前NVM单元移动至DRAM,开始步骤316。

在步骤330,判断数据是否未存放在任何存储器,如果是开始步骤331,如果否,开始步骤316。

在步骤331,判断判断数据i是否满足存放至NVM历史写次数最低单元的条件,如果是,开始步骤332,即存放至NVM,并更新该单元的历史写次数,开始步骤316,如果否,开始步骤333,即存放至DRAM,开始步骤316。

最后说明的是,以上优选实施例仅用以说明本发明的技术方案而非限制,尽管通过上述优选实施例已经对本发明进行了详细的描述,但本领域技术人员应当理解,可以在形式上和细节上对其作出各种各样的改变,而不偏离本发明权利要求书所限定的范围。

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