標籤:cpu perl 技術 ext 應該 track size tail variable
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以下看到五個檔案:
[email protected]:/ # 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等待,也就是檔案操作的耗時,橫軸為起機時間。以進程為單位描寫敘述。
就到這裡吧~
Android——bootchart