Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1138021
  • 博文数量: 254
  • 博客积分: 1242
  • 博客等级: 少尉
  • 技术积分: 1581
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-03 21:49
文章分类

全部博文(254)

文章存档

2017年(16)

2016年(4)

2013年(94)

2012年(140)

分类: LINUX

2013-07-10 13:50:37

原文地址:OProfile 使用指南 作者:chenny7

OProfile使用指南

 

by chenny7@163.com, updated on 2 Nov. 2012.

1Principles

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

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

   

2Configration

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

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

 

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

cat /dev/oprofile/cpu_type

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

 

3Profiling 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图)。

 

 

 

 

阅读(3250) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~