Systrace 的原理、流程及定制
内核工匠 2022-09-29



一、原理和基本流程



Systrace是android性能调试优化的常用工具,它可以收集进程的活动信息,如界面布局、UI渲染、binder通信等;也可以收集内核信息,如cpu调度、IO活动、中断等;这些信息会统一时间轴,在Chrome浏览器中显示出来,非常方便工程师性能调试、优化卡顿等工作。


简易的流程图如下,systrace是基于ftrace实现的,而ftrace 是 Linux 内核中的调试跟踪机制。


  1. 首先systrace指定抓取trace的类别等参数,然后触发手机端的/system/bin/atrace 开启对应文件节点的信息记录,接着atrace会读取 ftrace 的缓存,生成只包含ftrace信息的atrace_raw。


  2. Systrace会进一步收集系统的ps、task等信息,这些信息是为了协助解析atrace_raw中的ftrace信息,比如ps信息可以得到进程的名称,而不是难记的pid号。处理后的ftrace信息将和systrace目录下的prefix.html、systrace_trace_viewer.html、suffix.html整合为一体,成为单个的html文件。


  3. 当浏览systrace信息时,Chrome浏览器借助systrace解析器(通过chrome://tracing访问),解析上面生成的trace.html文件,把其中原始的ftrace信息分门别类,再按照时间轴聚合排列,绘制出不同色块,简洁可观的显示在html页面上。



二、具体实现



Systrace是怎么把系统多种多样的信息都整合进ftrace中的呢?请看下图:



Systrace抓取的trace数据,总体上可以分为两类,一类是Java和Native在用户层发生的函数调用,一类是内核态的事件信息。


用户层的函数调用,其实最终事件记录都是同一个文件节点/sys/kernel/debug/tracing/trace_marker。


此节点允许用户层写入字符串,ftrace会记录该写入操作时的时间戳,当用户在上层调用不同函数时,写入不同的调用信息,比如函数进入和退出分别写入,那么ftrace就可以记录跟踪函数的运行时间。


atrace在处理用户层的多种trace类别时,仅仅是激活不同的TAG,如用户选择了Input类别,则激活ATRACE_TAG_INPUT;选中Graphics则激活ATRACE_TAG_GRAPHICS,记录调用的流程都是一样的,最终都是记录到trace_marker。


内核态的事件信息,则不是统一的,需要激活各自对应的事件节点,让ftrace记录下不同事件的tracepoint。例如激活进程调度信息记录,需要激活如下相关节点:


events/sched/sched_switch/enable

events/sched/sched_wakeup/enable


内核在运行时,根据节点的使能状态,会往ftrace缓冲中打点记录事件。


最终,上述两类事件记录都汇集到同一缓冲中,然后atrace工具会回读抓取,保存下来就是原始的systrace信息。


三、显示定制信息



Systrace的参数设置和使用方法,网络上内容已经不胜枚举,就不再累述。下面讲解一下较少阐述的显示定制信息功能。


一般情况下,默认的systrace各种trace类别已经涵盖了系统的各个方面,足够工程师分析调试了。但某些特定情况下,工程师需要增加自定义的trace类别,并同样集成到systrace中。比如工程师需要观察到内核各个run queue的队列深度,那么他应该怎么做呢?



1.新加定制的trace类别


既然原有的systrace trace不能满足,需要新增一项。可以去frameworks/native/cmds/atrace/atrace.cpp中增加一类category, 如




2.内核增加对应的tracepoint


Systrace是基于ftrace的,那么上面的类别需要在内核中增加对应节点。



在新建的sched_rq_running event中实现输出新增的trace类别的信息,通过上面的1、2两个步骤,在抓取systrace时选中新建类别kernel_runqueue, 则抓取的trace.html将包含sched_rq_running的信息。


假设新的信息如下:




3.显示出sched_rq_running的信息


如果sched_rq_running.html 在 chrome里面打开,我们并没能发现自定义的任何信息显示出来。这个是由于默认的chrome://tracing 解析器并不知道如何解析sched_rq_running的信息。


Systrace能够解析显示出进程调度的sched_wakeup、sched_switch等信息,那是因为chrome://tracing 解析器知道如何解析进程调度信息,如下面格式的内容。



但是并不知道如何解析自定义的sched_rq_running信息。


这时候,我们就需要寻根溯源了,我们先找到systrace的生母,谷歌开源项目https://chromium.googlesource.com/catapult。

 

正是catapult生成了systrace及其解析器的工具。在catapult中,谷歌采用javascript实现了一个跨平台的trace解析工具,我们可以参考tracing/tracing/extras/importer/linux_perf目录下的各种解析器,比如sched_parser.html是用于解析进程调度信息的,power_parser是用于解析cpu频率等信息的,学以致用生成自己定制的sched_rq_running_parser.html。


Catapult的各种解析器,可以理解为先按照trace的类型分类处理,然后加入各个时段的采样值。


如tracing/tracing/extras/importer/linux_perf/power_parser.html


实现了如何解析出cpu频率信息:

-0     (-----) [001] d.Hb   948.300084: cpu_frequency: state=1344000 cpu_id=2


1)power_parser.html注册了cpu_frequency信息由函数cpuFrequencyEvent处理



