CPU profiler(gperftools)在嵌入式系统上的应用示例

上一篇博文《性能测试工具CPU profiler(gperftools)的使用心得》记录了CPU profiler的基本使用方式。本文以halley2开发板为例记录用CPU profiler在嵌入系统下进行性能分析的方法.

按照上文方法,已经可以让自己的测试程序test_capture生成性能分析报告 test_capture.prof。然后将test_capture交叉编译生成mips的可执行文件。然后复制到halley2开发板上运行(我是用开发板上的SD卡来存储程序),test_capture执行结束后,与在PC平台上一样生成性能分析报告 test_capture.prof。将 test_capture.prof复制到PC系统下(ubuntu).

如同在PC平台上一样,调用pprof,如下,会报一些找不到动态库(.so)的错误。但文本的报告还是正常生成了。

# text方式输出
pprof ./test_capture test_capture.prof --text  
Using local file ./test_capture.
Using local file test_capture.prof.
/usr/bin/objdump: '/lib/libc-2.22.so': No such file
/usr/bin/objdump: '/lib/libgcc_s.so.1': No such file
/usr/bin/objdump: '/lib/libm-2.22.so': No such file
/usr/bin/objdump: '/lib/libpthread-2.22.so': No such file
/usr/bin/objdump: '/lib/ld-2.22.so': No such file
/usr/bin/addr2line: '/lib/libgcc_s.so.1': No such file
/usr/bin/addr2line: '/lib/libc-2.22.so': No such file
Total: 18659 samples
    5523  29.6%  29.6%     5523  29.6% RunCascade
    5519  29.6%  59.2%     5519  29.6% CanFaceCcd
    1210   6.5%  65.7%     1218   6.5% StepImageHalfNormal
    1117   6.0%  71.6%     1118   6.0% GetIntegralOfIma
    1078   5.8%  77.4%     1078   5.8% GetSqIntegralOfIma
     480   2.6%  80.0%      480   2.6% ImageFilter
     448   2.4%  82.4%      448   2.4% ExtRegOnHor144_Mouth
     439   2.4%  84.8%      439   2.4% ExtRegOnHor144
     370   2.0%  86.7%      373   2.0% StepFaceConv
     364   2.0%  88.7%      364   2.0% FindCandiRects
     330   1.8%  90.5%      331   1.8% StepFaceConv1
     217   1.2%  91.6%      217   1.2% PupilModel_Filter
     179   1.0%  92.6%      179   1.0% ImageBinary
     148   0.8%  93.4%      148   0.8% CheckEyePairsByMouth
     148   0.8%  94.2%      148   0.8% GetHalfImage
      89   0.5%  94.6%       89   0.5% StepFaceGeoMouth

执行 pprof ./test_capture test_capture.prof --web输出到浏览器的图形报告也能正常生成,但同样会报上面的错误。

CPU profiler(gperftools)在嵌入式系统上的应用示例_第1张图片

出现上面错误的原因很直接,就是pprof找不到test_capture在mips平台的依赖库。
pprof有一个参数--lib_prefix就是用来解决这个问题的,执行google-pprof --help | grep lib_prefix就可以显示--lib_prefix的用途:

google-pprof --help | grep lib_prefix
   --lib_prefix=  Comma separated list of library path prefixes # 逗号分隔的动态库搜索路径列表

所以加上--lib_prefix指定这些缺失的动态库所在的位置就好了,对于君正的编译器这个位置在mips-gcc520-glibc222/mips-linux-gnu/libc

pprof ./test_capture test_capture.prof --text  \
	--lib_prefix=/opt/toolchains/mips-gcc520-glibc222/mips-linux-gnu/libc

现在唯一没搞明白的就是在mips平台上生成的图形报告的排版方式与PC平台上不一样,所有的节点几乎都是横着的,不知道是什么原因。

你可能感兴趣的:(开发工具,攻玉之器)