只需一个命令,快速定位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的预优化

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

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

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

除此之外,我们还需要进行别的方位的优化,这时就需要查看下log信息,看下log中是否出现一些调试信息,kernel中关闭debug的一些开关。比如mtk的默认将libc的mem debug开启,导致内存的申请会变得比较慢,这时我们就可以进行关闭,来保证性能。

还有一些,可以去从log看到,比如有些权限出现异常,导致一直在申请权限,输出log中频繁出现avc同一个类别,那么我们可以将此权限配置进入selinux中,用来降低此进程频繁申请权限,占用的cpu时间。

关于优化,都是细细观察,从对比中,log中发现蛛丝马迹,然后进行查验,定位优化方向。

好了,今天就说到这,更多精彩,敬请期待。

lk启动流程详细分析

https://www.cnblogs.com/xiaolei-kaiyuan/p/5458145.html

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180115G0TG8700?refer=cp_1026

相关快讯

扫码关注云+社区