Systrace 工具

1、Systrace(System Trace)是 Android 4.1 之后,引入的分析设备性能的主要工具。它实际上是其它工具的封装容器(是atrace的主机端封装容器),是用于控制用户空间跟踪和设置ftrace的设备端的可执行文件,也是Linux内核中的主要跟踪机制。Systrace 归 Google Android 和 Google Chrome 团队所有,且是作为 Catapult 项目的一部分在开源环境中开发的。除 Systrace 之外,Catapult 还包括其他有用的实用程序。例如:除了可由 Systrace 或 atrace 直接启用的功能之外,ftrace 还提供了其它功能,并且包含一些对调试性能问题至关重要的高级功能(这些功能需要 root 访问权限,通常也需要新的内核)。

2、Systrace 利用 ftrace,在系统关键位置都有埋点,主要用于分析系统调用耗时问题,可以自定义trace标签来细化调用栈。
使用atrace来启用跟踪,然后读取ftrace缓冲区,并将其全部封装到一个独立的 HTML查看器中。

在 Android/Sdk/platform-tools/systrace 目录下,进入终端,执行:python systrace.py,连接设备,进行操作,一段时间后会自动生成一个 trace.xml 文件(即 HTML查看器),打开后进行查看。

3、软件界面介绍:
(1)CPU活动:
该区域表示每个CPU中的线程活动的条形图。这些条形会显示所有应用中的CPU活动。CPU活动部分可以展开,展开后可以查看每个CPU的时钟频率。
(2)系统事件:
该区域中的直方图会显示特定的系统级事件,例如:特定对象的纹理计数和大小。
(注:值得仔细检查的直方图是标记为 SurfaceView 的直方图。计数表示已传递到显示管道并等待显示在设备屏幕上的组合帧缓冲区的数量。由于大多数设备都会进行双重或三重缓冲,因此该计数几乎总为:0、1、2)
(3)显示帧:
该区域通常是报告中最顶部的部分,描绘了一条多色线条,后面是成堆的条形。这些形状表示已创建的特定线程的状态和帧堆栈。堆栈的每个层级代表对 beginSection()的调用,或您为应用或游戏定义的自定义跟踪事件的开头。
每个条形堆上方的多色线条表示特定线程,随时间变化的一组状态。线条各颜色含义如下:
<1> 绿色:正在运行
表示该线程正在完成与某个进程相关的工作或正在响应中断。
<2> 蓝色:可运行
表示该线程可以运行,但目前未进行调度。
<3> 白色:休眠
表示该线程没有可执行的任务,可能是因为线程在遇到斥锁定时,被阻止。
<4> 橙色:不可中断的休眠
表示该线程在遇到 I/O 操作时,被阻止或正在等待磁盘操作完成。
<5> 紫色:可中断的休眠
表示该线程在遇到另一项内核操作(通常是内存管理)时,被阻止。

4、在用假电调试功耗时,特别是做系统功耗优化时,往往需要将电流波形图和Systrace对照起来,了解某一时刻系统的运行状态和对应的电流情况,而Systrace显示的相对时间和波形图显示的本地时间对应起来比较困难,且随着Systrace的缩放,要频繁的去找对应电流波形图的位置,这个过程比较高频且繁琐,为此想到将他们集成到一起。好在Systrace的历史版本曾经支持过Power Monitor(电源控制器)的远古设备(使用UART口),Systrace对Power monitor数据的解析是现成的,而且Systrace对捕获数据有统一的框架,我只需要将获取电流数据和Systrace获取其它数据,整合到统一的框架当中就行,为此依葫芦画瓢做了一个monsoon agent,集成后的界面如下图:
Systrace 工具
注:Power一栏显示的是系统运行过程中的功率值,电压固定为4V。

[使用方法]:
<1> 进入patches文件夹,并双击patch.bat,这个patch是将 sampleEngine 的时间精度由 “秒” 改为 “毫秒” (首次使用需要做此操作)
<2> 连接假电,关闭 PowerTool 工具。
<3> 双击 systrace.bat 抓在线 systrace ,或双击 systrace-offline-max.bat 抓离线 systrace
<4> 抓取的 systrace 保存为格式 systrace-<设备名>-<TOP app名>.html

同时,在抓systrace过程中,将 Power Monitor 的数据保存到了 monsoonCaptured.csv 文件中,方便后续进行更精细化的分析或作图,如下所示:
Systrace 工具
在抓 systrace 结束时,会提取 ftrace 文件,并保存为格式 ftrace-<systrace名>.txt文件方便分析,如下所示:
Systrace 工具