专栏首页代码GG之家只需一个命令,快速定位android的启动耗时

只需一个命令,快速定位android的启动耗时

有兴趣合作,帮忙制作公众号的一些宣传图册的伙伴,可以加我微信,商谈具体事宜。

回顾:

Android 启动过程框架

这节我们讲一个命令,用来定位android启动过程耗时,具体为:

进入shell,cat /proc/bootprof

即可看到一堆类似如下的输出:

首先我们看到的是这几个部分: preload lk

这两个属于uboot的过程,一般这里时间不用关心。

后续进行加载kernel

kernel初始化的时间,会持续到init进程的创建。这里关注的点就是,每个驱动module的加载时间,类似于 initcall: event_trace_init 584.964463ms 这里会打印出哪个模块 耗时多少ms。

这些log,都是可以从代码中找出,因此可以定位到log的地方,去看下驱动模块的加载过程。

比如这里的initcall:

我们继续查找调用,

再向前找一步:

这里我们可以看到,kernel对于驱动module的调用方法,从这里向上追溯,则可以去定位kernel加载起来的一个过程。

(代码,要在一条明确地追踪线下,才能有所收获,有所突破。不能一味的强制自己去阅读代码,而应该自己带着一个线索,去在代码中,先探出一条路来,然后在反复游走在此路,观赏沿途的风景。)

看下这个总时间是否超长,然后去细化看下哪些驱动加载耗时,将一些无用的驱动加载可以移除掉,加快开机时间。kernel启动结束的时间(这个关键字确定Kernel_init_done)

init 进程初始化,会创建一系列的进程

比如 ccci_md3 vold ,这里也会将每个进程的创建开始和结束打印出来。 然后我们进入zygote进程的创建,看到加载预处理的jar so,可以看到这些耗时。

这些,可以去看下是否有无效的库加入进来,进行裁剪移除。 完成后,进入system_server进程

我们看到一系列的线程启动,然后去看哪些比较耗时,进行裁剪或者优化。 这里我们着重需要关注的是pms,第一次开机后,需要一直做odex的预优化

类似于 PMS:performDexOpt:com.mediatek.ims

这个过程变成了启动的最大瓶颈,我们可以进行配置虚拟机的参数,让其默认便优化,可以减少启动耗时。

然后结束后,ams的systemReady 打印出来,进入第一个界面。

总结:从此文件,可以看到整个启动过程,所经历的每个步骤的时间,然后,我们可以去查看哪个阶段耗时,然后着重进行优化处理。

除此之外,我们还需要进行别的方位的优化,这时就需要查看下log信息,看下log中是否出现一些调试信息,kernel中关闭debug的一些开关。比如mtk的默认将libc的mem debug开启,导致内存的申请会变得比较慢,这时我们就可以进行关闭,来保证性能。 还有一些,可以去从log看到,比如有些权限出现异常,导致一直在申请权限,输出log中频繁出现avc同一个类别,那么我们可以将此权限配置进入selinux中,用来降低此进程频繁申请权限,占用的cpu时间。 关于优化,都是细细观察,从对比中,log中发现蛛丝马迹,然后进行查验,定位优化方向。 好了,今天就说到这,更多精彩,敬请期待。

延伸: 深入MTK平台bootloader启动之【 Pre-loader -> Lk】分析笔记 http://blog.csdn.net/forever_2015/article/details/53000643

lk启动流程详细分析 https://www.cnblogs.com/xiaolei-kaiyuan/p/5458145.html

本文分享自微信公众号 - 代码GG之家(code_gg_home),作者:陆晓明

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-01-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • android MVVM开发模式(一)

    ? android MVVM开发模式 概念 mvvm 是一个在 mvp 架构上修改,目标是将view的一些更改,跟model关联起来,使得model的数据改变...

    用户1263308
  • android调用dialog.hide()引起的输入事件派发错误问题追踪

    问题描述:某个界面启动后,上面的actionbar的item点击不起作用 问题调研: 00 在activity的启动过程中,创建了一个Fragment.jav...

    用户1263308
  • android MVVM开发模式(二)

    举手之劳,帮忙分享出去,让更多热爱编程的人加入进来。 简介 之前讲了那么多,主要围绕着这个核心概念:绑定。 不过相对来说,我们上节讲的其实只是它的一个知识点:解...

    用户1263308
  • 注意:C++中double的表示是有误差的

    注意:C++中double的表示是有误差的,直接通过下面的例子看一下 1 #include<iostream> 2 using namespace std;...

    用户1215536
  • 牛客网机试

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    云雀叫了一整天
  • python 学习总结4

      (1)python中的整数与数学中的概念是一致的,可以正也可以负,没有取值范围。

    py3study
  • 算法推荐 — 协同过滤

    求解评分矩阵的一种典型方法是:ALS,在spark-mllib库中有实现好的api;

    木野归郎
  • 挑战目标跟踪算法极限,商汤开源SiamRPN系列算法解读

    由于存在遮挡、光照变化、尺度变化等一些列问题,单目标跟踪的实际落地应用一直都存在较大的挑战。过去两年中,商汤智能视频团队在孪生网络上做了一系列工作,包括将检测引...

    机器之心
  • 目标跟踪最强算法开源:商汤 SiamRPN 系列论文解读

    AI 科技评论消息,日前,商汤科技智能视频团队首次开源其目标跟踪研究平台 PySOT。PySOT 包含了商汤科技 SiamRPN 系列算法,以及刚被 CVPR2...

    AI科技评论
  • 重磅!商汤开源目标跟踪最强算法SiamRPN系列

    AI 前线导读: 商汤科技智能视频团队首次开源其目标跟踪研究平台 PySOT。PySOT 包含了商汤科技 SiamRPN 系列算法,以及刚被 CVPR2019 ...

    代码医生工作室

扫码关注云+社区

领取腾讯云代金券