iowait
以下に示すように、トップユーティリティの出力に表示されるプロパティを調査しました。
top - 07:30:58 up 3:37, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 86 total, 1 running, 85 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
iowait
一般的に次のように定義されます。
「CPUがアイドル状態で、保留中のIOがある時間です。」
プロセスは単一のCPUで実行されることを理解しています。タイムスロットを使い果たしたためにスケジュールが解除された後、またはブロックされた後、いずれかのCPUで再びスケジュールすることができます。
IO要求の場合、プロセスを割り込み不可能なスリープ状態にするCPUがiowait
時間を追跡します。他のCPUは、実際にアイドル状態であるため、それらの側でアイドル時間と同じ時間を報告します。この仮定は正しいですか?
さらに、長いIOリクエストがあると仮定すると(プロセスがスケジュールされる機会がいくつかあったが、IOが完了しなかったためにスケジュールされなかった)、CPUは「保留中のIO」があることをどのように知るのでしょうか?そのような情報はどこから取得されますか?CPUのいずれかがそのプロセスをスリープ状態にした可能性があるため、CPUがIOが完了するまでに何らかのプロセスがスリープ状態になったことを単純に見つける方法はありますか。「保留中のIO」のこのステータスはどのように確認されますか?