天天看點

絕對清晰的top中cpu名額的解釋

作者:IT技術圈

我們在使用top指令時,會看到如下參數。在cpu那一行看到us,sy等多個名額。

這些名額你真的全都了解嗎?

在網上看到一個解釋的非常清晰的圖,保證你絕對能清晰的明白這些名額的含義

絕對清晰的top中cpu名額的解釋

神圖在此

絕對清晰的top中cpu名額的解釋

解釋

我們知道linux運作狀态分為使用者态和核心态。

橫線的上半部分是使用者态。下半部分是核心态。

當一個使用者程式開始執行,它首先處于使用者态,用CPU使用率中的“us”(user的縮寫)來表示。在這個狀态下,除了系統調用之外的所有代碼執行都會計算在“us”的CPU使用時間内。

一旦使用者程式執行系統調用,如read()函數來讀取檔案,它就會從使用者态切換到核心态。在核心态中,read()系統調用會首先在檔案系統層面進行操作,這一階段的CPU使用時間會計入“sy”(即system的縮寫)。

随後,read()系統調用會向Linux的塊裝置層發起I/O請求,開始實際的磁盤讀取操作。在這個過程中,程序通常會變為不可中斷狀态,而這段時間會被标記為“wa”(即wait的縮寫)。

資料從磁盤讀取并傳回後,程序在核心态接收這些資料,這仍然屬于“sy”的CPU使用時間。之後,程序會從核心态切換回使用者态,并在使用者态中處理檔案資料。這又計算到us的時間内了。

如果在此之後,假設使用者程序沒有其他任務需要執行就進入休眠狀态,同時CPU上也沒有其他程序需要運作,那麼系統就會進入空閑狀态,表示為“id”(idle的縮寫)。

當系統接收到一個網絡資料包時,網卡會觸發一個中斷,CPU會響應這個中斷并執行中斷服務程式。這時,CPU的使用時間會計入“hi”(hardware irq硬體中斷的意思)。

對于中斷處理過程中耗時較長的任務,Linux提供了軟中斷(si)機制來處理。

不管是硬中斷hi還是軟中斷si,它們的CPU使用時間都不會計入程序的CPU時間,因為處理這些中斷的時間不屬于任何特定程序。

此外,還有兩種CPU使用時間類型:“nice”(ni)和“steal”(st)。nice值正數表示低優先級程序占用的CPU時間,而steal是在虛拟化環境中使用的,表示被同一主控端上的其他虛拟機偷走的CPU時間。steal這個詞用的很形象啊。

最後總結一下

絕對清晰的top中cpu名額的解釋