Android——bootchart

bootchart:android原生自带的开机性能查看机制。通过收集android开机过程中的各种log数据,最终可以图表的形式展现各个进程在开机过程中的性能。(博客不能断…)


编译bootchart

bootchart 源码位于:\system\core\init\bootchart.c 属于init
查看对应Android.mk,其中有这么一段:

ifeq ($(strip $(INIT_BOOTCHART)),true)
LOCAL_SRC_FILES += bootchart.c
LOCAL_CFLAGS    += -DBOOTCHART=1
endif

很明显的变量控制编译了,如果想要把bootchart编译进init,要么就export 这个变量为true,要么就定义赋值。
还有个对应的bootchart.h 头文件,里面有宏控制,想要用bootchart,怎么改就不多说了~

原生的启动是放在init.c的main里面:

#if BOOTCHART
queue_builtin_action(bootchart_init_action, "bootchart_init");
#endif

可以看到首先跑的应该是bootchart里面的 bootchart_init 这个函数
可以稍微看下bootchart的源码,其中有这么一句:

 proc_read( LOG_STARTFILE, buff, sizeof(buff) );
 ...
 int  fd = open( LOG_ACCT, O_WRONLY|O_CREAT|O_TRUNC,0644);
 //这些文件都是/data分区下面的

第一个proc_read读取的算是一个配置时间: /data/bootchart-start,来决定bootchart从开启到结束的时间。
第二个自然就是抓取的log信息 存放的位置了:/data/bootchart
那么必然是需要data分区先挂载好,所以启动bootchart的地方得衡量!


使用bootchart

正常编译进系统之后,就需要手动的去设置一下上面说到的配置了:

echo 50 > /data/bootchart-start
//写个50s进去

重启即可,运行正常的话,可在/data/bootchart下面看到五个文件:

root@86v:/ # ll /data/bootchart                                                
-rw-rw-rw- root     root          517 2015-05-23 15:17 header
-rw-r--r-- root     root            0 2015-05-23 15:17 kernel_pacct
-rwxr-xr-x root     root       196608 2015-05-23 15:17 proc_diskstats.log
-rwxr-xr-x root     root      3735552 2015-05-23 15:17 proc_ps.log
-rwxr-xr-x root     root       131072 2015-05-23 15:17 proc_stat.log

打包为bootchart.tgz:

busybox tar zcvf bootchart.tgz header kernel_pacct proc_diskstats.log proc_ps.log proc_stat.log

adb pull 或者直接copy出来,放到pc上。

ubuntu的话可以用apt-get 去安装bootchart,可以用bootchart bootchart.tgz 去解析为图表,有可能会有错误,网上有人给出来了修改对应python脚本的方法,不难。
可惜我已经不在ubuntu下了,诸多不便 - -

Windows下的话,得去找个bootchart对应的jar包,可以从ubuntu上bootchart安装目录下拷出来

java -jar bootchart.jar bootchart.tgz

没有错误的话可以得到一张bootchart.png图片,上一张图:
技术分享

通俗的理解就是 蓝色为cpu占用 ,粉色为io等待,也就是文件操作的耗时,横轴为起机时间,以进程为单位描述。

就到这里吧~

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。