如何智能识别系统性能抓取对应perfetto trace然后方便分析trace-有源码的简单方案

Renesas:定时器输入捕获 一、PWM输入捕获 1、Smart Configurator配置 注意:在使用前,需要使能对应的定时器!否侧无法正常进行输入捕获! 2、脉冲宽度的获取 如何区分高低电平的脉冲宽度:最常用的方法就是在触发中断后,判断IO口的高低电平,来确认是上升沿触发的中断还是下降沿触发的中断。 若无法进入中断,可查看:Renesas:配置中断的常规流程 (1)中断方式(Smart Configurator生成的代码) #pragma interrupt r_Config_TAUB0_0_i... 阅读详情

背景:

正常我们抓取perfetto或者systrace都是采用的手动抓取方式,但是手动抓取方式一般适用于一些必现的场景,但是经常一些性能问题都不是必现的。很可能是偶现的问题。所以针对这种偶现的性能问题我们应该如何做呢?
很多同学会想到是否可以考虑自动化监测的呢?本文就来带大家简单实现一个自动化监测系统性能,当性能低下时候可以实现对系统进行perfetto的抓取trace,方便分析问题。

方案简单设计:

上面背景中聊的性能低下,这里只是个文字描述,具体应该怎么来代表和判断当前系统就是性能低下呢?
这里其实可以有很多个指标维度:
1、cpu使用率过高,可以代表当前cpu负载太大,当前系统可能存在卡顿
2、当前帧率低,或者检测卡顿主线程卡顿等
…等其他指标

这里为了简单起见,我们就简单认为cpu使用率为性能低下的参考指标,也就是cpu使用率太高就代表当前系统性能低,要触发对应的perfetto来抓对应trace
设计如下图:

在这里插入图片描述

实战代码

#!/bin/bash

# 配置参数
THRESHOLD=40
CHECK_INTERVAL=5
TRACE_DURATION=10
TRACE_CONFIG="trace_config.pb"
TRACE_OUTPUT="trace.perfetto-trace"
ADB="adb"
LOG_FILE="cpu_monitor.log"

# 确保adb设备已连接
function check_adb() {
  if ! $ADB get-state 1>/dev/null 2>&1; then
    echo "错误:未找到已连接的Android设备" | tee -a "$LOG_FILE"
    exit 1
  fi
}

# 获取当前CPU使用率(整个系统)
function get_cpu_usage() {
  # 使用临时变量存储adb输出
  local cpu_data1=$(adb shell "cat /proc/stat | grep '^cpu '")
  read -r cpu user nice system idle iowait irq softirq steal guest <<< "$cpu_data1"

  # 计算首次总时间和空闲时间
  total1=$((user + nice + system + idle + iowait + irq + softirq + steal))
  idle1=$idle

  sleep 1

  # 第二次读取
  local cpu_data2=$(adb shell "cat /proc/stat | grep '^cpu '")
  read -r cpu user nice system idle iowait irq softirq steal guest <<< "$cpu_data2"

  total2=$((user + nice + system + idle + iowait + irq + softirq + steal))
  idle2=$idle

  total_diff=$((total2 - total1))
  idle_diff=$((idle2 - idle1))

  if [[ $total_diff -ne 0 ]]; then
    usage=$((100 - (idle_diff * 100) / total_diff))
    echo $usage
  else
    echo 0
  fi
}

