Android系统-性能评估-2-了解systrace

用systrace方式抓取DDR频率、GPU频率、free memory、FPSGO和sched等信息 阅读详情

systrace是一个分析Android性能问题的基础工具,但其本质上是其他某些工具的封装,包括:在host侧的封装atrace,在device端的可执行文件(用于控制用户空间的tracing和配置ftrace,即Linux内核中的主要跟踪机制)。Systrace使用atrace来enable tracing,然后读取ftrace的buffer,并且把它重新转换成HTML格式。(虽然较新的内核支持 Linux Enhanced Berkeley Packet Fliter (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 活动和显示管道活动所需的跟踪点时,这将使你能够从用户input一直追踪到屏幕上显示的帧。将缓冲区大小设为较大的值,以避免丢失事件(通常表现为一些 CPU 在跟踪记录中的某个点之后不包含任何事件)。

在使用 systrace 的过程中,请记住,每个事件都是由 CPU 上的活动触发的。
注意:硬件中断不受CPU控制也不会在ftrace中触发事件,实际提交到跟踪日志是由中断处理程序完成的,但一些损坏的驱动会造成中断的延迟,因此最关键点因素还是CPU本身。
因为 systrace 构建于 ftrace 之上,而 ftrace 在 CPU 上运行,所以 CPU 上的活动必须写入用于记录硬件变化情况的 ftrace 缓冲区。这意味着,如果您想知道display fence更改状态的原因,则可以查看在状态转换的确切点 CPU 上运行了哪些活动(在 CPU 上运行的某些活动在日志中触发了这种更改)。此概念是使用 systrace 分析性能的基础。

示例:工作帧

该示例介绍了正常UI管道的 systrace。要按照示例操作,请下载跟踪记录的 ZIP 文件(包括本节中提及的其他跟踪记录),将文件解压缩,然后在浏览器中打开 systrace_tutorial.html 文件。注意,该 systrace 是一个大型文件;除非您在日常工作中使用 systrace,否则这个跟踪记录应该是相对更完整的,其中包含的信息比你以前在单个跟踪记录中看到的要多很多。

对于持续的周期性工作负载(例如 TouchLatency),UI管道包含以下内容:

  1. SurfaceFlinger 中的 EventThread 会唤醒应用的UI thread,表明该渲染新帧了。
  2. 应用使用 CPU 和 GPU 资源在UI thread、RenderThread 和 hwuiTask 中渲染帧。这是界面占用的大部分容量。
  3. 应用通过 Binder 将渲染的帧发送到 SurfaceFlinger 并进入休眠状态。
  4. SurfaceFlinger 中的第二个 EventThread 唤醒 SurfaceFlinger,以触发composition和display输出。如果SurfaceFlinger 确定没有任何任务需要执行,将返回休眠状态。
  5. SurfaceFlinger 通过 HWC/HWC2 或 GL 处理composition。HWC/HWC2 composition的速度更快且能耗更低,但存在限制,具体取决于 SOC。这个步骤通常需要约 4-6 毫秒,但是可以与第 2 步同步进行,因为 Android 应用始终会进行三重缓冲(虽然应用始终会进行三重缓冲,但 SurfaceFlinger 中可能只有一个待处理帧在等待,这样它就看起来与双重缓冲一样)。
  6. SurfaceFlinger 将通过display驱动程序将最终内容发派到显示部分,然后返回休眠状态,等待 EventThread 唤醒。

下面我们详细介绍一下从 15409 毫秒开始的帧:
这里写图片描述
**图 1. ** 正常UI管道(EventThread 正在运行)。 对应阶段1

图 1 显示了一个由多个正常帧围绕的正常帧,因此对于理解界面管道的工作原理来说,它是一个很好的切入点。TouchLatency 的界面线程所在行在不同的时间显示为不同的颜色。柱形表示线程的不同状态:

  • 灰色:正在休眠。 Sleeping

  • 蓝色:可运行(它可以运行,但是调度程序尚未选择让它运行)。Runnable

  • 绿色:正在运行(调度程序认为它正在运行)。 Running

    注意:中断处理程序并未在正常的单个 CPU 时间轴中显示,因此您有可能实际上是在线程运行时的某个阶段运行中断处理程序或 softirq。请检查跟踪记录的中断请求 (irq) 部分(在进程 0 下),以确认中断(而非标准线程)正在运行。

  • 红色:不可中断休眠(通常在内核中处于休眠锁定状态)。可以指示 I/O 负载,在调试性能问题时非常有用。Uninterruptiable sleep

  • 橙色:由于 I/O 负载而处于不可中断的睡眠状态。Uninterruptiable sleep

要查看是什么唤醒的它,请点击蓝色部分:要查看不可中断休眠的原因(可从 sched_blocked_reason 跟踪点获取),请选择红色的不可中断休眠图块。

当 EventThread 运行时,TouchLatency 的界面线程会变为可运行。要查看是什么唤醒的它,请点击蓝色部分:
这里写图片描述
**图 2. ** TouchLatency 的UI thread。对应阶段1

图 2 显示了 TouchLatency 的界面线程被与 EventThread 对应的 tid 6843 唤醒。UI thread 被唤醒:

这里写图片描述
**图 3. ** UI thread被唤醒、渲染一个帧,并将其加入队列以供 SurfaceFlinger 使用。对应阶段2

如果跟踪记录中的 binder_driver 标记已启用,则您可以选择一个 Binder 事务,并查看该事务涉及的所有进程的相关信息:

这里写图片描述

**图 4. ** Binder 事务。对应阶段3
图 4 显示在 15423.65 毫秒,SurfaceFlinger 中的 Binder:6832_1 由于 tid 9579(即 TouchLatency 的 RenderThread)变为可运行。此外,您还可以在 Binder 事务的两侧看到 queueBuffer。

在 SurfaceFlinger 端的 queueBuffer 期间,TouchLatency 中待处理帧的数量从 1 变为 2:

这里写图片描述
**图 5. **待处理帧从 1 个变为 2 个。对应阶段3
图 5 表示三重缓冲,其中两个帧已完成渲染,应用将很快开始渲染第三个帧。这是因为一些帧已经丢弃,所以应用保留两个待处理的帧而不是一个,以避免以后再丢弃帧。

稍后,SurfaceFlinger 的主线程被第二个 EventThread 唤醒,以便它可以将先前的待处理帧输出到显示部分:
这里写图片描述
**图 6. ** SurfaceFlinger 的主线程被第二个 EventThread 唤醒。对应阶段4

SurfaceFlinger 首先锁定较早的待处理缓冲区,而这将导致待处理缓冲区的数量从 2 减为 1:

这里写图片描述
**图 7. ** SurfaceFlinger 首先锁定较早的待处理缓冲区。对应阶段4

锁定缓冲区后,SurfaceFlinger 会设置构图并将最终帧提交给显示部分(其中某些区段作为 mdss 跟踪点的一部分启用,因此它们可能不在你 SOC 的相应位置上)。

这里写图片描述
**图 8. ** SurfaceFlinger 设置composition 并提交最终帧。对应阶段5

接下来,mdss_fb0 在 CPU 0 上被唤醒。mdss_fb0 是显示管道的内核线程,用于将渲染过的帧输出到显示部分。我们可以看到 mdss_fb0 位于跟踪记录中其自己所在行中的情形(向下滚动即可查看)。

这里写图片描述
图 9. mdss_fb0 在 CPU 0 上被唤醒。对应阶段6

mdss_fb0 被唤醒,短暂运行,进入不可中断休眠状态,然后再次被唤醒。

注意:从现在开始,跟踪记录将变得更为复杂,因为最后的工作会在 mdss_fb0、中断和工作队列函数之间划分。如果您需要该级别的详细信息,请参阅您 SOC 的驱动程序堆栈的确切特性(因为了解 Pixel XL 上发生的活动可能对您并无帮助)。

Android性能分析:Systrace工具使用 Systrace是一款基于命令行的性能分析工具,它能够收集和展示Android系统中的各种性能数据。通过Systrace,开发者可以查看CPU、GPU、内存、磁盘IO等关键性能指标,以便找出应用性能瓶颈。开发者可以根据需要,自定义Systrace的性能指标类别。这可以通过在命令行中添加相应的参数实现。本文详细介绍了Android性能分析工具Systrace的原理、使用方法、高级功能和与其他工具的对比。通过Systrace,开发者可以有效地定位应用性能瓶颈,提高应用质量和用户体验。 阅读详情

相关推荐

Android性能优化与Systrace工具实战指南

性能优化是Android开发中的核心课题,涉及UI渲染、内存管理和线程调度等关键技术。Systrace作为Android官方提供的系统级性能分析工具,能够可视化呈现应用与系统组件的交互细节,帮助开发者定位卡顿、过度绘制等典型性能问题。通过分析主线程阻塞、VSYNC信号间隔等关键指标,开发者可以快速识别性能瓶颈并实施优化。本文结合View触摸事件处理等实际开发场景,详细解析Systrace的命令行参数配置和报告分析方法,为移动应用流畅体验提供工程实践方案。

weixin_34203832的博客 324

Systrace的工作原理及例子解读

Systrace的工作原理及例子解读译文地址:https://source.android.com/devices/tech/debug/systrace如果图片显示有问题,请访问简书,地址http://www.jianshu.com/p/6f528e862d31systrace是一个分析android性能问题的基础工具,但本质上是其他某些工具的封装,包括:PC端的atrace,设备端的可执行文件(

一叶知秋的专栏 8820

保姆级教程:用Systrace和Traceview实战分析Android ANR与性能瓶颈(附源码定位)

本文提供了一份详细的Android性能分析教程,重点介绍如何使用Systrace和Traceview工具诊断ANR和性能瓶颈问题。通过实战案例和源码级分析,帮助开发者掌握从环境配置到问题定位的全流程,提升应用性能优化能力。特别针对Binder通信和Framework层问题提供了专业解决方案。

weixin_28726671的博客 364

Systrace 线程 CPU 运行状态分析技巧 - Sleep 和 Uninterruptible Sleep 篇

本文是 Systrace 线程 CPU 运行状态分析技巧系列的第三篇,本文主要讲了使用 Systrace 分析 CPU 状态时遇到的 Sleep 与 Uninterruptible Sleep 状态的原因排查方法与优化方法,这两个状态导致性能变差概率非常高,而且排查起来也比较费劲,网上也没有系统化的文档。本系列的目的是通过 Systrace 这个工具,从另外一个角度来看待...

Gracker的专栏 1万+

Android面试问题与参考答案——基于TCL安卓开发工程师职位要求

TCL安卓开发工程师面试指南摘要:本文基于TCL安卓开发工程师岗位要求,提供结构化面试问题及参考答案。重点考察性能调优能力,包括工具使用(systrace/simperf)、Framework知识(AMS/WMS)、Linux机制(LMK/Cgroup)及MTK平台经验。问题涵盖性能问题分析、优化方案实施及团队协作,帮助评估候选人的实战能力。参考答案结合Android开发标准实践,适用于面试准备与评估。

郑伟强dev的专栏 1064

Basilisk vs. STK:开源航天仿真工具在Windows上的实战体验与生态对比

本文对比了开源航天仿真工具Basilisk与商业软件STK在Windows平台上的实战体验与生态差异。从技术架构、安装配置、使用成本、功能覆盖、社区生态到适用场景,全面分析了二者的优劣势,为航天工程师和研究人员提供选型参考。Basilisk在性能和扩展性上表现突出,而STK在可视化与专业模块上更具优势。

weixin_30632089的博客 588

Android:通过systrace进行性能分析及使用-详细

Android:通过systrace进行性能分析 https://www.cnblogs.com/blogs-of-lxl/p/10926824.html 一、Systrace 简介   Systrace 允许您在系统级别(如SurfaceFlinger、WindowManagerService等Framework部分关键模块、服务、View系统等)收集和检查设备上运行的所有进程的计时信息。 它将来自Android内核的数据(例如CPU调度程序,磁盘活动和应用程序线程)组合起来,以生成HTML报告。

吉吉的博客 1万+

告别反复格式化!用Ventoy制作2025年终极启动盘,Windows/Linux/macOS一网打尽

本文详细介绍了如何使用Ventoy制作2025年终极多系统启动盘,彻底告别反复格式化U盘的烦恼。Ventoy通过创新的引导加载器架构,允许用户在一个U盘内同时存放并直接启动Windows、Linux、macOS等多种系统镜像和WePE等维护工具,实现真正的非破坏性管理和极高的U盘利用率。文章涵盖从安装配置、镜像库构建到安全启动设置等全流程实战指南。

weixin_29280219的博客 240

Perfetto分析Android系统

2. 创建perfetto.bat批处理文件,内容如下。1. 创建config.pbtx配置文件,内容如下。3. 执行批处理, 得到trace文件。, 将trace文件拖入。

攻城狮的物联网基地 729

Gitlab+Jenkins+Docker+Harbor+K8s+Rancher集群搭建CICD平台

本文以诺依项目为例详细记录了Kubernetes集群的部署过程以及配套DevOps环境的搭建。主要内容包括:1) 配置8个节点的软硬件环境;2) 基础环境准备(网络、防火墙、Docker等);3) 三节点Kubernetes集群部署;4) GitLab代码仓库安装;5) Harbor私有镜像仓库搭建;6) Jenkins持续集成工具配置;7) 基于若依项目的CI/CD实践;8) Rancher集群管理工具部署。

