【linux/Tools】Performance Profile Tools——perf and gprof

Date: 2018.9.4


1、Reference

https://www.ibm.com/developerworks/cn/linux/l-cn-perf1/
https://www.cnblogs.com/arnoldlu/p/6241297.html
https://sourceware.org/binutils/docs/gprof/
https://baike.baidu.com/item/gprof/8995496

https://blog.csdn.net/viphong/article/details/70176604
https://www.cnblogs.com/andashu/p/6378000.html
https://blog.csdn.net/zsl_oo7/article/details/71310444?utm_source=itdadao&utm_medium=referral

2、perf tool

perf :Linux下系统性能调优工具.
系统级的性能优化,包括性能剖析和代码优化,性能剖析的关键在于找到程序耗时和瓶颈所在,这时就可以利用perf这把瑞士军刀了。
perf的功能是很强大的,
具体使用方法可以参考:https://www.ibm.com/developerworks/cn/linux/l-cn-perf1/

3、gprof tool
3.1、gprof简介

gprof: GNU提供的性能调试工具。可以打印出程序运行中各个函数消耗的时间。对于分析程序性能瓶颈很好帮助。
gprof是GNU profile工具,可以运行于linux、AIX、Sun等操作系统进行C、C++、Pascal、Fortran程序的性能分析,用于程序的性能优化以及程序瓶颈问题的查找和解决。通过分析应用程序运行时产生的“flat profile”,可以得到每个函数的调用次数,每个函数消耗的处理器时间,也可以得到函数的“调用关系图”,包括函数调用的层次关系,每个函数调用花费了多少时间。

3.2 gprof具有以下优缺点

1) 优点:
a) GNU工具,人手一个;
b) 混合方法采集信息。
2) 缺点:
a) 需要编译选项支持:
i. 使用gcc/cc编译和链接时需要加入-pg选项
ii. 使用ld链接时需要用/lib/gcrt0.o代替crt0.o作为第一个input文件
iii. 如果要调试libc库需要使用-lc_p代替-lc参数
b) 调试多线程程序只能统计主线程的信息(所以不能用于kingbase)。

3.3 gprof分析方法:

1、编译、链接时均加上-pg,生成demo;
2、执行生成gmon.out文件;
3、gprof分析前一步生成的gmon.out文件,查看生成 txt文件中各个函数所占比例;

 $gprof  ./demo  gmon.out  > profile.txt

注: gprof只能在linxu64位下对可执行文件进行分析。

3.4 实例分析

为了进一步说明gprof的使用方法,
(1)对mpeg4开源编解码库xvid解码器中的各函数进行性能分析:
测试程序:解码器程序xvid_decraw
xvid的编译可以参见:https://blog.csdn.net/SoaringLee_fighting/article/details/68942330
在编译生成解码器xvid_decraw时需要修改对应makefile,在编译和链接时都加上-pg参数。

make
./xvid_decraw -i input.m4v
gprof  ./xvid_decraw gmon.out >profile.txt

生成分析结果profile.txt:
这里写图片描述
性能分析结论:
从分析结果可知,transfer8x8_copy_c函数占比42%,decode_pframe函数占比28%,get_inter_block_h263函数占比114%,get_pmv2函数占比14%,这几个函数的占比较大,通过优化这几个函数可以显著提升性能。由此看出插值,反dct等模块的复杂度是很高的。

(2)对H264标准开源编码器x264中的各个函数进行性能分析:
测试程序: x264
x264的编译可以参考:https://blog.csdn.net/SoaringLee_fighting/article/details/78882801

./configure
对configure之后生成的config.mak中的CFLAGS和LDFLAGS增加-pg选项,另外需要去掉-fomit-frame-pointer选项
make
./x264 -o out.264 input.yuv
gprof  ./x264 gmon.out >profile.txt

生成分析结果profile.txt:
这里写图片描述
性能分析结论:
主要耗时的函数有:
get_ref
x264_pixel_satd_8x4
x264_pixel_satd_x4_16x16
x264_pixel_satd_x4_8x8
mc_chroma
说明对于编码器,运动估计的复杂度是很高的。

gprof 产生的信息解释:

%time Cumulatve seconds Self Seconds Calls Self TS/call Total TS/call name
该函数消耗时间占程序总时间百分比 程序的累积执行时间 该函数本身执行时间 函数被调用次数 函数平均执行次数 函数平均执行时间 函数名

THE END!

原文地址:https://www.cnblogs.com/SoaringLee/p/10532380.html