perfetto详解

news2024/11/18 10:22:19

1. perfettor基础

1.1 介绍

可以将Perfetto理解为systrace的升级版,用在更新的平台、新图表展示更多的信息。它可帮助开发者收集 Android 关键子系统(如SurfaceFlinger/SystemServer/Input/Display 等 Framework 部分关键模块、服务,View系统等)的运行信息,从而帮助开发者更直观的分析系统瓶颈,改进性能。

1.2 使用

基本流程

  • 手机准备好你要进行抓取的界面
  • 点击开始抓取(命令行的话就是开始执行命令)
  • 手机上开始操作(不要太长时间,文件太大会很卡,而且不好定位问题)
  • 设定好的时间到了之后,会将生成 xxxtrace.html 文件,使用如下网站打开Perfetto UI

1.3 抓取

  1. 命令行

    @echo *****[ start ]*****
    
    adb wait-for-device
    adb root && adb remount
    @echo *****[ wait for adb root success!!! ]*****
    
    
    @echo *****[ start perfetto!!]*****
    adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 10s sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory
    
    adb pull /data/misc/perfetto-traces/trace_file.perfetto-trace
    
    @echo *****[ perfetto success!! ]*****
    
    pause
    
    1. -o : 指示输出文件的路径和名字
    2. -t : 抓取时间(最新版本可以不用指定, 按 Enter 即可结束)
    3. -b : 指定 buffer 大小 (一般情况下,默认的 Buffer 是够用的,如果你要抓很长的 Trae , 那么建议调大 Buffer )
    4. -a : 指定 app 包名 (如果要 Debug 自定义的 Trace 点, 记得要加这个)
  2. atrace命令

    • 抓取atrace命令
      adb shell atrace -z -b 40000 am wm view res ss gfx view halbionic pm sched freq idle disk load sync binder_driver binder_lock memreclaim dalvik input -t 10 > /data/local/tmp/trace_output.atrace
    • pull导出trace文件
      adb pull /data/local/tmp/trace_output.atrace
  3. systrace脚本

    1. 配置python环境
    2. 解压systrace.zip
    3. 进入到解压后的systrace目录下,此时该目录下可以找到systrace.py文件,执行如下命令

    python systrace.py am wm view res ss gfx rs hal bionic pm sched freq idle disk binder_driver binder_lock memreclaim dalvik input database -t 10 -o tracelog\systrace.html

    在systrace目录下的tracelog目录中查找生成的systrace.html文件。

  4. 通过手机里的System Tracing抓取
    1. 设置——系统——开发者选项——系统跟踪(不同软件可能路径不太一样)中设置需要录制的类别(Categories)、缓冲区大小(Buffer Size)
    2. 打开【录制跟踪记录】(Record trace)开始录制
    3. 弹出通知后即可开始复现问题或是进行特定操作
    4. 完成以后点击通知栏中的【点按即可停止跟踪】(Tap to stop tracing)即可停止并保存
    5. 测试前,点击下拉状态栏中Record trace图标开始抓取perfetto-trace,然后开始测试。
    6. 完成测试后,点击“下拉状态栏中的Record trace图标”或者“下拉状态栏中的正在抓取的通知”停止systrace的抓取。
    7. 弹出“trace saved”的通知后,可在手机目录/data/local/traces中获取抓取的perfetto-trace文件。
    8. 通过命令adb pull /data/local/traces将对应的systrace保存到本地。

1.4 线程状态

1.4.1 绿色:运行中

只有在该状态的线程才可能在 cpu 上运行。而同一时刻可能有多个线程处于可执行状态,这些线程的 task_struct 结构被放入对应 cpu 的可执行队列中(一个线程最多只能出现在一个 cpu 的可执行队列中)。调度器的任务就是从各个 cpu 的可执行队列中分别选择一个线程在该cpu 上运行

作用:我们经常会查看 Running 状态的线程,查看其运行的时间,与竞品做对比,分析快或者慢的原因:

  1. 是否频率不够?

  2. 是否跑在了小核上?

  3. 是否频繁在 Running 和 Runnable 之间切换?为什么?

  4. 是否频繁在 Running 和 Sleep 之间切换?为什么?

  5. 是否跑在了不该跑的核上面?比如不重要的线程占用了超大核

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.4.2蓝色:可运行

线程可以运行但当前没有安排,在等待 cpu 调度

作用:Runnable 状态的线程状态持续时间越长,则表示 cpu 的调度越忙,没有及时处理到这个任务:

  1. 是否后台有太多的任务在跑?
  2. 没有及时处理是因为频率太低?
  3. 没有及时处理是因为被限制到某个 cpuset 里面,但是 cpu 很满?
  4. 此时 Running 的任务是什么?为什么?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.4.3 白色:休眠中

线程没有工作要做,可能是因为线程在互斥锁上被阻塞,也可能等待某个线程返回,可以看是被谁唤醒,去查看是等待哪个线程。

作用 : 这里一般是在等事件驱动

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.4.4 橘色:不可中断的睡眠态 (Uninterruptible Sleep - IO Block)

线程在I / O上被阻塞或等待磁盘操作完成,一般底线都会标识出此时的 callsite :wait_on_page_locked_killable

作用:这个一般是标示 io 操作慢,如果有大量的橘色不可中断的睡眠态出现,那么一般是由于进入了低内存状态,申请内存的时候触发 pageFault, linux 系统的 page cache 链表中有时会出现一些还没准备好的 page(即还没把磁盘中的内容完全地读出来) , 而正好此时用户在访问这个 page 时就会出现 wait_on_page_locked_killable 阻塞了. 只有系统当 io 操作很繁忙时, 每笔的 io 操作都需要等待排队时, 极其容易出现且阻塞的时间往往会比较长.

1.4.5 棕色:不可中断的睡眠态 Uninterruptible Sleep (non-IO)

线程在另一个内核操作(通常是内存管理)上被阻塞。

作用:一般是陷入了内核态,有些情况下是正常的,有些情况下是不正常的,需要按照具体的情况去分析

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.5 任务唤醒信息分析

Perfetto 会标识出一个非常有用的信息,可以帮助我们进行线程调用等待相关的分析。

一个线程被唤醒的信息往往比较重要,知道他被谁唤醒,那么我们也就知道了他们之间的调用等待关系,如果一个线程出现一段比较长的 sleep 情况,然后被唤醒,那么我们就可以去看是谁唤醒了这个线程,对应的就可以查看唤醒者的信息,看看为什么唤醒者这么晚才唤醒。

一个常见的情况是:应用主线程程使用 Binder 与 SystemServer 的 AMS 进行通信,但是恰好 AMS 的这个函数正在等待锁释放(或者这个函数本身执行时间很长),那么应用主线程就需要等待比较长的时间,那么就会出现性能问题,比如响应慢或者卡顿,这就是为什么后台有大量的进程在运行,或者跑完 Monkey 之后,整机性能会下降的一个主要原因

另外一个场景的情况是:应用主线程在等待此应用的其他线程执行的结果,这时候线程唤醒信息就可以用来分析主线程到底被哪个线程 Block 住了,如下场景:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到这段slepping状态这段时间,我们可以点击后面段Runnig状态,查看它运行在哪个CPU上,点击后可以看到是哪个线程唤醒它的,就可以看是否有异常情况了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.6 信息区数据解析

1.6.1 cpu架构

手机 CPU 按照核心数和架构来说,可以分为下面三类:

  1. 非大小核架构(正常所以核一样)
  2. 大小核架构(正常0-3小核,4-7大核)
  3. 大中小核架构(正常0-3小核,4-6中核,7超大核)

1.6.2 CPU Info信息

Pefetto 中CPU Info信息一般在最上面,里面经常会用到的信息包括:

  1. CPU 频率变化情况
  2. 任务执行情况
  3. 大小核的调度情况
  4. CPU Boost 调度情况

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

  1. 某个场景的任务执行比较慢,我们就可以查看是不是这个任务被调度到了小核?
  2. 某个场景的任务执行比较慢,当前执行这个任务的 CPU 频率是不是不够?
  3. 我的任务比较特殊,能不能把我这个任务放到大核去跑?
  4. 我这个场景对 CPU 要求很高,我能不能要求在我这个场景运行的时候,限制 CPU 最低频率?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.6.3 Current Selection信息解析

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.6.4 cpu by thread

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.7 快捷键

快捷键的使用可以加快查看 Perfetto 的速度,下面是一些常用的快捷键

W : 放大 Perfetto , 放大可以更好地看清局部细节
S : 缩小 Perfetto, 缩小以查看整体
A : 左移
D : 右移
M : 选中该时间段的范围,方便上下查看

用pefetto自带的搜索框需要4个字符以上,搜出来的数据会比较详细,可以配合Ctrl+F一起使用,有时候Ctrl+F搜索不到的数据,需要自带的Search搜索

1.8 何为刷新率

60 fps 的意思是说,画面每秒更新60次,是针对软件的
这60次更新,是要均匀更新的,不是说一会快,一会慢,那样视觉上也会觉得不流畅
每秒60次,也就是 1/60 ~= 16.67 ms 要更新一次
这里说的屏幕的刷新率,是针对硬件的,现在大部分手机屏幕的刷新率,都维持在60 HZ,移动设备上一般使用60HZ,是因为移动设备对于功耗的要求更高,提高手机屏幕的刷新率,对于手机来说,逻辑功耗会随着频率的增加而线性增大,同时更高的刷新率,意味着更短的TFT数据写入时间,对屏幕设计来说难度更大。

2主线程与渲染线程

2.1 主线程创建

2.2 渲染线程创建与发展

2.3 游戏主线程和渲染线程

3 surfaceflinger

4 Choreographer

5 SystemServer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1521671.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

传输层/UDP/TCP协议

再谈端口号 TCP/IP协议用“源IP”,“源端口号”,“目的IP”,“目的端口号”,“协议号”,这样一个五元组来标识一个通信(可以用netstat -n来查看)。 端口号的划分和知名端口号 我们之前就说过&am…

Java学习笔记------常用API(四)

BigDecima 用于小数的精准计算 用来表示很大的小数 构造方法获取BigDecimal对象 public BigDecimal(double val)//有可能不精确,不建议使用 public BigDecimal(String val) 静态方法获取BigDecimal对象 public static BigDecimal valueOf(double val)//超出do…

居民健康监测小程序|基于微信小程序的居民健康监测小程序设计与实现(源码+数据库+文档)

居民健康监测小程序目录 目录 基于微信小程序的居民健康监测小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、用户信息管理 2、健康科普管理 5.3公告类型管理 3、论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推…

ros、c++基于类的编程基础

基于class的编程结构,中间穿插ros的话题发布机制。 首先建立功能包: catkin_create_pkg control geometry_msgs message_generation message_runtime nav_msgs roscpp rospy std_msgs以上依赖基本上是大多数的ros消息所需要的依赖了。 然后确定我们的…

如何通过堡垒机JumpServer使用VisualCode 连接服务器进行开发

前言:应用场景 我们经常会碰到需要远程登录到内网服务器进行开发的场景,一般的做法都是通过VPN登录回局域网,然后配置ftp或者ssh使用开发工具链接到服务器上进行开发。如果没有出现问题,那么一切都正常,但到了出现问题…

解决游戏程序一运行就退出的问题

正文: 在游戏开发过程中,我们可能会遇到程序一运行就立即退出的情况。这种情况通常是由于程序中的某些逻辑错误或初始化问题导致的。 下面我们将分析可能的原因,并提供一些解决方案。 目录 正文: 原因分析: 解决方案…

第二百零六回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"给geolocator插件提交问题的结果"相关的内容,本章回中将介绍自定义标题栏.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我…

多种智能搜索算法可视化还原 3D 魔方

一、写在前面 许久没有写图形化界面的程序了,最近学习了一些经典的盲目搜索算法与智能搜索算法,正好拿来还原三阶魔方!试试手! 提前声明 我不是专业搞人工智能的,理论或者实现过程有些许错误也很正常,评论…

spring源码分析-事务的底层源码-1

这里写自定义目录标题 spring事务的源码分析阅读spring事务源码的前置知识JDBC的事务spring当中和事务相关的对象spring应用程序编码spring事务的源码如何开始研究spring源码当中如何代理bean spring事务的源码分析 最近在研究seata;看了一下spring当中的事务有一点…

CASA模型在陆地生态系统碳循环研究中的应用探讨

植被,作为陆地生态系统的重要基石,对维护生态环境功能具有不可替代的作用。其中,植被净初级生产力(NPP)是衡量植被生态系统健康与功能的关键指标。它反映了单位面积上绿色植被通过光合作用生产的有机质总量在扣除自养呼…

ChatGPT编程—实现小工具软件(批量替换文本、批量处理图像文件)

ChatGPT编程—实现小工具软件(批量替换文本、批量处理图像文件) 今天借助[小蜜蜂AI][https://zglg.work]网站的ChatGPT编程实现一个功能:批量处理文件及其内容,例如批量替换文本、批量处理图像文件等。 环境:Pycharm 2021 系统&#xff1a…

西门子TIA中配置Anybus PROFINET IO Slave 模块

1、所需产品 Siemens S7 PLC CPU 315-2 PN/DP 6ES7 315-2EH-0AB0 Siemens PLC 编程电缆 n.a. n.a. PC ,并安装Siemens PLC编程软件 TIA Portal V11 X-gateway Slave 接口的GSDML文件 根据网关的软件版本而定 Anybus Communicator GSD文件 GSDML-V1.0-HMS-ABCPRT-20050317.xl…

腾讯云2核4g服务器能支持多少人访问?没搞错吧

腾讯云轻量2核4G5M带宽服务器支持多少人在线访问?5M带宽下载速度峰值可达640KB/秒,阿腾云以搭建网站为例,假设优化后平均大小为60KB,则5M带宽可支撑10个用户同时在1秒内打开网站,并发数为10,经阿腾云测试&a…

kkview远程控制: 内网远程桌面控制软件

内网远程桌面控制软件:高效、安全的远程管理方案 在信息技术日新月异的今天,内网远程桌面控制软件已成为许多企业和个人用户不可或缺的工具。这类软件允许用户通过内部网络,实现对其他计算机的远程访问和控制,从而大大提高工作效…

2024年高处安装、维护、拆除证模拟考试题库及高处安装、维护、拆除理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年高处安装、维护、拆除证模拟考试题库及高处安装、维护、拆除理论考试试题是由安全生产模拟考试一点通提供,高处安装、维护、拆除证模拟考试题库是根据高处安装、维护、拆除最新版教材,高…

Radware DDoS防护迎来重大升级,重拳出击在线游戏行业难题

日前,全球领先的网络安全和应用交付解决方案提供商Radware推出了多维DDoS检测和防护措施,以满足在线游戏行业独特复杂的需求。Radware开发了一系列新的算法来保护在线游戏免遭复杂攻击。 Radware首席运营官Gabi Malka表示:“在线游戏是价值数…

车联网应用:开箱即用的物联网卡管理平台

IoTLink是物联网卡管理平台,采用SpringBoot、Vue、Mybatis等技术,支持多渠道管理,提供物联卡数据采集和云端SaaS服务。功能包括物联卡、模组管理、业务告警、微信端操作等。工厂项目可利用该平台管理物联卡、监控数据,并通过定制功…

论文阅读——Rein

Stronger, Fewer, & Superior: Harnessing Vision Foundation Models for Domain Generalized Semantic Segmentation 一、引言 是一个对Domain Generalized Semantic Segmentation (DGSS)任务的视觉大模型的微调方法,即Rein。 Rein 专为 DGSS 任务量身定制&a…

计算机系统基础 2 Intel 中央处理器

Intel微处理器的发展史 INTegrated ELectronics(集成电子)的缩写 先后推出的中央处理器: Intel4004、Intel8008、Intel8080/8085、8086/8088、80186、80286、i386、i486 Pentium(奔腾)、Pentium II、Pentium III、Pen…

军事通信中数字的特殊读法

文心一言 在军事通信中,数字的特殊读法是为了确保在嘈杂、紧张或紧急情况下,信息能够准确无误地传递。这种读法通常遵循一定的规律,使得每个数字都有一个独特的、不易混淆的发音。以下是在军事通信中常见的数字特殊读法: 0 读为…