当前位置: 首页 > 工具软件 > OProfile > 使用案例 >

linux oprofile 手册,OProfile 使用指南

徐安康
2023-12-01

OProfile使用指南

by chenny7@163.com,

updated on 2Nov. 2012.

1、Principles

OProfile主要是通过采样,利用CPU上的性能计数器(perfomance counter)统计某些事件的发生次数。它由内核模块和用户空间守护进程两部分组成,前者可以访问性能计数器,后者则负责从性能计数器收集数据。

OProfile有两种采样方式:基于事件的采样(performance counter)和基于时间的采样(timer)。前者需要CPU上性能计数器的支持,可以人为选择要profiling的事件类型;后者适用于无性能计数器的CPU,记录每一个时钟周期。

2、Configration

在Linux 2.6及其以上版本都以模块方式集成了OProfile,如要使用,首先加载OProfile内核模块,以root身份执行如下命令:

opcontrol --init

载入模块后会在/dev/oprofile/目录创建一些文件;卸载模块的命令:

opcontrol –deinit

在运行OProfile之前,需要使用opcontrol命令对其进行一些配置,配置选项保存在文件/root/.oprofile/daemonrc中。

2.1指定内核

监视内核:

opcontrol --vmlinux=/boot/vmlinux-`uname -r`

不监视内核:

opcontrol --no-vmlinux

2.2指定要监视的事件

opcontrol --setup --event=name:count:unitmask:kernal:user

其中,

name:事件名,可以通过opcontrol –l命令获取;

count:计数器值,即事件发生多少次后,oprofile记录一次;

unitmask:事件的掩码;

kernal:是否收集内核事件(0或者1);

user:是否收集用户事件(0或者1);

下面是一个小例子:

opcontrol --setup --event=CYCLES:1000::0:1

--event=ITLB_MISSES:1000::0:1

性能计数器0和1分别统计时钟和ITLB缺失事件,事件每发生1000次OProfile记录一次,CPU处于内核态不计数,处于用户态则计数。

注意:可以被同时监视的事件数量是由处理器的计数器数量决定的,不过,这并非一对一那么简单,某些事件必须被映射到指定的计数器上。要判定可用的计数器数量,执行下面的命令:

cat /dev/oprofile/cpu_type

根据显示的处理器类型,可以索引到可用计数器数量。

3、Profiling squid

首先要确保OProfile在测试机器上工作是否正常,可通过下面的命令查看:

cat /boot/config-`uname -r` | grep OPROFILE

应该有这样两行:

CONFIG_HAVE_OPROFILE=y

CONFIG_OPROFILE=m

如果没有则加上,CONFIG_OPROFILE=m表示编译成模块,CONFIG_HAVE_OPROFILE=y表示直接编译进内核。我一般会选择直接编译进内核。使用重新编译的内核启动机器,如果oprofile编成了模块,需要加载oprofile模块。

1、设置需要采样的事件:

opcontrol --setup --event=CPU_CLK_UNHALTED:10000:0:0:1

2、查看当前设置的状态,确保设置正确:

opcontrol --status

3、清除历史数据:

opcontrol --reset

4、启动数据收集:

opcontrol --start

5、运行测试程序:

/usr/local/squid/sbin/squid

6、由用户级守护进程取出统计数据

opcontrol --dump

7、停止数据收集:

opcontrol --stop

停止用户级守护进程

opcontrol --shutdown

8、读取数据:

方法一

cd /usr/local/squid/sbin/

opreport –l ./squid

输出的结果中:

Samples

采样到的次数

%

所占百分比

Symbol name

函数名

方法二

opgrof产生Gprof格式的数据

cd /usr/local/squid/sbin/

opgprof ./squid

该命令在当前目录下生成gmon.out文件;然后可以使用gprof工具进行进一步分析,甚至获得函数调用关系图(png图)。

 类似资料: