Android开机启动优化

Posted by Jason on March 29, 2019

最近在搞安卓开机优化,很不好搞,把遇到的问题先记录一下。

使用bootchart分析开机启动时间

编译bootchart

在/system/core/init中的Android.mk中加入INIT_BOOTCHART:true

 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 INIT_BOOTCHART := true

使用mmm .-B强制编译下,会在out/target/product/sabresd_6dq/root/下生成init文件,因为init是在root目录下,所以需要重新烧写boot.img

生成开机log文件

在data目录下面,创建bootchart-start文件,然后echo 一个数字进去,这个数字是开机启动一直进行bootchart的时间。

echo 90 > bootchart-start

重启系统,data目录下会自动创建bootchart文件夹,里面有相关的log。需要注意的是要先echo 1 > bootchart-stop文件否则抓取下来的文件不能生成图片。

打包/data/bootchart/目录下的文件

tar -czf bootchart.tar *

生成png图片

首先需要在Ubuntu系统上装bootchart工具

sudo apt-get install bootchart

执行bootchart bootchart.tar生成bootchart.png图片

可以看到bootanimation结束的时间大约是16S的时候。因为之前系统已经优化过了,可以看到zygote和system_server里面IO wait已经很少了,可以优化的空间应该不大了。

readahead提升开机速度

read调用过程,经过虚拟文件系统,具体文件系统层,page cache,块设备层,IO调度层,具体物理设备层

read调用过程

而readahead的功能就是提前将数据读到Page Cache中

注意要添加CREATE_TRACE_POINTS,但是只有一个文件能包含这个宏,否则编译不过

内核的解释

/*Any file that uses trace points, must include the header.

But only one file, must include the header by defining

CREATE_TRACE_POINTS first. This will make the C code that

creates the handles for the trace points.
*/
#define CREATE_TRACE_POINTS

参考资料

android bootchart 分析开机启动时间

Android开机速度优化简单回顾

添加readahead trace event