CPU性能的主要指標


來源: http://blog.itpub.net/24435147/viewspace-694470/

 

CPU的主要指標:

CPU Utilization

CPU 使用率,CPU的使用時間百分比,75%以上就比較高了。

在任意時間內,CPU7個狀態
1.idle,表示CPU閑置並等待工作分配
2.user,表示CPU在運行用戶的進程 
3.system,表示CPU在執行kernel工作 
4.nice,表示CPU花費在被nice改變過優先級的process上的時間(注意:nice命令改變優先級的process僅指那些nice值為負的process.花費在被nice命令改變優先級的任務上的時間也將被計算在系統和用戶時間內,因此整個時間加起來可能會超過百分之百
5.iowait,表示CPU等待IO操作完成的時間 
6.irq,表示CPU開銷在響應硬中斷上的時間 
7.softirq,表示CPU開銷在響應軟中斷上的時間
我們一般用vmstat看到的都是四個狀態:sy,us,id,wa,通過他和load avg結合,基本可以知道cpu的狀態

大部分的性能工具用百分比表示CPU時間.system時間占用很高的時候,你可以用"oprofile"工具發現時間都花費在哪里.iowait很高的時候,你需要分析你的IO設備,比如磁盤,網卡.

 

Average load

平均負載,上一分鍾同時處於“就緒”狀態的平均進程數。

Load這個東西怎么理解呢,就像一條馬路,有N個車道,如果N個進程進入車道,那么正好一人一個,再多一輛車就占不到車道,要等有一個車空出車道。 
CPU中可以理解為CPU可以並行處理的任務數,那么就是“CPU個數 * 核數”,如果CPU Load = CPU個數 * 核數 那么就是說CPU正好滿負載,再多一點,可能就要出問題了,有任務不能被及時分配處理器,那么保證性能的話,最好是小於CPU個數 * 核數 *0.7

Load Average CPU Load,它所包含的信息是在一段時間內 CPU正在處理以及等待 CPU處理的進程數之和的統計信息,也就是 CPU使用隊列的長度的統計信息。

Load Average 的值應該小於“CPU個數 * 核數 *0.7 ” ,否則就高了。

比如: 
11CPULoad Average < 1 * 1 * 0.7 = 0.7 
14核的CPULoad Average必須 < 1 * 4 * 0.7 = 2.8 
查看cpu的信息:grep model name /proc/cpuinfo

使用 vmstat 看到的數據中也有這個數據,vmstat 查看rLoad Average)。

 

另外,top命令應該是把每個核的CPU占用率加起來,算一個和,於是多核情況下會top命令會計算出超過100%

linux,process有兩種狀態
1.runnable 
2.blocked waiting for an event to complete 
一個blocked狀態的process可能在等待一個I/O操作獲取的數據,或者是一個系統調用的結果。 
如果一個processrunnable狀態,這就意味着它將同其他runnable狀態的process等待CPU時間,而不是立即獲得CPU時間,一個runnable狀態的process不需要消耗CPU時間,只有當Linux調度進程從runnable隊列中選擇哪個process下次執行。 
 processrunnable狀態,當時等待CPU時間時,他們形成的等待隊列稱作Run Queue.Run Queue越大,表示等待的隊列越長。 
性能工具通常顯示runnable processes的數目和blocked processes的數目。 
還有一個很常見的系統狀態是load average,系統的load是指runningrunnable process的總和。 
例如:如果有兩個processesrunning和有三個在等待運行(runnable),那么系統的load為五。 
load average是指在指定時間內load的平均值。一般load average顯示的三個數字的時間分別為1分鍾,五分鍾和十五分鍾。

 

Interrupt rate

每秒內的設備中斷數。CPU接收硬件驅動發出的中斷請求數。

這種中斷通常是下面請看被觸發:

當一個驅動器有一個時間需要被kernel操作時。例如:如果一個磁盤控制器從磁盤上取得了一個數據塊,kernel需要讀取使用這個塊,那么磁盤控制器會觸發一個中斷; 
kernel接收每個中斷,一個中斷處理器運行如果這個中斷被注冊,否則,這個中斷被忽略。 
在系統中,中斷處理器的優先級非常高,而且執行速度非常快。 
很多時候,有些中斷處理並不需要很高的處理優先級,所以也有soft- interrupt handler

如果有很多的中斷,kernel需要花費大量的時間去處理中斷。

可以檢查/proc/interrupts能夠知道中斷發生在哪個CPU .

 

