项目背景
在一个庞大的代码自动生成项目中,需要通过对C/C++头文件的扫描分析并记录所有public类型的函数原型及参数类型。
在XML script中,显式使用C函数和参数。用户可以自行编写xml测试脚本来运行C/C++代码。
上述过程都通过perl script自动生成并编译。
问题
自动生成代码量巨大,很大部分的时间瓶颈在于perl脚本的执行时间。需要进行优化。
方法
利用了perl的profiling机制进行运行时profiling分析并分perl函数统计所有时间开销。
最后重点改善耗费时间最多的20-30个瓶颈函数。
结果
不包括makefile等方面的脚本编译优化,不考虑perl脚本的功能实现大变动,perl执行时间有大约10~15%的提升。
-------------------------------------------------------------------------------------------------------------------------------------------------------------
了解速度瓶颈
- perl -d:DProf test.pl
- Perl dprofpp 显示perl的概要设置数据。
- Devel::DProf运行时增加-d:DProf选项,会自动生成一个tmon.out文件
- 查看profile结果,运行dprof
典型的,tmon.out示例如下
#fOrTyTwO
$hz=1000;
$XS_VERSION='DProf 20050310.00';
# All values are given in HZ
$over_utime=32; $over_stime=0; $over_rtime=32;
$over_tests=10000;
$rrun_utime=15; $rrun_stime=0; $rrun_rtime=15;
$total_marks=2
PART2
@ 15 0 15
& 2 main BEGIN
+ 2
- 2
对于perl脚本执行后产生的profiling概要数据示例如下
Total Elapsed Time =