补充讲解perfetto/systrace的CPU Trace信息详解和抓取方法

背景:

前面讲解perfetto的查看信息时候,没有重点讲解cpu区域的内容,今天本文将补充讲解perfetto/systrace的CPU Trace信息详解,同时以前有讲解如何抓取开机时刻的perfetto/systrace的方法,但是也有同学反馈使用了对应config后,没有抓取到对应的cpu相关信息,本文针对上面两个知识来进行补充讲解。

CPU Trace信息区域

cpu这块内容展示其实systrace展示的信息量还比perfetto要大一些。

CPU Trace信息区域详解
perfetto这部分展示如下:
在这里插入图片描述主要包含各个cpu的执行任务片段,还有cpu的对应频率部分。

systrace展示如下:
相比perfetto而言,systrace对cpu展示内容还多了,不过其实多的地方相对不那么核心,主要内容还是cpu的执行片段内容和cpu频率最重要。
在这里插入图片描述

因为perfetto和systrace这一块核心内容都是一样的,所以只需要介绍systrace就可以了,会了systrace自然perfetto也肯定没问题,如上图所示,Systrace 中 CPU Trace一般在最上面显示,展示Kernel中的 CPU Info 区域信息,一般包含如下信息:

CPU的组成架构,包含多少颗CPU运行核心,以及编号信息。
每颗CPU核心的实时运行频率信息;
每颗CPU核心当前支持的运行频率的最高与最低的门限值;
每颗CPU核心的状态信息,是否进入节能或断电关闭状态;
每颗CPU核心上运行的线程任务信息与统计,按时间轴排开;

在这里插入图片描述

CPU运行任务分布统计部分:
perfetto

systrace

查看cpu部分信息的作用

总的来说,Systrace 中的CPU Trace 这里一般是看任务调度信息,查看是否是CPU频率或者是CPU调度逻辑导致当前任务出现性能问题,举例如下:

某个场景的任务执行比较慢,我们就可以查看是不是这个任务被CPU调度器安排到了小核上运行?
某个场景的任务执行比较慢,当前执行这个任务的 CPU 运行频率是不是不够?是否因为门限值的设置不合理导致CPU被限频了?
我的任务对性能要求比较高,比如指纹解锁,能不能把我这个任务持续放到CPU超大核去运行?
我的前台应用任务线程长时间处于Runnable状态无法执行而卡顿,当前到底是什么任务在抢占了CPU资源在运行?

开机抓perfetto\systrace部分更新

上一篇文章有给大家分析如何开机抓取perfetto方法:

性能优化:官方文档抓取开机trace给perfetto分析–Recording traces on Android boot

但是有学员朋友反馈使用对应的config时候发现抓取的perfetto没有cpu相关的区域的信息

在这里插入图片描述

针对这个问题需要重新配置一下
更新boottrace.pbtxt文件内容如下:

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: 10000

*上面的size_kb和时间duration_ms都可以自己根据需要进行更新,不然可能因为内存不足抓到时间太短 *
上面的文件内容,也可以直接去perfetto抓取网页
https://ui.perfetto.dev/#!/record/cpu
自己配置cpu相关选项:
在这里插入图片描述
然后再去拷贝相关config到文件
在这里插入图片描述

配置后抓取的perfetto如下:
在这里插入图片描述
更多framework实战开发干货,请关注下面“千里马学框架”

