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

您所在的位置:网站首页 鸿蒙系统掉帧 关于使用perfetto(systrace)对卡顿进行分析

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

2024-07-09 16:00| 来源: 网络整理| 查看: 265

Perfetto实战分析

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

前言

本文主要讲述了我在使用perfetto分析小米系统中桌面滑动卡顿的方法以及步骤。 这是我用的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.分析卡顿原因

在这里插入图片描述

在滑动桌面的时候是松手之后发生卡顿。从图中很明显可以看到有几次Choreographer#doFrame耗费的时间都很长,就可以大致知道桌面发生卡顿的原因应该是在这几个地方。然后我们从系统的角度想想什么原因导致了它运行时间过长大致有以下几个方面:CPU频率不足,CPU大小核调度,systemsever繁忙,surfacefinger繁忙,系统内存低,系统触发温度警报导致频率下降,整机CPU繁忙下面让我们一个个来看:

发现三个可疑点: 在这里插入图片描述

很明显RenderThread线程耗时,任务繁忙,受CPU影响频率影响或者是跑到了小核上面。 在这里插入图片描述

我们先不看别的,我们先来看看surfacefinger,来看看APP是否提供了可用的Buffer来给surfacefinger进行合成,然后看一下surfacefinger主线程的合成情况,通过对比查看vsync-sf信号到来的时候是否有buffer可用,如果没有,则这一帧就发生了卡顿。(可以发现图中buffer为0) 接下来我们回到RenderThread线程,查看他的运行状态。 在这里插入图片描述 可以发现它一直在running状态,那我们基本可以断定是CPU的问题,接下来我们来查看下他是运行到了哪一个CPU,点击running即可查看: 在这里插入图片描述 在这里插入图片描述

我们可以发现前面未发生卡顿的时候,RenderThread是跑在CPU6上,而发生卡顿的时候是跑在了CPU2上面(一般默认数字小的是小核,数字大的是大核,这里小米10pro是高通骁龙865,有四个小核,三个大核,1个超大核)故可以知道此次掉帧的原因是调度问题,是CPU大小核调度问题。 至于 RenderThread 的任务为啥跑着跑着就掉到了小核,这个跟调度器是有关系的,大小核直接的调度跟任务的负载有关系,任务从大核掉到小核、或者从小核迁移到大核,调度器这边都是有参数和算法来控制的,所以后续的优化可能需要从这方面去入手,比如: 1.调整大小核迁移的阈值参数或者修改调度器算法 2.参考竞品表现,看看竞品在这个场景的性能指标,调度情况等,分析竞品可能使用的策略

总结

这是关于我此前使用perfetto工具对MIUI滑动桌面发生卡顿原因的分析。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3