国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

一文講解系統(tǒng)性能分析之|iowait是什么?

2023-04-11 15:23 作者:補給站Linux內核  | 我要投稿

我們對系統(tǒng)性能進行優(yōu)化時,一般會使用?top?命令來查看系統(tǒng)負載和系統(tǒng)中各個進程的運行情況,從而找出影響系統(tǒng)性能的因素。如下圖所示:


top?命令會輸出很多系統(tǒng)相關的信息,如:系統(tǒng)負載、系統(tǒng)中的進程數(shù)、CPU使用率和內存使用率等,這些信息對排查系統(tǒng)性能問題起著至關重要的作用。

本文主要介紹?top?命令中的?iowait?指標(如上圖中紅色方框所示)的含義和作用。

什么是iowait

什么是?iowait?我們來看看 Linux 的解釋:

Show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.

中文翻譯的意思就是:CPU 在等待磁盤 I/O 請求完成時,處于空閑狀態(tài)的時間百分比(此時正在運行著?idle?進程)。

可以看出,如果系統(tǒng)處于?iowait?狀態(tài),那么必須滿足以下兩個條件:

  1. 系統(tǒng)中存在等待 I/O 請求完成的進程。

  2. 系統(tǒng)當前正處于空閑狀態(tài),也就是說沒有可運行的進程。

iowait統(tǒng)計原理

既然我們知道了?iowait?的含義,那么接下來看看 Linux 是怎么統(tǒng)計?iowait?的比率的。

Linux 會把?iowait?占用的時間輸出到?/proc/stat?文件中,我們可以通過一下命令來獲取到?iowait?占用的時間:

命令輸出如下圖所示:


紅色方框中的數(shù)據(jù)就是?iowait?占用的時間。

我們可以每隔一段時間讀取一次?/proc/stat?文件,然后把兩次獲取到的?iowait?時間進行相減,得到的結果是這段時間內,CPU處于?iowait?狀態(tài)的時間。接著再將其除以總時間,得到?iowait?占用總時間的比率。

現(xiàn)在我們來看看?/proc/stat?文件是怎樣獲取?iowait?的時間的。

在內核中,每個 CPU 都有一個?cpu_usage_stat?結構,主要用于統(tǒng)計 CPU 一些信息,其定義如下:

cpu_usage_stat?結構的?iowait?字段記錄了 CPU 處于?iowait?狀態(tài)的時間。

所以要獲取系統(tǒng)處于?iowait?狀態(tài)的總時間,只需要將所有 CPU 的?iowait?時間相加即可,代碼如下(位于源文件?fs/proc/stat.c):

show_stat()?函數(shù)首先會遍歷所有 CPU,然后讀取其?iowait?時間,并且將它們相加。



增加iowait時間

從上面的分析可知,每個 CPU 都有一個用于統(tǒng)計?iowait?時間的計數(shù)器,那么什么時候會增加這個計數(shù)器呢?

答案是:系統(tǒng)時鐘中斷。

在?系統(tǒng)時鐘中斷?中,會調用?account_process_tick()?函數(shù)來更新 CPU 的時間,代碼如下:

我們主要關注當前進程是?idle?進程的情況,這是內核會調用?account_idle_time()?函數(shù)進行處理,其代碼如下:

account_idle_time()?函數(shù)的邏輯比較簡單,主要分以下兩種情況進行處理:

  1. 如果當前有進程在等待 I/O 請求的話,那么增加?iowait?的時間。

  2. 如果當前沒有進程在等待 I/O 請求的話,那么增加?idle?的時間。

所以,從上面的分析可知,要增加?iowait?的時間需要滿足以下兩個條件:

  1. 當前進程是?idle?進程,也就是說 CPU 處于空閑狀態(tài)。

  2. 有進程在等待 I/O 請求完成。

進一步說,當 CPU 處于?iowait?狀態(tài)時,說明 CPU 處于空閑狀態(tài),并且系統(tǒng)中有進程因為等待 I/O 請求而阻塞,也說明了 CPU 的利用率不夠充分。

這時,我們可以使用異步 I/O(如?iouring)來優(yōu)化程序,使得進程不會被 I/O 請求阻塞。


原文作者:Linux內核那些事



一文講解系統(tǒng)性能分析之|iowait是什么?的評論 (共 條)

分享到微博請遵守國家法律
江都市| 彭州市| 平遥县| 于田县| 秀山| 姚安县| 班戈县| 台东县| 乐都县| 延长县| 南丹县| 天水市| 六枝特区| 什邡市| 东乌珠穆沁旗| 瑞丽市| 栖霞市| 正阳县| 奈曼旗| 贵阳市| 龙口市| 连平县| 永吉县| 盈江县| 黔东| 禹城市| 吴忠市| 清丰县| 运城市| 公安县| 华池县| 慈溪市| 贡山| 衡南县| 鄯善县| 南安市| 金平| 桃园市| 安泽县| 邵武市| 西宁市|