Q:

Windows "iowait" CPU utilization reporting

Does Windows account for and report "iowait" in the same manner as Linux? That is, processes enter "uninterruptible sleep" and their time spent is subtracted from "CPU free"?
If so, which Perfmon counters would be appropriate to detect "cpu busy due to delays servicing IO" as opposed to "cpu busy due to computation?"

A:

Some of the concepts in the Windows kernel differ significantly from those in Linux, this is why you do not see an iowait counter in Perfmon.
First, the entity of scheduling in Windows is a thread, not a process. A process is just a container for 1+ threads. Additionally, Windows does not define an uninterruptible sleep state for its threads (more precisely, all I/O requests can be interrupted - for example by another thread of the same process), thus there would not be an exact iowait counterpart on Windows platforms. Windows reports the time its threads are waiting for sync I/O as "idle" as threads are simply context-switched by the scheduler as soon as they issue sync I/O requests.
If you are interested in the amount of total time spent for I/O operations on a specific device, you should be looking at the latency-related counters along with the number of respective requests processed within this period of time. This however would not allow you to break it down in synchronous vs asynchronous access patterns.

