bootchart:android原生自帶的開機性能查看機制。通過收集android開機過程中的各種log數據,終於能夠圖表的形式展現各個進程在開機過程中的性能。(博客不能斷…)
撰寫不易,轉載需注明出處:http://blog.csdn.net/jscese/article/details/45933943本文來自 【jscese】的博客!
編譯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等待,也就是文件操作的耗時,橫軸為起機時間。以進程為單位描寫敘述。
就到這里吧~