一、简介

有些时候,我们特别关注程序的性能,特别是底层软件,比如驱动程序,OS等。为了更好的优化程序性能,我们必须找到性能瓶颈点,“好钢用在刀刃上”才能取 得好的效果,否则可能白做工作。为了找到关键路径,我们可以使用profilng技术,在linux平台上,我们可以使用gprof和oprofile工 具。

gprof是GNU工具之一,它在编译的时候在每个函数的出入口加入了profiling的代码,运行时统计程序在用户态的 执行信息,可以得到每个函数的调用次数,执行时间,调用关系等信息,简单易懂。适合于查找用户级程序的性能瓶颈,对于很多时间都在内核态执行的程 序,gprof不适合。

oProfile是Linux平台上的一个功能强大的性能分析工具,支持两种采样(sampling)方式:基于事件的采样(eventbased)和基于时间的采样(timebased),它可以工作在不同的体系结构上,包括MIPS、ARM、IA32、IA64和AMD。

二、gprof使用方法

gprof是gnu binutils工具之一,默认情况下linux系统当中都带有这个工具

使用 -pg 选项来编译hello.c,如果要得到带注释的源码清单,则需要增加 -g 选项。运行: gcc -pg -g -o hello hello.c

运行应用程序: ./hello 会在当前目录下产生gmon.out文件,使用gprof来分析gmon.out文件时,需要把它和产生它的应用程序关联起来:

gprof hello gmon.out -p 得到每个函数占用的执行时间

gprof hello gmon.out -q 得到call graph,包含了每个函数的调用关系,调用次数,执行时间等信息。

gprof hello gmon.out -A 得到 一个带注释的“源代码清单”,它会注释源码,指出每个函数的执行次数。这需要在编译的时候增加 -g选项。

三、oprofile安装步骤

1、打开内核OPROFILE选项,否则运行oProfile将提示:

[root@localhost oprofile-0.9.6]# opcontrol --init

FATAL: Module oprofile not found.

FATAL: Module oprofile not found.

Kernel doesn't support oprofile

2、编辑内核配置文件:.config,将其中的# CONFIG_OPROFILE is not set改为CONFIG_OPROFILE=m(或者y)

[root@localhost ~]# cd /usr/src/linux-2.6.37.2

[root@localhost linux-2.6.37.2]# vi .config

如下:

CONFIG_PROFILING=y

CONFIG_X86_LOCAL_APIC=y

CONFIG_X86_IO_APIC=y

CONFIG_PCI_IOAPIC=y

3、编译内核并重启机器

4、下载源码,编译安装

四、oprofile工具集

op_help:    列出所有支持的事件。

opcontrol:  设置需要收集的事件。

opreport:  对结果进行统计输出。

opannaotate:产生带注释的源/汇编文件,源语言级的注释需要编译源文件时的支持。

opstack:    产生调用图profile,但要求x86/2.6的平台,并且linux2.6安装了call-graph patch

opgprof:    产生如gprof相似的结果。

oparchive:  将所有的原始数据文件收集打包,可以到另一台机器上进行分析。

op_import:  将采样的数据库文件从另一种abi转化成本地格式。

五、oprofile使用方法

测试文件:multiply.c

#include

int fast_multiply(x,  y)

{

return x * y;

}

int slow_multiply(x, y)

{

int i, j, z;

for (i = 0, z = 0; i < x; i++)

z = z + y;

return z;

}

int main(int argc, char *argv[])

{

int i,j;

int x,y;

for (i = 0; i < 200; i ++) {

for (j = 0; j

x = fast_multiply(i, j);

y = slow_multiply(i, j);

}

}

printf("x=%d, y=%d\n", x, y);

return 0;

}

编译

gcc multiply.c -g -o multiply

测试

modprobe oprofile timer=1

opcontrol --no-vmlinux

opcontrol --separate=kernel

opcontrol --init

opcontrol --reset

opcontrol --start

./multiply

opcontrol --dump

opcontrol --stop

opcontrol --shutdown

opcontrol --deinit

opannotate --source ./multiply

opreport -l ./multiply

opreport

