基于Cache感知的NVP性能优化备份方法及系统与流程

文档序号:12665128阅读:308来源:国知局
基于Cache感知的NVP性能优化备份方法及系统与流程

本发明涉及嵌入式系统(Embedded System)领域,尤其涉及基于Cache感知的NVP性能优化备份方法及系统。



背景技术:

近年来,我们目睹了物联网和可穿戴设备等嵌入式系统的指数式增长,以及他们给我们日常生活的所带来的一系列变化。这些智能系统通常采用传感器来收集相关数据,然后将数据进行分析,并传输到信息中心。传统上,嵌入式系统大都由电池供电。然而现在,在诸多可穿戴的健康监视设备中,电池的使用已经不再受欢迎,这是由于1)大尺寸和重量;2)安全和健康关注;3)频繁充电。

能量收集器正在成为可穿戴设备的有利电源,因为它是从周围的环境中获得能量,比如太阳能,电磁辐射或热源等,并通过使用一些能量转换技术实现对设备的电容进行充电,再对电子设备进行供电。也因为这种环保的充电方式,提供更好的用户体验。但是,能量收集电源普遍存在一个缺点就是不稳定性。由于不稳定性,程序可能会被频繁中断,像使用基于CMOS的易失性处理器,断电就会导致结果丢失,导致程序需重新从头开始执行,这会带来大量的能量开销,甚至使得大型的任务不可能完成。

非易失性存储器(non-volatile memory,简称NVM)是指当电源关掉后,所存储的数据不会消失的计算机存储器,所以基于NVM的非易失性处理器(non-volatile processors,简称NVP),就能解决自供能系统中每次掉电任务需重新从头开始运行的问题。如图1所示,当每次发生掉电时,处理器中的内容,都将保存到NVM中做好备份,当下次供电恢复时,再从NVM中将备份内容拷贝到处理器中,恢复程序之前的状态,然后接着继续执行下去。

在NVP系统设计中,一些研究人员已经通过研究寄存器文件和片上存储器的备份/恢复来实现即时开/关系统。寄存器文件通常很小并且经常更新,因此寄存器的内容备份可以设计为一旦发生能量警告就全部备份,这可以通过将NVM单元附加到每个触发器上,设计混合型寄存器单元来实现。片上存储器的容量比较大,通常不是所有的内容都需要备份。因此,通过分析程序减少备份内容,可以提高系统备份效率,减少能量在备份上的浪费。由于能量限制,分析不可能在运行时动态进行,因此通常采用离线式的静态分析方法。虽然编译器可以报告一些有用的信息,指导基于静态分析的内存内容备份。然而,Cache的存在会对程序的分析产生很大的不确定性。如果不考虑Cache访问命中/未命中的信息,假定采用所有的Cache访问都未命中的保守分析方式,会导致对内存备份的产生过度悲观的判定,进而导致整个系统的性能较差。



技术实现要素:

本发明的目的就是为了解决上述问题,提供一种基于Cache感知的NVP性能优化备份方法及系统,它提出一个由离线分析和在线管理组成的缓存感知备份(CAB)框架,使得程序分析更精准。

为了实现上述目的,本发明采用如下技术方案:

基于Cache感知的NVP性能优化备份方法,包括如下步骤:

离线分析步骤和在线管理步骤;

其中离线分析步骤包括:

步骤(1):将标签槽插入反汇编代码中作为备份位置的候选点;

步骤(2):对带有标签槽的反汇编代码进行分析,对高速缓冲存储器Cache的行为进行分析,在保证能够成功备份的前提下,选择最远的标签槽插入备份标签;

步骤(3):对每条指令进行备份标签位置标记,表示收到能量报警信号的指令,在相应标记的备份标签位置上开始进行备份,以使指令在开始备份之前,指令运行达到最远的前进步长;

所述在线管理步骤包括:

步骤(4):在程序运行过程中遇到能量报警信号时,对基于NVM的非易失性处理器NVP中主存储器的备份,栈空间以外的内存数据采用全部备份的方式,而对于栈空间以内的数据,程序继续运行到最远的备份标签处才开始触发备份,以实现程序收到能量报警信号后能够运行最大运行步长。

所述步骤(1)将标签槽插入反汇编代码的原因是,插入标签槽后指令的内存地址就是固定的,就可以确定指令在高速缓冲存储器Cache中的位置,就可以对程序进行Cache行为分析。

标签槽作为备份标签的候选位置点,最终在程序中会用备份标签或NOP操作替换标签槽。

