zoukankan      html  css  js  c++  java
  • 【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!

  • 相关阅读:
    二十一、Mysql之GTID
    二十、Mysql的过滤复制
    十九、Mysql的半同步复制
    十八、Mysql之延时从库
    十七、Mysql的主从(三)--主从故障监控分析
    抖音爬虫
    python 操作手机
    python sheet写入数据
    pandas用法大全
    caog
  • 原文地址:https://www.cnblogs.com/SoaringLee/p/10532380.html
Copyright © 2011-2022 走看看