Linux

iostat 如何計算出將 CPU 空閒時間視為 %idle 或 %iowait?

  • October 25, 2012

我正在瀏覽iostat手冊頁。據其介紹,

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

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

我不明白 iostat 如何確定 I/O 請求是否未完成。

iowait 基本上是向要服務的設備發出的 I/O 請求的平均時間(以毫秒為單位)。這包括隊列中的請求所花費的時間以及為它們提供服務所花費的時間。

從 io 調度程序的前端開始按 io 進行測量,直到 io 完成。它涵蓋了完成每個 io 所需的調度程序、驅動程序、控制器、傳輸(對於 san)和儲存所花費的時間。它是儲存完成 I/O 請求的平均時間(以毫秒為單位),包括請求在調度程序隊列中花費的時間和儲存為它們提供服務所花費的時間。

傳輸 IO 時有多個階段。應用程序發送 IO 後,會為其分配一個請求,當請求被授予時,核心會查看它是否可以將 io 合併到任何現有的請求隊列中。在請求隊列中花費的時間會增加總服務時間。然後合併完成後,將io送出到儲存。如果儲存面臨壓力或無法處理 IO 數量,那麼我們的 IO 也必須等待儲存服務。因此,iostat 基本上有兩個等待階段。

proc 文件 /proc/diskstats 是它為此目的引用的文件。

引用自:https://serverfault.com/questions/442129