在一台MSM7627带256RAM的手机上移植android 2.3.5,发现此平台的性能跑2.3.5只能说是刚刚好。后台运行2-3个程序的时候就已经卡顿严重。于是想办法对其进行性能分析和优化,老大介绍了ARM DS-5工具让熟悉,于是到arm主页找文档。
ARM的说明文档见这里,最新版本是DS-5 version5.8 ,以下步骤是根据链接中的文档翻译过来,摘取测试过的部分列下来。
由于没有license,所以只好下载CE版本,连接里的how to install, how to debug和how to profile基本上已经说得很明白。
HOW TO INSTALL:
for HOST:
Android SDK: 这个没啥好说的,搞Android不能缺,还有JDK等等。
eclipse SDK: DS-5文档推荐INDIGO版本,解压之后设定好Android SDK安装路径。
选help -> Install New Software,在work with后输入http://tools.arm.com/eclipse,点add,之后的步骤跟安装ADT插件差不多,一路确认和next。
for TARGET:
DS-5的profile功能需要TARGET端一个守护进程定时的从kernel取得系统运行的信息,所以需要重新配置kernel打开这个功能,还需要针对android编译出守护进程和kernel层的模块。
对于kernel,运行make kernelconfig(高通平台),或者在kernel源码目录运行make menuconfig(FSL平台),打开以下选项:
General Setup -> Profiling Support
Kernel Features -> High Resolution Timer Support
Kernel Hacking -> Tracers -> Kernel Function Tracer
重新编译出kernel和boot.img烧录到TARGET。
在eclipse中点help -> ARM Extras,里面有kernel层模块(gator/driver-src)和daemon的源码(gator/daemon-src)。
将driver-src目录复制到kernel代码树里,运行make -C 'kernel_dir' M='pwd' ARCH=arm CROSS_COMPILE=‘your compiler’ modules编译出gator.ko
将daemon-src目录复制到android代码树里上层make能找到的地方,例如直接放到externel里,到daemon-src里运行mm编译出gatord(文档的示例使用NDK来 编译,对于没有完整android代码的情况下可以这样做,但是有android源码的话使用本文的方法貌似简单些)
HOWTO PROFILE:
gator.ko和gatord用adb push到TARGET,insmod gator.ko然后gatord &
通过USB连接TARGET和HOST,在HOST端运行adb forward tcp:8080 tcp:8080
运行eclipse,选 Window > Show View > Other > ARM Streamline > ARM Streamline Data打开streamline子窗口,在ip address中输入localhost或直接127.0.0.1,点start capture(第一个按钮)开始采样,然后就可以在TARGET端进行需要调试的操作(运行应用之类的),点stop手动停止(可以设定采集一段时间后自动停止,详见文档说明)。
采集完成后,ARM streamline自动分析数据并生成图示:
关键的event和每个activity都有跟踪到,可惜CE版的比标准版阉割了不少。以上步骤在XP 32bit和WIN7 64bit上测试通过。how to debug的功能暂时还没测试过,对于使用NDK的app开发应该作用挺大。