# 执行perfetto跟踪
function start_tracing() {
  local timestamp=$(date +%Y%m%d_%H%M%S)
  local output_file="${TRACE_OUTPUT%.*}_${timestamp}.${TRACE_OUTPUT##*.}"

  echo "$(date) - CPU使用率超过阈值,开始抓取跟踪数据..." | tee -a "$LOG_FILE"
  
  # 将配置文件推送到设备
  $ADB push "$TRACE_CONFIG" /data/local/tmp/trace_config.pb || {
    echo "错误:推送配置文件失败" | tee -a "$LOG_FILE"
    return 1
  }

  # 启动perfetto跟踪(后台执行)
  $ADB shell "nohup perfetto -c /data/local/tmp/trace_config.pb -o /data/misc/perfetto-traces/$output_file --txt"

  # 等待跟踪启动
  sleep 2

  # 检查是否启动成功
  if $ADB shell "ps -A | grep -q perfetto"; then
    echo "$(date) - 跟踪已启动,持续${TRACE_DURATION}秒..." | tee -a "$LOG_FILE"
    sleep $TRACE_DURATION
    
    # 停止跟踪(通过发送SIGINT)
    $ADB shell "pkill -SIGINT perfetto"
    
    # 等待文件写入
    sleep 3
    
    # 拉取跟踪文件
    $ADB pull "/data/misc/perfetto-traces/$output_file" . && \
    echo "$(date) - 跟踪文件已保存:$output_file" | tee -a "$LOG_FILE"
  else
    echo "错误:perfetto启动失败" | tee -a "$LOG_FILE"
    return 1
  fi
}

# 主监控循环
function main() {
  check_adb
  echo "$(date) - 启动CPU监控,阈值:${THRESHOLD}%,检测间隔:${CHECK_INTERVAL}秒" | tee -a "$LOG_FILE"
  
  while true; do
    cpu_usage=$(get_cpu_usage)
    echo "$(date) - 当前CPU使用率:${cpu_usage}%" | tee -a "$LOG_FILE"
    
    if [[ $cpu_usage -ge $THRESHOLD ]]; then
      start_tracing
      # 触发后暂停检测防止重复触发
      echo "$(date) - 触发跟踪后暂停检测60秒..." | tee -a "$LOG_FILE"
      sleep 60
    else
      sleep $CHECK_INTERVAL
    fi
  done
}

# 执行主函数
main

上面的代码保存到 cpu_monitor.sh中
验证方法:

  1. 授予执行权限
    chmod +x cpu_monitor.sh

  2. 使用bash明确执行(重要)
    bash cpu_monitor.sh

当然要抓取perfetto可以准备好一个trace_config.pb在当前sh脚本目录,这个前面文章有说过
https://mp.weixin.qq.com/s/ruac6wUPvJSoXJ10ElfFJQ
在这里插入图片描述

执行结果如下:
在这里插入图片描述
我们设定了40%阈值,超过就会马上触发perfetto进行抓取trace,打开trace可以看看:
在这里插入图片描述
更多framework实战干货,请关注下面“千里马学框架”

【原理图PCB专题】Allegro模块化移动器件报...has the LOCKED property怎么解锁? 正常来说做好一个模块化,如果不需要再动,最好还是lock,防止不明白的工程师异动导致问题。如果复用布局设计时,因为有些器件和拓扑并不完全一致,那需要调整部分器件,被锁之后只能全选,无法修改。所以解开锁定后,就能正常编辑了。 阅读详情

相关推荐

【STM32单片机】RS485通信—基于STM32G474芯片

做项目需要用485通信来控制Go电机参考资料:【【STM32F103C8T6系列】10. 实验例程——485(USART串口)通讯实验】 https://www.bilibili.com/video/BV19w411r7ka/?PDF: STM32G474 开发指南 正点原子 DMG474 开发板教程 第28章485只是物理层,代码逻辑还是UART串口通信,相当于是电路有RS485转换芯片,所以还是用UART串口通信方式。

m0_48808835的博客 3647

如何使用Perfetto通过trace分析性能问题(五)——Trace-based metrics

trace processor, protobuf

m0_37999066的博客 2965

TwinCAT3新手必看:5分钟搞定EtherCAT从站PDO动态配置(附电流变量添加技巧)

本文为TwinCAT3新手提供了EtherCAT从站PDO动态配置的快速入门指南。文章详细解析了Process Data Object(PDO)在实时数据交换中的核心作用,并分步演示了在TwinCAT3工程中扫描从站、动态添加与映射PDO(包括接收PDO和发送PDO)的完整操作流程。重点分享了如何灵活添加并监控如电机实际电流等关键工艺变量的高级技巧,并针对不同品牌驱动器的兼容性问题提供了实用的调试心法和解决方案,帮助工程师快速上手并优化工业自动化系统。

xgboost6farmer的博客 453

抓trace perfetto分析

prefetto 抓trace

b1tb1t的博客 1178

人大金仓的‘影子表’sys_user:搞懂Schema优先级,告别字段不存在的报错

本文深入解析人大金仓数据库中‘影子表’sys_user的Schema优先级问题,帮助开发者解决字段不存在的报错。通过分析Schema搜索路径机制,提供四种解决方案,包括连接时指定Schema、动态调整搜索路径、永久修改用户设置和使用完全限定表名,确保查询准确无误。

weixin_30329623的博客 596

告别虚拟机!在Windows上用WSL+VSCode搞定ArduPilot开发环境(保姆级避坑指南)

本文提供了一份详细的保姆级指南,介绍如何在Windows上使用WSL和VSCode搭建高效的ArduPilot开发环境,告别虚拟机性能损耗。从WSL安装、VSCode配置到ArduPilot固件编译和调试技巧,涵盖开发全流程中的关键步骤和常见问题解决方案,帮助无人机开发者快速构建专业级开发环境。

weixin_42543046的博客 461

Perfetto 快速上手指南

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

chuyouyinghe的专栏 5718

别再死磕文档了!用国产MBSES软件5分钟上手MBSE建模(保姆级图文教程)

本文通过国产MBSES软件,详细演示了如何在5分钟内完成智能家居系统的MBSE建模。从模块图定义到状态机图构建,再到参数约束验证,全程图文指导,帮助工程师快速掌握基于模型的系统工程方法,显著提升复杂系统设计效率。

weixin_26833503的博客 237

【android 性能分析之perfetto_trace抓取】

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

qq_25815655的博客 3127

论文理解【LLM-OR】——【OptMATH】A Scalable Bidirectional Data Synthesis Framework for Optimization Modeling

本文提出 LLM-OR 领域的双向数据合成框架 OptMATH,从已有 MF/PD 出发反向生成 NL,再使用 AutoFormulator 进行正向建模,通过最优值匹配 rejection sampling 确保语义一致性。实现了难度可控的语义一致数据合成

佚失的诗篇 499

把 ABAP ALE Change Pointers 讲透:从 CDHDR/CDPOS 到 BDCP2,再到 RBDMIDOC 的自动分发链路

摘要:SAP ALE Change Pointers机制在系统集成中实现业务变更与数据分发的解耦。它记录业务对象变更(如SAP主数据修改),但不立即发送,而是由后续分发逻辑决定发送时机和方式。该机制包含两层:Change Documents记录审计级变更明细,Change Pointers标记需分发的关键变更。配置核心包括全局开关、消息类型激活和字段选择。典型应用如零售价格条件变更自动推送至POS系统,通过BDCP2表存储待处理队列,由RBDMIDOC程序定时评估生成IDoc。运维需关注定期清理和性能优化,

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 209

Perfetto使用

概述 在 Android 9.0(API级别28)或更高版本的设备上,可以使用 System Tracing 的 System App 在设备上记录系统跟踪 Perfetto 工具是Android下一代全新的统一的 trace 收集和分析框架,可以抓取平台和app的 trace 信息,是用来取代 systrace 的,但 systrace 由于历史原因也还会一直存在,并且 Perfetto 抓取...

Arvin Hu的博客 1万+

基于RK3588的YOLOv11目标检测NPU加速系统设计与实现——模型转换(RKNN)、量化与板端部署全流程(含环境搭建与疑难解析)