hickman2023的博客 1201

UG476 GT Transceivers文档翻译和自身理解

对UG476 Xilinx官方文档进行翻译的基础上加上自己的理解

weixin_45143788的博客 4594

Android开发性能优化与Systrace工具实战指南

性能优化是Android开发中的核心课题,系统级工具Systrace通过内核ftrace机制采集运行时数据,帮助开发者精准定位UI卡顿、功耗异常等性能瓶颈。在移动应用场景下,合理的性能优化可以显著提升用户体验和应用留存率。本文以Systrace工具为切入点,详解其工作原理和实战技巧,包括自定义Trace点植入、采集命令参数配置以及Alerts面板分析方法。同时结合View事件处理优化、Activity生命周期管理等高频开发场景,提供可落地的性能提升方案,助力开发者构建更流畅的Android应用。

weixin_33910385的博客 360

【硬件开发】振铃

如果是开关管的振铃,那么桥臂的SW处产生的振铃会窜入驱动电路,造成的结果就是驱动电路和上桥臂下桥臂之间的SW节点都会有振铃现象。如果是驱动电路的振铃,那么MCU的输出引脚还是正常的PWM,但是到了MOS管两侧就变成带有振铃的PWM波形了。开关振铃产生的原因是MOS管上面的寄生电感当开关管打开时为了保持电流不变感应出的电压会对电源和地产生冲击。开关管的驱动线上的寄生电容和寄生电感导致的振铃为驱动电路振铃。开关管上的寄生电容和寄生电感导致的振铃为开关节点振铃。、电感等元件的存在,导致电路中的电压和。

