From c8b6731af9af871e254b6d02c2d3843033b68903 Mon Sep 17 00:00:00 2001 From: lion187 Date: Thu, 28 Feb 2019 10:45:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20Android?= =?UTF-8?q?=5F8=5F=E4=B8=8A=E4=BD=BF=E7=94=A8=5Fbootchart.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BootChart/Android_8_上使用_bootchart.md | 141 ------------------ 1 file changed, 141 deletions(-) delete mode 100644 Software/Application/BootChart/Android_8_上使用_bootchart.md diff --git a/Software/Application/BootChart/Android_8_上使用_bootchart.md b/Software/Application/BootChart/Android_8_上使用_bootchart.md deleted file mode 100644 index 1e6155e..0000000 --- a/Software/Application/BootChart/Android_8_上使用_bootchart.md +++ /dev/null @@ -1,141 +0,0 @@ -# Android 8 上使用 bootchart - -## 基本原理 - -bootchart 可以在 Android 系统启动到 init 阶段时开始收集系统信息,并保存成 Log 文件。可在开发机上使用 bootchart 命令对这些 Log 文件进行分析,生成图表。 - -Android 8 上默认编译 bootchart 为 init 内置工具。使用方式可参考: - - ${AndroidSrc}/system/core/init/README.md - -中与 bootchart 有关的内容。也可以通过分析以下文件了解 bootchart 的启动流程和触发条件。 - - ${AndroidSrc}/system/core/init/Android.mk - ${AndroidSrc}/system/core/init/builtins.cpp - ${AndroidSrc}/system/core/init/bootchart.cpp - ${AndroidOS}/init.rc - -通过上述文件分析可知,bootchart 会在 - - ${AndroidOS}/data/bootchart/enabled - -文件存在的情况下被使能。系统启动时,触发其执行的条件可以分析 init.rc 文件,主要触发流程为: - - on property:sys.boot_from_charger_mode=1 - trigger late-init - - on late-init - trigger post-fs-data - - on post-fs-data - bootchart start - -结束 bootchart 执行的条件为: - - on property:sys.boot_completed=1 - bootchart stop - -## 使用方法 - -在开发机上先安装 bootchart 和 pybootchartgui 用于处理和分析开机数据: - - sudo apt-get install bootchart - sudo apt-get install pybootchartgui - -接着在目标机上使能 bootchart: - - $ touch /data/bootchart/enabled - -之后重启目标机系统,bootchart 会在启动时自动开始和结束收集目标机系统的启动数据信息。系统启动后在 /data/bootchart/ 路径下会多出几个 Log 文件。使用 adb 命令将这些 Log 文件传输到开发机: - - $ adb pull /data/bootchart/ - -接下来,在开发机上使用以下脚本文件对 Log 文件进行分析并生成 PNG 文件: - -```sh -#!/bin/bash - -FILES="header proc_stat.log proc_ps.log proc_diskstats.log" -TMPTAR="bootchart.tgz" - -tar -cvzf $TMPTAR $FILES -bootchart --format=svg -o bootchart.svg $TMPTAR -rm -rf $TMPTAR - -``` - -或者可以使用源码中官方脚本一次完成 Log 文件的下载和分析工作: - - ${AndroidSrc}/system/core/init/grab-bootchart.sh - -其内容如下: - -```sh -#!/bin/sh - -# - -# This script is used to retrieve a bootchart log generated by init. - -# All options are passed to adb, for better or for worse. - -# See the readme in this directory for more on bootcharting. - - - -TMPDIR=/tmp/android-bootchart - -rm -rf $TMPDIR - -mkdir -p $TMPDIR - - - -LOGROOT=/data/bootchart - -TARBALL=bootchart.tgz - - - -FILES="header proc_stat.log proc_ps.log proc_diskstats.log" - - - -for f in $FILES; do - - adb "${@}" pull $LOGROOT/$f $TMPDIR/$f 2>&1 > /dev/null - -done - -(cd $TMPDIR && tar -czf $TARBALL $FILES) - -bootchart ${TMPDIR}/${TARBALL} - -gnome-open ${TARBALL%.tgz}.png - -echo "Clean up ${TMPDIR}/ and ./${TARBALL%.tgz}.png when done" - - -``` - -## 性能对比 - -Google 还给我们提供了一个比较脚本,用来比较两次开机的数据: - - ${AndroidSrc}/system/core/init/compare-bootcharts.py - -首先将两次得到的 Log 文件打包成 tgz 包并保存到不同的目录中如 cmp1_dir 和 cmp2_dir: - - $ FILES="header proc_stat.log proc_ps.log proc_diskstats.log" - $ TMPTAR="bootchart.tgz" - $ cd cmp1_dir - $ tar -cvzf $TMPTAR $FILES - $ cd ../cmp2_dir - $ tar -cvzf $TMPTAR $FILES - $ cd .. - -接着使用如下命令处理两次开机数据 - - $ ${AndroidSrc}/compare-bootcharts.py cmp1_dir cmp2_dir - -也可以将以上命令按自己的实际需求写成脚本文件来使用。