Linux系统-耗时检测-gprof操作入门

来源:互联网 发布:怎么样做淘宝生意 编辑:程序博客网 时间:2024/06/05 19:10

序言

一定时间的输入的程序处理延时,现需测量程序中各个函数的耗时比例,找到性能瓶颈,使用gprof工具检测。


1. gprof的功能

  • gprof和oprofile对比

    • gprof:

      • GNU工具之一,默认linux系统中都带有这个工具

      • 原理:编译时在每个函数的出入口加入profiling代码,运行时统计程序在用户态的执行信息,得到每个函数的调用次数,执行时间,调用关系等信息。

      • 适用领域:

        • gprof简单易懂,适合于查找用户级程序的瓶颈
        • 对很多时间在内核态执行的程序,gprof不适合
    • oprofile:

      • 开源的profiling工具,2.6内核以上支持SMP系统带有

      • 原理:使用硬件调试寄存器来统计信息,进行profiling的开销比较小,而且可以对内核进行profiling。统计的信息包括:cache的缺失率,memory的访存信息,分支预测错误率等,这些信息gprof是得不到的,但是oprofile不能得到函数调用次数。

      • 适用领域:oprofile稍显复杂,但是得到的信息更多,更适合调试系统软件


2. gprof的使用

  • 此处只介绍gprof的使用,oprofile的使用可参考官方站点:http://oprofile.sourceforge.net/about/

  • gprof的使用流程:

    • 编译链接时加上-pg选项。一般我们可以加在 makefile中,如果需要得到带注释的源码清单,需要加-g选项

    • 运行可执行程序(程序正常退出会在运行目录下生成gmon.out文件)

    • gprof工具分析gmon.out文件

  • gprof分析命令:

    • gprof -b:不再显示每个字段的详细描述

    • -p:只显示函数的调用图 call graph

    • -q:只显示函数的时间消耗列表

    • -e Name:不再显示函数Name及其子函数的调用图

      • 可以添加多个-e标志,一个-e标志只能指定一个函数
    • -E Name:不再显示函数Name及其子函数的调用图

      • 此标志类似于-e标志,但它在总时间和百分比时间的计算中排除了由函数Name及其子函数的耗时
    • -f Name:显示函数Name及其子函数的调用图

      • 可以指定多个-f标志,一个-f标志只能指定一个函数
    • -F Name:显示函数Name及其子函数的调用图

      • 类似于-f标志,一个-F标志只能指定一个函数,可以指定多个-F标志
      • 但在总时间和百分比时间计算中仅使用所打印的例程的时间
      • -F标志覆盖-E标志
    • -z:显示使用次数为零的例程

      • 按照调用计数和累积时间计算


3. gprof的检测示例

  • 添加-pg和-g选项

    • gcc -g -pg -o test test.c

    • gcc -o test test.c -pg -g

  • 运行可执行程序再分析gmon.out文件

    • ./test

    • gprof test gmon.out -b

      • 需要把它和产生它的应用程序关联起来
      • 使用不同命令查看不同选项
  • 或统一执行分析

    • gprof -b ./test gmon.out

    • 使用不同命令查看不同选项

  • 执行后的一个例子:gprof test gmon.out -b


函数执行耗时


函数调用图


函数名索引



Acknowledgements:
http://www.cnblogs.com/StitchSun/articles/4286428.html
http://blog.csdn.net/garfier/article/details/12489953
http://blog.csdn.net/stanjiang2010/article/details/5655143

2017.08.04

原创粉丝点击