<think>好的,我现在需要帮助用户了解如何在Android平台上使用Perfetto来监控CPU使用率负载。首先,我需要回忆一下Perfetto的基本知识,它是什么,以及它在Android系统中的作用。Perfetto是Google开发的一个性能分析工具,用于跟踪分析系统及应用的性能数据,包括CPU、内存、电池等。 接下来,用户的问题具体是关于CPU负载使用率的统计。我需要确定Perfetto如何收集这些数据。记得Perfetto可以通过配置文件(trace config)来定义需要收集的数据类型参数。可能需要指导用户如何创建这样的配置文件,特别是针对CPU的部分。 然后,我需要考虑用户可能的操作步骤:如何启用开发者选项USB调试,如何安装Perfetto,如何启动跟踪,以及如何分析结果。这些步骤需要详细但清晰,适合不同水平的用户。例如,启用USB调试可能对新手来说需要指导,而生成配置文件可能需要提供示例代码。 另外,用户可能需要了解如何解析生成的数据。Perfetto的跟踪文件可以在Perfetto UI中进行分析,这里需要说明如何上传文件,查看CPU频率、核心使用情况、线程调度等信息。可能还需要提到一些高级分析技巧,比如筛选特定进程或线程,查看上下文切换次数等。 同时,要考虑到用户可能遇到的常见问题,比如权限不足、设备不兼容、数据解读困难等。因此,在回答中可能需要包含一些注意事项,比如需要root权限的部分,或者推荐在特定Android版本上使用。 还需要参考提供的引用内容,但看起来这些引用主要关于内存分析、ActivityTaskManagerServicesystrace工具。虽然用户的问题是关于PerfettoCPU的,但可能需要确认是否有相关内容可以借鉴。例如,引用[3]提到了systrace,而Perfetto实际上是systrace的升级版,因此可以提到两者的关系,但重点放在Perfetto上。 最后,生成相关问题时要确保问题与主题相关,能够帮助用户进一步探索。例如,如何自动化监控、与其他工具的比较、优化CPU使用率的方法等。 现在,我需要将以上思考整理成一个结构化的回答,分步骤说明如何使用Perfetto监控CPU,并确保涵盖配置、数据收集、分析以及注意事项。同时,提供相关问题供用户深入探讨。</think>以下是如何使用PerfettoAndroid平台上统计CPU负载使用率的完整指南: ### 一、环境准备 1. 开启开发者选项:进入手机设置 > 关于手机 > 连续点击"版本号"7次 2. 启用USB调试:开发者选项中打开"USB调试""USB安装" 3. 安装Perfetto工具链: ```bash adb install -r path/to/perfetto.apk ``` ### 二、配置跟踪参数 创建`cpu_trace.cfg`配置文件: ```json buffers: { size_kb: 10240 fill_policy: DISCARD } data_sources: { config { name: "linux.ftrace" ftrace_config { ftrace_events: "sched/sched_switch" ftrace_events: "power/cpu_frequency" ftrace_events: "cpu/cpu_idle" } } } duration_ms: 10000 # 跟踪时长10秒 ``` ### 三、启动跟踪会话 通过ADB执行命令: ```bash adb shell perfetto --txt -c /data/local/tmp/cpu_trace.cfg -o /data/local/tmp/trace.pftrace ``` ### 四、数据分析流程 1. 导出跟踪文件: ```bash adb pull /data/local/tmp/trace.pftrace ``` 2. 使用Perfetto可视化分析: - 访问[Perfetto UI](https://ui.perfetto.dev) - 点击"Open trace file"上传.pftrace文件 3. 关键指标查看: - CPU频率曲线:筛选`power/cpu_frequency`事件 - 核心利用率:查看`sched/sched_switch`统计 - 线程调度细节:使用"Slice details"面板 ### 五、高级配置技巧 统计各进程CPU使用率: ```json data_sources: { config { name: "linux.process_stats" target_buffer: 0 process_stats_config { scan_all_processes_on_start: true proc_stats_poll_ms: 1000 # 采样间隔 } } } ``` ### 六、注意事项 1. Android 9+ 系统原生集成Perfetto,低版本需要手动部署 2. 完整CPU负载分析建议跟踪时长≥30秒 3. 需要`android.permission.DUMP`权限[^2] 4. 核心休眠状态可通过`cpu_idle`事件追踪
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

千里马学框架

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

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

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

打赏作者

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

抵扣说明:

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

余额充值