weixin_62546664的博客 1822

性能优化工具(二)-Systrace

一、简介 Systrace是分析Android性能问题的神器,Google IO 2017上更是对其各种强推. 是分析卡顿掉帧问题核心工具,只要能提供卡顿现场,systrace就能很好定位问题,但是有一定上手难度,所以会稍微花比较多的篇幅来学习,当然systrace配合traceView使用效果更佳,之后也会介绍traceView。 二、原理 在介绍使用之前,先简单说明一下Systrace的原理:...

wusejiege6的博客 744

MOOS-ivp 实验三 MOOS简介(3)

MOOS-ivp 实验三 MOOS简介(3) 继上一篇文章继续对实验进行记录 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录MOOS-ivp 实验三 MOOS简介(3)六、A Simple Example with pXRelay1.pXRelay基本使用2.pXRelay简单例子3.pXRelay实验七、First Experiments in Modifying MOOS App Code1.下载一个MOOS模板文件2.打开MOOS模板文件总结 六、A Simple E

weixin_44151170的博客 2534

YOLO26 无损剪枝:稀疏训练 + 结构化通道裁剪

YOLO26 无损剪枝链路:YOLO26s (7.2M) → 稀疏训练 30 epoch (L1 on BN gamma, lam=0.01) → 阈值剪枝 50% (gamma<quantile(0.5)) → 结构化重建 Conv+BN → 微调 10 epoch (lr=1e-4) → YOLO26n (1.9M, mAP50 0.808, 仅降 0.6%)。核心贡献:稀疏训练让 BN gamma 趋向二元分布 (近 0 或近 1), 剪枝阈值可直接取 median 自动 50% 压缩。

m0_64661770的博客 263

android核心技术之性能分析工具Systrace

SystraceSystrace collects system and application process execution data and generates detailed, interactive reports from devices running Android 4.1 and higher.Systrace 是用来收集系统和应用的数据信息和一些中间生成数据的细节,在And

hfreeman2008的专栏 1万+

qt医疗信息系统(HIS)

**UI 组件**: QWidget、QTextBrowser、QTableWidget、QGraphicsView 等。- **网络通信**: Qt Network (TCP/IP)- **DICOM 处理**: DCMTK 3.6.7。- **数据库**: SQLite (轻量、跨平台)**数据库文件**: `hospital.db`- **开发框架**: Qt 6 (C++)- 医疗影像 (DICOM) 查看器。**医疗影像 (DICOM) 查看器****电子病历 (EMR) 浏览器**

寒寒豆豆软件公司的博客 336

android自动化优化工具,android核心技术之性能分析工具Systrace

SystraceWhile developing yourapplication, you should check that user interactions are butterysmooth, running at a consistent 60 frames per second. If somethinggoes wrong, and a frame gets dropped, the...

weixin_29061821的博客 239

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Telegram X性能基准测试完全指南:如何评估和优化应用性能的完整方案

Telegram X作为Telegram官方推出的Android替代客户端,以其出色的性能表现和流畅的用户体验赢得了众多用户的青睐。本文将为您提供一份完整的Telegram X性能基准测试指南,帮助您全面评估和优化应用性能。🎯 ## 为什么需要性能基准测试? 在移动应用开发中,性能直接影响用户体验。Telegram X通过精心优化的代码架构和资源管理机制,在保持功能丰富的同时确保了应用的流畅

