perf+gprof+gprof2dot+graphviz进行性能分析热点

  • perf分析热点代码

perf是linux的一款性能分析工具
perf list            ;;列出平台中perf支持的事件命令
sudo perf timechart record python conv2d.py   ;;各种统计信息图形化
sudo perf timechart   ;;再执行,就会产生csv图形文件


perf top -e cycles:pp        ;;采样数据,其中有四个级别  0--无精度保证  p--采样指令和触发性能事件之间的偏差为常数 pp--偏差尽量趋于零  ppp--偏差必须为零
perf record -e cpu-clock ./test ;;结合report命令找出热点函数
perf record -F 50000 -e cpu-clock ./test   ;;指定频率
perf stat -r 10 ./test        ;;执行10次求均值
perf record -g -e cpu-clock ./test    ;;调用关系显示
perf report            ;;可多次回车选择不同的项观看,如图,第一个选项是对应热点的汇编代码

perf stat ./test   ;;显示程序的cpu、预取、cache miss等
perf record -e cpu-clock python cnn.py         ;;使用python执行卷积神经网络cnn.py
perf report    ;;显示出来,回车再回车




  • 作图显示热点图

请确保系统安装python、gprof2dot、graphviz软件包

Ubuntu:

$sudo apt-get install python graphviz
$sudo pip install gprof2dot
centos/redhat/fedora:
$yum install python graphviz gprof2dot

以程序test.c为例进行演示

1.创建C文件  test.c

void longa() 
 { 
   int i,j; 
   for(i = 0; i < 1000000; i++)//循环1百万次
 	  j=i;  
 } 
 void foo2() 
 { 
   int i; 
   for(i=0 ; i < 10; i++) 
        longa(); 
 } 
 void foo1() 
 { 
   int i; 
   for(i = 0; i< 100; i++) 
      longa(); 
 } 
 int main(void) 
 { 
   foo1(); 
   foo2(); 
 }

2. 终端执行命令, -pg参数产生供gprof剖析用的可执行文件(会在每个function call 插入一个_mcount的routine 功能)  -g参数产生供gdb调试用的可执行文件。更多GCC参数可见这篇博客http://blog.chinaunix.net/uid-21411227-id-1826747.html

$ gcc -pg -g -o test test.c
3.接着执行  ./test ,会在当前目录下默认生成 gmon.out
$./test

4.执行以下命令,生成图片output.png
$ gprof ./test  | gprof2dot -n0 -e0 | dot -Tpng -o output.png

查看图片,效果图如下:可以看到函数调用的百分比和次数,以及热点线路


对于Python程序,若想要构图可以使用以下方法,需要安装graphviz,根据情况修改gprof2dot.py路径,以Ubuntu为列:
$sudo apt-get install graphviz
$python -m cProfile -o output.pstats simple_conv2d.py
$python /usr/local/lib/python2.7/dist-packages/gprof2dot.py -f pstats output.pstats | dot -Tpng -o profiling_results.png


  • 参考文献
    http://www.tuicool.com/articles/UrQvqa

    http://www.51testing.com/html/97/13997-79952.html

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: perf是一个流行的系统级性能分析工具,它可以帮助用户监测系统资源的使用情况,找出程序的性能瓶颈,提高程序的运行效率。perf具有以下几个特点: 第一,perf可以监控CPU、内存、硬盘I/O、网络等系统资源的使用情况,通过分析这些数据,可以找到程序的瓶颈所在。 第二,perf支持多种测量模式,包括采样模式、跟踪模式、事件计数模式等,方便用户根据自己的需要进行性能分析。 第三,perf可以和其他一些工具结合使用,如火焰图、Callgrind等,可以更加直观地展示程序的性能瓶颈,便于用户找到问题。 第四,perf对于内核开发人员也十分有用,可以帮助他们在开发过程中找到内核的性能问题,优化内核代码。 总之,perf是一款功能强大的性能分析工具,可以帮助用户在开发过程中找到程序的性能问题,提高程序的运行效率。 ### 回答2: perf是一款开源的系统级性能分析工具,它可以帮助开发者实现对Linux系统的性能分析和优化。perf可以测量和记录CPU的使用率、缓存的效率、内存的占用、磁盘I/O的读写速度等关键性能指标。 perf具有很强的功能,如事件计数器、系统调用跟踪、板载性能监视器等。使用perf分析工具来优化代码是极为有效的,而且很容易实现。perf的操作简单易学,它使用命令行用户界面,可以轻松地探测出代码中的性能削弱点。 除此之外,perf还提供了分析结果保存、数据可视化和报告生成等功能,这些功能将有助于关键的性能指标的更好的整理和分析perf还支持监视多线程程序,可以帮助开发人员分析并发应用程序的性能瓶颈。 总的来说,perf是一款非常强大的系统级性能分析工具,它可以帮助开发人员进行更加高效、精确地性能分析。相比于其他分析工具,perf性能表现更加稳定,且支持多种类型的分析,因此成为了许多开发人员在Linux系统上进行性能测试和优化的首选工具之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值