Given the inherent limitations of using SCSIport with high performance adapters for which it was not designed, Microsoft has developed a new port driver, Storport. Storport has been architected as a replacement for SCSIport, and designed to enable realization of the high performance capabilities of hardware RAID and Fibre Channel adapters. It is possible for hardware vendors to write their own class, filter, or even new port drivers, to bypass SCSIport. But, unlike Storport, these drivers may perform unreliably with the Windows platform because they are designed without in-depth knowledge of the operating system.
While many of the routines in Storport are similar to SCSIport (which helps in a smooth transition from SCSIport to Storport), there are a number of critical differences. These differences, discussed in the remainder of this section, provide the advanced functionality of Storport that enables vendor miniport drivers and adapter hardware to function more effectively.
Synchronous I/O Functioning
Unlike SCSIport, which cannot process an interrupt while it is issuing an I/O (or start a new I/O while the device is interrupting), Storport introduces a new synchronization model that allows decoupling of the interrupt from the StartIo routine. This means that Storport can send and receive I/O requests simultaneously; I/O requests can be started at the same time that requests are being completed. Multiprocessor systems can make use of this synchronous (“full duplex”) I/O functioning, thereby accelerating data transfer, as is shown in Figure 6.
Figure 6. Storport I/O Processing with “Full Duplex” Mode
In this example, Storport is able to make use of a multiprocessor system by enabling execution of the start I/O initiation phase with the completion phase, cutting I/O processing time, and enabling more requests to be processed in the same amount of time (compare to SCSIport performance in Figure 5). As more processors are added, more I/O requests can be handled in parallel, thereby improving performance.
This higher performance capability, however, requires that vendors code their miniports (and perhaps even modify their firmware and hardware) to take advantage of the synchronous I/O functioning, and not all miniport drivers can effectively decouple this processing. (Given this limitation, miniports can still do more work without synchronization by using fully duplex mode and calling StorPortSynchronizeAccess only as needed.)