一种监测函数耗时的自动部署和自动优化的方法技术

技术编号:33636109 阅读:7 留言:0更新日期:2022-06-02 01:48
本发明专利技术涉及通信领域,具体涉及一种监测函数耗时的自动部署和自动优化的方法。方法包括:搜索源程序中所有函数;根据预设条件筛选出具有热点特征的函数;在具有热点特征的函数起始位置插入记录起始时钟周期的程序模块,在具有热点特征的函数结尾插入记录结束时钟周期的程序模块;结束时钟周期数与起始时钟周期数的差值为函数一次执行的耗时;获取具有热点特征的函数在源程序运行期间的累加耗时,将累加耗时记录至指定位置。本发明专利技术可适用性广,方便操作,系统资源消耗低。系统资源消耗低。系统资源消耗低。

【技术实现步骤摘要】
一种监测函数耗时的自动部署和自动优化的方法


[0001]本专利技术涉及通信
,具体涉及一种监测函数耗时的自动部署和自动优化的方法。

技术介绍

[0002]由于嵌入式软件要求实时性高,在软件规模达到一定程度时,大多需要对软件尤其是软件中的热点函数进行性能优化。找到热点函数一般有两种办法。第一种是Linux系统下使用系统级性能分析工具perf。第二种是在函数头尾分别使用汇编指令RDTSC获取时钟周期数并记录之,函数尾的时钟周期数减去函数头的时钟周期数即可得到函数消耗的时钟周期数,结合CPU主频可获得函数消耗的CPU百分比。第一种方法无法用于非Linux系统,例如VxWorks或者自研实时系统。第二种方法虽然通用性较高,但如为每个函数添加则工作量大。仅为疑似热点函数添加则需对代码逻辑非常清楚,对于新接手代码例如购买第三方代码时难以操作。

技术实现思路

[0003]为了解决上述技术问题,本专利技术提供一种监测函数耗时的自动部署和自动优化的方法。
[0004]一种监测函数耗时的自动部署和自动优化的方法,所述方法包括以下步骤:
[0005]搜索源程序中所有函数;
[0006]根据预设条件筛选出具有热点特征的函数;
[0007]在具有热点特征的函数起始位置插入记录起始时钟周期的程序模块,在具有热点特征的函数结尾插入记录结束时钟周期的程序模块;结束时钟周期数与起始时钟周期数的差值为函数一次执行的耗时;
[0008]获取具有热点特征的函数在源程序运行期间的累加耗时,将累加耗时记录至指定位置。
[0009]进一步地,所述搜索程序中所有函数包括:遍历源程序中的所有源文件,利用正则模块匹配每个源文件中的所有函数,记录每个函数的函数名、函数所在文件、函数的起始行号和结束行号。
[0010]进一步地,所述预设条件包括:调用了系统函数或外部库函数,使用了循环结构,函数体量超过第一预设门限。
[0011]进一步地,所述第一预设门限具体为200行。
[0012]进一步地,所述在具有热点特征的函数起始位置插入记录起始时钟周期的程序模块,在具有热点特征的函数结尾插入记录结束时钟周期的程序模块包括:预先编写好记录函数起始时钟周期的程序模块,预先编写好记录函数结束时钟周期的程序模块;根据函数所在文件、起始行号、结束行号,自动在函数起始位置插入记录函数起始时钟周期的程序模块,在函数结尾以及函数体中每一个返回操作之前插入记录函数结束时钟周期的程序模
块。
[0013]进一步地,所述记录函数起始时钟周期的程序模块和/或记录函数结束时钟周期的程序模块包括全局变量开关。
[0014]进一步地,所述方法还包括:设置低优先级任务,所述任务按照预设周期收集具有热点特征的函数的累加耗时;将累加耗时转换为CPU耗时指标;若函数的CPU耗时指标低于第二预设门限,则将该函数的全局变量开关关闭;输出热点函数信息。
[0015]进一步地,所述将累加耗时转换为CPU耗时指标包括:获取预设周期内的总时钟周期数,获取函数累加时钟周期消耗数与总时钟周期数的比值,得到CPU耗时指标。
[0016]进一步地,所述输出热点函数信息包括:CPU耗时指标大于等于第二预设门限的函数为热点函数,按照CPU耗时指标对热点函数排序,按序依次输出热点函数的CPU耗时指标、函数名、函数所在文件、函数起始行号、函数结束行号。
[0017]本专利技术实施例至少具有如下有益效果:
[0018]本专利技术所提供的方法方便操作,能够帮助用户花费很小代码采集到不熟悉代码的热点函数相关信息。自动为指定模块的代码智能地添加时钟周期数统计,可适用性广,无关操作系统。在运行过程中关闭非热点函数的统计以降低系统开销,并且可输出热点函数名及其消耗的CPU百分比等信息。
附图说明
[0019]图1为自动插入监测耗时程序模块的流程图;
[0020]图2为自动插入监测耗时程序模块编译后运行的流程图。
[0021]图3为按照预设周期收集函数耗时并输出热点函数信息的流程图。
具体实施方式
[0022]为了更进一步阐述本专利技术为达成预定专利技术目的所采取的技术手段及功效,以下结合较佳实施例,对依据本专利技术提出的一种监测函数耗时的自动部署和自动优化的方法,其具体实施方式、结构、特征及其功效,详细说明如下。在下述说明中,不同的“一个实施例”或“另一个实施例”指的不一定是同一实施例。此外,一或多个实施例中的特定特征、结构、或特点可由任何合适形式组合。
[0023]除非另有定义,本文所使用的所有的技术和科学术语与属于本专利技术的
的技术人员通常理解的含义相同。
[0024]下面具体的说明本专利技术所提供的一种监测函数耗时的自动部署和自动优化的方法的具体方案。
[0025]实施例1:
[0026]本实施例提供一种监测函数耗时的自动部署和自动优化的方法,包括以下步骤:
[0027]步骤1,搜索源程序中所有函数。遍历源程序中的所有源文件,利用正则模块匹配每个源文件中的所有函数,记录每个函数的函数名、函数所在文件、函数的起始行号和结束行号。
[0028]具体地,用脚本语言搜索指定源代码目录中的所有函数及其在源代码中的位置,并记录之。具体步骤为:使用python的os模块遍历指定源代码目录中的所有源文件;使用
python的正则模块匹配每个源文件中的所有函数;记录每一个函数的函数名,函数所在文件,函数的起始行号和结束行号。
[0029]匹配查找C函数的正则表达式为:
[0030][0031][0032]步骤2,根据预设条件筛选出具有热点特征的函数。遍历每一个函数,判断其是否符合“可能的热点函数”特征(热点特征)。根据函数所在文件、起始行号、结束行号,提取函数体,若函数体满足以下任意一个预设条件,则认为其符合“可能的热点函数”特征:
[0033](1)调用了系统函数或外部库函数;
[0034](2)使用了循环结构,如for、while、do

