天天看點

CPU Idle和CPU Load

首先在說明CPU相關的名額之前,必須對系統運轉有一個整體的認識。

在Linux核心中,每個程序都會被配置設定一個固定的時間片(預設為10ms)。在這10ms中,該程序享有cpu的所有權。如果該程序用完了10ms,或者有其他優先級高的程序送出請求,系統會觸發一個中斷,核心重新接管cpu,核心配置設定cpu給其他程序。10ms的分片讓使用者,也就是我們覺得我們的系統運轉非常流暢,盡管我們可能同時開了很多的應用。

1、cpu.idle

CPU使用率主要分為使用者态,系統态和空閑态,分别表示CPU處于使用者态執行的時間,系統核心執行的時間,和空閑系統程序執行的時間,三者之和就是CPU的總時間。

cpu.idle是基于/proc/stat計算出來的。指的是CPU處于空閑狀态時間比例,從時間的角度衡量CPU的空閑程度。

當沒有使用者程序、系統程序等需要執行的時候,CPU就執行系統預設的空閑程序。cpu.idle就是指空閑程序占用時間的比例,即CPU執行空閑的時間 / CPU總的執行時間。

2、cpu.load

cpu.load被定義為在特定時間間隔内運作隊列中(在CPU上運作或者等待運作多少程序)的平均程序數。如果一個程序滿足以下條件則其就會位于運作隊列中:

  • 它沒有在等待I/O操作的結果
  • 它沒有主動進入等待狀态(也就是沒有調用’wait’)
  • 沒有被停止(例如:等待終止)

Linux load averages 可以衡量任務對系統的需求,并且它可能大于系統目前正在處理的數量,大多數工具将其顯示為三個平均值,分别為 1、5 和 15 分鐘值。

在Linux中,程序分為三種狀态,一種是阻塞的程序blocked process,一種是可運作的程序runnable process,另外就是正在運作的程序running process。

程序可運作狀态時,它處在一個運作隊列run queue中,與其他可運作程序争奪CPU時間。 系統的load是指正在運作和準備好運作的程序的總數。比如現在系統有2個正在運作的程序,3個可運作程序,那麼系統的load就是5。cpu.load是基于/proc/loadavg進行統計的。

cpu.load評估

如果cpu.load過大則表示有部分線程在等待獲得cpu資源,過小表示cpu資源比較空閑。

對于cpu.load多少開始出現性能問題,外界有不同的說法,有的認為cpu.load/cores最好不要超過1,有的認為cpu.load/cores最好不要超過3,有的認為cpu.load不超過2*cores-2即可。

繼續閱讀