Android的性能分析——contents

 

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

 

==================================================================

一、 基本信息:

二、 实验内容简要描述

1. 实验目的

首先移植Oprofile,并利用Oprofile工具对Android的linux内核以及Dalvik虚拟机进行性能分析。

2. 实验内容

1)Android的移植(参考陈锋组)

2)Oprofile的移植

3)Oprofile的相关应用

4)实验结果与简单分析

3. 实验条件

intel xscale pxa 255开发板

红旗linux系统

Ubuntu9.04 linux系统

三、 实验原理

1. Android相关介绍

Android 是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序 —— 移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。Google与开放手机联盟合作开发了 Android,这个联盟由包括中国移动、摩托罗拉、高通、宏达电和 T-Mobile 在内的 30 多家技术和无线应用的领军企业组成。Google通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,希望借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。

Android分为四个层:

1、应用程序层

2、应用程序框架层

3、系统运行库层

4、linux核心层

结构如图所示:

clip_image002

2. Dalvik相关介绍

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共享一块内存区域。

3. 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: 显示分析结果

四、 实验过程与结果

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值