linux程序测试工具gprof,Linux下gprof和oprofiling性能测试工具相关推荐

  1. tcp测试监听工具_linux 下两款网络性能测试工具介绍

    前言:最近生产上有点不稳定,开发说网络问题,于是需要测试一下网络环境,出一篇报告验证是否真是网络问题,所以今天正好为大家分享linux下两款网络性能测试工具iperf和netperf 一,iperf安 ...

  2. linux程序测试工具gprof,Linux系统-耗时检测-gprof操作入门

    Linux系统-耗时检测-gprof操作入门. 一定时间的输入的程序处理延时,现需测量程序中各个函数的耗时比例,找到性能瓶颈,使用gprof工具检测. 1. gprof的功能 gprof和oprofi ...

  3. linux程序设计基础——概述,6.Linux程序设计基础—Makefile.pdf

    6.Linux程序设计基础-Makefile Haubo Training Center Linux开发基础-Makfile 张勇涛 GNU make 和makefile  GNU make概述  ...

  4. linux程序设计基础——概述,3.linux程序设计基础—vi使用

    3.linux程序设计基础-vi使用 (24页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.9 积分 Haubo Training Center L ...

  5. can总线linux程序,CAN通信卡的Linux设备驱动程序 - 嵌入式操作系统 - 电子发烧友网...

    CAN通信卡的Linux设备驱动程序设计实现 目前,许多工业现场如电力系统.化工系统等大量使用控制器局部网(CAN--Controller Area Network)现场总线网络,CAN通信卡作为计算 ...

  6. linux程序多少位,查看linux版本是多少位

    1 查看内核版本: 1)[root@Linux download]# cat /proc/version Linux version 2.6.18-194.el5 (mockbuild@builder ...

  7. ubuntu下c语言编程工具,Ubuntu系统下C语言代码检查工具(Splint)

    看一下下面的代码(当然包括错误,以检验splint的功能): #include int main(int argc,char* argv[]){ int a=100; /*没有使用的变量*/ int ...

  8. linux程序测试工具gprof,gprof-如何在Linux上分析多线程C ++应用程序?

    gprof-如何在Linux上分析多线程C ++应用程序? 我曾经使用gprof进行所有Linux分析. 但是,对于我的多线程应用程序,它的输出似乎不一致. 现在,我将其挖掘出来: [HTTP://S ...

  9. 写linux程序测试吞吐量,Linux下测试磁盘性能(IO、吞吐量)

    使用软件:fio,可以从yum或apt-get安装 1.随机读 fio -filename=testFile -direct=1 -iodepth 1 -thread -rw=randread -io ...

最新文章

  1. 3 个重要因素,带你看透 AI 技术架构方案的可行性
  2. (How to)WordPress与Windows Live Writer整合
  3. 关于如何在Nomad中保护工作部署的工作流的简要历史
  4. ajax传递多个base64,H5移动开发Ajax上传多张Base64格式图片到服务器
  5. 智源-知乎联合发布大规模用户关系数据集,同步开启10万元竞赛
  6. boost::mp11::mp_compose相关用法的测试程序
  7. flink on yarn模式下释放flink占用yarn的资源
  8. 畅想(2)-计算机发展与教育的关系
  9. 利用Python进行数据分析(1) 简单介绍
  10. 终于有人把数据中台讲明白了
  11. PyTorch学习笔记:torch.optim---Optimizer以及lr_scheduler
  12. 《30天自制操作系统》学习笔记--第好多天
  13. 【车辆识别】基于matlab GUI小波和盒维数车型识别【含Matlab源码 727期】
  14. 电信光猫dns服务器修改,电信光猫自动获取的DNS被修改,肿么改回来?
  15. 开源微信小程序源码新版及教程
  16. con和com开头单词规律_com与con 前缀的单词
  17. jw实验二:配置VLAN Trunks
  18. 修改ftp服务器地址,ftp服务器ip地址修改
  19. 红葡萄酒质量影响因素分析
  20. 【填充插件】自定义填充图案制作插件

热门文章

  1. iPhone X首批供应只有200-300万台;小蓝单车回应逾期未退押金;传摩拜成立网约车部门丨价值早报
  2. 23.Python中的exec函数
  3. 前端md5生成唯一标识
  4. Normalized DCG(NDCG)
  5. python时间计算_python 计算一年内的所有周的具体日期详解
  6. java 泛型参数_Java泛型
  7. linux磁盘挂载之parted
  8. MFC界面库BCGControlBar v33.0 - 全新升级Ribbon Bar、工具栏等
  9. 测试远程连接mysql_让MYSQL服务支持远程连接(允许mysql远程登录)测试可行
  10. 唐骏协查引发大地震:光伏走私到底有多凶?