[linux小水滴]systrace工具使用简介

1 简介

在短时间内记录设备活动被称为systrace。这里所说的systrace是安卓系统中的一个性能数据采集和分析工具。
内核部分:linux kernel中开启ftrace相关模块。如trace_block_getrq()。
数据采集:Android系统(即手机)利用Trace类把统计信息输出给ftrace。
数据分析:执行Android SDK目录/platform-tools/systrace目录下的systrace.py,配置systrace,收集ftrace统计信息,生成文件。

默认生成trace.html,该文件可生成一个系统报告,在chrome://tracing中load这个文件可以看到一定时间内的运行状态信息,用户可根据这些信息对设备做性能优化。(其实和kernel中用ftrace抓的trace log类似,关于ftrace之后会另起一篇博文来介绍)

systrace工具下载地址:
https://dl.google.com/android/repository/platform-tools-latest-linux.zip
下载压缩包后解压缩–>platform-tools

2 用法

这里所说的抓取systrace的方法是用adb+systrace.py来完成的。还有其他的一些抓取方法,如:Android device minitor工具…这里就先不介绍了。

前提条件
1.系统已安装python
2.系统已安装adb
3.安卓手机开启了开发者模式+允许USB debug

常见用法示例:
转到/platform-tools/systrace路径下,用如下方式运行systrace.py脚本。

./systrace.py -b 32768 -t 15 gfx input view sched freq -o ./1.html

**释义:**开辟约32M的buffer来存放抓取到的15s以内的运行信息,这些信息包含gfx、input、view、sched、freq等模块相关的信息,生成的文件名为 1.html 。

当然还可以获取其他一些模块信息,如下所示:(加注释的是几个比较重要的categories)

didi@ubuntu: ~/Downloads/platform-tools/systrace$ ./systrace.py -l
         gfx - Graphics  #Graphic系统的相关信息,包括SurfaceFlinger,VSYNC消息,Texture,RenderThread等;
       input - Input
        view - View System  #View绘制系统的相关信息,比如onMeasure,onLayout等
     webview - WebView
          wm - Window Manager
          am - Activity Manager  #ActivityManager调用的相关信息;用来分析Activity的启动过程比较有效
          sm - Sync Manager
       audio - Audio
       video - Video
      camera - Camera
         hal - Hardware Modules
         res - Resource Loading
      dalvik - Dalvik VM
          rs - RenderScript
      bionic - Bionic C Library
       power - Power Management
          pm - Package Manager
          ss - System Server
    database - Database
     network - Network
         adb - ADB
    vibrator - Vibrator
        aidl - AIDL calls
       nnapi - NNAPI
         rro - Runtime Resource Overlay
         pdx - PDX services
       sched - CPU Scheduling	#CPU调度信息。包括线程运行状态、被调度的情况。
        freq - CPU Frequency   #CPU各个core的频率变化
        idle - CPU Idle  #CPU idle C-state
        disk - Disk I/O
        sync - Synchronization
  memreclaim - Kernel Memory Reclaim
  binder_driver - Binder Kernel driver  #Binder驱动的相关信息
  binder_lock - Binder global lock trace
   pagecache - Page cache

NOTE: more categories may be available with adb root

更多systrace的使用方法可以通过./systrace.py -h来获取。

3 实际操作

didi@ubuntu:~/Downloads/platform-tools/systrace$ ./systrace.py -b 32768 -t 15 gfx input view sched freq -o ./test.html
Starting tracing (15 seconds)
Tracing completed. Collecting output...
Outputting Systrace results...
Tracing complete, writing results

Wrote trace HTML file: file:///home/user.name/Downloads/platform-tools/systrace/test.html

didi@ubuntu:~/Downloads/platform-tools/systrace$ ls #这里可以看到systrace路径下生成了test.html文件
catapult  NOTICE  systrace.py  test.html  UPSTREAM_REVISION

命令输入后,将自动开始计时15s,最后在同一路径下生成所设置名字的文件。
下面在chrome://tracing中load test,如下图所示
在这里插入图片描述
图中左侧一列可以看出该手机是8核的CPU,每个CPU从上到下有两栏信息:CPUx的进程、CPU的时钟频率分别对应右侧横向的图谱。点击图谱的一个色块,可以看到最下边信息框的内容。其中包含了该进程(或线程)的具体信息,比如:进程名,pid,tid,优先级,进程被调度时的状态等等。

4 用systrace分析问题思路

4.1 功耗问题分析

一般看systrace中间段的情况。
①观察task、idle分析负载情况。负载太重的CPU值得注意。
②观察freq分析变频情况。变频严重时值得注意。在一些功耗问题方面可以通过观察变频情况来确认是由哪个task导致的耗电过高。
③截取一定时间段的task明细,观察wall duration的情况。duration过大的task值得注意。
另外,注意多抓几组数据,对比观察。

5 参考链接

[1]C-state简介
[2]在命令行上捕获系统跟踪记录
[3]理解和使用systrace

以上,与君共勉。
2021.2.7

补充,遇到的问题:
因为换了系统,重装了systrace,在抓systrace的时候出现了下面问题:

Traceback (most recent call last):
  File "./systrace.py", line 48, in <module>
    from systrace import run_systrace
  File "/home/di.di/Downloads/install_pacs/platform-tools/systrace/catapult/systrace/systrace/run_systrace.py", line 43, in <module>
    from systrace import systrace_runner
  File "/home/di.di/Downloads/install_pacs/platform-tools/systrace/catapult/systrace/systrace/systrace_runner.py", line 11, in <module>
    from systrace import output_generator
  File "/home/di.di/Downloads/install_pacs/platform-tools/systrace/catapult/systrace/systrace/output_generator.py", line 15, in <module>
    from tracing.trace_data import trace_data
  File "/home/di.di/Downloads/install_pacs/platform-tools/systrace/catapult/tracing/tracing/trace_data/trace_data.py", line 19, in <module>
    import six
ImportError: No module named six

实际上和systrace安装没有关系,还是python惹的祸。可以看到问题运行systrace python脚本的时候缺少一个名叫six的库。安装即可。安装命令如下:

sudo apt install python-six

2021.3.16

补充:用systrace脚本将atrace文件转换成systrace文件:

didi@ubuntu:/Download/platform-tools/systrace$ ./systrace.py --from-file test.atrace

执行上面语句后就可以看到test.trace被转换成test.html文件。
2021.5.25

补充:用perfetto抓取trace信息1
(1)在本地下载record_android_trace工具,并添加执行权限

curl -O https://raw.githubusercontent.com/google/perfetto/master/tools/record_android_trace
chmod u+x record_android_trace

(2)保证usb链接正常,adb可用。执行下面命令来抓取trace。命令执行完后会自动打开chrome浏览器的perfetto页面。

# See ./record_android_trace --help for more
./record_android_trace -o trace_file.perfetto-trace -t 10s -b 32mb \
sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory

另外,还可在网页中将pefetto trace转化为systrace。

2022.6.21

【声明】本博文为个人学习笔记,仅供参考。转发请注明出处。如发现有误,还请不吝赐教,谢谢!


  1. recording-a-trace-through-the-cmdline ↩︎

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值