安卓调试瑞士军刀系列:bootchart 的配置和使用

Posted 阿迷创客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓调试瑞士军刀系列:bootchart 的配置和使用相关的知识,希望对你有一定的参考价值。


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. 结束语

最近开始需要使用到性能分析工具,打算再出一个系列的文章,欢迎交流~

以上是关于安卓调试瑞士军刀系列:bootchart 的配置和使用的主要内容,如果未能解决你的问题,请参考以下文章

Android TV 开发安卓电视调试 ( 开启网络远程调试 )

Android——bootchart

Android——bootchart

对比之美 和谐相融 RADO瑞士雷达表HyperChrome皓星系列Ultra Light超轻限量版腕表

bootchart--检测linux启动性能的软件

安卓动态调试七种武器之离别钩 – Hooking(下)