linux cpu相關效能指標

47328983發表於2012-03-22
Run Queue Statistics
linux中,process有兩種狀態:
1.runnable
2.blocked waiting for an event to complete
一個blocked狀態的process可能在等待一個I/O操作獲取的資料,或者是一個系統呼叫的結果
如果一個process在runnable狀態,這就意味著它將同其他runnable狀態的process等待CPU時間,而不是立即獲得CPU時間,一個runnable狀態的process不需要消耗CPU時間,只有當Linux排程程式從runnable佇列中選擇哪個process下次執行.當 process在runnable狀態,等待CPU時間時,他們形成的等待佇列稱作Run Queue.Run Queue越大,表示等待的佇列越長.
效能工具通常顯示runnable processes的數目和blocked processes的數目.還有一個很常見的系統狀態是load average,系統的load是指running和runnable process的總和.例如:如果有兩個processes在running和有三個在等待執行(runnable),那麼系統的load為五.load average是指在指定時間內load的平均值.一般load average顯示的三個數字的時間分別為1分鐘,五分鐘和十五分鐘.

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

為了儘可能的減小context switches,你首先需要知道它們是怎麼產生的.首先,kernel排程觸發context switches.為了保證每個process平等的共享CPU時間,kernel週期性中斷running的process,如果合適,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 switch比timer中斷大很多.那麼context switch更多的可能是I/O請求或者其他長時間的系統呼叫(比如sleep)產生.當一個應用請求一個操作不能立即實現時,kernel開始 context switch操作:存入請求的process並且試著切換到其他runnable process.這將使得CPU保持工作狀態.

Interrupts
其他方面,CPU接收硬體驅動發出的中斷請求.這種中斷通常被觸發當一個驅動器有一個時間需要被kernel操作時.例如:如果一個磁碟控制器從磁碟上取得了一個資料塊和kernel需要讀取使用這個塊,那麼磁碟控制器會觸發一箇中斷.kernel接收每個中斷,一箇中斷處理器執行如果這個中斷被註冊,否則,這個中斷被忽略.在系統中,中斷處理器的優先順序非常高,而且執行速度非常快.很多時候,有些中斷處理並不需要很高的處理優先順序,所以也有soft- interrupt handler.如果有很多的中斷,kernel需要花費大量的時間去處理中斷.可以檢查/proc/interrupts能夠知道中斷髮生在哪個CPU 上.

CPU Utilization
CPU Utilization,一個很直觀的概念,在任意時間內,CPU有7個狀態:
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裝置,比如磁碟,網路卡.

原文地址:http://www.51testing.com/?uid-3787-action-viewspace-itemid-5527

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/241379/viewspace-719213/,如需轉載,請註明出處,否則將追究法律責任。

相關文章