Linux性能测试工具:Oprofile, KFT, Gprof

Linux性能测试工具:Oprofile, KFT, Gprof

  (2011-11-02 14:19:44)
标签: 

杂谈

分类: 服务器设计
性能测试工具一般分这么几种
1)收集CPU的performance counter。CPU里面有很多performance counter,打开
之后,会记录CPU某些事件的数量,比如cache miss, 指令数,指令时间等等。这些
counter需要编程才能使用。测量哪一段代码完全由自己掌握。
2)利用编译器的功能,在函数入口和出口自动加回调函数,在回调函数里面,记录入口
和出口的时间。收集这些信息,可以得到函数的调用流程和每个函数所花费的时间。
3)自己在代码里面加入时间测量点,测量某段代码执行的时间。这种工具看起来和#1的
作用差不多,但是由于performance counter编程有很多限制,所以这种工具有时还是有
用处的。

     Oprofile已经加入了linux的内核代码库,所以不需要打patch,但是还需要重新编译内核才可以使用。这是使用最广泛的linux工具.

下面备忘下oprofile的知识点: 

       oprofile 是 Linux 平台上,类似 INTEL VTune 的一个功能强大的性能分析工具。 其支持两种采样 (sampling) 方式:基于事件的采样 (event based) 和基于时间的采样 (time based) 。

      基于事件的采样是 oprofile 只记录特定事件(比如 L2 cache miss )的发生次数,当达到用户设定的定值时 oprofile 就记录一下(采一个样)。这种方式需要 CPU 内部有性能计数器 (performace counter) 。现代 CPU 内部一般都有性能计数器;

      基于时间的采样是 oprofile 借助 OS 时钟中断的机制,每个时钟中断 oprofile 都会记录一次 ( 采一次样)。引入的目的在于,提供对没有性能计数器 CPU 的支持。其精度相对于基于事件的采样要低。因为要借助 Os 时钟中断的支持,对禁用中断的代码 oprofile 不能对其进行分析。

      oprofile 在 Linux 上分两部分,一个是内核模块 (oprofile.ko) ,一个为用户空间的守护进程 (oprofiled) 。前者负责访问性能计数器或者注册基于时间采样的函数 ( 使用 register_timer_hook 注册之,使时钟中断处理程序最后执行 profile_tick 时可以访问之 ) ,并采样置于内核的缓冲区内。后者在后台运行,负责从内核空间收集数据,写入文件。

Oprofile 工具集:

  • ophelp: 列出可用的事件,并带有简短的描述
  • oprofiled守护进程
  • opcontrol: 控制 Oprofile 的数据收集
  • opreport : 生成二进制镜像或符号的概览
  • opannotate: 根据搜集到的数据,在源码或者汇编层面上注释并呈现给用户 
  • opgprof: 生成 gprof 格式的剖析数据
  • opimport: 将采样数据库文件从外部格式(abi)转换为本地格式
  • oparchive 将所有的原始数据文件收集打包,可以到另一台机器上进行分析。

运行oprofile需要root权限,因为它要加载profile模块,启动oprofiled后台程序等。

使用步骤:

  1. opcontrol --init  加载模块,mount /dev/oprofile 创建必需的文件和目录 
  2. opcontrol --no-vmlinux 或者 opcontrol --vmlinux=/boot/vmlinux-`uname -r` 决定是否对kernel进行profiling 
  3. opcontrol --reset 重置当前会话中的数据 
  4. opcontrol --start 开始profiling 
  5. ./prog-withe-args 运行应用程序,oprofile会对它进行profiling 
  6. opcontrol --dump 把收集到的数据写入文件 
  7. opcontrol --stop 停止profiling 
  8. opcontrol --shutdown 停止oprofiled
  9. opcontrol --deinit 卸载模块 
在start前可以设置文件写入方式:

opcontrol --separate=<choice>

<choice> 可以是以下之一:

none — 不要分离档案(默认)

library — 为库生成每个应用程序的档案

kernel — 为内核和内核模块生成每个应用程序的档案

all — 为库生成每个应用程序的档案,为内核和内核模块生成每个应用程序的档案


也可指指定对事件进行设置:

opcontrol --event=L2_CACHE_MISS:500 ...

可以使用 opcontrol --list-events 命令可以查看支持的事件

通过 opcontrol –status 命令可以查看已经配置的事件;


经过1-7步后可以使用opreport, opstack, opgprof, opannotate几个工具进行分析。

最常用的是opreport,这个可以给出imagesymbols的信息,想得到每个函数的执行时间占用比例等信息,用来发现系统性能瓶颈。opannotate可以对源码进行注释,指出哪个地方占用时间比较多(最好编译时使用-g选项)。

 

通过opreport --help   opannotate --help 得到具体选项细节。

 

参考:

http://blog.csdn.net/yili_xie/archive/2009/12/02/4925648.aspx 

http://oprofile.sourceforge.net/doc/index.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值