而RK3588芯片则是一款性能强劲的边缘计算芯片,将YOLOv11部署在RK3588上,可实现本地化的智能检测应用,比如工业质检中的产品缺陷识别、安防领域的异常行为监测等。比如,优化模型的推理速度,可通过调整模型的输入尺寸、使用更高效的推理框架等方式实现;可以使用RK提供的量化工具来完成这一过程,按照工具的使用说明,对ONNX模型进行量化,生成适用于RK3588的模型文件。现在,你已经掌握了从环境搭建到模型部署的全流程,赶快动手实践,让YOLOv11在RK3588上绽放智能光彩,打造属于你的AI应用吧!

m0_71589036的博客 45

如何使用Perfetto通过trace分析性能问题(二)——使用SQL查询

perfetto, trace

m0_37999066的博客 1671

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Perfetto详细解析

本篇文章主要介绍Perfetto的详细使用,以及各个模块在Perfetto上的表现,如何对手机性能做基本分析,如何判断卡顿等进行解析,后续会出相关的实战文章。

Android系统优化 3万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

性能分析神兵利器:Perfetto

什么是Perfetto?Perfetto是Android 10中引入的全新平台级跟踪工具。这是适用于Android、Linux和Chrome的更加通用和复杂的开源跟踪项目。与Systrace不同,它提供数据源超集,可让您以protobuf编码的二进制流形式记录任意长度的跟踪记录。您可以在Perfetto界面中打开这些跟踪记录。Perfetto是一款比较强大的安卓性能分析工具(它还可以用于分析其他系统),其功能涵盖了对CPU的追踪、电池耗电追踪、系统调用的追踪,内存分配与释放的追踪。除了性能数据记录外,它还有

chuyouyinghe的专栏 3255

jre9下载 jdk9

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

Android perfetto性能分析工具总结

Android perfetto性能分析工具总结

月山知了的博客 1240

Perfetto trace使用技巧

4.通过追踪GPU Completion定位应用卡顿的时间点,60HZ的屏幕一帧的时间为16.6ms左右,应用的GPU Completion表示该帧在绘制指令结束之后多长时间GPU完成了该帧,如果绘制指令的时间+GPU Completion时间超过了16.6ms,那么就会出现丢帧,当丢帧较多时,在屏幕上很容易看到卡顿。部分机型抓取过长的trace会导致解析出错,从而无法分析,在大部分机型上可以使用5-10秒长度,过长过大的trace通常也不利于分析。

522

如何使用Perfetto通过trace分析性能问题(一)——使用Timeline检测Android Jank

perfetto, trace教程, 如何看懂trace

m0_37999066的博客 4582

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

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

learnframework的博客 1309

利用pefertto分析trace方法【OHOS】

bigge_L的博客 7万+

使用perfetto分析trace文件

perfetto分析trace文件

weixin_45612598的博客 1979

性能优化-卡顿优化-tarce抓取及分析

性能优化(卡顿分析)

qq_36390114的博客 3604

Android 系统使用 Perfetto 抓取 trace 教程

使用 Perfetto 抓取 trace 的三种方法

Gabriel的专栏 8336

Perfetto使用(android性能分析工具)Trace文件分析

它可帮助开发者收集 Android 关键子系统(如SurfaceFlinger/SystemServer/Input/Display 等 Framework 部分关键模块、服务,View系统等)的运行信息,从而帮助开发者更直观的分析系统瓶颈,改进性能。扩展名往往是.perfetto-trace。打开微量文件,导入perfetto文件。

xiyangyang8110的博客 275

Android Systrace(3) -- 掉帧卡顿

1. 丢帧看Surface Flinger trace发现他的ui thread并不是每一个vsync都有绘制,有发生丢帧,原因是launcher数据是空的 2. 查看lancher的trace,发现连续滑动时,每一帧都是成功绘制成功了,但是uiThread并不是都在doFrame,有些帧并没有做doFrame,原因是没有输入事件,可以看deliverInputEvent那些地...

wd229047557的博客 9642
上一篇: aosp15 VSCode调试 native程序完整笔记
下一篇: 为什么安卓aosp15打包system.img中无法包含没有在PRODUCT_PACKAGES定义的目标--学员作业
千里马学框架
博客等级 码龄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、付费专栏及课程。

余额充值