CPU利用率是對系統進行性能分析的重要因素,本文將說明CPU時間的組成以及利用率的計算方法。
內核中的時間
具體說明CPU的各種時間之前,先說明內核中幾個重要的時間概念。
HZ是系統時鐘在一秒內固定發出時鐘中斷的次數。HZ在編譯內核前是可以進行配置的,因此通過下述命令就可以查看當前系統的時鐘中斷頻率:
1
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為單位的。