专利名称:使用动态编译器控制程序运行时处理器频率的方法
技术领域:
本发明涉及基于系统软件节能技术领域,特别是涉及一种使用动态编译器控制程序运行时处理器频率的方法。
背景技术:
随着IT产品功能日益强大,消耗的功率也随之逐渐增高。如今,由十亿个晶体管构成的芯片,额外漏电已经达到60 70瓦。功耗的提高,同时也带来了散热量的增加,对散热设备的要求也变得越来越大。一
而在计算机系统,特别是各种嵌入式设备中,CPU是消耗电力的主要部件之一。在便携式嵌入式设备电源管理领域,目前的困难在于既要满足便携式终端对电源供电的要求,又要做到占用空间小、重量轻和供电时间更长。下一代消费类电子产品的电源解决方案重点应该集中在硬件和软件两方面技术,包括(l)在小巧外形尺寸下,如何实现所需电源性能的工艺和技术,涉及热管理、降噪、电池管理和功能整合等技术;(2)动态功率管理技术,它取决于CPU性能、软件、中间件以及用户对更换电池的时间间隔等要求;(3)动态功率管理技术对操作系统内核和驱动器,以及应用编程接口(API)对驱动器、中间件和应用本身的影响。
现在嵌入式设备的功能变得越来越强大,功能也越来越丰富。随着嵌入式设备功能越来越多,用户对嵌入式设备电池的能量需求也越来越高,现有的锂离子电池己经越来越难以满足消费者对正常使用时间的要求。对此,业界主要采取两种方法, 一是开发具备更高能量密度的新型电池技术,如燃料电池,在可以预见的5年内,电池技术不可能有很大的突破;二是在电池的能量转换效率和节能方面下功夫。在目前新的高能电池技术(如燃料电池)仍不成熟的情况下,下一代手持设备的电源管理只能从提高电源利用率和降低功耗这二个方面着手。
如何延长电池的使用寿命,以及尽量减少电池能量的消耗已经成为计算机领域的一个研究热点。现在主要集中在硬件设计和软件优化两方面。其中软件优化方面现在主要包括系统软件和应用软件两方面。系统软件主要集中在编译器和操作系统内核两块。
在操作系统领域,现在主要的电源管理方法是利用操作系统内核,动态的调整系统处理器和总线的频率,降低系统的整体能耗。在编译器方面,传统的手段主要通过编译器在编译应用程序阶段,对代码进行优化,使代码尽量的紧凑以及访问设备尽量集中,以达到节能的目的。
动态编译器作为一种特别的编译器,是指在程序运行阶段编译、修改和优化程序代码的系统软件,它运行于操作系统和应用程序二进制代码之间。其运行时编译程序的特性决定了它能比传统的编译器更好地了解程序在真实环境下的运行状态,由于动态编译器既了解程序内部结构,又能获得程序的实时运行状况,应此动态编译器也可用来驱动节能。
发明内容
本发明的目的在于克服现有技术中的不足,提供一种使用动态编译器控制程序运行时处理器频率的方法。
本发明解决其技术问题采用的技术方案如下-
提供一种使用动态编译器调整程序运行时处理器频率的方法,包括以下步骤-
(1) 插入分析代码
使用动态编译器注入运行中的程序进程,通过对其二进制代码的分析,并以函数和循环体为单位将程序划分成代码段,对划分好的代码段,动态编译器在其入口以及出口处插入分
析代码以其被执行的次数, 一旦超过一定值,则认定相应的函数或循环为程序热点;
(2) 动态确定程序运行时的程序热点在程序中插入的分析代码记录程序每个函数和循环执行的次数, 一旦其超过设定值,则
认为相应的函数或循环为程序热点;对确定后的程序热点,分析代码将进一步釆集其性能;否则,动态编译器移除插入的分析代码,以减小程序运行的负担;
(3) 采集程序热点的性能程序通过指令对硬件平台的硬件性能监视计数器PMC进行设置,要求PMC记录处理器运
行的指令数和处理器二级缓存缺失数;
动态编译器插入的分析代码按如下过程采集程序热点的性能 一旦程序执行到一个程序热点,其入口处的分析代码将PMC的值清零;当该程序热点执行完后,其出口处的分析代码读取当前PMC的值,即该程序热点本次执行的处理器运行的指令数和处理器二级缓存缺失数;最后,这两个值将被记录到该程序热点的性能历史记录中;
(4) 根据程序热点的性能调整处理器频率利用采集到的程序热点的数据,通过如下映射公式确定程序热点的最节能频率f^P(f,,m) 其中
m是当前处理器的二级缓存缺失比,111=处理器二级缓存缺失数/处理器运行的指令数;f为当前处理器最节能频率;
4f,为处理器的最高运行频率;
P(f皿,m)为m, f,到f的一个映射,该映射将根据当前m参数和处理器的最高运行频率 f,为当前程序热定确定最节能频率;
确认程序热点的最节能频率后,将该频率与处理器的最高运行频率进行比较,如果两者 一样,则意味着在运行时没有必要调整该程序热点的频率,插入的分析代码会被移除;如果 最节能频率比处理器的最高运行频率要低,则分析代码在该程序热点的入口处记录之前的处 理器频率,并调节处理器频率为该程序热点的最节能频率;之后,当该程序热点运行完成后, 分析代码将当前的处理器的频率恢复到之前记录下的频率。
本发明与背景技术相比,具有的有益的效果是
本发明通过在程序运行时,动态分析程序的性能,并利用处理器的频率调节功能将程序 理论处理器最节能频率映射到实际可调节电压,以达到节能的目的,同时保证系统的性能要 求。该发明基于一个处理器频率映射模型,通过映射模型将理论处理器最节能频率映射到实 际可调整的处理器频率。操作系统在执行过程中,动态调频调压技术,根据性能要求和处理 器运行情况确定处理器在当前性能要求下的理论最节能运行频率,然后通过映射模型映射到 实际处理器频率,以达到节能地目的。
(1) 透明性。动态编译器在程序运行过程中注入程序的线程,在工作过程中不需要借助 程序的源代码,也不会修改程序本身的功能,因此具有较强的透明性。
(2) 稳定性。动态编译器将调整系统状态的权利掌握在自己手中,而不是下放给应用程 序,这样就能在兼顾全局的情况下动态调整系统的状态,保证系统的稳定。
(3) 实用性。本发明不需要修改操作系统和程序的源代码,也不需要重新编译程序即可 达到节能目的,方法十分简单,易于实现,且移植性高。经过反复的验证,这个方法可有效 减少程序员的工作量,代价小,十分实用。
图l为本发明的实现流程图。
具体实施例方式
在实施使用动态编译器控制程序运行时处理器频率的方法时,动态编译器在调度过程 中,考虑了性能和节能两个约束,以尽可能低的频率运行程序同时保证其性能。 1)插入分析代码
在本发明中,动态编译器注入运行中的程序,以函数和循环为基本单位对程序的二进制 代码进行分析和划分,对划分好的代码段,动态编译器判断其函数体和循环体的大小,对超
5过IO条指令的函数体和循环体,动态编译器在函数体的入口以及出口,在循环体的前后各
插入分析代码。分析代码的作用包括确定程序热点,采集程序热点性能,计算程序热点最 节能频率并调整处理器在程序热点运行时的频率。
2) 确定程序热点
程序热点是指程序运行过程中,被执行次数超过一定值的函数或循环。在本发明,该值
设置为8,即一个函数或循环被执行过8次以上,则称其为程序热点。在程序中插入的分析 代码使用表来记录所有受监视代码段的执行次数,改表使用代码段的第一条指令的地址来索 引代码段的执行信息,若一个函数或循环执行的次数超过8,则将该函数或循环加入程序热 点列表。对于加入程序热点列表的程序段,分析代码将进一步采集其性能;否则,动态编译 器移除插入的分析代码,以减小程序运行的负担。
3) 采集程序热点性能
硬件平台都具有硬件性能监视计数器PMC。 PMC可在计算机运行过程中记录特定硬件事 件的发生次数,包括处理器已运行周期,处理器缓存缺失次数等。PMC都具有两个以上的寄 存器用来保存采集到的事件发生数量;如Pentiura-M处理器上的PMC可以同时监视两种系统 事件。本发明要求PMC记录两种系统事件,包括处理器运行的指令数,处理器二级缓存缺 失数。
程序可以通过特殊指令对PMC进行设置,设置PMC需要监视的事件类型;同时,程序也 可以通过特殊指令读取PMC当前的值。动态编译器插入的分析代码按如下过程采集程序热点
的性能 一旦程序执行到一个程序热点,其入口处的分析代码将PMC的值清零;当该程序热
点执行完后,其出口处的分析代码读取当前PMC的值,即该程序热点本次执行的处理器运行 的指令数和处理器二级缓存缺失数;最后,这两个值将被记录到该程序热点的性能历史记录 中。
以Pentium-M为例,它共有两个性能监视选择器PerfEvtSelO和PerfEvtSell,通过设 置这两个性能监视选择器的可选择要监视的硬件事件。向这个性能监视选择器的0-7位分别 写入C0H和2EH就可以让处理器监视运行的指令数和二级缓存缺失数。同时PerfEvtSelO和 PerfEvtSell所对应计数器寄存器PerfCtrO和PerfCtrl会开始累加硬件事件的数量。通过 Pentium-M的WRMSR指令可以读取或设置这两个计数器寄存器的值,也就是相系统事件发生 的次数。
4) 计算程序热点最节能频率
利用采集到的程序热点性能,本发明通过如下映射公式计算并确定一个程序热点的最节 能频率
f=P(fra,,m);其中m是当前处理器的二级缓存缺失比,riF处理器二级缓存缺失数/处理器运行的指令数,
f为当前处理器最节能频率,
f,为处理器的最高运行频率,
P(f一 m)为m, f皿到f的一个映射,该映射将根据当前m参数和处理器的最高运行频率 f,为当前程序热定确定最节能频率。以Pentium-M为例,该处理器共有六个运行频率,分 别为1700 MHz, 1400 MHz, 1200 MHz, 1000 MHz, 800 MHz和600 MHz。其中fmx= 1700 MHz 。 m和f在该处理器上的对于关系为若m<0. 005,则f=1700 MHz;若0. 005〈=m〈0. 010,则f=1400 MHz;若0.010〈=m〈0.015,则f=1200 MHz;若0.015〈=m<0.020,则f=1000 MHz;若 0. 020<=m<0. 030,则f=800 MHz;若111>=0.030,则f=600 MHz。
5)调整处理器在程序热点运行时的频率
为程序热点计算好最节能频率后,该频率将和处理器的最高运行频率进行比较,如果两 者一样,则意味着在运行时没有必要调整该程序热点的频率,插入的分析代码会被移除;如 果最节能频率比处理器的最高运行频率要低,则分析代码在该程序热点的入口处记录之前的 处理器频率,并调节处理器频率为该程序热点的最节能频率,之后,当该程序热点运行完成
后,分析代码将当前的处理器的频率恢复回之前记录下的处理器频率。
最后,还需要注意的是,以上公布的仅是本发明的具体实施例。本领域的普通技术人 员能从本发明公开的内容直接导出或联想到的所有变形,均应认为是本发明的保护范围。
权利要求
1、一种使用动态编译器调整程序运行时处理器频率的方法,包括以下步骤(1)插入分析代码使用动态编译器注入运行中的程序进程,通过对其二进制代码的分析,并以函数和循环体为单位将程序划分成代码段,对划分好的代码段,动态编译器在其入口以及出口处插入分析代码以其被执行的次数,一旦超过一定值,则认定相应的函数或循环为程序热点;(2)动态确定程序运行时的程序热点在程序中插入的分析代码记录程序每个函数和循环执行的次数,一旦其超过设定值,则认为相应的函数或循环为程序热点;对确定后的程序热点,分析代码将进一步采集其性能;否则,动态编译器移除插入的分析代码,以减小程序运行的负担;(3)采集程序热点的性能程序通过指令对硬件平台的硬件性能监视计数器PMC进行设置,要求PMC记录处理器运行的指令数和处理器二级缓存缺失数;动态编译器插入的分析代码按如下过程采集程序热点的性能一旦程序执行到一个程序热点,其入口处的分析代码将PMC的值清零;当该程序热点执行完后,其出口处的分析代码读取当前PMC的值,即该程序热点本次执行的处理器运行的指令数和处理器二级缓存缺失数;最后,这两个值将被记录到该程序热点的性能历史记录中;(4)根据程序热点的性能调整处理器频率利用采集到的程序热点的数据,通过如下映射公式确定程序热点的最节能频率f=P(fmax,m) 其中m是当前处理器的二级缓存缺失比,m=处理器二级缓存缺失数/处理器运行的指令数;f为当前处理器最节能频率;fmax为处理器的最高运行频率;P(fmax,m)为m,fmax到f的一个映射,该映射将根据当前m参数和处理器的最高运行频率fmax为当前程序热定确定最节能频率;确认程序热点的最节能频率后,将该频率与处理器的最高运行频率进行比较,如果两者一样,则意味着在运行时没有必要调整该程序热点的频率,插入的分析代码会被移除;如果最节能频率比处理器的最高运行频率要低,则分析代码在该程序热点的入口处记录之前的处理器频率,并调节处理器频率为该程序热点的最节能频率;之后,当该程序热点运行完成后,分析代码将当前的处理器的频率恢复到之前记录下的频率。
全文摘要
本发明涉及基于系统软件节能技术领域,旨在提供一种使用动态编译器控制程序运行时处理器频率的方法。该方法包括以下步骤插入分析代码、动态确定程序运行时的程序热点、采集程序热点的性能、根据程序热点的性能调整处理器频率。本发明通过在程序运行时,动态分析程序的性能,并利用处理器的频率调节功能将程序理论处理器最节能频率映射到实际可调节电压,以达到节能的目的,同时保证系统的性能要求。本发明具有透明性、稳定性和实用性等特点。
文档编号G06F1/32GK101510115SQ20091009696
公开日2009年8月19日 申请日期2009年3月26日 优先权日2009年3月26日
发明者乔福明, 满 曹, 王春昊, 章铁飞, 缪良华, 蒋冠军, 剑 陈, 陈天洲, 项凌翔, 马建良 申请人:浙江大学