Android的性能分析... 1
一、 基本信息:... 1
二、 实验内容简要描述... 2
1. 实验目的... 2
2. 实验内容... 2
3. 实验条件... 2
三、 实验原理... 2
1. Android相关介绍... 2
2. Dalvik相关介绍... 3
3. Oprofile相关介绍... 4
四、 实验过程与结果... 4
五、 实验心得体会... 4
六、 目前存在的问题... 5
七、 相关附件说明... 5
八、 参考文献... 6
附录1:Oprofile移植到xscale pxa 255开发板... 7
一、 相关资源... 7
二、 详细步骤:... 7
附件2:Oprofile的相关应用... 12
一、 相关命令... 12
二、 详细步骤:... 12
附录3:实验结果与简单分析... 17
附录4:为何不能运用动态链接的可执行程序?. 19
==================================================================
略
首先移植Oprofile,并利用Oprofile工具对Android的linux内核以及Dalvik虚拟机进行性能分析。
1)Android的移植(参考陈锋组)
2)Oprofile的移植
3)Oprofile的相关应用
4)实验结果与简单分析
intel xscale pxa 255开发板
红旗linux系统
Ubuntu9.04 linux系统
Android 是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序 —— 移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。Google与开放手机联盟合作开发了 Android,这个联盟由包括中国移动、摩托罗拉、高通、宏达电和 T-Mobile 在内的 30 多家技术和无线应用的领军企业组成。Google通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,希望借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。
Android分为四个层:
1、应用程序层
2、应用程序框架层
3、系统运行库层
4、linux核心层
结构如图所示:
Dalvik虚拟机是一个只能解释执行.dex文件的虚拟机,.dex文件针对存储性能和内存管理进行了优化。 Dalvik虚拟机是基于寄存器的虚拟机,并且能够运行经过Dalvik自带的”dx”工具转换过的Java类。虚拟机运行在兼容Posix的操作系统上,依赖于底层的功能(例如线程和低级内存管理)。Dalvik的核心类库有意做得与Java标准版非常类似,但它明显更适合小型移动设备。
1) Dalvik主要是完成对象生命周期管理,堆栈管理,线程管理,安全和异常管理,以及垃圾回收等等重要功能。
2) Dalvik负责进程隔离和线程管理,每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。
3) 不同于Java虚拟机运行java字节码,Dalvik虚拟机运行的是其专有的文件格式Dex
4) dex文件格式可以减少整体文件尺寸,提高I/o操作的类查找速度。
5) odex是为了在运行过程中进一步提高性能,对dex文件的进一步优化。
6) 所有的Android应用的线程都对应一个Linux线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制。
7) 有一个特殊的虚拟机进程Zygote,他是虚拟机实例的孵化器。它在系统启动的时候就会产生,它会完成虚拟机的初始化,库的加载,预制类库和初始化。如果系统需要一个新的虚拟机实例,它会迅速复制自身,以最快提供给系统。对于一些只读的系统库,所有虚拟机实例都和Zygote共享一块内存区域。
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: 显示分析结果
1、Android的移植
参考陈峰组所作的工作,见附件。
2、Oprofile的移植
见附录1
3、Oprofile的相关应用
见附录2
4、实验结果与简单分析
见附录3
略
(1)每次启动开发板后,运行Opcontrol –inits时都会出现如下错误:
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
#touch /etc/mtab
#vi /etc/mtab
编辑以下内容:
nodev /dev/oprofile oprofilefs rw 0 0
(2)未能对app_process运行程序进行性能分析,找出其中具体函数的cpu占用率,即找出性能瓶颈。
(3)在交叉编译Oprofile时,如何通过修改libtool或者其他文件,使得编译的oprofile工具为静态链接的,而不是通过繁杂的手动编译方法。
Enclosure---|---result:静态链接的应用程序。
|---sourcecode:一些需要的源码包。
|---kernel-xscale:可移植的Android linux内核源码。
|---out_profile:oprofile性能分析结果
|---docs:相关文档
[1]郑灵翔.嵌入式Linux系统设计.北京航空航天大学出版社.
[2] Oprofile官方网站:http://oprofile.sourceforge.net/doc/index.html
[3]自己编译Google Android内核的Linux:http://www.linuxidc.com/Linux/2007-12/10010.htm
[4] busybox及bash在android中的安装及init.rc修改:http://zhiyazw.blogbus.com/logs/33430727.html
[5]Android官方网站:http://www.android.com/
[6]Oprofile达人BLOG:http://blog.chinaunix.net/u1/43047/index.html
[7] Sourcery G++交叉编译链:、http://www.codesourcery.com/sgpp/lite/arm/portal/release858