I’m sorry to have been “away” through many of the SCSI Port versus Miniport
discussions. But I would like to try to provide some insight on this topic,
because we’ve done a very substantial amount of work in this space.
It seems to me that there’s lots of misconceptions, bad information, and
lack of information. I’d like to address some of the major ones. I’ll try
not to make this a mail message that’s long enough to be an article in
The NT Insider
Performance: The performance delta between a custom SCSI Port driver and a
SCSI Miniport driver is nowhere near as large as people seem to think. Any
gain comes from two vectors: (a) The ability to custom tailor the custom
port driver code to the device, and (b) The ability to take advantage of
parallelization in an SMP system.
By actual measurement (this is not a guess), the gain from (a) is not likely
to exceed 5%. The MS Scsi Port Driver may not be the nicest driver in
history, but neither it is grossly inefficient.
The performance gains you get from (b) is much harder to quantify. However,
any significant performance gain in this category requires (at least) lots
of I/O and an extremely fast device that can handle many I/O requests in
progress simultaneously. More performance gains are evident in drivers that
are more CPU intensive (duh).
Port Drivers: A proper Win2K SCSI Port Driver is VERY hard to get right.
We’ve written, and assisted with the development of, several SCSI Port
Drivers that are currently in use in commercial products. We’ve had a port
driver “kit” available to select clients for about a year. We actively try
to DISCOURAGE our clients from writing full scsi port drivers, and advise
writing one only when it’s really warranted. Getting a full port driver
through WHQL can be trying (but yes, as of this minute, it CAN be done).
Before you write a full scsi port driver, consider issues such as: Will it
pass the HCTs? How will it behave for your customers during an upgrade
(service pack or to a new version of the O/S)? Will it run on XP? Will it
run on .Net Server (Whistler)?
Alternatives: For those of you who are writing full port drivers so that you
can benefit from parallelization, note that there’s an entirely new
architecture in XP and .Net Server that allows you to write a de-serialized,
more powerful, miniport style driver. This architecture is called StorPort,
and was designed by MS with high performance raid systems in mind. You can
write StorPort drivers using the XP DDK. Sadly, however, there’s no
documentation yet!
I’m not saying that you should never write a full scsi port driver. I *am*
saying that I can tell you by experience that there’s no huge performance
gain inherent in moving to a full port driver. And considering the costs
and effort involved, you really have to think through the entire process
before you settle on writing a full scsi port driver.
Sorry this comes so late to the discussion, but if I saw one more email that
said “if you want it to be fast, you’ll write a full port driver” I was
gonna scream.
Peter
OSR
You are currently subscribed to ntdev as: $subst(‘Recip.EmailAddr’)
To unsubscribe send a blank email to leave-ntdev-$subst(‘Recip.MemberIDChar’)@lists.osr.com