WindowsはLinuxと同じように " iowait" を考慮して報告しますか?つまり、プロセスは「割り込み不可能なスリープ」に入り、費やされた時間は「CPUフリー」から差し引かれますか?
もしそうなら、「計算によるCPUビジー?」ではなく、「IOのサービス遅延によるCPUビジー?」を検出するのに適切なPerfmonカウンターはどれですか。
Windowsカーネルの概念の一部はLinuxの概念と大幅に異なります。これが、Perfmonにiowait
カウンターが表示されない理由です。
まず、Windowsでのスケジューリングのエンティティは、プロセスではなくスレッドです。プロセスは、1つ以上のスレッドのコンテナーにすぎません。さらに、Windowsはそのスレッドに対して割り込み不可能なスリープ状態を定義していません(より正確には、すべてのI/O要求は、たとえば同じプロセスの別のスレッドによって割り込み可能です)。したがって、正確なiowait
はありません。 Windowsプラットフォームの対応物。 Windowsは、スレッドが同期I/O要求を発行するとすぐにスケジューラーによってコンテキストが切り替えられるだけなので、スレッドが同期I/Oを待機している時間を「アイドル」として報告します。
特定のデバイスでのI/O操作に費やされた合計時間に関心がある場合は、この期間内に処理されたそれぞれの要求の数とともに 待機時間関連のカウンター を確認する必要があります時間。ただし、これにより、同期アクセスパターンと非同期アクセスパターンでそれを分解することはできません。