Linux
為什麼 CPU 花費時間在 IO(wa) 上?
我知道
wa
(intop
) 測量等待 I/O 的 CPU 時間。很多文章都這麼說。但我很困惑,基於2個知識點:
- 如果一個程序使用系統呼叫讀取磁碟,則該程序被阻塞。
- 如果一個程序被阻塞,它就不能被調度在 CPU 上執行。
對?
似乎沒有時間讓 CPU 在 I/O 上等待……會發生什麼?
如果推荐一些書籍或文章供我進一步閱讀,那就更好了。
CPU 空閒狀態分為兩個不同的“子”狀態:
iowait
和idle
。如果 CPU 處於空閒狀態,則核心將確定目前是否有至少一個 I/O 正在進行到本地磁碟或已從該 CPU 啟動的遠端安裝磁碟 (NFS)。如果有,則 CPU 處於狀態
iowait
。如果沒有從該 CPU 啟動的正在進行的 I/O,則 CPU 處於idle
狀態。因此,
iowait
是 CPU 空閒的時間百分比,並且至少有一個從該 CPU 啟動的 I/O 正在進行中。
iowait
計數器表明系統可以處理更多的計算工作。僅僅因為 CPU 處於iowait
狀態並不意味著它不能在該 CPU 上執行其他執行緒或程序。所以,
iowait
只是空閒時間的一種形式。