This is Disk IO Monitor - a fairly simple utility that samples and displays, in real-time, read/write rates of a physical drive.

Read activity is on the top, write activity is at the bottom.

What's interesting about this graph is that it can display samples as large as gigabytes and still clearly show byte-level differences between them.

To that end, it spreads each sample across several horizontal bands, each displaying a count of full GBs, MBs and KBs, plus "leftover" bytes in each sample.

If we want to display, say, 12345678, then it's 11 MB + 792 KB + 445 bytes, so the band closest to the zero line shows a bar filled to 445/1024, the next band - 792/1024 and the 3rd - 11/1024.

This is basically a mod-1024 factorization of a sample value.

It is also a discrete (rather than continuous) variation of a log scale, which is very commonly used for "squeezing" large values into more manageable ranges.

In practical terms this allows us to quickly see how different any two samples are, even if they are very large.

For example - These two samples are both in the MB range, very close to each other, but looking at the KB band it's immediately obvious which one is larger and approximately by how much.

This sort of analysis is often needed when trying to spot jitter that is order of magnitude smaller than absolute sample values.

In our case, this need surfaces when analyzing the effects of OS file caching on bulk IO performance.

Here's a 16 GB file being copied using Windows Explorer: Here's the same file being copied with a custom, somewhat better optimized code: * Both tests are run with the file cache purged.

Windows Explorer makes uses synchronous IO that goes through the Windows File Cache. This delays writes and it also adds jitter to read operations.

In comparison, the second graph is for the code that uses asynchronous IOCP-based copying engine that bypasses the OS cache. The resulting data flow is far more stable and predictable. It's also substantially faster.


Here's a dev build if you feel like seeing this thing in action:


~ 71KB, no dependencies. Just save somewhere and run.

It defaults to monitoring of the C: drive, but another drive can be selected by clicking on "Disk C:". The sampling rate is 500 ms and it is fixed for now.

The Purge cache option will clear the so-called Windows Standby List, which effectively empties the OS file cache. Use with care, obviously.

Happy graphing :)
Made by Pipemetrics in Switzerland

Blog / RSS
Miscellanea Press resources
On robocopy

Legal Terms