执行备份标签指令,就会触发备份操作。

所述步骤(1)的步骤如下:

步骤(11):分析反汇编程序P,确定每条指令备份所需的栈存储空间;

步骤(12):建立剩余能量分配模型;

首先剩余的可用能量既要满足后续的程序执行,又要满足栈的备份;

位置p是一个可行的备份位置,则剩余的可用能量要能够支持程序执行到p并且备份p的栈中的所有内容:

aveEne≥Ene(Ins)+Ene(backup) (1)

其中,aveEne表示剩余的可用能量,Ene(Ins)表示执行指令消耗能量,Ene(backup)表示备份操作消耗能量;Ene(Ins)表示在cache未命中情况下每个指令执行过程中消耗的能量计算指令执行消耗能量Ene(Ins_miss)或在cache命中情况下每个指令执行过程中消耗的能量计算指令执行消耗能量Ene(Ins_hit);

步骤(13):计算cache未命中情况下,执行指令消耗能量;

根据与基于NVM的非易失性处理器对应的指令集,和在cache未命中情况下每个指令执行过程中消耗的能量计算指令执行消耗能量Ene(Ins_miss),Ene(Ins_miss)包含所有类型指令在cache未命中情况下执行所消耗的能量;

步骤(14):计算备份操作消耗能量;

根据不同的NVM备份过程中能量消耗情况,以及要备份的内容备份过程中消耗的能量与要备份的内容所占据的存储空间成比例,计算备份操作消耗能量Ene(backup);

步骤(15):P'表示插入标签槽后的反汇编程序,将反汇编程序P赋值到P'中,初始化P';

步骤(16):初始化指令队列Q,将程序的第一条指令放入队列Q中;

步骤(17):从队列Q中取出队首指令ins,对反汇编程序P,假设在指令ins处,收到能量警告信号,依据公式(1),在剩余的可用能量范围内分析所有可能的路径,找到最远的可以成功备份的指令ins′,在P'中的指令ins′前面插入一个标签槽并将指令ins′加入队列Q,然后删除Q中的指令ins;

重复执行步骤(17),直到队列Q为空,结束并输出插入标签槽后的反汇编程序P'。

所述步骤(11)的步骤如下:

步骤(111):将原二进制程序反汇编成反汇编程序,依据反汇编程序中指令的先后关系建立程序控制流程图CFG;CFG是control flow graph的缩写;

步骤(112):栈版本分析。

所述步骤(111)中:

将反汇编程序分为四大类:无条件跳转指令、条件跳转指令、函数调用指令和顺序执行指令;

依据每条指令的实现功能,建立每条指令的入边集合和出边集合,所述入边集合包括当前指令的所有前一条指令的集合;当前指令的前一条指令有一种或多种;所述出边集合包括当前指令的所有后一条指令的集合;当前指令的后一条指令有一种或多种。

控制流程图CFG是个有向图,控制流程图中每一个点就是一条指令,依据每条指令的前继和后继关系,用箭头表示指令之间的先后依赖关系,然后构建出整个程序的CFG。

所述步骤(112)的步骤如下:

步骤(1121):假设SVS表示每条指令的栈的版本集合,SL表示存储整个程序的栈版本表,lp表示程序的循环次数,先进行变量初始化;

步骤(1122):根据指令是否对栈的存储空间大小产生影响,将指令分为stack-affected指令和stack-unaffected指令;stack-affected指令指的是指令执行将影响栈大小的指令;stack-unaffected指令指的是指令执行但不会影响栈大小的指令;

步骤(1123):依据CFG建立整个程序的拓扑序列表Seq;

步骤(1124):依据拓扑序列表Seq的拓扑顺序对每一条指令进行分析;若当前指令是stack-unaffected指令,直接继承前继指令的栈的版本集合SVS;若当前指令是stack-affected指令,进一步分析当前指令的执行对栈的影响且是否会产生新版本的栈,若产生则对存储整个程序的栈版本表SL和当前指令的SVS做相应的修改;若未产生则进入步骤(1125);

步骤(1125):重复步骤(1124),执行lp次,结束;

步骤(1126):对每一条指令,取相应的栈版本集合SVS中栈存储空间最大的栈版本的栈存储空间作为该指令备份所需的栈存储空间。

所述步骤(2)中,Cahce的行为是指Cache访问命中和Cache访问未命中。

步骤(2)的步骤如下:

步骤(21):利用步骤(17)可得到插入标签槽的反汇编代码P',对插入标签槽的反汇编代码P'进行Cache persistence分析,记录每条指令的持久性分析persistence范围;

步骤(22):计算cache命中情况下,执行指令消耗能量;

根据与处理器对应的指令集,和在cache命中情况下每个指令执行过程中消耗的能量计算指令执行消耗能量Ene(Ins_hit),Ene(Ins_hit)包含所有类型指令在cache命中情况下执行所消耗的能量;

步骤(23):利用步骤(13)可得到cache未命中情况下,执行指令的消耗的能量Ene(Ins_miss);利用步骤(14)可得到备份操作消耗的能量Ene(backup);

步骤(24):对每一条指令ins,假设在指令ins处发生能量警告,利用指令的persistence范围,分析所有可能的路径,确定每条路径上前进步长最大的标签槽的位置,插入备份标签;将没有插入备份标签的标签槽替换为NOP指令。

借用了学术界实时系统分析中常用的persistence方法。是对程序中的不同循环(loop)分别进行persistence分析,可能同一条指令会包含在多个循环中,比如分析完后,指令ins在循环a循环b中是persistence,在循环c中不是persistence的。那该指令的persistence的范围就是循环a,b。Persistence的含义是:在特定范围内,从调入cache中,就一直不会替换出去(即在cache访问时,只会发生一次cache未命中)。

利用persistence的操作特性,在进行路径分析时,若指令ins不是persistence的,就按Cache未命中的执行能耗进行分析;若指令ins是persistence的,需要进一步判断是后否是第一次cache访问,若是第一次就按cache未命中的执行能耗分析;若不是就按cache命中的执行能耗分析。

每条路径上最后一个标签就是前进步长最大的标签的位置。

所述步骤(3)中:

目标是在基于NVM的非易失性处理器NVP中,当发生能量警告时,要在成功备份的前提下程序的前进步长最大。在插入备份标签后,为达到最大的前进步长,可能之间要跨越多个备份标签。需要为每一个可能发生的电源故障位置(即,对于每个指令)确定一个备份标签位置标记,表示在某条指令处收到能量报警信号,需要在第几个备份标签的位置上进行备份。

所述步骤(3)的步骤为:

步骤31):对于每一条指令ins,通过Ni统计以该指令开始的每一条可能路径i上的备份标签的个数;

步骤32):取Ni的最小值min(Ni)作为指令ins的备份标签位置标记。

所述步骤(4)的步骤为:

步骤(41):利用步骤(24)可以得到插入备份标签的反汇编程序P’,利用步骤(32)可得到每条指令对应的备份标签位置标记;

步骤(42):运行反汇编程序P’,若在指令ins处收到能量警告信号,程序继续运行,并统计从指令ins开始的备份标签的数目Num,查询Num与指令ins的备份标签位置标记是否相同;若相同,程序终止,并开始进行备份操作;若不相同,程序继续运行,并继续统计备份标签的数目Num。

步骤(1)插入的标签槽是潜在的备份位置,接下来步骤(2)通过对Cache的行为进行分析,确定备份标签的位置,使得每次接收到能量报警信号后,保证在成功备份的前提下(无论走哪条路,都能找到一个备份标签),程序向前执行的步长最长。对Cache的行为分析,我们采用WECT中的Cache persistence的分析方法。Cache persistence块只会发生一次Cache未命中,即,第一次Cache访问以后,之后的访问都能确保是Cache命中的。Cache persistence分析完后,可以得到每条指令的persistence的范围,然后依据每条指令的persistence信息确定备份标签的位置。

基于Cache感知的NVP性能优化备份系统,其特征是,包括:

离线分析单元和在线管理单元;

其中离线分析单元包括:

标签槽插入模块:被配置为将标签槽插入反汇编代码中作为备份位置的候选点;

反汇编代码分析模块:被配置为对带有标签槽的反汇编代码进行分析,对高速缓冲存储器Cache的行为进行分析,在保证能够成功备份的前提下,选择最远的标签槽插入备份标签;

备份标签位置标记模块:被配置为对每条指令进行备份标签位置标记,表示收到能量报警信号的指令,在相应标记的备份标签位置上开始进行备份,以使指令在开始备份之前,指令运行达到最远的前进步长;

所述在线管理单元包括:

备份模块:被配置为在程序运行过程中遇到能量报警信号时,对基于NVM的非易失性处理器NVP中主存储器的备份,栈空间以外的内存数据采用全部备份的方式,而对于栈空间以内的数据,程序继续运行到最远的备份标签处才开始触发备份,以实现程序收到能量报警信号后能够运行最大运行步长。

