标签: 杂谈 |
分类: 服务器设计 |
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需要root权限,因为它要加载profile模块,启动oprofiled后台程序等。
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,这个可以给出image和symbols的信息,想得到每个函数的执行时间占用比例等信息,用来发现系统性能瓶颈。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