perftto开机流程分析用法

本文介绍了在Android系统中通过log、perfetto、sys/kernel和ATrace进行性能分析的方法,包括开机时间测量、系统服务分析、CPU调度优化,以及perfetto的使用技巧,如wakemethod、taskdependency和时间段标记等。
摘要由CSDN通过智能技术生成

主要是对里面的方法进行的总结

一 抓取方法:

1 log中搜 boot_pro就能看每个阶段的时长
2 sys/kenel/boot_api也能看时长
3 抓取perfetto查看,这个要加上kenel及之前的时间。
perfetto 使用方法:

这个文件在/system/core/init/底下,注释掉下面两句
# write /sys/kernel/debug/tracing/tracing_on 0
# write /sys/kernel/tracing/tracing_on 0
同时添加下面的这些
on property:persist.debug.atrace.boottrace=1
start boottrace
service boottrace /system/bin/atrace --async_start -b 30720 gfx input view webview wm am sm audio video binder_lock binder_driver camera hal res dalvik rs bionic power pm ss database network adb vibrator aidl sched  
disabled
oneshot
修改build.prop
1. 在build.prop 中添加
debug.atrace.tags.enableflags=802922
adb shell setprop persist.debug.atrace.boottrace 1
2. 重启获取trace
adb root && adb shell atrace --async_stop -z -c -o /data/local/tmp/boot_trace
adb pull /data/local/tmp/boot_trace

二 分析方法:


2.1 查看开机到桌面的时间,最终点是 launcher
2.2 查看开机到语言的时间,最终点是 VOICEAI
首先看下ams对应的线程,找到startapp的时间和app ondraw的时间差
看下前后哪个阶段时间长,
3 具体根据时间段分别分析
3.1 如果startapp的时间长,要重点看下主线程和render那一环节耗时,还要看下有没有依赖,比如app显示需要依赖某个服务,这时候还要看下该服务的情况(vds),这个主要在app,方案很熟悉,暂时忽略
3.2 systemserver慢的情况,找到running的cpu,再看下该cpu上运行的task指向的黑色点,这个点就是唤醒的它的线程,看下为啥 runnable,sleep等
大概的情况有:binder等待(bind systemserver),线程锁,其他线程未释放(sleep,lockconcurent)(runnbale多一点)
4 查看cpu情况,排除qnx占用cpu的情况,以及核心进程(systemserver,语音的一些服务)是否在cpu强的核上调度,可以抓取kenel log 大致看下各个核的cpu idea状态百分比 (搜[k])
4 如何完成任务的重新调度 ---
依据以上能否完成任务的重新调度呢?--先看下systemserver的启动和ams启动流程,
大概有PHASE_* 等7个阶段,上下文都能找到对于的trace片段名字:FinishBooting等等
但似乎也没有啥思路,
另外来一个启动调优问题
就是把一些名单里面的app 进程提升下优先级
思路很简单,但改的地方很多
首先 service端实现进程的优先级调高的接口供ActivityTaskManagerService,ProcessList,Oomadjuster调用
ProcessList这里负责找到进程并调整优先级应该就沟了,但ActivityTaskManagerService是给app进程aidl使用的,Oomadjuster应该是快要oom特殊情况下调整优先级的,优先级调整在native层,service调用app端的jni接口有点别扭

参考文章:https://blog.csdn.net/m0_74282605/article/details/127936629

三 另外也写下peffto的使用技巧

一 perfetto的实现原理
  底层实现就是用的Linux Kernel 中的 ftrace 功能(用来追踪函数调用、打印内核的日志消息等)
  android native ,framwork,app各层都对此进行了封装,分别对应ATrace,Trace,自定义Trace
  还是一层层调用,到kernel的具体函数
  而这些数据的抓取和分析工具就是systrace或peffeto
  所以说Trace点加的多少决定了我们能够分析的程度
  看下各自设备上的trace点
  adb shell atrace --list_categories//查看支持的tag(trace点)
  二 使用技巧
 1 wake method:点击running信息-下面的详细信息,点击cpu箭头--跳到cpu一栏 会有黑线上的黑点,这个点就是唤醒的地方,还可以接着点,看它的唤醒的地方
 2 task depend 点击running信息-下面的详细信息,还有个Critical path的功能
 简化版是 Critical path lite 可以看到依赖关系:
 比如我们的 Task 要等 Task b b要等c 执行结束才能执行

 3 时间段标记:快捷键M(shift+M:持久)可以标记时间段并详细信息里查看具体的统计数据
   时间点标记:快捷键小红旗可以高亮显示,标记关注的时间点
 4 鼠标放到cpu信息的task时候,可以高亮显示该线程其他处的task,可以大致看下该任务线程的摆核信息

5 锁等待:比如:
monitor contention with owner Binder:1605_B (4667) at void com.android.server.wm.ActivityTaskManagerService.activityPaused(android.os.IBinder)(ActivityTaskManagerService.java:1733) waiters=2 blocking from android.app.ActivityManager$StackInfo com.android.server.wm.ActivityTaskManagerService.getFocusedStackInfo()(ActivityTaskManagerService.java:2064)
一般出现在running之前的那一段task里面,往往是被 ams,wms锁卡住了
6 点击runnable 也会详情里显示唤醒源,至于要看running还是runnable
要看谁的耽误时间长了(runnable耽误时间长,要看running,runnable之前的时间段耽误时间长,看runnable) 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值