SCSI hardware supports many different speeds, and newer,
faster hardware is generally backwards-compatible
with older, slower devices. You can use a host adapter capable of 160 MB/s throughput with
drives that can only support 20 MB/s transfers, or vice-versa. This leaves an obvious
question: how does each device determine what speeds the others on the bus are capable of?
Without knowing this, senders can't figure out how fast receivers can handle data being
sent.
Since this is so important, the SCSI protocols build in support for a method by which
the host adapter can interrogate all devices on the bus to find out what speeds they
support. This process is called negotiation, and is one of the first tasks
performed by the SCSI host adapter when the system power is applied. Under conventional
SCSI rules, this negotiation is done with each device; the host adapter records the
maximum transfer speed that each device claims to support, and then uses that information
when the device is accessed.
This works great in theory, but there's a problem with it: theory doesn't always
translate into practice, especially when the technology "pushes the envelope"
with high-speed signaling. For example, even if the host adapter can support Ultra160 transfers and the device says it can as well, this
doesn't mean that 160 MB/s signaling is actually possible on the bus. Perhaps the cabling being used is inferior or too long, or there's a problem
with a terminator, or the system is in a particularly
electrically noisy environment. Regular negotiation just "trusts" that
everything will work at the speed the hardware decides is possible, but it may not
actually work. If there are difficulties, they may manifest themselves in the form of data
errors or reliability problems.
To improve negotiation, the SPI-3 standard introduced
a new feature called domain validation, sometimes abbreviated DV. This
feature basically adds a verification step to the normal negotiation procedure (note that
"domain" is another word for a SCSI channel or bus). After a device tells the
host adapter that it is capable of transfers at a particular speed, the host adapter tests
the device by sending write requests to the device's internal buffer at that speed. The
data just written is then read back and compared. If the data is different, or if parity or CRC errors occur during either the read or the write,
the host adapter knows that communication at that speed is not reliable. It will then
retry at the next lower speed, and continue until reliable operation is established. (If
this sounds similar to the way that two regular analog modems determine a communications
speed, that's because it is!)
Domain validation is one of the five "optional" features of Ultra3 SCSI, and is a required feature for hardware meeting
the Ultra160 or Ultra160+
specifications. This feature may be expanded in the future to include more frequent
validation during the operation of the system, since over time errors may occur on a
channel that worked fine when the system was first powered up.
Next: Quick Arbitration and Selection (QAS)