- 概述
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时可以访问之),并采样置于内核的缓冲区内。后者在后台运行,负责从内核空间收集数据,写入文件。
oprofile-1.0.0,下载地址:http://sourceforge.net/projects/oprofile/files/oprofile/
安装:
./configure make & sudo make install
- ERROR1:configure:error:popt library not found
下载popt-1.16,下载地址:http://www.linuxfromscratch.org/blfs/view/svn/general/popt.html
./configure make & sudo make install
继续进入oprofile目录执行
./configure
- ERROR2:configure:error: liberty library not found
下载binutils-2.25,下载地址:http://ftp.gnu.org/gnu/binutils/?C=M;O=D
./configure --with-sysroots
make clean
make
sudo make install
继续进入到oprofile目录执行./configure
- ERROR3:configure:error:liberty library not found
该库也是在binutils中,在libiberty下,由于libiberty的configure没有提供--enable-shared选项,所以需要我们自己制作so文件,编辑Makefile,加上-fPIC编译选项,然后利用make gcc生成so:
cd libiberty //进入该目录
./configure //完成之后会有个Makefile文件产生
vi Makefile //编辑该文件,找到并修改该行为: CFLAGS = -g -O2 -fPIC 保存
make clean
make
gcc -shared *.o -o libiberty.so //生成.so文件,把该文件拷到/usr/lib中
sudo cp libiberty.so /usr/lib/libiberty.so
最后还需要bfd的动态链接库,也是在binutils中,在bfd中,由于自带的configure可以加入--enable-shared,所以可以利用该参数自动生成.so文件到/usr/lib中
cd bfd
./configure --enable-shared
make clean
make
sudo make install
最后回到oprofile目录中再安装一遍:
./configure
make clean
make
sudo make install