Interrupt Rate中包括內核由於進程的時間片中斷。 
 Linux 2.6 中,系統時鍾每 1 毫秒中斷一次時鍾頻率,用 HZ 單位表示(即每秒中斷 1000 次)。 
系統不一樣,內核不一樣的配置100250的都有。

內核的時鍾頻率可以通過如下命令知道: 

cat /boot/config-`uname -r` | grep ^CONFIG_HZ=

CONFIG_HZ=100

每秒總的時鍾中斷數就是 = cpu個數 * 核數 * CONFIG_HZ

cat /proc/interrupts   可以查看中斷的類型以及次數

          CPU0       CPU1       CPU2       CPU3       
LOC:   97574747   52361843  105207680   69447653   Local timer interrupts 
RES:     107368     257510      98635     186294   Rescheduling interrupts 
CAL:      14174      14206      14164        194   function call interrupts 
TLB:    1007949     853117     992546     591410   TLB shootdowns

vmstat查看的 inInterrupt)就是這個參數

 

Context Switch Rate

大部分現在的CPU在同一時間只能運行一個process 
雖然也有一些CPU,例如超線程技術的CPU,能實現同時運行超過一個processlinux把這種CPU看作多個單線程CPU 
linux內核不斷的在不同process間切換,造成一個錯覺,讓人感覺一個單CPU同時處理多個任務。 
不同process之間的切換稱作 Context Switch 
當系統做Context Switch時,CPU保存所有old processcontext信息並獲得new process的所有context信息。 
Context信息包括大量的linux追蹤每個process信息,尤其是一些資源: 
那些process正在執行,被分配了哪些內存,它打開了那些文件,等等。 
切換Context會觸發大量的信息移動,這是比較高的開銷。 
如果可能的話盡量保持很小的 context switches

為了盡可能的減小context switches,你首先需要知道它們是怎么產生的。 
首先,kernel調度觸發context switches。為了保證每個process平等的共享CPU時間,kernel周期性中斷runningprocess,如果合適, 
kernel調度器會開始一個其他的process而不是讓當前的process繼續執行,每次的周期性中斷或者定時中斷都可能觸發context switch 
每秒定時中斷的次數因不同架構和不同的kernel版本而不同。 
獲取每秒中斷次數的一個簡單辦法是通過監控 /proc/interrupts文件,看下面的例子
root@localhost asm-i386]# cat /proc/interrupts | grep timer; sleep 10 ; cat /proc/interrupts | grep timer 
0: 24060043 XT-PIC timer 
0: 24070093 XT-PIC timer 
上面可以看到在指定的時間內timer次數的變化,每秒產生的中斷次數為1000次。 
如果你的context switchtimer中斷大很多。那么context switch更多的可能是I/O請求或者其他長時間的系統調用(比如sleep)產生。 
當一個應用請求一個操作不能立即實現時,kernel開始 context switch操作
存入請求的process並且試着切換到其他runnable process。這將使得CPU保持工作狀態.

 

Context Switch大體上由兩個部分組成: 
中斷和進程(包括線程)切換,一次中斷(Interrupt)會引起一次切換,進程(線程)的創建、激活之類的也會引起一次切換。 
Context Switch 的值也和TPSTransaction Per Second)相關的,假設每次調用會引起NCS,那么就可以得出

     Context Switch Rate = Interrupt Rate + TPS* N

CSR減掉IR,就是進程/線程的切換,假如主進程收到請求交給線程處理,線程處理完畢歸還給主進程,這里就是2次切換。也可以用CSRIRTPS的值代入公式中,得出每次事物導致的切換數。因此,要降低CSR,就必須在每個TPS引起的切換上下功夫,只有N這個值降下去,CSR就能降低,理想情況下N=0,但是無論如何如果N >= 4,則要好好檢查檢查。

vmstat查看 csContext Switch)就是這個參數

 

參考資料:

Loadrunner 監控Unix系統性能指標的解釋 
http://blog.csdn.net/marising/archive/2010/01/08/5160210.aspx

壓力測試衡量CPU的三個指標:CPU UtilizationLoad AverageContext Switch Rate 
http://blog.csdn.net/marising/archive/2010/01/12/5182771.aspx

LoadRunner壓力測試時監控服務器Linux的資源情況 
http://blog.csdn.net/marising/archive/2010/01/08/5160210.aspx

理解Load Average做好壓力測試 
http://www.blogjava.net/cenwenchu/archive/2008/06/30/211712.html

CPU負載的分析 
http://www.penglixun.com/tech/system/cpu_load_analyse.html

linux cpu相關性能指標 
http://www.51testing.com/?uid-3787-action-viewspace-itemid-5527


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM