Why is tagged queueing a problem on my third-party disk?
Tagged Command Queueing (TCQ) is an optional part of the SCSI-2
specification. It permits a drive to accept multiple I/O requests for
execution later. These requests are "tagged" by a reusable id so that the
drive and the OS can keep track of them. The drive can reorder these
requests to optimize seeks. For more details, see the SCSI-2
specifications. A draft version is available at
SunOS 4.x and earlier never uses tagged queueing. However, Solaris 2.x
will make use of tagged queuing if the drive claims to support it.
Unfortunately, some drive manufacturers have found it hard to design their
drives to do tagged queueing properly, and this particular area has been a
common source of bugs in drive firmware.
If it is not possible to turn off tagged queueing in the drive that is
causing the problem, Solaris 2.x can be told not to use tagged queueing
at all, by putting the following line in /etc/system:
set scsi_options & ~0x80
The "scsi_options" kernel variable contains a number of bit flags which
are defined in /usr/include/sys/scsi/conf/autoconf.h. 0x80 corresponds
to tagged queueing.
However, this turns off tagged queueing for the entire machine, not just
the problematic drive. Because tagged queueing can provide a significant
performance enhancement for busy drives, this may not always be desirable.
In Solaris 2.4 and later, it is possible to disable tagged queueing and set
or clear other scsi options on a per-controller or per-drive basis. The
appropriate technique is described in the esp(7) and isp(7) man pages.