Android——bootchart

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.c
LOCAL_CFLAGS    += -DBOOTCHART=1
endif

非常明显的变量控制编译了。假设想要把bootchart编译进init,要么就export 这个变量为true,要么就定义赋值。

还有个相应的bootchart.h 头文件。里面有宏控制,想要用bootchart。怎么改就不多说了~

原生的启动是放在init.c的main里面:

#if BOOTCHART
queue_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等待,也就是文件操作的耗时,横轴为起机时间。以进程为单位描写叙述。

就到这里吧~

时间: 2024-09-30 05:17:22

Android——bootchart的相关文章

Using Bootchart on Android 在开机测量中的应用

Bootchart is a system designed to show a graphical display of the activity of a system during boot. ... 省略官方简介,下面是相关连接: http://www.elinux.org/Using_Bootchart_on_Android: http://www.bootchart.org/: 1.Installing the bootchart tool 安装工具 sudo apt-get ins

Android系统性能调优工具介绍

经作者授权,发表Tieto某青年牛的一篇<程序员>大作. Android系统性能调优工具介绍 在软件开发过程中,想必很多读者都遇到过系统性能问题.而解决系统性能问题的几个主要步骤是: 测评:对系统进行大量有针对性的测试,以得到合适的测试数据. 分析系统瓶颈:分析测试数据,找到其中的hotspot(热点,即bottleneck). 性能优化:对hotspot相关的代码进行优化. 由上述步骤可知,性能优化的目标对象是hotspot.如果找到的hotspot并非真正的热点,则性能优化的结果必然是事倍

Android 启动过程的底层实现

转载请标明出处: http://blog.csdn.net/yujun411522/article/details/46367787 本文出自:[yujun411522的博客] 3.1 android正常模式启动流程 主要流程例如以下: 1.系统加电.运行bootloader,bootloader会将内核载入到内存中. 2.内核载入到内存之后首先进入内核引导阶段,最后调用start_kernel进入内核启动.start_kernel终于会启动init程序 3.init程序负责解析init.rc文

android启动之init启动

整个Android系统的启动分为Linux kernel的启动和Android系统的启动.Linux kernel启动起来后,然后就运行第一个用户程序,在Android中,就是init程序,上一博文已经介绍. Init进程始终是第一个进程.Init进程的对应的代码的main函数在目录system/core/init/init.c,先来总体看一下这个main函数. main函数 int main(int argc, char **argv) { //首先声明一些局部变量 int fd_count

Android init源代码分析(2)init.rc解析

本文描述init.rc脚本解析以及执行过程,读完本章后,读者应能 (1) 了解init.rc解析过程 (2) 定制init.rc init.rc介绍 init.rc是一个文本文件,可认为它是Android系统启动脚本.init.rc文件中定义了环境变量配置.系统进程启动,分区挂载,属性配置等诸多内容.init.rc具有特殊的语法.init源码目录下的readme.txt中详细的描述了init启动脚本的语法规则,是试图定制init.rc的开发者的必读资料. Android启动脚本包括一组文件,包括

Android -- Init进程对信号的处理流程

Android -- Init进程对信号的处理流程 在Android中,当一个进程退出(exit())时,会向它的父进程发送一个SIGCHLD信号.父进程收到该信号后,会释放分配给该子进程的系统资源:并且父进程需要调用wait()或waitpid()等待子进程结束.如果父进程没有做这种处理,且父进程初始化时也没有调用signal(SIGCHLD, SIG_IGN)来显示忽略对SIGCHLD的处理,这时子进程将一直保持当前的退出状态,不会完全退出.这样的子进程不能被调度,所做的只是在进程列表中占据

[深入理解Android卷一全文-第三章]深入理解init

因为<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容. 第3章  深入理解init 本章主要内容 ·  深入分析init. 本章涉及的源代码文件名称及位置 以下是本章分析的源代码文件名称及其位置. ·  init.c system/core/init/init.c ·  parser.c system/core/init/parser.c ·  builtins.

Android Framework学习(一)之init进程解析

init进程是Android系统中用户空间的第一个进程,它被赋予了很多极其重要的工作职责,init进程相关源码位于system/core/init,本篇博客我们就一起来学习init进程(基于Android 7.0). init入口函数分析 init的入口函数为main,位于system/core/init/init.cpp int main(int argc, char** argv) { if (!strcmp(basename(argv[0]), "ueventd")) { ret

Android 开机优化

问题描述 问题分析 bootloader 优化 kernel层优化 frameworks层优化 debug 技术说明 总结 问题描述 开机时间相对参考机过慢,大约慢15s左右.Android 系统7.0. 问题分析 开机问题涉及的层次较多,大致有bootloader–>kernel–>Zygote–>PMS–>AMS–>Launcher 可以借助bootchart来分析,也可以直接通过log分析.不幸的是本项目机器因未知原因导致无法抓取到bootchart. 幸好在我浏览源码