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

Oprofile在Android中的应用

2013年10月13日 ⁄ 综合 ⁄ 共 5021字 ⁄ 字号 评论关闭

    1
    oprofile






    相关介绍






Oprofile



是用于


Linux



的若干种评测和性能监控工具中的一种。它可以工作在不同的体系结构上,包括


IA32





IA64






AMD
Athlon



系列。它的开销小,将被包含在(

Linux




2.6



版的内核中。

           


Oprofile


可以帮助用户识别诸如循环的展开、高速缓存的使用率低、低效的类型转换和冗余操作、错误预测转移等问题。它收集有关处理器事件的信息,其中包括

TLB


的故障、停机、存储器访问、位于


DCU


(数据高速缓存单元)中的总线路数、一个

DCU


故障的周期数


以及不可高速缓存的和可高速缓存的指令的获取数量。

Oprofile


是一种细粒度的工具,可以为指令集或者为函数、系统调用或中断处理例程收集采样。

Oprofile



通过取样来工作。使用收集到的评测数据,用户可以很容易地找出性能问题。

Oprofile



工具概述:

      
op_help:



列出可用的事件,并带有简短的描述


      
opcontrol:



控制


Oprofile



的数据收集


      
oprofpp:



检索有用的评测数据


      
op_time:



为系统上的所有映像列出相关的评测值


      
op_to_source:



产生带注解的源文件、汇编文件或源文件和汇编文件的混合


op_merge:



合并属于同一个应用程序的采样文件




op_import:



将采样数据库文件从外部格式(

abi


)转换为本地格式

opreport:



显示分析结果




2
oprofile






的移植
















2.1




相关资源






源码包

:

     Oprofile-0.9.4.tar.gz

     gettext-0.18.1.1.tar.bz2

     buildroot-2010.02.tar.bz2

     Popt-1.7.tar.gz

     Binutils-2.19.51.0.3.tar.bz2

     busybox-1.8.1.tar.bz2

     linux-2.6.29-android-1.0_r1.tar.gz

编译工具:

      

arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2



      

2.2


详细步骤






      
1.

在交叉编译之前需要做的一些工作
:





1



打开内核的

Oprofile


选项

           

通过

make
menuconfig=>general setup=>



           

[*]
Profiling support (EXPERIMENTAL)



           

[
]Activate markers



           

[*]
OProfile system profiling (EXPERIMENTAL)





2


)选择安装交叉编译链

             

修改

~/.bashrc


添加

arm-none-linux-gnueabi


的路径。

PATH=$PATH:
/home/cuiyan/work/arm-2008q3/bin/





3


)配置编译、链接参数

$:export
CC=arm-none-linux-gnueabi-gcc



       

$:export
CXX=arm-none-linux-gnueabi-g++



$:export
CFLAGS=-static



$:export
CXXFLAGS=-static



$:export
CPPFLAGS=-staitc







2


交叉编译
popt






          
$:cd
/home/cuiyan/work/oprofile/popt/



           $:tar
xfz gettext-0.18.1.1.tar.bz2


           $:cd
gettext-0.18.1.1


           $:./configure
–prefix=/usr


           $:make

           $:make
install


          
$:cd
../





$:tar
xfz popt-1.7.tar.gz



 

$:cd
popt-1.7



 

$:./configure --with-kernel-support --host=arm-none-linux-gnueabi



--prefix=/home/cuiyan/work/oprofile/popt/poptinstall/


 

$:make


 

$:make
install



 

$:
cp


/home/cuiyan/work/oprofile/popt/poptinstall/lib/*


/home/cuiyan/work/arm-2008q3/arm-none-linux-gnueabi/lib


 
$:
cp


/home/cuiyan/work/oprofile/popt/poptinstall/include/*
/home/cuiyan/work/arm-2008q3/arm-none-linux-gnueabi/include







3


静态交叉编译
binutils



       
$:cd
/home/cuiyan/work/oprofile/binutils/


       
$:sudo
apt-get install makeinfo




$:tar
jxf binutils-2.19.51.0.3.tar.bz2



$:cd
binutils-2.19.51.0.3



$:./configure
--with-kernel-support --host=

arm-none-linux-gnueabi



--prefix=/home/cuiyan/work/oprofile/binutils/binutils-install/


$:make


$:make
install



$:c
p


/home/cuiyan/work/oprofile/binutils/binutils-install/lib/*
/home/cuiyan/work/arm-2008q3/arm-none-linux-gnueabi/lib



$:c
p


/home/cuiyan/work/oprofile/binutils/binutils-install/include/*
/home/cuiyan/work/arm-2008q3/arm-none-linux-gnueabi/include







4


静态交叉编译
oprofile



     
$:cd
/home/cuiyan/work/oprofile/oprofile/


$: tar zxf
oprofile-0.9.4.tar.gz


$:cd
oprofile-0.9.4



$:/configure


--with-linux=/home/cuiyan/mid/gongban/
--with-kernel-support



--host=



arm-none-linux-gnueabi




--prefix=/home/cuiyan/work/oprofile/oprofile/oprofile-install


$:make


$:make
install



通过

1-4


操作,可在

oprofile-install/bin


目录下查看到一些

oprofile


的工具。

$:bin$ file ophelp


ophelp: ELF
32-bit

LSB executable, ARM, version 1 (SYSV), 
dynamically linked

 (uses shared libs), for GNU/Linux 2.6.14, not stripped




 

5


转换动态链接为静态链接



虽然在之前指定了

static

参数,但是编译出来的结果仍然是动态链接的。这个是因为

Oprofile

在链接库时运用到了

libtool

工具。对于如何通过对

libtool

文件的修改使其直接产生静态链接的文件,目前未进行研究,而是直接手动编译成静态。

具体方法如下:



ophelp

命令来讲:

$:oprofile-0.9.4$ cd
utils/


$:utils$ ls

Makefile
Makefile.am Makefile.in opcontrol ophelp ophelp.c ophelp.o


$:utils$ rm ophelp

$:utils$ cd ..

$:oprofile-0.9.4

$ make

注:由于

ophelp

被删除,则它要重新生产,在

make

过程中可以查看相关生成指令。

arm-none-linux-gnueabi-gcc
-W -Wall -fno-common -Wdeclaration-after-statement -o ophelp ophelp.o
../libop/libop.a ../libutil/libutil.a
/work/pop


t/popinstall/lib/

libpopt.so



-liberty -ldl -Wl,--rpath -Wl,/work/popt/popinstall/lib -Wl,--rpath
-Wl,/work/popt/popinstall/lib




$:oprofile-0.9.4$ cd
utils/


$:utils$ rm ophelp

$:utils$
arm-none-linux-gnueabi-gcc -W -Wall -fno-common
-Wdeclaration-after-statement -o ophelp ophelp.o ../libop/libop.a
../libutil/libutil.a /work/popt/popinstall/lib/

libpopt.a


-liberty -ldl -Wl,--rpath -Wl,/work/popt/popinstall/lib -Wl,--rpath
-Wl,/work/popt/popinstall/lib –

static


$:utils$ file ophelp

ophelp:
ELF 32-bit LSB executable, ARM, version 1 (SYSV),

statically
linked


,
for GNU/Linux 2.6.14, not stripped




ophelp


为静态链接,不依赖库,可以直接在开发板上运行。其他

Oprofile


指令相应通过手动编译生成。除其中

opcontrol




shell


脚本,是源码包自带的。



6


移植
busybox




由于要运用

oprofile

工具,必须先运用

opcontrol

进行初始化工作。而

opcontrol

是个

shell

脚本。首先修改

opcontrol

文件。

#!/bin/sh

改为

#!/system/bin/sh



oprofile

工具放在实验板的

/sbin

目录下。

Export
PATH=$PATH:/sbin


$:./opcontrol –init


出现错误

:

test: not found

id: not found

test: not found

grep: not found

test: not found

grep: not found

test: not found

test:
not found



test: not found


…………

这是由于

android

提供的命令过于精简,因此需要移植

busybox

,来运行

opcontrol



通过下载

busybox

最新版本,进行交叉编译。我的实验板已有

busybox

工具,所以没有再次移植。以下简要介绍

busybox

的移植步骤(仅供参考):



1

)在主机上交叉编译

busybox

,要在

make
menuconfig


中选择静态链接



2

)把

busybox


复制到实验板的

/data/busybox/

下。

#
:cd
/data/busybox


#
:chmod
+x busybox


#
:export
PATH=$PATH:/data/busybox/


#
:./busybox
-install



修改

opcontrol

文件:

BINDIR
=”/data/busybox”


PATH

中加入

/data/busybox


7
oprofile


初始化



#opcontrol --init

cat: can't open
'/dev/oprofile/cpu_type': No such file or directory


Unable to open
cpu_type file for reading


Make sure you have
done opcontrol --init


cpu_type 'unset' is
not valid


you should upgrade
oprofile or force the use of timer mode


解决方法:

#rm /etc/mtab

抱歉!评论已关闭.