gitblog_00267的博客 867

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Systrace高级技巧:如何自定义事件标记来追踪你的Android应用性能问题

本文深入探讨了Systrace高级技巧,重点讲解如何通过自定义事件标记精准追踪Android应用性能瓶颈。文章详细介绍了Trace API的使用方法、最佳实践以及从宏观到微观的分层定位策略,帮助开发者将模糊的性能问题转化为可量化的数据,实现从系统行为到业务逻辑的深度关联分析,从而高效优化应用性能。

vodka的博客 662

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Android性能优化全攻略:从工具使用到实战技巧

性能优化是移动应用开发中的关键技术领域,直接影响用户体验和应用留存率。通过系统级的性能分析工具如Android Profiler和Systrace,开发者可以深入理解CPU、内存、渲染等核心指标的工作原理。在工程实践中,启动速度优化、内存管理和渲染性能提升等技术方案能显著改善应用性能。特别是在电商等高并发场景下,合理的线程池配置和网络请求优化能有效提升响应速度。本文结合内存泄漏检测、ANR分析等热词,详细介绍了如何构建完整的性能监控体系,帮助开发者系统性地解决Android应用性能瓶颈问题。

weixin_30693683的博客 375

获取android系统服务信息dumpsys,监视android系统systrace

一:dumpsys 使用命令 adb shell dumpsys | grep "DUMP OF SERVICE"列出android系统所有的系统服务 以meminfo服务为例,可以使用adb shell dumpsys meminfo -h来查看关于meminfo子命令的帮助 比如,我想要测试android手机的性能中的手机帧率,使用adb shell dumpsys gfxinfo

xzx_kag的专栏 1904

Android 性能优化 【总篇:深入浅出】

本篇的主要针对整机性能的一个解读,主要拆解整机性能有哪些小的领域,对应的测试用例是怎么样的,这类问题优化思路是怎么样的。各家厂商针对性能的测试都设计了不同的用例,因此针对性能测试其实是比较五花八门的。我这里凭着经验来总结一下通常都有哪些场景和性能测试相关。

qq_27672101的博客 510
上一篇: Android系统-性能评估-1-概述
下一篇: Android O 绑定SurfaceFlinger到大核
DecJ
博客等级 码龄18年 537粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值