I've been playing with some internals code today to find the average size of an I/O going to a disk. I wrote most of the kernel mode bit last weekend, and now have to write the surrounding code.
It's been a while since I've done any code that runs in kernel mode. Last time I hacked some together, I was writing in Macro-32, the assembly language of VAX computer systems. Although there is a compiler for Macro-32 on the Alpha version of OpenVMS, the current programming norm is to write in C. So C it is.
It's actually quite scary writing kernel mode code in C. You have to look at the generated machine code. And RISC computers have ugly machine code.
The code is very simplistic. Instead of intercepting IRPs for all disk I/O, I'm just locking the I/O database and sampling the I/O wait queues every twenty seconds or so. I plan to test this to see how good it is and do it properly if I am not happy with the results.
I must see if the OpenVMS Engineering Team plans to do something like this in the operating system. It seems like an easy addition as XFC code already does it to give you an overview of I/O sizes going through the cache. Maybe the overhead is too much to break it out by disk? Hmm. I'll write it down to ask in Chicago at the Engineering Panel.
Posted at June 28, 2004 10:06 PMComments are closed