2) cpuFrequencyEvent分解cpu_frequency信息



3) 把cpu频率采样值加入Clock Frequency信息栏



在我们加入额外的sched_rq_running_parser.html解析器之后,需要使用tracing/tracing_build/generate_about_tracing_contents.py重新生成about_tracing.html和tracing.js(这里需要改名,使之和about_tracing.html中的script脚本名称相同)。


然后使用about_tracing.html作为新的systrace解析器,代替默认的chrome://tracing,这时再把sched_rq_running.html放进来解析,我们就终于可以看到自定义的systrace信息了。




参考文献


1、android源代码


2、catapult源代码

声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 对话周祖成教授 - 清华大学与西门子EDA的合作之旅


  • 相关技术文库
  • RF
  • 射频
  • 通信
  • 无线
  • 从入门到精进,完美设计

    图文教你如何做好配电箱内部配线

    47分钟前
  • 解锁网络性能:掌握Linux TCP/IP协议栈的秘密

    一、Linux内核与网络体系结构在我们了解整个linux系统的网络体系结构之前,我们需要对整个网络体系调用,初

    2小时前
  • 电路分析的秘密武器:揭秘高效方法

    对电路进行分析的方法很多,如叠加定理、支路分析法、网孔分析法、结点分析法、戴维南和诺顿定理等。

    2小时前
  • 学电子电路分析,这几种高效分析方法你得懂!

    对电路进行分析的方法很多,如叠加定理、支路分析法、网孔分析法、结点分析法、戴维南和诺顿定理等。

    03-13
  • 光纤收发器作用分类

    一、光纤收发器介绍 光纤收发器,是一种将短距离的双绞线电信号和长距离的光信号进行互换的以太网传输媒体转换单元,在很多地方也被称之为光电转换器(Fiber Converter)。产品一般应用在以太网电缆无法覆盖、必须使...

    02-22
  • 什么是冗余电源?

    电源有很多具体的类别,比如脉冲电源、隔离电源、非隔离电源、开关电源等等。为增进大家对电源的认识,本文将对冗余电源、UPS电源以及冗余电源和UPS电源的区别予以介绍。如果你对电源具有兴趣,不妨和小编一起来继...

    02-21
  • 什么是射频电缆?

    射频的应用十分广泛,随着射频的发展,射频周边也逐步发展起来,比如本文即将探讨的射频电缆。为增进大家对射频的认识,本文将对射频电缆、射频电缆的分类予以介绍。如果你对射频、射频电缆具有兴趣,不妨继续往下...

    02-21
  • 物联网射频通信

    射频表示可以辐射到空间的电磁频率,这是射频的基本作用。在超市,我们经常能看见射频的具体应用。为增进大家对射频的认识,本文将对射频通信予以介绍。如果你对射频具有兴趣,不妨和小编一起来继续认真往下阅读哦...

    02-21
  • 常说的射频是什么

    射频也就是我们常说的RF,在近几年的发展中,射频的应用范畴越来越广泛。为增进大家对射频的认识,本文将对射频以及射频的应用予以介绍。如果你对射频或是本文内容具有兴趣,不妨和小编一起来继续认真的往下阅读哦...

    02-21
  • 以太网链路层协议封装格式予以介绍

    以太网通信技术是非常重要的,我们对于以太网,应当具备充分的认识。其中,链路层是以太网中的一层架构。为增进大家对以太网的认识,本文将对以太网链路层协议封装格式予以介绍。如果你对以太网具有兴趣,不妨和小...

    02-21
下载排行榜
更多
评测报告
更多
广告