Android移植oprofile性能监测工具
关于oprofile的移植,在Ubuntu Server 10.04平台上交叉编译,移植到Android,经过实践,以下是交叉编译的正确步骤,不保证在其他环境中能正确运行,以下是编译环境:
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_process
CYCLES:7500|
samples| %|
------------------
79213 100.000 [heap] (tgid:1444 range:0x83000-0x401000)
77023 10.6180 oprofiled
57865 7.9770 libcutils.so
19547 2.6946 busybox
17571 2.4222 libwebcore.so
13223 1.8229 libplayback.so
9490 1.3082 libdisplay.so
3906 0.5385 libbinder.so
3816 0.5261 libutils.so
3374 0.4651 ophelp
3373 0.4650 libandroid_runtime.so
2069 0.2852 libcore.so
1816 0.2503 libz.so
1648 0.2272 libsqlite.so
1342 0.1850 dalvik-jit-code-cache (deleted)
1141 0.1573 vmlinux
1110 0.1530 libui.so
975 0.1344 libsurfaceflinger.so
840 0.1158 libGLES_android.so
711 0.0980 libhw.so
604 0.0833 example_display
591 0.0815 libpixelflinger.so
528 0.0728 libsurfaceflinger_client.so
522 0.0720 linker
494 0.0681 libicuuc.so
467 0.0644 libdcchd_android.so
293 0.0404 libnativehelper.so
169 0.0233 libm.so
158 0.0218 uinput
132 0.0182 gralloc.smp86xx.so
117 0.0161 libicui18n.so
98 0.0135 copybit.smp86xx.so
75 0.0103 libstdc++.so
58 0.0080 libEGL.so
58 0.0080 libhardware.so
57 0.0079 libGLESv1_CM.so
46 0.0063 librmlibplay_default_plugin.so
35 0.0048 opjitconv
32 0.0044 libandroid_servers.so
22 0.0030 libhardware_legacy.so
15 0.0021 liblog.so
11 0.0015 servicemanager
10 0.0014 libmedia.so
9 0.0012 adbd
8 0.0011 logwrapper
5 6.9e-04 libmediaplayerservice.so
4 5.5e-04 libmedia_jni.so
3 4.1e-04 libsysutils.so
1 1.4e-04 init
1 1.4e-04 libemoji.so
分享到:
相关推荐
总的来说,将oprofile移植到JK2410开发板是一项技术性较强的工作,需要对Linux内核、编译工具链以及性能分析工具有深入理解。成功移植后,开发者就能充分利用oprofile的强大功能,有效地定位和优化系统性能问题。
Android Linux 下用 OProfile 工具分析性能 OProfile 是一种用于 Linux 的评测工具,能够帮助用户识别系统中的性能瓶颈。该工具可以工作在不同的体系结构上,包括 IA32, IA64 和 AMD Athlon 系列。OProfile 的优点...
1. **硬件兼容性**:确保你的目标硬件支持硬件性能计数器,这是Oprofile 工作的基础。 2. **内核版本**:检查目标系统的内核版本,Oprofile可能需要特定版本或更高版本的内核支持。 3. **编译工具链**:确保你有一...
Oprofile是一款针对Linux系统的性能分析工具,能够帮助开发者对系统进行性能优化。它适用于多种架构平台,包括但不限于IA32、IA64及AMD Athlon系列等。由于其轻量级的特性,Oprofile将被集成于Linux 2.6版本的核心之...
总之,Oprofile在Android上的运用为开发者提供了一个有力的工具,用于诊断和优化系统性能,尤其是在针对特定硬件平台的优化工作中,Oprofile的价值尤为突出。通过深入理解和熟练运用Oprofile,开发者可以提升Android...
0.9.4版本是该工具的一个稳定发行版,提供了丰富的功能,帮助开发者深入了解程序运行时的行为,找出性能瓶颈,从而进行针对性的优化。 Oprofile的核心功能包括: 1. **CPU事件采样**:Oprofile能够监控CPU的各种...
Android提供了多种性能分析工具,其中`OProfile`是一款强大的系统级性能分析器,适用于Linux系统,包括Android。本文将深入探讨`OProfile`及其在Android上的应用。 `OProfile`是一款开源的、跨平台的性能分析工具,...
每个工具都有其特点,例如perf更注重实时性能分析,gprof专注于C/C++程序,而Valgrind则提供内存泄漏检测等功能。根据具体需求选择合适的工具至关重要。 七、总结 Oprofile是Linux系统性能分析的有力武器,通过...
Oprofile是Linux系统中的一款性能分析工具,它可以帮助开发者深入了解系统的运行状况,定位程序中的性能瓶颈。Oprofile通过硬件事件采样,收集系统层面的运行数据,包括CPU指令执行、内存访问、磁盘I/O等,从而为...
**Oprofile** 是一款强大的Linux性能分析工具,它在Linux操作系统中扮演着系统级性能剖析的角色。Oprofile能够帮助开发者和系统管理员深入了解系统的运行情况,找出性能瓶颈,从而优化程序和系统性能。Oprofile-...
OProfile是一款开源的系统性能分析工具,适用于Linux系统。它的主要作用是收集系统级的性能数据,包括CPU周期、缓存命中率、指令执行情况等,用于定位程序的性能瓶颈。OProfile 0.9.99是该工具的一个版本,它可能...
Oprofile是一款强大的Linux性能分析工具,它可以在系统级别对各种硬件事件进行采样,如CPU周期、缓存命中、指令执行等,从而帮助开发者和系统管理员深入理解系统运行时的行为,找出性能瓶颈。在"oprofile-0.9.5.tar....
### OProfile —— Linux性能剖析工具 #### 一、引言与背景介绍 在Linux环境中进行性能优化是一项挑战性的工作,特别是在需要深入了解应用程序及其对服务器性能的影响时。OProfile作为一种强大的性能测试工具,在...
oProfile是用于Linux的若干种评测和性能监控工具中的一种,它可以工作在不同的体系结构上,包括MIPS、ARM、IA32、IA64和AMD。oProfile包含在Linux2.5和更高版本的内核中,也包含在大多数较新的Linux版本中,包括...
**Oprofile 和 Gprof:两种性能分析工具** 在软件开发和优化过程中,性能分析是至关重要的环节,它能帮助我们定位程序的瓶颈,提高代码效率。`oprofile` 和 `gprof` 是 Linux 系统中常用的两种性能分析工具,它们...
### Oprofile:Linux下的系统级性能分析工具 #### 概述 Oprofile 是一款低开销、系统级的采样型性能分析工具,主要用于 Linux 平台上的性能瓶颈定位与优化工作。它可以帮助开发者确定程序运行时哪些部分消耗了过多...
**OProfile**是一款功能强大的Linux性能分析工具,主要用于监控程序执行过程中的各种硬件计数器事件,从而帮助开发者识别性能瓶颈并进行优化。该手册提供了OProfile工具的详细介绍与使用指南。 #### 二、OProfile的...
Oprofile是Linux系统下一个低开销的系统全局的性能监视工具,利用处理器上Android手机系统的性能测试工具 Android应用的性能如何测试?JAVA层面可以用TraceView,可是用NDK开发出来的是so,TraceView跟踪不了怎么办?...
在进行嵌入式系统开发或者跨平台软件构建时,Oprofile是一个非常重要的工具,它是一个系统级性能分析器,能够帮助开发者深入理解程序在运行时的性能表现。然而,在进行Oprofile的交叉编译过程中,可能会遇到一些问题...