基于程序分析的低功耗无线传感器网络优化方法
【专利摘要】本发明公开了一种基于程序分析的低功耗无线传感器网络优化方法,包括步骤:步骤一,搭建一个无线传感器网络群集;步骤二,进行程序分析;步骤三,函数调度优化;步骤四,基本块级优化。本发明利用程序分析的结果进行无线传感器网络的能耗优化,通过对调用频率最高的内联函数进行有效调度,实现了降低无线传感器网络能耗的目的。
【专利说明】基于程序分析的低功耗无线传感器网络优化方法
【技术领域】
[0001]本发明涉及的是无线传感器网络通信领域,具体是一种基于程序分析的无线传感器网络优化方法。
【背景技术】
[0002]无线传感器网络(以下简称WSN)生存时间要求长达数月或数年,节点一般采用容量有限的电池供电,而且不方便更换电池,在维护性能的前提下,如何节省能耗并延长运行时间是其应用的重要挑战。
[0003]嵌入式系统功耗优化最先集中在硬件级,包括电路级、RTL级,级别越高就需要更大的能耗空间以及更高的设计成本。由于硬件级功耗优化已经遇到瓶颈,软件级功耗建模与优化为无线传感器网络提供了节能的新途径。有学者首先提出了对嵌入式软件进行功耗分析的一些基本概念,建立了基本的指令级功耗模型。随后,许多研究者纷纷开展了各种传统编译优化技术在低功耗方面的改良研究,主要工作集中在分支预测、循环结构优化、存储器和cache分配优化等方面,在保持程序语义和遵守目标机器资源限制的条件下,以形成各种功耗优化的程序分析技术。
[0004]目前基于程序分析的软件功耗优化工作主要集中在源程序结构级,技术也相对成熟,如循环结构优化等,已经在编译器中得到了部分实现,并取得了良好的功耗优化效果;算法级的功耗优化措施,借鉴现有的一些算法优化设计措施,如改善数据结构、压缩数据存储空间、减少重复计算与算法冗余度、贪心法等,降低算法的空间复杂度和时间复杂度,从而改善软件功耗。
[0005]程序分析功耗优化方法主要偏重于静态分析方法,尤其偏重于编译阶段。通过针对源代码的程序分析,变换某种结构,达到降耗的效果。程序分析这几年已经有了长足的进展,从传统的静态程序分析、动态程序分析发展到基于符号执行的混合程序分析。这些程序分析新进展为无线传感器网络的节能提供了新思路。
[0006]无线通信领域作为嵌入式系统的典型应用环境,目前的节能方法主要是单纯的静态分析,要么针对每条指令进行建模,要么针对整个任务进行建模。缺少对系统的动态行为能耗分析,以及基本块、函数级别的节能分析。传统的动态分析工具有Panorama, Dytan, Pin等,通过动态监控目标系统,基于数据流、控制流和信息流等进行分析。而动静态结合的混合程序分析可以提供基本块、函数级别的分析,同时通过动态注入的方式,获取程序的功耗和性能参数。混合程序分析通过细粒度的功耗调整方法,打开和关闭不同的部件、不同的更新和广播策略来节能,提供了一个更有效的能耗管理策略。
【发明内容】
[0007]为了克服上述现有技术的不足,本发明提供一种基于程序分析的低功耗无线传感器网络优化方法,先对无线网络通信过程中运行的程序进行基本块级的分析,鉴于基本块是一个程序执行的基本单元,能够将硬件级别的细节掩盖起来,综合考虑每条指令的耦合效果,模型参数少,精度高。然后通过函数调度优化可以有效地降低无线传感器网络设备的功耗,因为一个程序中,每一条指令都将激活微处理器中的某些硬件部件,因此正确调度指令可降低处理器的功耗。此发明可用于现有的无线传感器网络设备中。
[0008]本发明通过以下技术方案实现的,包括以下步骤:
[0009]一种基于程序分析的低功耗无线传感器网络优化方法,其特征在于,该方法包括如下步骤:
[0010]步骤一,搭建一个无线传感器网络群集,包括是目标、观测节点、传感节点和感知视场四类基本实体对象,其中每个传感器节点都会周期性地对周围环境进行感知取样,且末端节点见收集到的数据传输给基站,数据将在基站进行汇聚分析;
[0011]步骤二,进行程序分析:
[0012]利用程序profile信息分析工具划分出传感器节点运行程序的函数级,基于数据流、控制流和信息流分析方法检测出整个无线传感器网络群集运行中最耗能的函数集,记为集合F。
[0013]集合F中的函数可用基本块的集合来标识,利用基本块划分算法划分出这些函数中的基本块,通过程序动态分析工具监控基本块模型,检测出每个基本块的运行时间。其中基本块划分方法如下:
[0014](I)确定基本块的入口语句,
[0015](2)构造每一入口语句的基本块:由该入口语句到下一入口语句之间的语句序列组成。
[0016]步骤三,函数调度优化:针对集合F的函数为内联函数这一情况,将大部分间接调用转换为直接调用,使得函数调用的开销大大减少。
[0017]步骤四,基本块级优化:分析集合F中基本块的运行状态:
[0018]对于基本块运行平均时间较长的函数,即基本块运行平均时间排在F所有函数最前30%的,则加大这部分函数正常态和休眠态的切换频率。
[0019]对于基本块运行平均时间较短的函数,即基本块运行平均时间排在F所有函数最后30%的,则缩短这部分函数正常态的时间。
[0020]所述的最耗能的函数集,集合F为整个无线传感器网络运行中被调用最多的函数,将运行程序中的所有函数按被调用次数从高到低排序,取第一梯队的函数作为之后优化的对象(第一梯队的函数指的是被调用次数不低于最大次数90%的函数),由于这些被调用最多的函数必定会造成较高的能耗,故在能耗优化上先对这些函数进行处理。
[0021]所述的小规模无线传感器网络群集包括:四类基本实体对象,分别是目标,观测节点,传感节点和感知视场。大量传感节点随机部署在目标的邻近区域,通过自组织方式构成网络,协同形成对目标监测的感知视场。传感节点检测的目标信号经本地的简单处理后通过邻近传感节点多跳传输到观测节点。用户可以通过外部网络与观测节点进行交互,观测节点可向传感节点发布查询请求和控制指令,接受传感节点返回的目标信息。传感器节点一般都由数据采集模块、数据处理模块、数据传输模块和供电模块组成。
[0022]采用额外的硬件电路对整个网络所有节点的功率消耗进行测量分析。基于软件探针对整个无线传感器网络进行实时监测,即通过插入能耗测量代码,再配合外部硬件电路来计算节点能耗。[0023]所述的程序分析包括:通过动静态结合的混合程序分析方法,建立无线传感器网络基于动态程序注入的基本块级能耗模型,通过函数Summary的方法,得到函数级的高层功耗模型。由于单纯的动态程序分析方法是在目标程序运行时进行某些关键特征的提取以及监控,一次运行只能达到一条路径。针对动态分析路径覆盖率低的问题,可以通过辅助静态分析的方法进行优化。
[0024]所述的程序分析,是指利用一些信息分析工具,分析程序的流程逻辑与控制结构,寻找程序变量与值间的依赖关系,为程序优化提供索引,提供了详细的静态分析用于检查代码的冗余。
[0025]所述的基本块,是指程序一个顺序执行的语句序列,其中只有一个入口和一个出口,入口就是其中的第一个语句,出口就是其中的最后一个语句。对一个基本块来说,执行时只从其入口进入,从其出口退出。
[0026]所述的函数调度优化包括:通过基本块能耗模型,在函数级进行不同运行状态的调节,开关不同的外部设备,并根据路由协议和传输路径,设定不同的运行状态,尽量保持基本块级调度的能耗最小化。根据基本块运行时间的长短,调节正常态和休眠态在整个工作状态中的比例。在函数级上,开销最大的函数均为内联函数,在编译时,对于一个可以inline的函数,在每一个调用这个函数的地方,直接以函数的内容代替,因此默认不会生成这个函数的函数体。对函数进行inline优化时,由于可以减少调用函数的开销,这种方法适用于大量频繁调用的小函数,由于会将函数的内容复制到每一处调用的地方,会增加编译二进制文件的体积。
[0027]与现有技术相比,本发明利用程序分析的结果进行无线传感器网络的能耗优化,是既软件架构级、算法级之后更细分的基本块级优化,通过对调用频率最高的内联函数进行有效调度,实现了降低无线传感器网络能耗的目的。
【专利附图】
【附图说明】
[0028]图1是本发明基于程序分析的低功耗无线传感器网络优化方法的流程图。
[0029]图2是本发明的实施案例流程图。
【具体实施方式】
[0030]下面对本发明的实施例作详细说明,本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
[0031]一种基于程序分析的无线传感器网络优化方法,包括第一步,搭建一个小规模的无线传感器网络群集;第二步,对于整个网络运行程序进行分析,划分出函数级,再在函数级基础上划分出基本块级;第三步,函数调度优化;第四步,基本块级优化。
[0032]其中无线传感器网络群集中的每个传感器节点都会周期性地对周围环境进行感知取样,如对环境温度的记录,所有末端节点收集到的数据会不断传给基站,数据将在基站进行汇聚分析;在群集工作期间,对其加入能耗测量模块,利用基于外部电流测量的方法计算出每个节点的实际能耗;测量完功耗优化前的整个网络的能耗后,进入程序分析这一步骤,利用传统的动态分析工具,如Panorama, Dytan, Pin等,通过动态监控目标系统,基于数据流、控制流和信息流分析等方法便可检测出整个网络运行过程最耗能的基本块;针对前三个最耗能的基本块,进行代码分析后发现内联函数是最耗能的,修改内联函数将大部分间接调用转换为直接调用,函数调用的开销大大减少;对优化后的网络再实施能耗测量,能发现能耗相较于优化前有了大幅度的下降。
[0033]本实施例具体操作过程如下:
[0034]搭建一个小规模的无线传感器网络群集,其中传感器节点采用CrossBow公司生产的TelosB节点,在传感器网络中至少有一个节点作为基站,其他若干节点作为普通节点。在TinyOS下编写基站程序和节点程序,然后将程序烧录到每个节点上,每个普通节点的程序相同,但在烧录过程中需指定ID号以区分。网络中各相邻的节点可以完成相互间的通信,进行数据交换,通过无线通信方式形成了一个多跳自组织的网络系统。
[0035]在节点正常工作或休眠期间,由一路供电电源(供电电压为V)对传感器网络节点供电,供电线路中串联一个小阻值电流采样电阻R。电流采样电阻R两端的电压Vl送入差分放大器进行放大,放大倍数固定为K。放大后的电压信号V2经过A/D转换器转换为数字信号,并进行后端的数据处理、存储和显示。由于引入了差分放大器,可以测量到电流采样电阻微弱的两端电压差,因此电流采样电阻可以很小,典型的传感器节点最大供电电压为3V,最大电流为40mA,电流采样电阻为0.5 Ω,若放大倍数K为100,则满量程输出为2V,足以满足需求。即使对于最大工作电流,电流采样电阻上带来的压降也仅为20mV,对传感器节点的工作几乎没有影响。人工观察数字示波器,得出多次电压的测量值,再根据公式P=V*I=(V电源-V电阻)*V电阻/R电阻,得出多次节点的能耗值取其平均。测量小规模网络群集上的所有节点能耗得出整个网络的总能耗。
[0036]程序分析过程涉及到修改makefile文件这个步骤。操作系统TinyOS中的makefile文件保存了编译器和连接器的参数选项,还表述了所有源文件之间的关系,创建程序(make)首先读取makefile文件,然后再激活编译器,汇编器,资源编译器和连接器以便产生最后的输出。现在每个节点的makefile文件中手动添加pg参数,gprof工具可以显示flat profile,包括每个函数的调用次数,每个函数消耗的处理器时间,可以显示callgraph,包括函数的调用关系,每个函数调用花费了多少时间,可以显示注释的源代码,这是程序源代码的复本,标记有程序中每行代码的执行次数。修改完makefile文件后makeclean,重新make,在终端下使用gprof命令得出所有函数被调用的统计值,编写bash脚本文件使得这些函数按照被调用频率从高到低依次排序,针对排名靠前的函数进行代码优化。统计信息显示开销最大的函数均为内联函数,这为之后的函数调度模块提供了实施的可能性。
[0037]函数调度模块主要针对内联函数的优化。内联函数只有当函数比较短小的时候它才能得到很好的效果,如果函数并不是很短而且在很多地方都被调用,会使得可执行体的体积增大,而且当编译器拒绝inline的时候,会造成性能的下降,这些开销最大的内联函数大多都是出于这样的原因。于是,修改inline函数,将间接调用改成直接调用。实施功耗优化的函数调度模块之后,再次利用能耗测量模块,测出此时网络节点的总能耗,与优化前的网络相比,有了明显的下降。
[0038]综上所述,我们提出了上述的基于程序分析的无线传感器网络及其优化方法,利用程序分析工具动态分析出各个基本块的能耗情况,建立了基本块能耗模型,着重对功耗高的基本块进行基本块级的运行状态更改,以及对这些基本块包含的函数进行代码优化,这一软件上的改进可应用在现有的无线传感器网络设备中,实验测试出这样的方法是可以明显下降无线传感器网络功耗的。
【权利要求】
1.一种基于程序分析的低功耗无线传感器网络优化方法,其特征在于,该方法包括如下步骤: 步骤一,搭建一个无线传感器网络群集,包括是目标、观测节点、传感节点和感知视场四类基本实体对象,其中每个传感器节点都会周期性地对周围环境进行感知取样,且末端节点见收集到的数据传输给基站,数据将在基站进行汇聚分析; 步骤二,进行程序分析: 利用程序profile信息分析工具划分出传感器节点运行程序的函数级,基于数据流、控制流和信息流分析方法检测出整个无线传感器网络群集运行中最耗能的函数集,记为集合F。 集合F中的函数用基本块的集合来标识,利用基本块划分方法划分出这些函数中的基本块,通过程序动态分析工具监控基本块模型,检测出每个基本块的运行时间; 步骤三,函数调度优化:针对集合F的函数为内联函数这一情况,将间接调用转换为直接调用,使函数调用的开销减少; 步骤四,基本块级优化:分析集合F中基本块的运行状态: 对于基本块运行平均时间长的函数,即基本块运行平均时间排在F所有函数最前的30%,则加大这部分函数正常态和休眠态的切换频率。 对于基本块运行平均时间短的函数,即基本块运行平均时间排在F所有函数最后的30%,则缩短这部分函数正常态的时间。
2.根据权利要求1所述的基于程序分析的低功耗无线传感器网络优化方法,其特征在于,所述的最耗能的函数集是将运行程序中的所有函数按被调用次数从高到低排序,被调用次数不低于最大次数90%的函数。
3.根据权利要求1所述的基于程序分析的低功耗无线传感器网络优化方法,其特征在于, 所述的步骤二中,基本块划分方法,包括如下步骤: (1)确定基本块的入口语句, (2)构造每一入口语句的基本块:由该入口语句到下一入口语句之间的语句序列组成。
【文档编号】H04W24/02GK103648116SQ201310563735
【公开日】2014年3月19日 申请日期:2013年11月13日 优先权日:2013年11月13日
【发明者】陈润, 戚正伟, 管海兵, 辛锐 申请人:上海交通大学