最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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是什么?的評論 (共 條)

分享到微博請遵守國家法律
永德县| 中卫市| 玛沁县| 长子县| 天津市| 兴化市| 清原| 皮山县| 寿宁县| 明水县| 舒城县| 崇阳县| 吴忠市| 咸宁市| 垣曲县| 巴南区| 富蕴县| 汤原县| 景洪市| 永仁县| 东至县| 清镇市| 贵阳市| 沾益县| 安国市| 潮安县| 台北市| 枞阳县| 建德市| 刚察县| 郧西县| 丹凤县| 巴彦淖尔市| 育儿| 沁水县| 塔城市| 沅江市| 平南县| 镇赉县| 亚东县| 九龙坡区|