一文解析Systrace 的原理、流程及定制

news2025/1/6 17:42:13

一、原理和基本流程

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信息。

资料直通车:Linux内核源码技术学习路线+视频教程内核源码

学习直通车:Linux内核源码内存调优文件系统进程管理设备驱动/网络协议栈

三、显示定制信息

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频率信息:

<idle>-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信息了。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/472352.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ROS仿真实战】Gazebo仿真平台介绍及安装方法(一)

文章目录 前言一、Gazebo简介二、Gazebo仿真平台的基本概念三、Gazebo仿真平台的安装方法四、总结 前言 Gazebo仿真平台是一个广泛应用于机器人研发、测试和教育等领域的开源软件。它可以模拟机器人的运动、感知和控制等行为&#xff0c;并提供了丰富的物理引擎、传感器模拟和…

PYQT5学习笔记05——QObject父子对象API以及案例

一、父子对象API 我们在这里简单演示一下父子对象API的具体用法以及代码实现&#xff0c;父子对象API有五个&#xff0c;分别是setParent、parent、children、findChild、findChildren&#xff0c;接下来对每一个API都具体演示一下。 1、setParent(parent)和parent() setParen…

国外导师对博士后申请简历的几点建议

正所谓“工欲善其事&#xff0c;必先利其器”&#xff0c;想要申请国外的博士后职位&#xff0c;就要准备好相应的申请文书材料。如果说Cover Letter是职位的窍门砖&#xff0c;那么申请者的简历就是争取职位的决定性筹码。 相信大家已经看过许多简历的模版了&#xff0c;但是…

c++自学笔记

本笔记为从菜鸟教程边学边记录的笔记---》C 教程 | 菜鸟教程 面向对象程序设计 封装&#xff08;Encapsulation&#xff09;&#xff1a;封装是将数据和方法组合在一起&#xff0c;对外部隐藏实现细节&#xff0c;只公开对外提供的接口。这样可以提高安全性、可靠性和灵活性。…

vsftpd.conf各参数含义

文章目录 初始vsftdp.conf翻译后需修改参数write_enableYES&#xff08;启用任何形式的FTP写入命令&#xff09;userlist_file/etc/vsftpd.user_list、userlist_enableYES、userlist_denyNOlocal_umask022&#xff08;放开权限&#xff09;chroot_local_userYES&#xff08;限定…

【容器文件系统】了解容器 overlay 文件系统和 /var/lib/docker/overlay2下目录的作用

转载自 浅析 Docker overlay2 文件结构 docker(5): 层 朱双印 目的 有这个问题困惑着我&#xff1a;容器删除 docker rm 后&#xff0c;docker cp 到容器内的文件&#xff0c;在 /var/lib/docker/overlay2 目录中是否还会存在 答案&#xff1a;容器删除后 docker rm 后&…

银河麒麟操作系统,安装Gitlab 基于docker

不废话。直接上干货 操作系统信息 ############## Kylin Linux Version ################# Release: Kylin Linux Advanced Server release V10 (Sword) Kernel: 4.19.90-24.4.v2101.ky10.aarch64 Build: Kylin Linux Advanced Server release V10 (SP2) /(Sword)-aarch64-…

【电商必学】 WhatsApp 全新攻略:什么是交互式消息模板

网购与WhatsApp等社交通讯平台有着密不可分的关系&#xff0c;为什么这么说呢&#xff1f;因为基本上所有的网购的平台都会提供查询、下单方式给客户&#xff0c;而WhatsApp是全世界使用率最高的通讯平台&#xff0c;所以大部分电子商户都会选择WhatsApp Business与电子商务连接…

「C/C++」C/C++静态链接库与动态链接库

博客主页&#xff1a;何曾参静谧的博客 文章专栏&#xff1a;「C/C」C/C学习 目录 相关术语案例环境&#xff1a;Win10VS2019一、链接库介绍二、静态链接库&#xff08;Static Library&#xff09;2.1、静态库优缺点2.2、静态库的创建2.2.1、创建静态库项目2.2.2、添加.h头文件…

实战案例分享 | 临近假期,项目突发各种问题…

五一的调休补班一下子把三个星期的作息成功打乱&#xff0c;大家在吐槽的同时也不忘给自己延长假期&#xff0c;平时加班攒下的假期都充分利用上了。但办公室的项目经理小李这两天总长吁短叹&#xff0c;感觉假期也要随时随地办公。一问才知原来是临近假期时&#xff0c;项目突…

