CPU利用率是对系统进行性能分析的重要因素,本文将说明CPU时间的组成以及利用率的计算方法。
内核中的时间
具体说明CPU的各种时间之前,先说明内核中几个重要的时间概念。
HZ是系统时钟在一秒内固定发出时钟中断的次数。HZ在编译内核前是可以进行配置的,因此通过下述命令就可以查看当前系统的时钟中断频率:
cat /boot/config-`uname -r` | grep CONFIG_HZ
tick为系统时钟每“滴答”一次的时间,其值为(1/HZ)秒。也就是连续两次时钟中断之间的时间间隔。
jiffies用来计算自系统启动以来tick的次数,也就是说系统时钟每产生一次时钟中断,该变量的值就增加一次。
CPU时间
CPU的工作时间由三部分组成:用户态时间、系统态时间和空闲态时间。具体的组成为;
CPU时间=User time+Nice time+System time+Hardirq time+Softirq time+Waiting time+Idle time+Steal time
空闲态时间只包含了idle time,而用户态时间和系统态时间则由多个部分组成,详析介绍如下。
用户态时间
用户态时间包括用户时间和nice时间。
用户时间(user time)指的是CPU在用户态执行进程的时间。nice时间(nice time)是指系统花费在调整进程优先级上的时间。
内核态时间
内核态时间包括系统时间、软中断时间和硬中断时间。
系统时间(system time)表示CPU在内核运行的时间,如果一个CPU的系统时间占有率高,则说明该系统中某个子系统产生了瓶颈。
软中断时间和硬中断时间分别对应系统在处理软硬中断时候所花费的CPU时间。
此外,waiting time是指CPU在等待I/O完成时所花费的时间。而steal time指的是当前CPU等待另外虚拟的CPU处理完毕时话费的时间。
CPU利用率
CPU利用率可以通过top等命令来查看,它们的计算方法如下:
%us =(User time + Nice time)/CPU时间*100%
%sy=(System time + Hardirq time +Softirq time)/
%id=(Idle time)/CPU时间*100%
%ni=(Nice time)/CPU时间*100%
%wa=(Waiting time)/CPU时间*100%
%hi=(Hardirq time)/CPU时间*100%
%si=(Softirq time)/CPU时间*100%
%st=(Steal time)/CPU时间*100%
查看方法
通过top、iostat和vmstat等命令均可以查看上述CPU的利用率。这些命令的数据来源均来自与/proc/stat文件,不过该文件中的时间是以tick为单位的。