bootchart 一般用于系统启动时间的分析,可为调试人员快速地提供一副体现CPU、IO、进程启动情况的,以时间序列展开的图表。
Android 目前已将bootchart集成到源码中,只需要在系统运行时设定其标志位即可采集到启动信息,非常方便,下面就介绍其使用方法。
1. 基础步骤
(1)安装必要工具
(2)在设备端使能bootchart,抓取数据
(3)在PC端解析bootchart数据,绘制成图
(4)分析bootchart.png
2. 安装工具
在grab-bootchart.sh中会调用到pybootchartgui,所以避免不开,需要安装:
- 在ubuntu 18.04 上,找不到bootchart,经过测试,安装下面这个即可
sudo apt-get install pybootchartgui
- 在ubuntu 16.04 上,可安装下面两个工具
sudo apt-get install bootchart
sudo apt-get install pybootchartgui
- 置于ubuntu 20.04上,以上两个工具均为找到安装方法,知道的同学楼下留言区分享一下
3. 设备端:使能bootchart标志位
adb connect 192.168.103.23
adb root
adb shell 'touch /data/bootchart/enabled'
4. PC端:方法1. 使用grab-bootchart.sh在线解析
注意:使用grab-bootchart.sh前,需要先建立好adb连接,这个工具会自动从adb连接的设备上拉去之前生成的bootchart数据,自动生成bootchart.png文件
szhou@bcsrv_02:~/aosp$ adb devices
List of devices attached
192.168.103.23:5555 device
szhou@bcsrv_02:~/aosp$ system/core/init/grab-bootchart.sh
parsing '/tmp/android-bootchart/bootchart.tgz'
parsing 'header'
parsing 'proc_stat.log'
parsing 'proc_ps.log'
warning: no parent for pid '2' with ppid '0'
parsing 'proc_diskstats.log'
merged 0 logger processes
pruned 142 process, 0 exploders, 19 threads, and 0 runs
False
bootchart written to 'bootchart.png'
system/core/init/grab-bootchart.sh: 21: system/core/init/grab-bootchart.sh: gnome-open: not found
Clean up /tmp/android-bootchart/ and ./bootchart.png when done
szhou@bcsrv_02:~/aosp$
5. PC端:方法2. 使用工具手动解析
(1)设备端压缩bootchart文件
console:/data/bootchart # ls
enabled header proc_diskstats.log proc_ps.log proc_stat.log
console:/data/bootchart # tar -czf bootchart.tgz *
console:/data/bootchart # ls
bootchart.tgz enabled header proc_diskstats.log proc_ps.log proc_stat.log
console:/data/bootchart #
(2)PC端解析bootchart文件
zhou@yanfa-zs-502143:~$ adb connect 192.168.103.23
* daemon not running; starting now at tcp:5037
* daemon started successfully connected to 192.168.103.23:5555
szhou@yanfa-zs-502143:~$ adb root
adbd is already running as root
szhou@yanfa-zs-502143:~$ adb connect 192.168.103.23
already connected to 192.168.103.23:5555
szhou@yanfa-zs-502143:~$ adb pull /data/bootchart/bootchart.tgz .
/data/bootchart/bootchart.tgz: 1 file pulled. 8.3 MB/s (617106 bytes in 0.071s)
szhou@yanfa-zs-502143:~$ adb shell sync
szhou@yanfa-zs-502143:~$ bootchart bootchart.tgz parsing 'bootchart.tgz'
parsing 'enabled'
parsing 'header'
parsing 'proc_diskstats.log'
parsing 'proc_ps.log'
warning: no parent for pid '2' with ppid '0'
parsing 'proc_stat.log'
merged 0 logger processes pruned 142 process, 0 exploders, 19 threads, and 0 runs False bootchart written to 'bootchart.png'
szhou@yanfa-zs-502143:~$
6. 解析bootchart PNG的数据
如下图分为几个部分,首先是一个头部信息,在最后部分可以看到启动时间为time:00:18:42,即启动到boot.completed=1所使用的时间,我们直到开机动画的结束也是以这个标志位为准,可以抓到如下打印:
console:/ $ [ 18.282519] ----- Boot animation finish ----- : [ 18.287149] [AT][AN][finish boot]
其次三部分图表,CPU、Disk、进程列表,时间轴从左到右,每一小格子为1秒
有时候我们需要注意进程列表中,CPU执行时间有停止、跨越一段时间、继续执行的进程,这个进程也许是因为等待某些资源,导致执行被挂起
7. 结束语
最近开始需要使用到性能分析工具,打算再出一个系列的文章,欢迎交流~