CPU实时利用率计算方法

转载 2012年11月09日 18:17:28

http://blog.csdn.net/nineday/archive/2007/12/11/1928847.aspx

在Linux下,CPU利用率分为用户态,系统态和空闲态,分别表示CPU处于用户态执行的时间,系统内核执行的时间,和空闲系统进程执行的时间,三者之和就是CPU的总时间,当没有用户进程、系统进程等需要执行的时候,CPU就执行系统缺省的空闲进程。从平常的思维方式理解的话,CPU的利用率就是非空闲进程占用时间的比例,即CPU执行非空闲进程的时间/ CPU总的执行时间。

在Linux系统中,CPU时间的分配信息保存在/proc/stat文件中,利用率的计算应该从这个文件中获取数据。文件的头几行记录了每个CPU的用户态,系统态,空闲态等状态下分配的时间片(单位是Jiffies),这些数据是从CPU加电到当前的累计值。常用的监控软件就是利用/proc/stat里面的这些数据来计算CPU的利用率的。

不同版本的linux /proc/stat文件内容不一样,以Linux 2.6来说,/proc/stat文件的内容如下:

 

cpu 2032004 102648 238344 167130733 758440 15159 17878 0

cpu0 1022597 63462 141826 83528451 366530 9362 15386 0

cpu1 1009407 39185 96518 83602282 391909 5796 2492 0

intr 303194010 212852371 3 0 0 11 0 0 2 1 1 0 0 3 0 11097365 0 72615114 6628960 0 179 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

ctxt 236095529

btime 1195210746

processes 401389

procs_running 1

procs_blocked 0

 

第一行的数值表示的是CPU总的使用情况,所以我们只要用第一行的数字计算就可以了。下表解析第一行各数值的含义:

参数

解析(单位:jiffies)

user (2032004)

从系统启动开始累计到当前时刻,用户态的CPU时间,不包含 nice值为负进程。

nice (102648)

从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间

system (238344)

从系统启动开始累计到当前时刻,核心时间

idle (167130733)

从系统启动开始累计到当前时刻,除IO等待时间以外其它等待时间

iowait (758440)

从系统启动开始累计到当前时刻,IO等待时间

irq (15159)

从系统启动开始累计到当前时刻,硬中断时间

softirq (17878)

从系统启动开始累计到当前时刻,软中断时间

 

 

因为/proc/stat中的数值都是从系统启动开始累计到当前时刻的积累值,所以需要在不同时间点t1和t2取值进行比较运算,当两个时间点的间隔较短时,就可以把这个计算结果看作是CPU的即时利用率。

 

CPU的即时利用率的计算公式:

CPU在t1到t2时间段总的使用时间 = ( user2+ nice2+ system2+ idle2+ iowait2+ irq2+ softirq2) - ( user1+ nice1+ system1+ idle1+ iowait1+ irq1+ softirq1)

CPU在t1到t2时间段空闲使用时间 = (idle2 - idle1)

CPU在t1到t2时间段即时利用率 =  1 - CPU空闲使用时间 / CPU总的使用时间

 

这些值是谁,什么时候记录的呢?

每次timer的中断就会记录一次,记录在struct cpu_usage_stat 里,实现在timer_tick ->update_process_times里。
那么它的精度就是HZ,如果HZ是100,就意味着每S记录100次。这个精度当然是不高的,而且容易出错,下面是在Documentation/cpu-load.txt中的一个例子:
  time line between two timer interrupts
 |--------------------------------------|
 ^                                    ^
 |_ user appA begins working          |
                                      |_ user appA goes to sleep
结果这个A的动作没有被记录下来,这一S有可能被记录到其他的头上。如果你做的程序正好是那个其他,你就会抱怨说,这真是一陀屎呀。
那么有没有高精度的记录呢?
有,但是要自己写,就算你用oprofile之类的,他的原理也是用timer_interrupt记录的,你可以用其他的高精度timer,但是,频繁的中断会把系统弄死。所以要自己写,假设有一个高精度的硬件counter,好像x86下的TimeStamp Counter,
在cpu_idle 里记录idle的时间,在asm_do_IRQ里记录处理irq的时间,在context_switch记录进入了那个process,以及时间,在__do_softirq里记录处理softirq的时间,把这些东西记录在一块全局数组里。
 
 
 
 
也可以参考busybox中top的实现(在busybox/procps/top.c)

CPU使用率的计算方法

Windows下,大家可以使用任务理器来查看系统的各种资源使用情况,我们常常比较关心的就是CPU使用率,在Linux,同样有这样可视化的软件,但是大家可能会好奇那些不断变化的数字是怎样计算出来的? 下...
  • IT_DREAM_ER
  • IT_DREAM_ER
  • 2016年07月26日 17:07
  • 2442

cpu使用率的计算

http://blog.csdn.net/tenfyguo/article/details/7476306 proc文件系统 /proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它...
  • panfengyun12345
  • panfengyun12345
  • 2014年12月25日 17:14
  • 1780

计算cpu利用率和内存利用率

Linux 下CPU、内存利用率--计算(二) 当需要频繁地获取,可以选择这种方法。 1、原理 (1)   CPU利用率 在Linux下,CPU利用率分为用户态,系统态和空闲态...
  • htjx99
  • htjx99
  • 2015年01月20日 17:08
  • 1978

LINUX CPU利用率计算

proc文件系统 /proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为内核与进程提供通信的接口。用户和应用程序可以通过/proc得到系统的信息,并可以改变内核...
  • turkeyzhou
  • turkeyzhou
  • 2011年08月22日 21:54
  • 8667

CPU的利用率是怎么计算的

分类: 方法1: 使用CPU的处理能力基准计算实时CPU占用率  具体描述:  (1) 在RTOS系统启动前, 使用Tick中断测试CPU的处理能力基准 CPUPerform...
  • mqr120518
  • mqr120518
  • 2015年01月16日 14:51
  • 170

windows中计算进程CPU占用率(一)

windows中计算进程CPU占用率(一)
  • chenlycly
  • chenlycly
  • 2016年11月12日 12:00
  • 1986

windows中计算进程CPU占用率(二)

windows中计算进程CPU占用率(二)
  • chenlycly
  • chenlycly
  • 2016年11月12日 12:03
  • 1455

有关Windows平台下CPU使用率的计算

一.   有关Windows平台下CPU使用率的计算   1. Windows下CPU使用率的定义 a)        CPU使用率:在任务管理器的刷新周期内CPU忙的时间与整个刷新周期的比值。...
  • expleeve
  • expleeve
  • 2015年03月05日 13:34
  • 1265

CPU利用率的计算

proc/stat文件有实时CPU信息: 第一行的数值表示CPU总的使用情况,这些数据都是以clock_tick为单位记录的,这里的clock_tick在绝大多数机器上是10ms。 cpu  27...
  • zhangyongfeiyong
  • zhangyongfeiyong
  • 2016年12月08日 09:37
  • 523

[转载]工程上常用的三种计算实时CPU占用率算法

本文提供了工程上用于测试和计算实时CPU占用率的三种方法, 并对它们的优缺点进行了分析. 关于为什么要实时测量CPU占用率, 麻烦看官去找教学资料, 作者只说明, 本文只提供的三种方法均具有很高...
  • xjbclz
  • xjbclz
  • 2016年06月27日 21:37
  • 783
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CPU实时利用率计算方法
举报原因:
原因补充:

(最多只允许输入30个字)