首页 > 其他分享 >Perfetto学习大全

Perfetto学习大全

时间:2024-11-22 22:17:20浏览次数:3  
标签:分析 trace 学习 UI Perfetto Android 大全 追踪

Perfetto 是一个功能强大的性能分析和追踪工具,主要用于捕获和分析复杂系统中的事件和性能数据,特别是在 Android 和 Linux 环境下。它的核心目标是帮助开发者深入了解系统和应用程序的运行状态,以便优化性能和诊断问题。

Perfetto的主要作用

  1. 系统性能分析
    • 捕获 CPU、GPU、内存、I/O 等方面的性能数据。
    • 帮助分析瓶颈和资源使用情况。
  2. 应用性能分析
    • 追踪应用中特定任务的执行时间,例如函数调用、帧渲染等。
    • 支持用户自定义事件的插桩。
  3. 多进程和跨设备追踪
    • 可以追踪多个进程之间的交互。
    • 支持 Android 设备和其他 Linux 系统上的追踪。
  4. 多样化数据展示
    • 提供可视化界面(Perfetto UI),展示时间线、任务分布、帧率等。
    • 生成可以在 CI/CD 流程中使用的报告。
  5. 替代 Systrace
    • Perfetto 是 Android 平台中传统 Systrace 工具的继任者,提供更高效、更现代的性能分析能力。

Perfetto 的发展历史

起源
- Perfetto 由 **Google** 开发,最初作为 Android 平台的一部分,用来补足 Systrace 和其他工具的不足。
- 它的名字源于意大利语,意为“完美”。
发展历程
  1. 早期阶段(2017-2018 年)
    • 在 Android 开发者工具中引入,作为内部性能分析工具。
    • 随着 Android P(API 级别 28)的推出,开始逐步集成到 Android 平台。
    • 扩展了 Systrace 的功能,并加入了对更多硬件事件的追踪能力。
  2. 成熟阶段(2019 年)
    • Perfetto 成为 Android 官方性能追踪工具,完全取代 Systrace。
    • 提供开放的 API,使开发者可以轻松插入自定义追踪事件。
    • 引入了强大的追踪文件格式(Proto-based)和本地分析支持。
  3. 跨平台扩展(2020 年及之后)
    • 虽然起源于 Android,Perfetto 逐渐支持其他 Linux 平台。
    • 支持嵌入式设备和桌面环境的性能分析。
    • 被集成到更多的 Google 内部工具中,如 Chrome 的追踪系统。
  4. 现代化(2022 年及之后)
    • 提供了完全开源的解决方案,开发者可访问其源码并自定义功能。
    • Web UI 和命令行工具持续优化,提升了数据展示和分析效率。
    • 在 Perfetto UI 中引入了更多直观的分析视图,如 flame graph(火焰图)、内存转储分析等。

Perfetto 的现状

Perfetto 已成为性能分析领域的一个标杆工具,在 Android 和 Linux 社区中有广泛的应用,并不断扩展到更多平台和场景。它以现代化的设计、强大的功能和灵活的 API 支持,满足了从应用程序开发到系统优化的多样化需求。

如何抓取 Perfetto 数据

使用 Perfetto 捕获性能数据,涉及几个步骤:配置追踪、启动捕获、保存数据,并分析结果。以下是详细步骤和方法:

1. 使用 Perfetto UI

Perfetto 提供了基于浏览器的可视化界面,可以直接进行数据捕获和分析。

步骤
  1. 连接设备将 Android 设备通过 USB 连接到开发电脑,并确保开发者模式和 USB 调试已启用。
  2. 打开 Perfetto UI访问 Perfetto UI
  3. 配置追踪
    • 点击 Record new trace
    • 选择目标设备(需启用 WebUSB)。
    • 配置追踪设置(如 CPU、内存、帧率、GPU 等)。
  4. 启动追踪点击 Start recording 开始追踪。系统会实时收集数据。
  5. 停止追踪并下载数据追踪结束后,点击 Stop tracing,然后下载生成的 .perfetto-trace 文件。
    在这里插入图片描述

2. 使用命令行工具 (ADB)

步骤
  1. 连接设备确保设备通过 USB 连接,并启用了开发者模式。
  2. 推送 Perfetto 配置文件
    使用 adb 将配置文件推送到设备:
adb push config.pbtxt /data/local/tmp/config.pbtxt

配置文件格式为 proto 或文本格式,定义追踪内容。
3. 启动 Perfetto 守护进程
在设备上启动 Perfetto:

adb shell perfetto --txt -c /data/local/tmp/config.pbtxt -o /data/local/tmp/trace_file
- --txt: 指定配置文件是文本格式。
- -c: 配置文件路径。
- -o: 输出文件路径。
  1. 停止追踪
    根据配置文件的 duration_ms(持续时间)自动停止,或手动终止。
  2. 下载追踪文件
    将追踪文件拉取到本地:
adb pull /data/local/tmp/trace_file ./trace_file

3. 使用 Android Studio Profiler

步骤
  1. 打开 Android Studio连接设备并打开要分析的应用项目。
  2. 启动 Profiler
    在 Android Studio 中选择 View > Tool Windows > Profiler
  3. 选择追踪模式
    在 Profiler 界面中选择要捕获的数据类型,例如 CPU、内存或自定义事件。
  4. 开始和停止追踪
    点击 Record 开始追踪,结束时点击 Stop
  5. 导出追踪文件
    在 Profiler 中导出为 .perfetto-trace 文件。

4. 编写自定义代码插桩

Perfetto 支持通过代码插桩收集自定义事件。

示例代码

在应用代码中引入 Perfetto SDK:

import androidx.tracing.Trace

fun exampleFunction() {
    Trace.beginSection("Custom Event")
    // 执行任务
    Trace.endSection()
}

通过这种方式,可以记录自定义任务的运行时间,并在 Perfetto 中查看。

5. 分析追踪数据

捕获数据后,可以通过以下方法分析:
- Perfetto UI:将 .perfetto-trace 文件拖入 Perfetto UI 查看。
- 命令行工具:使用 trace_processor_shell 提取统计信息。
- 第三方工具:如火焰图分析工具。

配置文件示例

以下是一个简单的文本配置文件 config.pbtxt

buffers: { size_kb: 10240 }
data_sources: {
  config {
    name: "linux.ftrace"
    ftrace_config {
      ftrace_events: "sched/sched_switch"
      ftrace_events: "sched/sched_wakeup"
    }
  }
}
duration_ms: 5000
  • 捕获 sched_switch 和 sched_wakeup 事件。
  • 持续 5 秒,使用 10 MB 缓冲区。

如何使用Perfetto分析数据

Perfetto 数据分析的核心是理解数据的来源、使用工具提取信息,并将结果与性能瓶颈或问题对齐。分析主要分为可视化分析和数据挖掘两个部分。

1. 可视化分析 (Perfetto UI)

Perfetto 提供了直观的 Web 界面,可以轻松加载和查看 .perfetto-trace 文件。

步骤
  1. 加载数据打开 Perfetto UI,将 .perfetto-trace 文件拖入页面。
  2. 分析时间线
    • 主线程事件 (Main Thread) 查看主线程的执行情况,包括任务分布、耗时任务、空闲时间等。
    • 渲染帧时间 (Frame Rendering) 检查是否有掉帧或卡顿,分析每一帧的组成部分(如绘制、同步、提交等)。
    • 系统事件 包括 CPU 调度、内存分配、I/O 等系统级别的事件。
    • 自定义事件 如果代码中插入了自定义 Trace,可以在特定区域找到对应事件。
  3. 使用 Perfetto 工具
    Perfetto UI 提供了一些内置工具:
    • Query:使用 SQL 查询数据,提取统计信息。
    • Flame Chart (火焰图):查看函数调用和线程活动。
    • Heap Profiler:分析内存使用和分配热点。
    • Slices:分解任务,显示每个子任务的执行时间。
  4. 标注和导出
    • 可以标记关键点,如性能瓶颈或异常事件。
    • 支持导出分析截图或数据片段供进一步处理。

2. 使用 Trace Processor (命令行工具)

Trace Processor 是 Perfetto 提供的 CLI 工具,用于从 .perfetto-trace 文件中提取和分析数据。

安装 Trace Processor

Perfetto 官方页面 下载并安装。

常用命令
  1. 加载追踪文件
trace_processor_shell trace_file.perfetto-trace
  1. 查看支持的表
.tables

输出所有支持的 SQL 表,例如 sched(调度信息)、slice(任务切片)、cpu(CPU 使用情况)等。
3. 示例 SQL 查询

  • CPU 使用率查询 CPU 使用时间最长的线程:
SELECT
  thread_name,
  SUM(dur) / 1e6 AS total_time_ms
FROM sched
JOIN thread USING(utid)
GROUP BY thread_name
ORDER BY total_time_ms DESC
LIMIT 10;
  • 主线程分析查找主线程的任务分布:
SELECT
  name,
  dur / 1e6 AS duration_ms
FROM slice
WHERE thread_name = 'main'
ORDER BY duration_ms DESC;
  • 内存使用分析内存分配峰值:
SELECT
  timestamp / 1e6 AS time_ms,
  value / 1024 AS memory_kb
FROM counters
WHERE name = 'mem.rss';
  1. 导出分析结果
    查询结果可以通过命令行导出为 CSV 或 JSON 文件:
trace_processor_shell trace_file.perfetto-trace --query=query.sql > output.csv

3. 火焰图 (Flame Graph) 分析

火焰图是 Perfetto 数据分析中的关键工具之一,用于展示函数调用的层级结构和执行时间。

查看火焰图
  1. 在 Perfetto UI 中,找到火焰图选项。
  2. 选择线程或任务,展开火焰图:
    • 每一层表示一个函数调用栈。
    • 宽度表示函数的执行时间。
  3. 寻找宽度异常的大区域,通常是性能瓶颈所在。
    请添加图片描述

4. 常见分析场景

4.1 CPU 密集型问题
  • 在 sched 或 slice 表中,查询线程调度信息。
  • 寻找占用 CPU 时间最长的任务和线程。