本发明的有益效果:

1提出一个由离线分析和在线管理组成的缓存感知备份(CAB)框架,使得程序分析更精准;

2在成功备份的前提下可以实现程序最大的前进进度;

3提高了程序的执行效率;

4提高了能量的利用率。

附图说明

图1为易失性处理器和非易失性处理器工作原理示意图;

图2为分别采用立即备份(Instant)、cache未感知(Cache-unaware)、cache感知(Cache-aware)的备份方法对实例程序进行分析的情况;

图3为基于Cache感知的NVP系统的架构示意图;

图4为基于Cache感知的NVP性能优化备份方法及系统技术方案流程图。

具体实施方式

下面结合附图与实施例对本发明作进一步说明。

下面我们通过一个例子说明一下。如图2所示,假设在指令1处收到能量警告信号,此时电容器中剩余的可用能量为31(仅用于指令执行和备份),其中指令6-10访问一定是Cache命中的,执行Cache-miss的指令消耗能量为1,执行Cache-hit的指令消耗的能量为0.2,NVM备份一个单元消耗的能量为10。在剩余的可用能量范围内,若采用传统的备份方式,立即备份(Instant),则执行完指令1就直接进行备份,此时程序在电源发生故障后向前执行了1步。若采用Cache未感知的备份方式(Cache-unaware),保守地假定所有指令访问都是Cache未命中的,程序最远在执行完指令5之后备份,此时程序在电源发生故障后向前执行了5步。若采用Cache感知的备份方式(Cache-aware),由于指令6-10访问一定是Cache命中的,程序最远在执行完指令12之后备份,此时程序在电源发生故障后又向前执行了12步。上述三种方法相比,在接受到能量报警信号后,采用第三种方法,程序向前前进步最大,即找的备份点最远。这也意味着,相同情况下,第三种备份方式的程序执行速率最快。因此,我们提出了基于Cache感知的NVP性能优化备份方案,目标是保证在收到能量警告后,利用Cache的行为信息找到一个尽可能远的备份位置,提高程序的前进步长,提升程序执行速率和系统性能。

如图3所示,基于指令Cache的NVP系统的结构示意图。

基于NVM的非易失性处理器NVP,包括CPU,所述CPU包括基于非易失存储的寄存器组,所述CPU与主存储器连接,所述CPU还与指令级高速缓存寄存器I-Cahce连接;所述主存储器与指令级高速缓存寄存器I-Cahce连接;所述主存储器还与非易失性存储器NVM连接。

对所有的指令,CPU要先访问I-Cache,只有访问未命中的情况下,CPU才去访问内存,并将未命中的指令存入I-Cache中。基于NVM的非易失性处理器NVP中,CPU中的寄存器组是基于非易失存储的寄存器组,可以对寄存器中的非易失行数据进行备份;非易失性存储器NVM是单独的一块存储器,用于对主存储其中的数据进行备份。

在发生能量警告时,寄存器中数据用非易失性寄存器进行全部备份,指令Cache中的数据不需要备份,主存储器中的数据选择性地进行备份。主存储器中动态内存大小是伴随程序执行而变化的,其中栈空间是动态内存上的重要组成部分。因此,对非易失性处理器片中主存储器上的备份,栈空间以外的内存数据我们采用全部备份的方式,而对于栈空间部分,我们根据其动态大小规律去确定要备份的栈空间的最大值。

从前面图2的例子,很容易看出Cache的信息对提高NVP的前进进度提供了巨大的潜力。备份操作通常是通过在程序插入某条特殊指令来实现。这对缓存分析带来了很大影响,因为插入附加指令之后,指令的地址以及Cache内容都会相应地改变。所以要根据Cache行为来决定插入备份指令的位置。本发明基于Cache感知的NVP性能优化备份方案的示意图如图4所示,包括离线分析和在线管理两大模块。在离线分析中,先将标签槽插入原反汇编代码中作为备份位置的候选点,然后对带有标签槽的反汇编代码进行分析,依据Cache的行为特点,在能够保证成功备份的前提下,选择最远的标签槽插入备份标签。在运行时,在最远的标签处触发备份以实现程序最大前进步长。

1,插入标签槽

在源反汇编代码中插入标签槽的主要原因是,插入标签槽后指令的内存地址就是固定的,就可以确定指令在Cache中的位置,就可以对程序进行Cache行为分析了。标签槽作为备份标签的候选点,最终在程序中会用备份标签或NOP操作替换标签槽。

