oprofile安装和使用
来源:互联网 发布:保利集团 知乎 编辑:程序博客网 时间:2024/05/21 05:19
oProfile是用于Linux的若干种评测和性能监控工具中的一种,它可以工作在不同的体系结构上,包括MIPS、ARM、IA32、IA64和AMD。oProfile包含在Linux2.5和更高版本的内核中,也包含在大多数较新的Linux版本中,包括RedHat9。
oProfile是Linux平台上的一个功能强大的性能分析工具,支持两种采样(sampling)方式:基于事件的采样(eventbased)和基于时间的采样(timebased)。
基于事件的采样是oProfile只记录特定事件(比如L2 cache miss)的发生次数,当达到用户设定的定值时oProfile就记录一下(采一个样)。这种方式需要CPU内部有性能计数器(performace counter)。
基于时间的采样是oProfile借助OS时钟中断的机制,每个时钟中断oProfile都会记录一次(采一次样),引入此种采样方式的目的在于提供对没有性能计数器的CPU的支持,其精度相对于基于事件的采样要低。因为要借助OS时钟中断的支持,对禁用中断的代码oProfile不能对其进行分析。
oProfile在Linux上分两部分,一个是内核模块(oprofile.ko),一个为用户空间的守护进程(oprofiled)。前者负责访问性能计数器或者注册基于时间采样的函数(使用register_timer_hook注册之,使时钟中断处理程序最后执行profile_tick时可以访问之),并采样置于内核的缓冲区内。后者在后台运行,负责从内核空间收集数据,写入文件。
2.注意事项
1) 不建议在虚拟机里利用oProfile来测试性能,因为虚拟机对oProfile的支持并不好,比如在Vmware虚拟机里不支持性能计数器接口模式:http://oprofile.sourceforge.net/faq/,中断模式的设置为:
或
具体参看:http://oprofile.sourceforge.net/doc/detailed-parameters.html#timer
2) 调式的内核最好是原生内核(Vanilla kernel、香草内核),发行版Linux(比如redhat)自带的内核一般都是经过大量修改的,对oProfile的支持不好。所以,我们最好能从kernel官方网站下载原生源码后自行编译生成新内核,重启机器进行新内核环境后进行性能测试。另外,oProfile需要的是未经压缩的内核镜像,所以/boot目录的vmlinuz-2.x.xx是不能使用的,而需要使用Linux源码编译目录里的未镜像文件,比如/usr/src/linux-2.6.30/vmlinux,
否则在初始化之前执行opcontrol --no-vmlinux; opcontrol --init;
3) 内核需打开OPROFILE选项,否则无法运行oProfile:
需要编辑内核配置文件:
将其中的# CONFIG_OPROFILE is not set改为CONFIG_OPROFILE=m(或者y)
同时也应确保另外几个配置选项被选中:
然后编译内核重启机器即可。
4)也可以直接yum install oprofile*
4) 为了支持新的CPU类型,oProfile的更新会比较频繁,所以在使用oProfile时建议先去http://oprofile.sourceforge.net/news/看看是否有更新版本。
3.系统环境
此本中所有关于oProfile的介绍、测试均在CENTOS 5.4环境下进行,具体如下:
4.oProfile的安装
oProfile的安装同普通Linux软件安装没有什么两样,照例是configure、make、make install三板斧。由于oProfile依赖的库比较多,如果系统中没有安装某些库则在configure时会给出错误提示,比如当我输入如下命令敲回车后提示:
解决该问题的方法是首先从网站http://ftp.gnu.org/gnu/binutils/?C=M;O=D下载binutils包编译安装即可(同样是./configure 、make、make install)。
再configureoProfile:
提示没有图形界面,不用管它,直接make编译,我还遇到了这个make错误:
该问题在于没有找到bfd的动态链接库,需要进入binutils 的bfd目录编译获取libbfd.so文件:
一般,接下来还会遇到libiberty同样的问题,但是libiberty的configure没有提供–enable-shared选项,所以需要我们自己制作so文件,编辑Makefile文件,加上-fPIC编译选项,然后利用make、gcc生成so:
由于之前编译过,所以注意不要落了make clean对先前编译结果进行清除,否则生成的libiberty.so不完整,要把so库拷贝到正确的系统路径,否则在执行oProfile程序时,可能出现“error while loading shared libraries”的错误信息。
最后再对oProfile进行make、make install即可,以上就是我在Linux 2.6.37.2内核上编译oProfile过程中遇到的问题,虽然摸索清楚后看似不复杂,其实总个过程也浪费了我不少时间。
5.oProfile工具集
安装好的oProfile包含有一系列的工具集,这些工具默认在路径/usr/bin之下,它们分别是:
1) op_help:列出可用的事件,并带有简短的描述。
2) opcontrol:控制oProfile的数据收集。
3) opreport:对结果进行统计输出。
4) opannaotate:产生带注释的源/汇编文件,源语言级的注释需要编译源文件时已加上调试符号信息的支持。
5) opgprof:产生如gprof相似的结果。
6) oparchive:将所有的原始数据文件收集打包,从而可以在另一台机器上进行分析。
7) opimport:将采样的数据库文件从另一种abi外部格式转化为本地格式。
6.oProfile使用小示例
下面是一个完整的小示例,其中multiply是测试程序,在进行gcc编译时加上了-g参数,便于opannotate分析:
7.oProfile反复使用以及示例结论
1) 使用oProfile的基本步骤如下所示,其中中间的步骤是经常使用的,前后几个步骤无需重复多次:
2) 对于oProfile收集的统计信息,可以使用opreport、opgprof、opannotate这些工具进行分析并获取相关信息,比如从上面的示例中可以看到函数slow_multiply就相对占用了较多的计算时间。
转载请保留地址:http://lenky.info/2012/03/26/oprofile%e7%9a%84%e5%ae%89%e8%a3%85%e4%b8%8e%e4%bd%bf%e7%94%a8/
http://www.cnblogs.com/bangerlee/archive/2012/08/30/2659435.html
http://blog.csdn.net/green369258/article/details/6896139
- OProfile安装和使用
- oprofile安装和使用
- 安装使用oprofile
- oProfile的安装与使用
- oProfile的安装与使用
- oProfile的安装与使用
- oprofile库安装与使用
- Oprofile的安装与使用
- oProfile的安装与使用
- oProfile的安装与使用
- 安装oprofile
- 安装oprofile
- 【性能分析】oProfile的安装与使用
- oProfile的安装与使用 测试可用
- oprofile的安装 使用 ubuntu14.04
- 使用gprof和oprofile查找性能瓶颈
- 使用gprof和oprofile查找性能瓶颈
- 使用gprof和oprofile查找性能瓶颈
- NSRegularExpression 正则表达式语法与正则表达式在iOS中的常见用法
- 生成格雷码+微信红包
- Fedora rpm 方式安装配置Samba服务器
- WiFi技术概述
- 高德地图No implementation found for long com.autonavi.amap.mapcore.MapCore
- oprofile安装和使用
- IO流概览
- ScrollView属性fillViewport解决android布局不能撑满全屏的问题
- SpringMVC源码总结(一)HandlerMapping和HandlerAdapter入门
- LeetCode Word Ladder
- 玩手机惹怒丈夫 男子用菜刀砍死怀孕8个月妻子
- java遍历磁盘目录
- Markdown编辑器
- 关联规则-web数据挖掘学习2