CPU利用率计算原理

陈磊

CPU利用率计算原理


1、相关概念

在Linux/Unix下,CPU利用分为用户态、系统态和空闲态。分别表示CPU处于用户执行的时间,系统内核执行的时间,空闲系统进程执行时间。

CPU利用率:CPU的使用情况

用户时间(User Time):CPU执行用户进程的时间,其中包含了nices时间。通常期望用户CPU越高越好。

系统时间(System Time):CPU在内核运行时间,包含了hard IRQ和soft  IRQ时间。系统占用CPU越高,表明系统某部分存在瓶颈,通常希望越低越好。

等待时间(waiting Time):CPU等待I/O操作完成话费的时间。系统部分应该花费大量时间来等待I/O操作。否则说明I/O存在瓶颈。

空闲时间(Idle Time):系统处于空闲状态,等待进程运行

Nice时间(Nice Time):系统调整进程优先级所花费的时间

硬中断处理时间(hard IRQ time):系统处理硬中断所花费时间

软中断处理时间(soft Irq Time):系统处理软中断所花费时间

丢失时间(Stealtime):被强制等待(involuntary wait)虚拟CPU时间,此时Hypervisor在为另一个虚拟处理器服务。

2、top命令结果

top - 14:12:38 up 91 days, 19:36,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 183 total,   1 running, 182 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
其中:us: user time
sy:system time
ni:nice time
id:idle time
wa:waiting time
hi:hard irq time
si:soft irq time
st:steal time

3、CPU利用率计算

linux CPU利用率是根据/proc/stat中的信息计算出来的。

[root@host1 ~]# cat /proc/stat
cpu  5371431 789 1236460 12682820761 2124402 39137 331452 0
cpu0 34208 0 20097 793162413 27524 1 1092 0
cpu1 684284 147 97149 791633337 815849 2249 12309 0
cpu2 314686 70 84513 792477300 357856 4096 6795 0
cpu3 52805 4 52537 793044965 89980 2421 2597 0
cpu4 1406103 1 170633 791429122 208662 951 29829 0
cpu5 305922 0 80963 792752323 89010 367 16708 0
cpu6 295994 1 81298 792801389 48928 274 17402 0
cpu7 273993 0 48034 792880613 36192 312 6134 0
cpu8 156902 24 26041 793029770 22510 1 10019 0
cpu9 326768 193 87718 792704802 119144 668 5967 0
cpu10 179389 83 116465 792863574 75718 1251 8773 0
cpu11 310820 52 57777 792798184 40570 5077 32766 0
cpu12 210204 8 37670 792911300 70080 1184 14792 0
cpu13 177398 119 86398 792884983 67983 1562 26788 0
cpu14 95929 38 49440 793016440 34708 6010 42658 0
cpu15 546019 40 139718 792430236 19680 12706 96815 0
intr 4341256119 3638193703 0 0 3 4 0 0 0 1 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 14601 0 0 0 0 0 0 0 8229 0 0 0 0 0 0 0 109101 0 0 0 0 0 0 0 367171 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 2 0 0 0 0 0 0 0 8200432 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 232194206 0 0 0 0 0 0 0 34559346 0 0 0 0 0 0 0 72266221 0 0 0 0 0 0 0 21171944 0 0 0 0 0 0 12188435 29497926 0 0 0 0 0 0 0 39261029 0 0 0 0 0 0 0 190920664 0 0 0 0 0 0 0 58128746 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3670122 0 0 0 0 0 0 19 388125 0 0 0 0 0 0 0 90761 0 0 0 0 0 0 0 25328 0 0 0 0
ctxt 2078087675
btime 1344940556
processes 3360741
procs_running 1
procs_blocked 0

上面为CPU信息,其中cpu为总信息,cpu0...cpuN为各个cpu信息

上面8个值(单位ticks)分别为:

us ni sy id wa hi si st

CPU利用率计算方法如下:

CPU时间=us+ni+sy+id+wa+hi+si+st
%us=(us+ni)/CPU时间×100%
%sy=(sy+hi+si)/CPU时间×100%
%id=id/CPU时间×100%
%ni=ni/CPU时间×100%
%wa=wa/CPU时间×100%
%hi=hi/CPU时间×100%
%si=si/CPU时间×100%
%st=st/CPU时间×100%