锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

关于使用perfetto(systrace)对卡顿进行分析-实战分析

时间:2023-11-23 12:37:02 glw20液体流量传感器

Perfetto实战分析


文章目录

  • Perfetto实战分析
  • 前言
  • 一、Perfetto是什么?
  • 二、分析步骤
    • 1.将Trace文件导入到perfetto中
    • 2.分析卡顿的原因
  • 总结


前言

本文主要讲述了我在使用它的故事perfetto分析小米10s中桌滑动卡顿的方法和步骤。
这是我用的trace文件:
链接:https://pan.baidu.com/s/11EhCvu0pfR7Qfu6bDf_GLw?pwd=ic43
提取码:ic43


一、Perfetto是什么?

Perfetto 它是一种生产级开源堆栈,用于性能检测和跟踪分析。它提供记录系统级和应用级跟踪和本机 java 堆分析、使用 SQL 可视化和浏览的分析和跟踪库 GB 跟踪的基于 Web 的 UI 服务及库。

二、分析步骤

1.将Trace文件导入到perfetto中

输入地址栏https://ui.perfetto.dev/进入到perfetto中然后
在这里插入图片描述
点击Open trace file,然后打开刚下载的trace文件。

2.分析卡顿的原因

  1. 滑动桌面时,松手后卡住。
  2. 很明显,从图中可以看有多少次Choreographer#doFrame花了很长时间才知道桌面卡住的原因应该在这些地方。
  3. 然后我们从系统的角度思考它运行时间过长的原因
  4. 大致有以下几个方面:CPU频率不足,CPU大小核调度,systemsever繁忙,surfacefinger忙碌,系统内存低,系统触发温度报警导致频率下降,整机CPU繁忙
  5. 让我们一一看:

发现三个可疑点:

很明显RenderThread线程耗时,任务繁忙,受影响CPU影响频率或跑到小核。

我们先不看别的,先来看看。surfacefinger,来看看APP是否提供了可用性Buffer来给surfacefinger合成,然后看surfacefinger通过对比查看主线程的合成情况vsync-sf信号到达时是否有信号?buffer如果没有,这一帧就会卡住。(图中可以找到buffer为0)
接下来我们回来RenderThread检查他的运行状态。

可以发现它一直在running然后我们基本上可以断定状态CPU接下来,让我们来看看他操作了哪一个。CPU,点击running即可查看:

我们可以发现前面没有卡顿,RenderThread是跑在CPU6上,卡顿发生时跑了CPU2上面(一般默认数字小的是小核,数字大的是大核,这里小米10pro是高通骁龙865,有四个小核,三个大核,一个超大核)所以可以知道这次掉帧的原因是调度问题,是CPU大小核调度问题
至于 RenderThread 为什么任务跑到小核,这与调度器有关,直接调度与任务负载有关,任务从大核到小核,或从小核到大核,调度器有参数和算法控制,所以后续优化可能需要从这方面开始,如:
1.调整大小核迁移的阈值参数或修改调度器算法
2.参考竞争产品的性能,查看竞争产品在本场景中的性能指标和调度,分析竞争产品可能使用的策略

总结

这是关于我以前用过的perfetto工具对MIUI分析滑动桌面堵塞的原因。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章