ARL灯塔(无需VPS版)

标题随便写&#xff0c;能看到都是有缘人 搭建灯塔那么繁琐的步骤&#xff0c;远不如爆破一个灯塔是吧(狗头) 而且还可能买不起VPS的情况(例如我) 那不如写一个脚本去爆破灯塔的弱口令 整治网络安全 从你我做起 fofa语法&#xff1a; icon_hash"1708240621"…

零售新时代,零售行业数字化破局的新路径

深夜11点&#xff0c;门店店长小张还在加班&#xff0c;因为小张还需要盘点今日销售额、库存等信息&#xff0c;这些整理好的数据需要手动录入至总公司的系统中。 多门店的零售行业中&#xff0c;这是他们每天的工作日常&#xff1a;门店先通过excel做手工报表&#xff0c;再把…

ubuntu20.04之--CUDA的安装

文章目录 CUDA文件的下载CUDA文件下载地址 CUDA文件的安装安装结果 环境变量的配置CUDA安装结果验证 CUDA文件的下载 CUDA文件下载地址 https://developer.nvidia.com/cuda-toolkit-archive 选择合适自己电脑的版本进行下载&#xff0c;下载命令如下&#xff1a; $ wget htt…

【产品分析】如何利用咖喱外卖店铺数据进行营销分析Python

在外卖平台上经营咖喱店铺时&#xff0c;海量的订单数据和用户评价等信息将成为商家优化营销策略的重要依据。然而&#xff0c;面对大量的数据&#xff0c;如果没有合适的分析方法&#xff0c;这些数据就变得毫无意义。本文将介绍如何使用Python中常用的可视化工具和方法&#…

Stable Diffusion使用方法

SD的本地安装教程有很多我就不重复了&#xff0c;这里主要是记录我在使用SD Webui的过程中遇到的问题&#xff0c;总结的一些提升出图效率&#xff0c;出好图概率的经验。 先搞几张看看效果 二次元妹妹 高达 &#xff1f; Ok&#xff0c;以上只是一小部分成品 &#xff0c;属…

2023年易派客工业品展圆满落幕 期待与您再次相遇

党的二十大指出&#xff0c;建设现代化产业体系。坚持把发展经济的着力点放在实体经济上&#xff0c;推进新型工业化&#xff0c;加快建设制造强国、质量强国、航天强国、交通强国、网络强国、数字中国。 中国石化深入学习贯彻党的二十大精神&#xff0c;以打造世界领先洁净能源…

【严重】Strapi <4.5.6 远程代码执行漏洞(POC)(CVE-2023-22621)

漏洞描述 Strapi是Node.js开发的开源内容管理系统&#xff0c;Users-Permission 插件的电子邮件模板系统用于管理与用户权限相关的电子邮件通知(默认启用)。 Strapi 4.5.6之前版本中&#xff0c;Users-Permission 插件的电子邮件模板系统存在 SSTI&#xff08;服务器端模板注…

Linux必会100个命令(五十九)journalctl

不带参数&#xff0c;将输出所有的日志。 使用-r参数&#xff0c;输出为反序 使用-f查看最新的日志 使用-n 输出指定行数 使用--since和--until输出一段时间内的日志 查看昨天的日志&#xff1a; journalctl --since yesterday 查看10点以后2小时的日志&#xff1a; journal…

票务将引领生活方式

随着五一假期临近&#xff0c;很多人已经开始筹划假期出行计划&#xff0c;门票作为出行中最重要的一环&#xff0c;也成为了大家关注的重点。因为门票不仅能看出景区的人气&#xff0c;也能体现出景区的特色。 虽然现在很多景区都有数字化票务系统&#xff0c;但大多只能实现…

制药专业转行软件测试,带我的师傅在这干了两年半,最终还是跑路了......

故事的开始 最近这几天有点忧伤&#xff0c;因为带我的师傅要跑路了&#xff0c;嗯&#xff0c;应该说已经跑路了&#xff0c;他是制药专业的&#xff0c;已经在这个公司干了两年半了。其实今年3月份的时候他就跟我说他要跑路了&#xff0c;然后我说&#xff0c;要不你先把五一…