Android Tech And Perf

Systrace 基础知识 -- Systrace 简介

字数统计: 1.8k阅读时长: 7 min
2019/05/28 Share

本文是 Systrace 系列文章的第一篇,主要是对 Systrace 进行简单介绍,介绍其简单使用方法;如何去看 Systrace;如何结合其他工具对 Systrace 中的现象进行分析。

本系列的目的是通过 Systrace 这个工具,从另外一个角度来看待 Android 的运行,从另外一个角度来对 Framework 进行学习。也许你看了很多讲 Framework 的文章,但是总是记不住代码,或者不清楚其运行的流程,也许从 Systrace 这个图形化的角度,你可以理解的更深入一些。

系列文章目录

  1. Systrace 简介
  2. Systrace 基础知识 - Systrace 预备知识
  3. Systrace 基础知识 - Why 60 fps ?
  4. Systrace 基础知识 - SystemServer 解读
  5. Systrace 基础知识 - SurfaceFlinger 解读
  6. Systrace 基础知识 - Input 解读
  7. Systrace 基础知识 - Vsync 解读
  8. Systrace 基础知识 - MainThread 和 RenderThread 解读
  9. Systrace 基础知识 - Triple Buffer 解读
  10. Systrace 基础知识 - CPU Info 解读
  11. Systrace 实战 - 分析应用冷启动时间问题
  12. Systrace 实战 - 分析应用热启动时间问题
  13. Systrace 实战 - 分析列表卡顿问题
  14. Systrace 实战 - 分析窗口动画卡顿问题
  15. Systrace 实战 - 分析进程乱跑导致的性能问题
  16. Systrace 实战 - 分析 IO 导致的性能问题
  17. Systrace 实战 - 分析 Memory 导致的性能问题
  18. Systrace 实战 - Systrace 与 MethodTrace 结合使用
  19. Systrace 实战 - 分析硬件加速问题

正文

Systrace 是 Android4.1 中新增的性能数据采样和分析工具。它可帮助开发者收集 Android 关键子系统(如 SurfaceFlinger/SystemServer/Kernel/Input/Display 等 Framework 部分关键模块、服务,View系统等)的运行信息,从而帮助开发者更直观的分析系统瓶颈,改进性能。

Systrace的功能包括跟踪系统的I/O操作、内核工作队列、CPU负载以及Android各个子系统的运行状况等。在Android平台中,它主要由3部分组成:

  • 内核部分:Systrace利用了Linux Kernel中的ftrace功能。所以,如果要使用Systrace的话,必须开启kernel中和ftrace相关的模块。
  • 数据采集部分:Android定义了一个Trace类。应用程序可利用该类把统计信息输出给ftrace。同时,Android还有一个atrace程序,它可以从ftrace中读取统计信息然后交给数据分析工具来处理。
  • 数据分析工具:Android提供一个systrace.py(python脚本文件,位于Android SDK目录/tools/systrace中,其内部将调用atrace程序)用来配置数据采集的方式(如采集数据的标签、输出文件名等)和收集ftrace统计数据并生成一个结果网页文件供用户查看。 从本质上说,Systrace是对Linux Kernel中ftrace的封装。应用进程需要利用Android提供的Trace类来使用Systrace.
    关于Systrace的官方介绍和使用可以看这里:Systrace

Systrace简单使用

使用 Systrace 前,要先了解一下 Systrace 在各个平台上的使用方法,鉴于大家使用Eclipse 和 Android Studio 的居多,所以直接摘抄官网关于这个的使用方法,不过不管是什么工具,流程是一样的:

  • 手机准备好你要进行抓取的界面
  • 点击开始抓取(命令行的话就是开始执行命令)
  • 手机上开始操作(不要太长时间)
  • 设定好的时间到了之后,会将生成 Trace.html 文件,使用 Chrome 将这个文件打开进行分析

一般抓到的 Systrace 文件如下

Command Line Usage

