设为首页 加入收藏

TOP

Android移植oprofile性能监测工具(一)
2014-11-24 14:16:44 来源: 作者: 【 】 浏览:0
Tags:Android 移植 oprofile 性能 监测 工具

build: Ubuntu Server 10.04
host: Android-2.2r2
cross compiler: mips-linux-gnu-gcc version:4.3.2
cpu: mips


交叉编译oprofile,依赖(popt,binutils);


1.Download Open Source:


popt-1.14.tar.gz
binutils-2.21.tar.gz
oprofile-0.9.6.tar.gz


2.Building environment


重要:
touch env.sh
vi env.sh
内容如下:
export PATH=/home/gzshun/share/mips-4.3/bin:$PATH ##修改为自己的工具链路径
export CC="mips-linux-gnu-gcc -EL"
export CXX="mips-linux-gnu-g++ -EL"
export CFLAGS=-static
export CXXFLAGS=-static
export CPPFLAGS=-static


source env.sh


3.Building popt-1.14.tar.gz


tar zxvf popt-1.14.tar.gz
cd popt-1.14
ac_cv_va_copy=yes ./configure --with-kernel-support --host=mips-linux-gnu --prefix=/home/gzshun/popt
make
make install


以下是静态编译:
4.Building binutils-2.21.tar.gz


tar zxvf binutils-2.21.tar.gz

cd binutils-2.21

./configure --with-kernel-support --host=mips-linux-gnu --prefix=/home/gzshun/binutils --enable-shared

make configure-host

make LDFLAGS="-all-static"

make install



5.Building oprofile-0.9.6.tar.gz


tar zxvf oprofile-0.9.6.tar.gz

cd oprofile-0.9.6

./configure --with-kernel-support --host=mips-linux-gnu --prefix=/home/gzshun/oprofile/ --with-extra-libs=/home/gzshun/popt/lib/ --with-extra-includes=/home/gzshun/popt/include/ --with-binutils=/home/gzshun/binutils

make LDFLAGS="-all-static -L/home/gzshun/binutils/lib -Xlinker -R -Xlinker /home/gzshun/binutils/lib -L/home/gzshun/popt/lib/"

make install



6.添加内核oprofile模块
General setup --->
[*] Profiling support (EXPERIMENTAL)
<*> OProfile system profiling (EXPERIMENTAL)
将oprofile模块编进内核,也可以编程模块


开发板性能测试篇:


1.注意
a.在ubuntu编译oprofile的生成路径是:/home/gzshun/oprofile,所以在开发板也需要建立相应的路径
mkdir -p /home/gzshun/
将生成的oprofile目录拷贝到开发板/home/gzshun/目录下
##原因:在ubuntu环境下编译,oprofile会按照原本在ubuntu的路径寻找需要的lib库。(生成目录自己定)

b.修改oprofile/bin/opcontrol第1968行,将/usr/bin修改为/bin

c.在Android系统中的/etc目录下新建mtab文件,并添加内容:nodev /dev/oprofile oprofilefs rw 0 0

d.在开发板设置oprofile的环境变量,必须放在PATH的前面,因为原Android系统也存在2个命令。



e.oprofile生成报告的默认地址是:/var/lib/oprofile


2.性能测试
##Android没有内核,所以需要从虚拟地址去引用vmlinux
grep "_stext" /proc/kallsyms --> result: 84000400 T _stext ##获取vmlinux虚拟的起始地址
grep "_etext" /proc/kallsyms --> result: 84342a18 A _etext ##获取vmlinux虚拟的结束地址
opcontrol --init --> 提示错误,挂载oprofilefs即可
mount -t oprofilefs nodev /dev/oprofile ##挂载oprofile需要的设备信息
opcontrol --init ##初始化
opcontrol --reset ##清空上次保留下来的信息
echo 0 > /data/vmlinux ##生成一个虚拟的vmlinux
opcontrol --callgraph=2 --vmlinux=/data/vmlinux --kernel-range=0x84000400,0x84342a18 ##起始地址,结束地址, 跟踪内核
或者 opcontrol --setup --callgraph=2 --no-vmlinux ##不跟踪 内核
opcontrol --setup --event=CYCLES:7500:0:0:1 ##事件采样
opcontrol --start ##开始测试性能
opcontrol --status ##查看状态
.....等待时间,测试
opcontrol --dump ##将测试性能信息写入磁盘。
opreport ##打印报告
opcontrol --stop ##停止检测
opcontrol --shutdown ##关闭检测守护进程
opcontrol --deinit ##卸载oprofile内核模块



opreport出来的一个例子:


分析:
Samples 采样到的次数
% 占的百分比
Symbol name 函数名


Android@localhost:/# opreport
Overflow stats not available
CPU: MIPS 24K, speed 0 MHz (estimated)
Counted CYCLES events (Cycles) with a unit mask of 0x00 (No unit mask) count 7500
CYCLES:7500|
samples| %|
------------------
132594 18.2787 opreport
103155 14.2204 libdvm.so
96514 13.3049 libc.so
88463 12.1950 libskia.so
79213 10.9199 app_pr

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言sscanf函数的总结 下一篇互斥对象锁和临界区锁性能比较

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: