性能优化:抓取开机trace给perfetto分析--Recording traces on Android boot

Ollama本地大模型部署指南:从核心原理到实战避坑 大语言模型(LLM)作为人工智能领域的核心技术,通过海量数据训练获得强大的语言理解和生成能力。其工作原理基于Transformer架构,通过自注意力机制处理序列数据,在文本生成、代码编写和对话系统等场景展现出巨大价值。随着开源模型的普及,本地部署成为关注焦点,它解决了数据隐私和定制化需求,但面临环境配置和资源管理的挑战。Ollama作为开源工具,通过封装模型格式和统一API,简化了本地部署流程,支持GPU加速和性能调优,让开发者能够快速集成到IDE和自动化脚本中,实现高效的本地AI应用部署。 阅读详情
AI摘要

本文介绍在Android 13及以上版本中,通过配置perfetto boottrace实现开机过程全自动Trace采集的方法。重点包括定制化boottrace.pbtxt配置文件(支持指定tags、延长采样时长、启用Android日志)、将配置文件推送至/data/misc/perfetto-configs/、启用perfetto_trace_on_boot服务,以及重启后通过Perfetto Web UI导入和分析boottrace.perfetto-trace文件,解决传统adb连接延迟导致无法捕获完整开机Trace的性能优化痛点。

背景:

经常在做性能优化时候,可能会有一个开机时间优化的题目,对于这个题目我们有一个比较明显的痛点:
想要抓取开机启动整个过程的trace,放到perfetto上进分析,但是发现开机过程中无法连接上设备,没办法抓到完整的trace,所以perfetto无法分析出整个开机过程。
那么有没有方法可以不需要依赖adb这种连接设备方式抓取,而是系统开机自己就会智能抓取相关的trace呢?
针对上面的痛点,google在andorid 13上就已经有解决哈
在这里插入图片描述下面来教大家解决这个痛点。

步骤1:

准备好一个config文件,主要用于配置perfetto抓取时候的相关配置,比如要抓哪些tag等,是否也抓取日志等,这个配置官网给了一个最简单的版本

# One buffer allocated within the central tracing binary for the entire trace,
# shared by the two data sources below.
buffers {
  size_kb: 32768
  fill_policy: DISCARD
}

# Ftrace data from the kernel, mainly the process scheduling events.
data_sources {
  config {
    name: "linux.ftrace"
    target_buffer: 0
    ftrace_config {
      ftrace_events: "sched_switch"
      ftrace_events: "sched_waking"
      ftrace_events: "sched_wakeup_new"

      ftrace_events: "task_newtask"
      ftrace_events: "task_rename"

      ftrace_events: "sched_process_exec"
      ftrace_events: "sched_process_exit"
      ftrace_events: "sched_process_fork"
      ftrace_events: "sched_process_free"
      ftrace_events: "sched_process_hang"
      ftrace_events: "sched_process_wait"
    }
  }
}

# Resolve process commandlines and parent/child relationships, to better
# interpret the ftrace events, which are in terms of pids.
data_sources {
  config {
    name: "linux.process_stats"
    target_buffer: 0
  }
}

# 10s trace, but can be stopped prematurely via `adb shell pkill -u perfetto`.
duration_ms: 10000

把上面的文本内容拷贝保存成boottrace.pbtxt文件。
但是说明一下上面的官方给的基本上抓到的trace没办法分析,主要有以下几个问题:
1、抓到trace没有任何的tag,所以分析也就没有任何意义
2、抓取的时间比较短,内存也比较小
3、抓取trace没有android log,不方便和log结合分析

所以整改后的config如下:

buffers {
  size_kb: 65536
  fill_policy: DISCARD
}
buffers {
  size_kb: 4096
  fill_policy: DISCARD
}
data_sources {
  config {
    name: "linux.ftrace"
    ftrace_config {
      ftrace_events: "sched/sched_process_exit"
      ftrace_events: "sched/sched_process_free"
      ftrace_events: "task/task_newtask"
      ftrace_events: "task/task_rename"
      ftrace_events: "sched/sched_switch"
      ftrace_events: "power/suspend_resume"
      ftrace_events: "sched/sched_blocked_reason"
      ftrace_events: "sched/sched_wakeup"
      ftrace_events: "sched/sched_wakeup_new"
      ftrace_events: "sched/sched_waking"
      ftrace_events: "sched/sched_process_exit"
      ftrace_events: "sched/sched_process_free"
      ftrace_events: "task/task_newtask"
      ftrace_events: "task/task_rename"
      ftrace_events: "power/cpu_frequency"
      ftrace_events: "power/cpu_idle"
      ftrace_events: "power/suspend_resume"
      ftrace_events: "ftrace/print"
      atrace_categories: "adb"
      atrace_categories: "aidl"
      atrace_categories: "am"
      atrace_categories: "audio"
      atrace_categories: "binder_driver"
      atrace_categories: "binder_lock"
      atrace_categories: "bionic"
      atrace_categories: "database"
      atrace_categories: "gfx"
      atrace_categories: "hal"
      atrace_categories: "input"
      atrace_categories: "pm"
      atrace_categories: "power"
      atrace_categories: "res"
      atrace_categories: "ss"
      atrace_categories: "view"
      atrace_categories: "wm"
      disable_generic_events: true
    }
  }
}
data_sources {
  config {
    name: "linux.process_stats"
    process_stats_config {
    }
  }
}
data_sources {
  config {
    name: "linux.sys_stats"
    sys_stats_config {
      stat_period_ms: 500
      stat_counters: STAT_CPU_TIMES
      stat_counters: STAT_FORK_COUNT
      cpufreq_period_ms: 500
    }
  }
}
duration_ms: 30000

同样用上面内容保存到boottrace.pbtxt文件。

步骤2

push boottrace.pbtxt文件到/data/misc/perfetto-configs/boottrace.pbtxt

adb push <yourfile> /data/misc/perfetto-configs/boottrace.pbtxt

步骤3

使能相关属性
Enable the perfetto_trace_on_boot service

adb shell setprop persist.debug.perfetto.boottrace 1

这个属性设置以后就可以在下一次开机会自动抓取到perfetto相关trace文件

步骤4

重启设备,获取perfetto的trace文件
执行 adb reboot命令
等待20s,然后等系统桌面显示完整后

adb pull /data/misc/perfetto-traces/boottrace.perfetto-trace

打开
https://ui.perfetto.dev
网站导入boottrace.perfetto-trace进行分析:
在这里插入图片描述

官方链接参考:
https://perfetto.dev/docs/case-studies/android-boot-tracing

STM32+LoRa模块实战:从环境搭建到数据传输完整指南(附避坑清单) 本文提供STM32与LoRa模块从环境搭建到数据传输的完整实战指南,涵盖硬件连接、开发环境配置、AT指令设置、频段优化及低功耗设计等关键步骤,特别针对常见问题提供解决方案和避坑清单,助力物联网开发者高效实现远距离低功耗通信。 阅读详情

相关推荐

STM32CubeIDE中文注释变乱码终极解决方案:3步设置永久解决锟斤拷问题!

你是否在STM32CubeIDE中遇到过这样的崩溃场景?——精心编写的中文注释在重新生成代码后变成“锟斤拷”乱码,不仅影响代码可读性,反复修改更是浪费大量时间!作为STM32开发者,我曾被这个问题困扰许久,试过修改软件设置、工程编码却始终治标不治本。直到发现这个基于Java环境变量的终极解决方案,才彻底解决了中文乱码难题。

smart_boy__的博客 2959

抓开机trace的方法

https://source.android.com/devices/tech/perf/boot-timessystrace 允许在启动期间收集内核和 Android 跟踪记录。systrace 的可视化可以帮助分析启动过程中的具体问题。(不过,如果要查看整个启动过程中的平均数量或累计数量,直接查看内核跟踪记录更为方便)。如需在启动过程中启用 systrace,请执行以下操作:在 frameworks/native/cmds/atrace/atrace.rc 中,更改以下行: 更改为: 这将启用跟踪功能(

知难行易 2163

CTF逆向-[GWCTF 2019]babyvm-WP-虚机模拟流程反向编码和z3约束求解器解方程工具的使用

CTF逆向-[GWCTF 2019]babyvm-WP-虚机模拟流程反向编码和z3约束求解器解方程工具的使用 来源:https://buuoj.cn/ 内容: 附件:https://pan.baidu.com/s/1FKkXN6JDI0QkGw-UE2crNA?pwd=grb0 提取码:grb0 答案:Y0u_hav3_r3v3rs3_1t! 总体思路 发现是虚机模拟 形成每个指令的逆向 找到加密值位置(有可能不止一个位置,该题就给了一个误导的) 找到命令执行的流程(也是不止一个) 逆向编写反向加密得到f

serfend's blog 977

Trace 抓取

notes

qq_33942765的博客 3304

Crazyflie 2.1固件刷写与地址配置全攻略:从开箱到连接Crazyswarm

本文详细介绍了Crazyflie 2.1微型无人机的固件刷写、地址配置及与Crazyswarm系统的集成方法。从开箱检查到多机协同飞行,涵盖了硬件准备、固件刷写、无线电地址修改等关键步骤,帮助用户快速实现集群飞行控制。特别针对Crazyswarm系统集成提供了实用配置示例和调试技巧。

weixin_42530458的博客 405

卫星测试科普(三):卫星载荷的核心测试设备探秘

总的说来,卫星芯片与元器件,部组件与单机,整机与子系统,系统与整星的设计、定型、制造、验证、总装、发射、在轨等环节都离不开各种测试场景,对于这些卫星测试场景而言,“射频三大件”与高速数字示波器是构成强大测试系统的基础。卫星通信信号生成:覆盖Ka、Q等波段,具备扫频、脉冲、数字调制、噪声信号、雷达信号、数据链信号、OFDM 等多种信号库,用于测试和验证卫星电子设备的电气性能、频率响应、抗干扰能力等。卫星的通信需要高效、快速地传输大量数据,高速信号的质量至关重要,如果卫星信号不佳,卫星就会出现故障或者隐患。

spwbjss的博客 2319

Android 抓取Trace 分析冷启动

使用Trace协助分析应用冷启动 冷启动分析 Trace分析

wqh_0625的博客 3918

微电网模型Matlab Simulink,风光储微电网,永磁风机并网仿真,光伏并网仿真,蓄电池仿真

通过探究风光储微电网、永磁风机并网仿真、光伏并网仿真、蓄电池仿真、柴油发电机以及光储微电网和风储微电网等方面的技术,我们可以更好地理解微电网的工作原理和优化方法,从而为微电网的发展做出更大的贡献。微电网模型Matlab Simulink,风光储微电网,永磁风机并网仿真,光伏并网仿真,蓄电池仿真,柴油发电机,光储微电网 风储微电网 Matlab仿真平台搭建的风光储微电网模型,风光柴储微电网,pwm控制,风力发电,光伏发电,微电网并网离网切换,并网孤岛切换,功能强大。永磁风机的并网仿真是一个非常重要的环节。

sjbextz的博客 399

【android 性能分析之perfetto_trace抓取】

配置好了要抓哪些信息以后还需要配置抓取的时间以及文件大小.如果不是需要长时间抓取的话,如下配置就行,会抓取十秒这样.如果需要抓很长事件可以使用long trace模式,然后把Max duration和Max file size拉大.点击左边的下载就可以把trace下载到本地,上面的Json会丢失信息,一般不使用,systrace格式信息是完整的,用这个最好.自带的trace信息不一定能明确问题点,可以在怀疑的代码中自己加上trace。有时候需要和别人协同分析,那么就需要把trace文件同步给别人.

qq_25815655的博客 3127

推荐系统[八]算法实践总结V3:重排在快手短视频推荐系统中的应用and手淘信息流多兴趣多目标重排技术

快手推荐系统包括了传统的召回、粗排、精排、Learning To Rank 的多目标排序、多目标预估等技术环节。而在这些模块之后的技术环节就属于重排序,主要包括手机端和服务端两部分。服务端通过传统服务器部署重排服务,包括序列重排、多源内容混排、多样性模块。端上部分包括端上重排模型和端上重排策略两部分。重排技术是快手十分重要的技术环节,它的发展速度远快于其他排序环节,属于较新的技术范畴。整个序列的价值并非单 item 效果的累计,如何使得序列价值最大化;

丨汀、的博客 1063

educoder中Hive综合应用案例 — 用户搜索日志分析

Hive综合应用案例 — 用户搜索日志分析

weixin_46026136的博客 4779

perftto开机流程分析用法

peffetto 分析开机启动的流程

我的专栏 1491

【STK】手把手教你利用STK进行导弹和反导仿真04 - STK/MMT模块03 导弹飞行工具应用案例

飞行设置的工具栏就在附加窗口的中间,首先点击左边的General,修改这个项目的名字。然后在下拉的System中选择导弹的类型,这里我们选择远程。(4)输出数据文件到STK,任务窗口里选择Export Manager项,飞行数据输出到STK。项目可以命名为Test;(1)首先建立新项目,点击Flight菜单中的New Flight选项,见下图。首先看世界地图中间的红圈,是一个导弹形状的图标,这个图标表示的是导弹的发射点。选择下面的Export Manager,依次勾选红框的选项。我们拖动这个导弹的图标,

weixin_44184852的博客 1631

Android 平台开机时间分析与优化

Android 平台开机时间分析与优化

似霰的博客 4847

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Perfetto 快速上手指南

Perfetto 是 google 从 Android10 开始引入的一个全新的平台级跟踪分析工具。它可以记录 Android 系统运行过程中的关键数据,并通过图形化的形式展示这些数据。Perfetto 不仅可用于系统级的性能分析,也是我们学习系统源码流程的好帮手。

chuyouyinghe的专栏 5718

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Android系统 抓trace方法(手机及车机)

andorid抓取trace的三种方法,方便简单。

weixin_41872439的博客 7898

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

抓trace perfetto分析

prefetto 抓trace

b1tb1t的博客 1178

Android性能优化--Perfetto抓取trace

开启Android的trace跟踪服务; 使用 adb 抓取; 通过 perfetto 网页抓取; 直接在手机上抓取; 使用 record_android_trace 抓取; 熟悉 perfetto 快捷键,会有事半功倍效果;

分享Android应用和系统开发、音视频编码、性能优化相关知识 4549

Android 性能优化【篇四:Trace调试技能汇总】

MTK官方网站介绍了一些关键字来确认IO数据量的请求,详细可以点击我block_rq_insert:表示将一个新的块I/O请求插入到块层请求队列中。当应用程序或者操作系统发起一个读取或写入请求时,这个请求会被插入到块I/O请求队列中等待处理block_rq_issue:表示一个块I/O请求已经提交并开始执行,具体含义是块设备层已经向硬盘或固态驱动器提交了一个请求,并此请求已经在硬盘或驱动器设备上执行。当I/O请求插入到请求队列中表示等待执行,issue。

qq_27672101的博客 1万+

性能优化必学基础:perfetto/systrace添加抓取trace块java/c++方法汇总

这些perfetto上展示的执行块slice,其实一般都是在aosp的原生代码中进行的埋点,简单说看到每个slice其实都是有对应的埋点代码,当然这个代码可能是java,c++等,而且哪怕都是java和c++这种也分为是基于源码编译的java,c++代码还是说基于sdk和ndk的java、c++代码,这些都是有差异的,所以针对这些不同的代码和编译情况今天都进行汇总,给大家展示应该如何在自己程序埋入perfetto的slice。跟踪一个动画的开始与结束,可以看出它的执行时长,和同步执行那种单线程完全不一样。

learnframework的博客 1310

Android Perfetto 学习

可以看到当前CPU负载情况,以及CPU任务工作栈查看对应APP进程,第一排表示进程相关状态,第二排表示主线程执行函数堆栈。

tjpuzm的专栏 1601

How to capture Boot-up trace

[DESCRIPTION] Systrace allows collecting both kernel and Android traces during boot up. Visualization of systrace can help in analyzing specific problem during the boot-up. And we also can capture kernel trace to check the average number or accumulate

yangzex的专栏 823

【fwk进阶】抓开机trace-perfetto配置

修改boottrace为可执行文件。

疯子与天才就在一念之间 374

抓取perfetto trace

抓取perfetto trace

qq_40731414的博客 513

Android 系统使用 Perfetto 抓取 trace 教程

使用 Perfetto 抓取 trace 的三种方法

Gabriel的专栏 8336

抓开机systrace

可参考原生atrace service修改: /system/etc/init/atrace.rc on property:persist.debug.atrace.boottrace=1 start boottrace # Run atrace with the categories written in a file #service boottrace /system/bin/atrace --async_start -f /data/misc/boottrace/categories...

PefectWorld的博客 980
上一篇: Android.mk和Android.bp同时需要定义一个目标怎么办?
下一篇: 重学perfetto官方高级抓取方案-抓取更多的内容
千里马学框架
博客等级 码龄6年 1万+粉丝 650原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值