命令行形式比较灵活,速度也比较快,一次性配置好之后,以后再使用的时候就会很快就出结果(强烈推荐
Systrace 工具在 Android-SDK 目录下的 platform-tools 里面,下面是简单的使用方法

1
2
$ cd android-sdk/platform-tools/systrace
$ python systrace.py

可以在 Bash 中配置好对应的路径和 Alias,使用起来还是很快速的。另外 User 版本所抓的 Systrce 文件所包含的信息,是比 eng 版本或者 Userdebug 版本要少的,建议使用 Userdebug 版本的机器来进行 debug,这样既保证了性能,又能有比较详细的输出结果.

抓取结束后,会生成对应的 Trace.html 文件,注意这个文件只能被 Chrome 打开。关于如何分析 Trace 文件,我们下面的章节会讲。不论使用那种工具,在抓取之前都可以选择参数,下面说一下这些参数的意思:

  • -h, –help Show the help message.(帮助)
  • -o Write the HTML trace report to the specified file.(即输出文件名,)
  • -t N, –time=N Trace activity for N seconds. The default value is 5 seconds. (Trace抓取的时间,一般是 : -t 8)
  • -b N, –buf-size=N Use a trace buffer size of N kilobytes. This option lets you limit the total size of the data collected during a trace.
  • -k
  • —ktrace= Trace the activity of specific kernel functions, specified in a comma-separated list.
  • -l, –list-categories List the available tracing category tags. The available tags are(下面的参数不用翻译了估计大家也看得懂,贴官方的解释也会比较权威,后面分析的时候我们会看到这些参数的作业的):

    • gfx - Graphics
    • input - Input
    • view - View
    • webview - WebView
    • wm - Window Manager
    • am - Activity Manager
    • audio - Audio
    • video - Video
    • camera - Camera
    • hal - Hardware Modules
    • res - Resource Loading
    • dalvik - Dalvik VM
    • rs - RenderScript
    • sched - CPU Scheduling
    • freq - CPU Frequency
    • membus - Memory Bus Utilization
    • idle - CPU Idle
    • disk - Disk input and output
    • load - CPU Load
    • sync - Synchronization Manager
    • workq - Kernel Workqueues Note: Some trace categories are not supported on all devices. Tip: If you want to see the names of tasks in the trace output, you must include the sched category in your command parameters.
  • -a

  • —app= Enable tracing for applications, specified as a comma-separated list of package names. The apps must contain tracing instrumentation calls from the Trace class. For more information, see Analyzing Display and Performance.
  • —link-assets Link to the original CSS or JavaScript resources instead of embedding them in the HTML trace report.
  • —from-file= Create the interactive Systrace report from a file, instead of running a live trace.
  • —asset-dir= Specify a directory for the trace report assets. This option is useful for maintaining a single set of assets for multiple Systrace reports.
  • -e
  • —serial= Conduct the trace on a specific connected device, identified by its device serial number.
    上面的参数虽然比较多,但使用工具的时候不需考虑这么多,在对应的项目前打钩即可,命令行的时候才会去手动加参数:

我们一般会把这个命令配置成Alias,配置如下:

1
2
alias st-start='python /sdk/platform-tools/systrace/systrace.py'  
alias st-start-gfx-trace = ‘st-start -t 8 gfx input view sched freq wm am hwui workq res dalvik sync disk load perf hal rs idle mmc’

这样在使用的时候,可以直接敲 st-start 即可,当然为了区分和保持各个文件,还需要加上 -o xxx.html .上面的命令和参数不必一次就理解,只需要记住如何简单使用即可,在分析的过程中,这些东西都会慢慢熟悉的。

一般来说比较常用的是

  1. -o : 指示输出文件的路径和名字
  2. -h : 抓取时间
  3. -b : 指定 buffer 大小
  4. -a : 指定 app 包名

关于我

小厂系统研发工程师 , 更多信息可以点击 关于我 , 非常希望和大家一起交流 , 共同进步 .

一个人可以走的更快 , 一群人可以走的更远

CATALOG
  1. 1. 系列文章目录
  2. 2. 正文
    1. 2.1. Systrace简单使用
      1. 2.1.1. Command Line Usage
  3. 3. 关于我