了解 Systrace
注意:如果您以前从未使用过 systrace,我们强烈建议您先阅读 systrace 概览 ,然后再继续。
systrace 是分析 Android 设备性能的主要工具。不过,它实际上是其他工具的封装容器:它是 atrace 的主机端封装容器,是
用于控制用户空间跟踪和设置 ftrace 的设备端可执行文件,也是 Linux 内核中的主要跟踪机制。systrace 使用 atrace 来启用
跟踪,然后读取 ftrace 缓冲区并将其全部封装到一个独立的 HTML 查看器中(虽然较新的内核支持 Linux 增强型柏克莱封包
过滤器 (eBPF),但以下文档内容仅适用于 3.18 内核(无 eFPF),因为 Pixel/Pixel XL 上使用的是 3.18 内核)。
systrace 归 Google Android 和 Google Chrome 团队所有,且是作为 Catapult 项目的一部分在开源环境中开发的。除
systrace 之外,Catapult 还包括其他有用的实用程序。例如,除了可由 systrace 或 atrace 直接启用的功能之外,ftrace 还提
供了其他功能,并且包含一些对调试性能问题至关重要的高级功能(这些功能需要 root 访问权限,通常也需要新的内核)。
运行 systrace
要在 Pixel/Pixel XL 上调试抖动问题,请从以下命令开始:
./systrace.py sched freq idle am wm gfx view sync binder_driver irq workq input -b 96000
当将该命令用于 GPU 活动和显示管道活动所需的附加跟踪点时,您将能够跟踪从用户输入直到屏幕上显示的帧。将缓冲区大
小设为较大的值,以避免丢失事件(通常表现为一些 CPU 在跟踪记录中的某个点之后不包含任何事件)。
在使用 systrace 的过程中,请记住,每个事件都是由 CPU 上的活动触发的。
注意:硬件中断不受 CPU 控制,且会在 ftrace 中触发事件,不过,向跟踪日志的实际提交操作是由中断处理程序完成的,如果您的中断已到达,
而(例如)某个其他不良驱动程序已停用中断,则提交可能会延迟。因此,CPU 是关键要素。
因为 systrace 构建于 ftrace 之上,而 ftrace 在 CPU 上运行,所以 CPU 上的活动必须写入用于记录硬件变化情况的 ftrace 缓
冲区。这意味着,如果您想知道显示栅栏更改状态的原因,则可以查看在状态转换的确切点 CPU 上运行了哪些活动(在 CPU
上运行的某些活动在日志中触发了这种更改)。此概念是使用 systrace 分析性能的基础。
示例:工作帧
该示例介绍了正常界面管道的 systrace。要按照示例操作,请下载跟踪记录的 ZIP 文件(包括本节中提及的其他跟踪记录),
将文件解压缩,然后在浏览器中打开 systrace_tutorial.html 文件。注意,该 systrace 是一个大型文件;除非您在日常工作中
使用 systrace,否则这个跟踪记录可能更完整,其中包含的信息比您以前在单个跟踪记录中看到的要多很多。
对于一致的周期性工作负载(例如 TouchLatency),界面管道包含以下内容:
1. SurfaceFlinger 中的 EventThread 会唤醒应用的界面线程,表明该渲染新帧了。
2. 应用使用 CPU 和 GPU 资源在界面线程、RenderThread 和 hwuiTask 中渲染帧。这是界面占用的大部分容量。
评论10