ARM DS-5(Development Studio 5)是ARM公司为应用程序开发人员、设置制造商和芯片供应商提供的软件开发套件。除了编译,链接工具之外,ARM还提供了一个非常酷的性能调试工具:Streamline。
由于Streamline可以监视ARM CPU和Mali GPU的负载,我们选择的设备端是MTK的mt6592芯片(8核Cortex-A7 CPU + Mali 450 GPU)。
Streamline 的客户端界面实际是一个Eclipse的插件,用户可以在Eclipse中下载这个插件(详见ARM教程),或者从ARM的官方网站直接下载整个DS-5包,其中包含了一个内置Streamline的Eclipse release。
为了方便起见,我们后面都使用DS-5自带的Eclipse。打开之后,如果没有注册过license,会自动激活社区版(CE:Community Edition)。社区版的功能会受到一些限制。好在ARM除了专业版之外,提供了30天的免费评估试用,激活评估试用版可以参考这个链接(备用链接请参考这里).
关于ARM DS5 Streamline的详细介绍也可以在ARM的官方文档中心上找到
在设备端,我们首先确保内核编译时以下开关都被打开,否则的话需要重新编译,push内核。
查看内核编译选项可以通过在kernel目录下运行make menuconfig.在MTK平台上更方便的方式是在kernel/out目录下直接查找(比如 grep -r CONFIG_TRACING ./ –exclude-dir source –exclude-dir include)。实际上,除了CONFIG_MALI400_PROFILING之外,在MTK6592的默认配置中,这些编译选项都是打开的。打开CONFIG_MALI400_PROFILING需要在《kernel/mediatek/platform/mt6592/kernel/drivers/gpu/mali/mali/Makefile》中将USING_PROFILING设为1.
修改完编译选项之后,可以重新编译内核,并将boot image烧到手机中
./makeMtk -t -o=TARGET_BUILD_VARIANT=eng jrdsh92_wet_tdd r k
编译(push)完kernel之后,我们可以来处理gator了。gator是streamline在设备端的代理,包括gator module(驱动模块)和gator daemon。在安装完DS-5的包之后,可以在“/usr/local/DS-5/arm/gator”下找到gator的源代码。driver-src是module的部分,daemon-src当然就是daemon的部分。
首先处理驱动的部分,将代码复制到kernel/drivers目录下,然后在<<kernel/drivers/Makefile>>将gator驱动的目录加入编译树。此外,为了gator驱动能够正常编译,我们还需要对gator的Makefile做些小修改。
首先,我们需要在Makefile中运行<<gator_event.sh>>时进入正确的目录,因此必须替换”cd”后的路径为gator驱动所在的绝对路径。
此外,如果我们使用MTK6592(MALI-450 GPU), 还需要在Makefile中打开相应的编译开关,将MALI驱动的路径加入include path(gator需要访问一些mali的头文件)。
GATOR_WITH_MALI_SUPPORT = MALI_4xx EXTRA_CFLAGS += -I/local/archermind/X_plus/mediatek/platform/mt6592/kernel/drivers/gpu/mali EXTRA_CFLAGS += -I/local/archermind/X_plus/mediatek/platform/mt6592/kernel/drivers/gpu/mali/mali
然后我们再次重新编译kernel,将生成的<> 通过adb push到手机以后, 在adb shell中运行“insmod /gator.ko”。运行成功之后,用户可以通过”lsmod”查看到已经被运行的gator模块。
处理完gator module,剩下的gator daemon就很简单了。将daemon-src复制到项目下的任意位置,然后调用mtk提供的单个模块编译命令
./makeMtk -t -o=TARGET_BUILD_MMITEST=true,TARGET_BUILD_VARIANT=eng jrdsh92_wet_tdd mm [PATH_TO_DARMON_SRC]
然后将编译生成的gatord通过adb push到手机上,用 adb shell 运行gatord。这样,手机端的工作就完成了。
接下来我们就可以连接PC端,开始profiling了。和很多其他调试工具一样,我们还需要为Streamline设置端口转发,gator默认的输出端口是8080,我们也可以在运行gatord的时候为它指定一个其他的端口。Streamline默认的监听端口是8080,但由于这个端口被tomcat server用掉了,所以我把它改为了9090. 这样,我们连上手机之后,端口转发的命令为
adb forward tcp:9090 tcp:8080
终于配置完了!小小地庆祝一下吧~~~
接下来我们打开DS-5的eclipse, 选择Window=>Show View=>Other=>DS-5=>Streamline Data。
配置完端口之后,点击红色小按钮开始profiling
点击红色停止键终止profiling.
除了提供精确的硬件统计信息(CPU,GPU的电压,频率,活动,精确到每个核;内存使用,磁盘访问等等)之外,Streamline还提供了gprof的功能,可以查看各个进程/线程的时间使用情况,以及函数调用占用时间的情况(加载一些带符号表的lib,可以帮助用户在后两项目中获取更详细的信息)。
进程/线程图表
函数图表