4.2 掉帧和渲染卡顿
  • 在 Perfetto UI 的帧时间线上,查找耗时过长的帧。
  • 检查帧中 RenderDrawSubmit 阶段的耗时。
4.3 内存泄漏
  • 使用 Heap Profiler,查找未释放的内存分配。
  • 分析 counters 表中的内存使用模式。
4.4 I/O 延迟
  • 查看 I/O 相关事件,分析是否存在 I/O 瓶颈或阻塞。
  • 在 slice 表中查找 disk 或 file 相关的任务。

工具整合

工具用途优势
Perfetto UI数据可视化和交互分析直观,适合初学者和快速分析
Trace Processor精确数据提取和 SQL 分析灵活,适合复杂场景和自动化流程
火焰图工具函数调用分析,定位瓶颈层级清晰,适合查看任务分布

通过结合以上工具和方法,可以高效地分析 Perfetto 数据,识别性能问题,并进行优化。

参考

Android Perfetto 系列 2:Perfetto Trace 抓取
Android Perfetto Trace性能分析

标签:分析,trace,学习,UI,Perfetto,Android,大全,追踪
From: https://blog.csdn.net/wudexiaoade2008/article/details/143983246

相关文章

  • vue.js学习(day 5)
     watch侦听器(监视器)<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metahttp-equiv="X-UA-Compatible"content="IE=edge"/><metaname="viewport"......
  • 前端开发调试之移动端调试学习笔记
    一、引言随着移动互联网的飞速发展,移动端页面和应用的开发变得越发重要。而在前端开发移动端项目时,有效的调试手段能帮助我们及时发现并解决诸多问题,确保项目在移动端设备上能够正常运行且提供良好的用户体验。以下就是关于前端开发中移动端调试的详细学习笔记内容。二、常......
  • 人工智能之深度学习基础——反向传播(Backpropagation)
    反向传播(Backpropagation)反向传播是神经网络的核心算法之一,用于通过误差反传调整网络参数,从而最小化损失函数。它是一种基于链式法则的高效梯度计算方法,是训练神经网络的关键步骤。1.反向传播的基本步骤1.1前向传播在前向传播过程中,输入数据从输入层经过隐藏层传递到输出层,......
  • 优化注意力层提升 Transformer 模型效率:通过改进注意力机制降低机器学习成本
    Transformer架构由Vaswani等人在2017年发表的里程碑式论文《AttentionIsAllYouNeed》中首次提出,如今已被广泛认为是过去十年间最具开创性的科学突破之一。注意力机制是Transformer的核心创新,它为人工智能模型提供了一种全新的方法,使模型能够根据具体任务的需求,灵活地聚......
  • 【Linux】-学习笔记05
    第一章、系统延迟任务与定时任务1.延迟任务在系统中我们的维护工作大多数时在服务器行对闲置时进行我们需要用延迟任务来解决自动进行的一次性的维护延迟任务时一次性的,不会重复执行当延迟任务产生输出后,这些输出会以邮件的形式发送给延迟任务发起者在RHEL9中默认系统中......
  • java学习中,多态,抽象类,接口
    一、多态1.1什么是多态多态是OOP面向对象编程的第三个特点。表现为:对象多态、行为多态。 多态性是允许你将父类引用设置成为一个或更多的他的子对象相等的技术,赋值之后,父类引用就可以根据当前赋值给它的子对象的特性以不同的方式运作。1.2多态的表示形式多态的实现通常基......
  • 2024最新版网络安全面试题精讲—万字详解黑客技术和网络安全经典题目,小白学习网络安全
    前言面试题来源于网络收集和现实分享,近期也收到多位朋友的题目分析,大多数是红队、渗透、代码审计方向,后面会根据难易度穿插进来,由于档期和需要复现环境等不定因素,更新周期不固定,感谢理解*本文中题目理解均来自个人,主观题没有固定答案、仅供参考,如有错误请指出*如您认为......
  • SPI总线学习笔记
    1、SPI的定义以及特点SPI是串行外设接口(SerialPeripheralInterface)的缩写。是Motorola公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。1):高速、同步、全双工、非差分、总线式2):主从机通信模式通信简单,速率快2、通信协议介绍SPI具有四根通信线:(1)SDO......
  • MATLAB深度学习Transformer神经网络量化金融时间序列预测交易策略回测
    全文链接:https://tecdat.cn/?p=38337原文出处:拓端数据部落公众号此文展示了如何在MATLAB®中使用Transformer网络对股票的每日价格进行建模。我们将预测三只个股的价格趋势,并使用预测的时间序列值对交易策略进行回测。开始在MATLABR2023a和R2023b中引入了新的层,允许在使用深......
  • 2024-2025-1 20241401 《计算机基础与程序设计》 第九周学习总结
    班级链接2024计算机基础与程序设计作业要求第九周作业作业目标①操作系统责任②内存与进程管理③分时系统④CPU调度⑤文件、文件系统⑥文件保护⑦磁盘调度教材学习内容总结《计算机科学概论》第10、11章第10章操作系统定义:操作系统(OS)是具有操作硬件......