插入标签槽的方法步骤如下:

1)分析原反汇编程序P,确定每条指令备份的栈空间大小;

2)P’表示插入标签槽后的反汇编程序,初始化P’,将P拷贝到P’中;

3)初始化指令队列Q,将程序的第一条指令放入队列Q中;

4)从队列Q中取出队首指令ins,对原反汇编程序P,假设在指令ins处,收到能量警告信号,依据不等式(1),在剩余可用的能量范围内分析所有可能的路径,找到最远的可以成功备份的指令ins′,在P’中的指令ins′前面插入一个标签槽并将指令ins′加入队列Q,然后删除Q中的指令ins;

5)重复执行步骤4),直到队列Q为空,结束,返回插入标签槽后的反汇编程序P’。

插入标签槽算法的执行过程如下:

2,基于Cache行为感知的备份标签选择

插入的标签槽是潜在的备份位置,接下来需要通过对Cache的行为进行分析,确定备份标签的位置,使得每次接受到能量报警信号后,保证在成功备份的前提下(无论走哪条路,都能找到一个备份标签),程序向前执行的步长最长。对Cache的行为分析,我们采用WECT中的Cache persistence的分析方法。Cache persistence块只会发生一次Cache未命中,即,第一次Cache访问以后,之后的访问都能确保是Cache命中的。Cache persistence分析完后,可以得到每条指令的persistence的范围,然后依据每条指令的persistence信息确定备份标签的位置。

基于Cache行为感知的备份标签选择方法的步骤如下:

1)对插入标签槽的反汇编代码进行Cache persistence分析,记录每条指令的persistence范围;

2)对每一条指令ins,假设在指令ins处发生能量警告,利用指令的persistence信息,分析所有可能的路径,确定每条路径上前进步长最大的标签槽的位置,插入备份标签;

3)将没有插入备份标签的标签槽替换为NOP指令。

基于Cache行为感知的备份标签选择算法的执行过程如下:

3,备份标签位置选择

本发明的目标是当发生电源故障时,要在成功备份的前提下,程序的前进步长最大。在插入备份标签后,为达到最大的前进步长,可能之间要跨越多个备份标签。

需要为每一个可能发生的电源故障位置(即,对于每个指令)确定一个备份标签位置标记,表示在某条指令处收到能量报警信号,需要在第几个备份标签的位置上进行备份。为了实现这一点,对于每个指令,要标记一个数字,指示在触发备份操作之前要跨越多少备份标签,这个数字的大小。这个标记数字,取所有以该指令开始的可能路径上最远备份标签的最小值。例如,指令ins有三条可能的路径,每条路径上分别有3、4、5个备份标签,那么ins的备份标记数字为3。这样,实际程序运行时,如果在指令ins处发生电源故障,程序会继续向前执行,直到遇到第3个备份标签后,才会触发备份操作。

4,运行时备份

运行插入标签槽的反汇编程序,若在指令ins处收到能量警告信号,程序继续运行,并统计从指令ins开始的备份标签的数目Num,查询Num与指令ins的备份标签位置标记是否相同;若相同,程序终止,并开始进行备份操作;若不相同,程序继续运行,并继续统计备份标签的数目Num。

所以,在NVP系统中,如果某条指令收到能量警告信号,会继续执行,直到遇到该指令的备份标签位置标记的备份标签才会触发备份操作。

本发明的目标是当发生电源故障时,要在成功备份的前提下,程序的前进步长最大。在插入备份标签后,为达到最大的前进步长,可能之间要跨越多个备份标签。我们需要为每一个可能的电源故障位置(即,对于每个指令)确定一个备份位置标记,表示若在某条指令处收到能量报警信号,需要在第几个备份标签的位置上备份。为了实现这一点,对于每个指令,要标记一个数字,指示在触发备份操作之前要跨越多少备份标签。这个标记数字,需通过以该指令开始的所有可能的路径来计算,记为所有路径的备份标签的最大公共索引。例如,指令ins有三条可能的路径,每条路径上分别有3、4、5个备份标签,那么ins的备份标记数字为3。这样,实际程序运行时,如果在指令ins处发生电源故障,程序会继续向前执行,直到遇到第3个备份标签后,才会触发备份操作。

Cache persistence分析方法参考:

C.Cullmann.Cache persistence analysis:Theory and practice.ACM Trans.Embed.Comput.Syst.,12(1s):40:1–40:25,Mar.2013.

上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。

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