笔记梳理:Android CPU

5 篇文章 0 订阅
1 篇文章 0 订阅

Linux层有公共目录。很多公共信息资源由两个虚拟的文件系统提供: 

/proc:包括内存,CPU,网络等 

/sys:设备驱动,网络环境(/sys/class/net/)等

 

我们先通过proc/stat  来获取cpu的整体情况

adb shell cat proc/stat

 

在对图片中的数据进行解析

 

第一列中(cpu ) :是cpu的名称

第二列中 (212510)user :   从系统启动开始累计到当前时刻,用户态的CPU时间(单位:jiffies) ,不包含nice值为负进程。1 jiffies=0.01秒 

第三列中 (10540 )nice  :从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies) 

第四列中(132215)system : 从系统启动开始累计到当前时刻,核心时间(单位:jiffies) 

第五列中(399620) idle: 从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffies) 

第六列中(3781) iowait: 从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies) 

第七列中(0) irq :从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies) 

第八列中(18) softirq: 从系统启动开始累计到当前时刻,软中断时间(单位:jiffies)

第九列中(0) stealstolen: 从系统启动开始累积到当前时刻,在虚拟环境运行时花费在其他操作系统的时间

第十列中(0) guest: 从系统启动开始累积到当前时刻,在Linux内核控制下的操作系统虚拟cpu花费的时间。

第十一列中(0) guest_nice: 从系统启动开始累积到当前时刻,在Linux内核控制下的操作系统虚拟cpu花费在nice进程上的时间。

总的CPU时间 cpu_time = user + system + nice + idle + iowait + irq + softirq

 

 

我们再通过proc/stat  来进程cpu的情况

adb shell cat/pid/stat

在对图片中的数据进行解析

pid=5832进程(包括轻量级进程,即线程)号

comm=ncent.wecarnavi 应用程序或命令的名字

task_state=S 任务的状态,R:runnign, S:sleeping (TASK_INTERRUPTIBLE), D:disk sleep (TASK_UNINTERRUPTIBLE), T: stopped, T:tracing stop,Z:zombie, X:dead

ppid=396父进程ID

pgid=395线程组号

sid=0  该任务所在的会话组ID

tty_nr=0   (pts/3) 该任务的tty终端的设备号,INT(34817/256)=主设备号,(34817-主设备号)=次设备号

tty_pgrp=-1 终端的进程组号,当前运行在该任务所在终端的前台任务(包括shell 应用程序)的PID。

task->flags=1077936448 进程标志位,查看该任务的特性

min_flt=757469 该任务不需要从硬盘拷数据而发生的缺页(次缺页)的次数

cmin_flt=1051累计的该任务的所有的waited-for进程曾经发生的次缺页的次数目

maj_flt=165该任务需要从硬盘拷数据而发生的缺页(主缺页)的次数

cmaj_flt=0 累计的该任务的所有的waited-for进程曾经发生的主缺页的次数目

utime=7796该任务在用户态运行的时间,单位为jiffies

stime=1229该任务在核心态运行的时间,单位为jiffies

cutime=0 累计的该任务的所有的waited-for进程曾经在用户态运行的时间,单位为jiffies

cstime=1 累计的该任务的所有的waited-for进程曾经在核心态运行的时间,单位为jiffies

priority=20任务的动态优先级

nice=0 任务的静态优先级

num_threads=100 该任务所在的线程组里线程的个数

it_real_value=0 由于计时间隔导致的下一个 SIGALRM 发送进程的时延,以 jiffy 为单位.

start_time=1925666 该任务启动的时间,单位为jiffies

vsize=1934348288(page) 该任务的虚拟地址空间大小

rss=53203(page) 该任务当前驻留物理地址空间的大小

 

以下只解释对我们计算Cpu使用率有用相关参数

参数                                                                解释

pid=5832                    进程号

utime=7796                       该任务在用户态运行的时间,单位为jiffies

stime=1229                      该任务在核心态运行的时间,单位为jiffies

cutime=0                            所有已死线程在用户态运行的时间,单位为jiffies

cstime=1                            所有已死在核心态运行的时间,单位为jiffies

进程的总Cpu时间processCpuTime = utime + stime + cutime + cstime,该值包括其所有线程的cpu时间。

 

 

总的Cpu使用率计算

计算方法:

1、  采样两个足够短的时间间隔的Cpu快照,分别记作t1,t2,其中t1、t2的结构均为:

(user、nice、system、idle、iowait、irq、softirq、stealstolen、guest)的9元组;

2、  计算总的Cpu时间片totalCpuTime

a)         把第一次的所有cpu使用情况求和,得到s1;

b)         把第二次的所有cpu使用情况求和,得到s2;

c)         s2 - s1得到这个时间间隔内的所有时间片,即totalCpuTime = j2 - j1 ;

3、计算空闲时间idle

idle对应第四列的数据,用第二次的第四列 - 第一次的第四列即可

idle=第二次的第四列 - 第一次的第四列

6、计算cpu使用率

pcpu =100* (total-idle)/total

某一进程Cpu使用率的计算

计算方法:  

1.               采样两个足够短的时间间隔的cpu快照与进程快照,

a)         每一个cpu快照均为(user、nice、system、idle、iowait、irq、softirq、stealstolen、guest)的9元组;

b)         每一个进程快照均为 (utime、stime、cutime、cstime)的4元组;

2.             分别根据(进程的总Cpu时间,总的CPU时间)计算出两个时刻的总的cpu时间与进程的cpu时间,分别记作:totalCpuTime1、totalCpuTime2、processCpuTime1、processCpuTime2

3.               计算该进程的cpu使用率pcpu = 100*( processCpuTime2 – processCpuTime1) / (totalCpuTime2 – totalCpuTime1) (按100%计算,如果是多核情况下还需乘以cpu的个数);

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值