Android——bootchart,androidbootchart
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.cLOCAL_CFLAGS += -DBOOTCHART=1endif
很明顯的變數控制編譯了,如果想要把bootchart編譯進init,要麼就export 這個變數為true,要麼就定義賦值。
還有個對應的bootchart.h 標頭檔,裡面有宏控制,想要用bootchart,怎麼改就不多說了~
原生的啟動是放在init.c的main裡面:
#if BOOTCHARTqueue_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等待,也就是檔案操作的耗時,橫軸為起機時間,以進程為單位描述。
就到這裡吧~