fedora 11 下分析系统性能瓶颈之(四)oprofile

oprofile 是 Linux 平台上,类似 INTEL VTune 的一个功能强大的性能分析工具。

其支持两种采样(sampling)方式:基于事件的采样(event based)和基于时间的采样(time based)。
基于事件的采样是oprofile只记录特定事件(比如L2 cache miss)的发生次数,当达到用户设定的定值时oprofile 就记录一下(采一个样)。这种方式需要CPU 内部有性能计数器(performace counter)。现代CPU内部一般都有性能计数器,龙芯2E内部亦内置了2个性能计数器。

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

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

安装:

[root@Tux ~]# yum list |grep oprofile
eclipse-oprofile.i586 0.2.0-2.fc11 @updates
oprofile.i586 0.9.4-12.fc11 @updates
oprofile-devel.i586 0.9.4-12.fc11 @updates
oprofile-gui.i586 0.9.4-12.fc11 @updates
oprofile-jit.i586 0.9.4-12.fc11 @updates
oprofileui.i586 0.2.0-3.fc11 @fedora
[root@Tux ~]# yum -y install oprofile*

初始化:
opcontrol --init

    该命令会加载oprofile.ko模块,mount oprofilefs。成功后会在/dev/oprofile/目录下导出一些文件和目录如: cpu_type, dump, enable, pointer_size, stats/

[root@Tux ~]# opcontrol --init
[root@Tux ~]# ls -F /dev/oprofile/
0/ 1/ backtrace_depth buffer buffer_size buffer_watershed cpu_buffer_size cpu_type dump enable pointer_size stats/

配置:
主要设置计数事件和样本计数,以及计数的CPU模式(用户态、核心态)
  
    opcontrol --setup --event=EVENT:1000::0:1

    则是设置计数事件为EVENT,即对处理器时钟周期进行计数
    样本计数为1000,即每1000个时钟周期,oprofile 取样一次。
    处理器运行于核心态则不计数
    运行于用户态则计数

    --event=name:count:unitmask:kernel:user

    name:   event name, 这里event name可以通过#opcontrol --list-events查看。
    count:   reset counter value e.g. 100000
    unitmask: hardware unit mask e.g. 0x0f
    kernel:   whether to profile kernel: 0 or 1
    user:   whether to profile userspace: 0 or 1

启动

    opcontrol --start
取出数据

    opcontrol --dump
    opcontrol --stop
分析结果

    opreport -l ./binary_file



要想看到例子,请看IBM牛人的文章:http://www.ibm.com/developerworks/cn/linux/l-pow-oprofile/
posted @ 2009-09-24 04:35  冷月X  阅读(345)  评论(0编辑  收藏  举报