while;
[0035](3)超过第一预设门限,优选地,第一预设门限为200行。
[0036]步骤3,在具有热点特征的函数起始位置插入记录起始时钟周期的程序模块,在具有热点特征的函数结尾插入记录结束时钟周期的程序模块;结束时钟周期数与起始时钟周期数的差值为函数一次执行的耗时。
[0037]对每一个符合“可能的热点函数”特征(热点特征)的函数,在函数头放置记录当前时钟周期数的代码,在函数结尾放置记录当前时钟周期与函数头时钟周期差值的代码。
[0038]具体步骤为:
[0039](1)预先好编写记录函数起始时钟周期的方法,其能够记录函数的起始时钟周期数;预先编写好记录函数结束时钟周期的函数,其能获取函数结束时钟周期;将结束时钟周期数减去起始时钟周期,得到函数的时钟周期消耗数。
[0040](2)根据S10步骤记录的函数所在文件、起始行号、结束行本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种监测函数耗时的自动部署和自动优化的方法,其特征在于,所述方法包括以下步骤:搜索源程序中所有函数;根据预设条件筛选出具有热点特征的函数;在具有热点特征的函数起始位置插入记录起始时钟周期的程序模块,在具有热点特征的函数结尾插入记录结束时钟周期的程序模块;结束时钟周期数与起始时钟周期数的差值为函数一次执行的耗时;获取具有热点特征的函数在源程序运行期间的累加耗时,将累加耗时记录至指定位置。2.如权利要求1所述的一种监测函数耗时的自动部署和自动优化的方法,其特征在于,所述搜索程序中所有函数包括:遍历源程序中的所有源文件,利用正则模块匹配每个源文件中的所有函数,记录每个函数的函数名、函数所在文件、函数的起始行号和结束行号。3.如权利要求1所述的一种监测函数耗时的自动部署和自动优化的方法,其特征在于,所述预设条件包括:调用了系统函数或外部库函数,使用了循环结构,函数体量超过第一预设门限。4.如权利要求3所述的一种监测函数耗时的自动部署和自动优化的方法,其特征在于,所述第一预设门限具体为200行。5.如权利要求2所述的一种监测函数耗时的自动部署和自动优化的方法,其特征在于,所述在具有热点特征的函数起始位置插入记录起始时钟周期的程序模块,在具有热点特征的函数结尾插入记录结束时钟周期的程序模块包括:预先编写好记录函数起始时钟周期的程序模块,预先编写好记...

【专利技术属性】
技术研发人员:邓梦璨任恩贤刘军韩留斌
申请(专利权)人:深圳市佳贤通信设备有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1