【性能分析】oProfile的安装与使用
来源:互联网 发布:淘宝网广场舞扇子 编辑:程序博客网 时间:2024/05/19 08:42
0.引言
基于DPDK的发包工具的性能今天已经达到双向1900Wpps了,比昨天又高了200Wpps,正是得益于oProfile检测与调优的结果,而且今天还只是很简单的用了一下(类似于下面的示例),跟踪出对几个结构体字段的访问比较缓慢,于是对结构体字段进行了仔细的顺序调整与Cache对齐(之前急于功能实现,没顾及这些字段的排布),结果性能马上飙升了200Wpps,开心死我了。后天(明天外出办理其它事情)到公司再利用oProfile细细跟踪一下,特别是cache命中、 pipeline阻塞、prefetch预取等,看最终我的发包工具到底能达到什么性能。oProfile很久以前就使用过,亏今晚请假得空再整理一把以作备忘,好工具要恰时使用才算是适得其所,否则岂不有负提供如此佳具的大牛&工程师们。
1.概述
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
3) 内核需打开OPROFILE选项,否则无法运行oProfile:
需要编辑内核配置文件:
将其中的# CONFIG_OPROFILE is not set改为CONFIG_OPROFILE=m(或者y)
同时也应确保另外几个配置选项被选中:
然后编译内核重启机器即可。
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/
- 【性能分析】oProfile的安装与使用
- oProfile的安装与使用
- oProfile的安装与使用
- oProfile的安装与使用
- Oprofile的安装与使用
- oProfile的安装与使用
- oProfile的安装与使用
- 使用oprofile分析性能瓶颈
- 使用oprofile分析性能瓶颈
- 使用oprofile分析性能瓶颈
- 使用oprofile分析性能瓶颈
- 使用oprofile分析性能瓶颈
- 使用oprofile分析性能瓶颈
- 使用oprofile分析性能瓶颈
- oProfile的安装与使用 测试可用
- oprofile库安装与使用
- 使用oprofile分析性能瓶頸(1)
- 使用Oprofile分析性能瓶颈--简单例子
- 外媒:这些数码产品过度炒作 目前不值得购买
- Core Animation 五 (美化图层,用动作实现自定义动画、为自定义的属性添加动画以及线程)
- java_集合体系之Map框架相关抽象类接口详解、源码——08
- 逻辑读,物理读,各种读 20131224
- X-CODE开发的基础设置!
- 【性能分析】oProfile的安装与使用
- yii-theme使用
- 2013资料整理-iOS内存管理机制
- 智能路由 为何引爆互联网巨头间的竞争?
- linux下 tar解压 gz解压 bz2等各种解压文件使用方法
- C# winform 获取标题栏 状态栏 工具栏高度
- 微淘开始为线下商户引流 门店迎来O2O转型契机
- Sales item&是什么?
- CMake