现在的位置: 首页 > 综合 > 正文

oprofile5

2013年12月09日 ⁄ 综合 ⁄ 共 2297字 ⁄ 字号 评论关闭

Oprofile

简介

 

性能测试的神器。其结果最为准确,为什么呢?请看oprofile的测试原理。

其原理是:现在的很多 CPU都提供一个所谓性能计数器的东西(performance counter),大致的原理就是程序可以注册告诉CPU对什么event感兴趣(比如CPU_CYCLE,CPU经历了一次时钟周期),然后CPU在执 行了相应的操作后,就会在性能计数器上加1,这样程序就可以取出。所以,使用OProfile来定位CPU使用率的问题,就变成了让oprofile收集 程序运行过程中哪个可执行程序(或是so)中的哪个function,消耗的CPU CYCLE最多。

也就是说我们可以通过收集数据知道哪个程序的哪个函数消耗的cpu时间占比。这种测试方法结果更符合实际情况。

 

使用方法

1.     准备内核:
Oprofile需要内核的支持,2.6的linux内核已经支持了这个功能,可以编译成模块或者直接编译进内核。一般发行版本是没有将此项功能编译进内核的,因此需要手动编译一个内核版本,将cat /boot/config-`uname -r` | grep OPROFILE
应该有这样两行:
CONFIG_HAVE_OPROFILE=y
CONFIG_OPROFILE=m
如果没有则加上,CONFIG_OPROFILE=m表示编译成模块,CONFIG_OPROFILE=y表示直接编译进内核。我一般会选择直接编译进内核。使用重新编译的内核启动机器,如果oprofile编成了模块,需要加载oprofile模块。

2.     安装oprofile工具:
下载oprofile的daemon程序和工具集,直接上http://oprofile.sourceforge.net/download/ 下载最新的oprofile源码包到目标机器上,编译安装。注意:安装时需要root权限。

3.     设置oprofile参数。
Oprofile是通过设置cpu事件来进行性能测试的,它有一个daemon的进程来启动和收集相关的性能数据。因此启动oprofile之前需要先设置一些参数,比如收集的事件名字,抽样频率。
Oprofile的设置是通过opcontrol命令来进行的。

首先,配置 OProfile 是否应该监视内核。这是在启动 OProfile 前唯一所需的配置选项。其它选项都是可选的。
要监视内核,以root用户身份执行以下命令:

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

要配置 OProfile 不监视内核,以root用户身份执行以下命令:

opcontrol --no-vmlinux

一般来说,我们做应用程序的性能测试不需要关注内核的性能。另外需要关注cpu的周期事件,因此需要进行如下设置

opcontrol --setup --event=eventname:count:unitmask:kernel:user

这里解释一下event参数的各个项的意思:

说明

eventname

要关注的事件名称,常用的事件名称及功能如下:

CPU_CLK_UNHALTED: CPU的执行时间,性能测试时最常用的事件
LLC_MISSES: L2 cache失效情况。

DTLB_MISSES: 数据TLB失效情况。
一般做性能测试时只会用到CPU_CLK_UNHALTED。

count

事件抽样频率,oprofile并不是对每次事件都进行记录,而是进行抽样,每多少次事件进行一次数据收集,如果抽样太低,会导致事件数据的收集占用太多的cpu.因此每个事件,oprofile给了一个最小值,每类事件的最小值可以通过opcontrol --list-events查到。

unitmask

事件的掩码,通过opcontrol --list-events可查看相应事件的掩码意义,这里不细说了。

kernel

是否收集内核的事件。0表示不收集,1表示收集。

user

是否收集用户的事件。0表示不收集,1表示收集。

对性能测试时,一般使用的设置参数如下:

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

4.     编译测试程序,需要打开-g参数。

g++ -g -o perf_test perf_test.cpp

5.     进行测试。
查看当前设置的状态,确保设置正确

opcontrol --status

 

清除上一次收集的数据

opcontrol --reset

 

启动数据收集。

opcontrol --start

 

运行我们要测试的程序

运行完成后,停止oprofile数据的收集。

opcontrol --stop

 

 

结果分析

Oprofile的数据有两种查看方式:

1.     使用opreport查看。
查看到的列说明:

Samples

采样到的次数

%

占的百分比

Symbol name

函数名

2.     也可以使用工具,生成图片查看。
先用opgprof产生Gprof格式的数据。

opgprof ./perf_test

在当前目录下会生成gmou.out文件。
       再用gprof生成txt数据

gprof ./perf_test gmon.out >result.txt

把result.txt从服务器上下载下来,在windows下使用前面介绍的python脚本生成       图片

python gprof2dot.py result.txt | dot -Tpng -o  report_gprof.png

生成图片结果:

工具点评

优点:oprofile是对整个系统的性能进行分析,采用的是硬件计数器,效率高,负载低,且结果准确。

缺点:需要更换内核,需要root权限

抱歉!评论已关闭.