前言
一个类似于Android的OS,只使用了BT机能的状态下,CPU的占有率超过20%,于是我们想看看是什么原因。本篇文章注意介绍了使用Dstream StreamLine来进行性能分析的过程和实例以及可能需要注意的地方。
StreamLine准备
使用StreamLine来分析性能主要包含以下几个过程
- 配置内核使得内核可以产生一些性能相关的数据,以及一些设施用以支持gator,例如:高精度的timer(hr_timer)
- 安装gator模块,用于系统性能数据(scheduler,event,Process)的采集以及对这些数据进行注释(annotate),例如对CP15中的PMNC(Performance Monitor Control Register)寄存器的读取与配置,对调度器数据的采集
- gatord从gator内核模块中获取性能数据,并通过网络(不一定是网线)传递给Host PC中的DS-5
- DS-5中的streamline对应软件模块对性能数据进行分析,以及与模块代码做出对应
对于前面的第一、第二步骤可以参考ARM官方的说明文档:ARM Streamline
编译与环境准备时候的注意点
如果使用的是adb 来让gatord传输数据到Host PC,那么需要将其中gator kernel module中的宏去掉(注释掉):
If you are building for an Android target, you must remove the comment hashtag from the following line in the makefile of the gator module to enable kernel stack unwinding
# EXTRA_CFLAGS += -DGATOR_KERNEL_STACK_UNWINDING
StreamLine数据采集与配置
gatord 端口号被占用问题
默认情况下,gatord使用的端口号为8080,但是在运行了许多应用程序的OS中,有可能这个端口号已经被占用了,如果被占用了,那么gatord在运行的时候,会出现如下的log提示,询问我们是否已经运行了一个gatord实例了:
Is an instance already running?
此时,我们可以使用ps 来查看一下是否已经存在运行的gatord,如果没有,那么可以看看这个端口号被谁使用了: