Android7.0 bootchart工具使用说明

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fu_kevin0606/article/details/53928748

    Bootchart是一个用于linux启动过程性能分析的开源软件工具,在系统启动过程自动收集CPU占用率、进程等信息,并以图形方式显示分析结果,可用作指导优化系统启动过程。Android5.1之前已自带bootchart,但缺省时不被编译,需要显式指定编译。5.1之后的不用编译boot.img.

安装Bootchart

首先,在pc机上安装bootchart工具,命令如下:

sudo apt-get install bootchart

显示编译bootchart

       1)由于5.1源码默认编译时是不编译bootchart的,需要打开该编译项:
 touch system/core/init/init.c(更新文件的访问和修改时间为当前时间)
由于该文件对应的镜像文件为boot.img,需要编译包含它的boot.img文件:
make bootimage INIT_BOOTCHART=true
然后,将编译好的boot.img文件替换到手机中。
      2)而7.0, 6.0源码编译时将bootchart也编译了,所以不用再进行编译boot.img,方便了很多。

设定采样时间和数据采集存储目录

1)在5.1手机上创建/data/bootchart-start文件,存储bootchart采样时间(秒):
adb shell 'echo 120 > /data/bootchart-start'
创建数据采集之后的存储目录:
adb shell 'mkdir /data/bootchart'
备注:详细介绍请参见system/core/init/README.BOOTCHART
2)由于在6.0手机中原生已经存在/data/bootchart文件夹,故不用手动创建,只需要创建/data/bootchart/start文件存储bootchart采样时间(s)
adb shell 'echo 120 > /data/bootchart/start'
采集完数据保存在/data/bootchart文件夹中。
由于bootchart文件夹为shell权限,故在user版本也可以cd进去,并且创建start文件写入数据,很方便。
由于7.0 bootchart.cpp中有bug, google在7.1上还没有修复. 当我们调用如下命令:
  adb shell 'echo 120 > /data/bootchart/start'
手机会不断重启, 不过请data分析清理掉就可以了.
备注:详细介绍请参见system/core/init/readme.txt

数据采集与分析

关机和开机后,采集的数据信息会自动收集到/data/bootchart目录下,包含如下5个文件:
header,kernel_pacct,proc_diskstats.log,proc_ps.log,proc_stat.log
接着,可以将以上文件打包放到pc机上,以便利用bootchart工具分析采集到的数据(其中codebase为自己源码所在根目录):
./codebase/system/core/init/grab-bootchart.sh
该命令执行完毕,会在当前执行路径下生成bootchart.tgz压缩包,最后利用bootchart工具即可对采集到的数据生成直观的图像bootchart.png,命令如下:
bootchart ./bootchart.tgz
1)在5.1中grap-bootchart.sh所要执行的命令就是将手机data/bootchart中的文件pull出来,然后将文件进行压缩,生成的压缩文件就放在执行该脚本的文件夹下面。
2)在6.0中Google更加贴心了,grap-bootchart.sh在5.1的基础上又调用bootchart工具解析生成的压缩包,生成图片,最后又用命令将图片打开。我们在userdebug时可能感觉不到grap-bootchart.sh的好处,因为我们可以手动pull文件,压缩,解析,查看图片。但是如果在user版本上,我们虽然可以在data/bootchart下新建文件,如果你要想用命令将里面的文件pull出来,就报出文件夹不存在的命令,这时如果使用该脚本就没有问题,最终生成开机图片。
最后生成的分析结果如下:


3)7.0代码中新加功能Comparing two bootcharts,对比两个bootchart图.
通过compare-bootcharts.py脚本对比所选两个进程的开始结束时间点,从而得到对应进程之间的耗时差距. 当我们使用grab-bootchart.sh脚本获取对应的bootcahrt图时,会在PC的/tmp/android-bootchart目录下留下bootchart.tgz压缩包.然后将所要比较的两个bootchart的压缩包放在两个不同的目录base_bootchart_dir, exp_bootchart_dir.执行如下命令:
system/core/init/compare-bootcharts.py base_bootchart_dir exp_bootchart_dir
就可以得到如下信息:


可以看到开机动画一个结束时间为22.5s, 一个为25.46s,两者相差2.96s

本文初步介绍了bootchart工具的使用,已便于分析系统启动过程的耗时点,为优化启动过程提供指导意义.
阅读更多

没有更多推荐了,返回首页