Fri Jul 7 14:08:32 PDT 1995


As we all know, the Disconnect/Reconnect page now defines "Maximum Burst
Size" to be "the maximum amount of data that the device server shall
transfer during a single data moving operation." As we also know, parallel
SCSI uses this parameter to indicate the maximum amount of data transferred
during any reselection cycle, and FCP uses this parameter to indicate the
maximum amount of data transferred in response to a "transfer ready"
(FCP_XFER_RDY) request.

It has been found that a very significant performance improvement in
"short" (e.g. <=4KBy) write operations is obtained in FCP by eliminating
the transfer ready handshake and simply sending the "short" packet of data
right after the write command. FCP supports this improvement by allowing
an initiator to configure a target so that it will accept a data packet
immediately after a write command without the FCP_XFER_RDY handshake.

Of course a target needs to limit the amount of data it allows an
initiator to send immediately after the command packet because it does not
have unlimited buffer space. For write operations of more data than the
limit, it needs the FCP_XFER_RDY handshake. To control both the first data
packet length and subsequent packet lengths during FCP_XFER_RDY handshakes,
two parameters are needed:
1) the maximum amount of write data that can be sent immediately after a
command, and
2) the maximum amount of data that can be sent during any subsequent
FCP_XFER_RDY handshake.

Today's DISCONNECT/RECONNECT mode page contains only a single parameter to
limit these packet sizes: "maximum burst size." If this parameter is small
(as it must be due to target buffer limitations), short write operations
will perform well, but large transfers will be very inefficient. For
example, if the parameter is 4 KBy, a 4 MBy write operation would use 1000
FCP_XFER_RDY handshakes. What is needed, therefore, is for the
DISCONNECT/RECONNECT mode page to contain two parameters:
1) Maximum "first" burst length
2) Maximum "subsequent" burst length.

As shown below, this new parameter can be added without impacting existing
implementations by using bytes currently (13 & 14) reserved as shown below:

                           DISCONNECT/RECONNECT PAGE
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Byte |        |        |        |        |        |        |        |        |
| 0   |   PS   |Reserved|         Page code (02h)                             |
| 1   |                           Page length (0Eh)                           |
| 2   |                           Buffer full ratio                           |
| 3   |                           Buffer empty ratio                          |
| 4   | (MSB)                                                                 |
|-----+---                        Bus inactivity limit                     ---|
| 5   |                                                                 (LSB) |
| 6   | (MSB)                                                                 |
|-----+---                        Disconnect time limit                    ---|
| 7   |                                                                 (LSB) |
| 8   | (MSB)                                                                 |
|-----+---                        Connect time limit                       ---|
| 9   |                                                                 (LSB) |
| 10  | (MSB)                                                                 |
|-----+---                        Maximum burst size                       ---|
| 11  |                                                                 (LSB) |
| 12  |                           Reserved                  |      DTDC       |
| 13  |                                                                       |
|-----+---                      Maximum first  burst size                     |
| 14  |                            (was reserved)                             |
| 15  |                           Reserved                                    |

While this is primarily applicable to FCP, this new parameter might also be of
use in parallel SCSI. We might define it to mean the maximum amount of data
which the target could request without disconnecting following a write command.
To use this parameter to improve performance, an initiator would ensure that it
had a "first burst size" amount of data ready to send immediately after a
command and a target would immediately request it without disconnecting. This
might eliminate delays which currently result when an initiator accesses the
proper data after the target reselects it.

Giles Frazier
IBM Austin
gfrazier at ausvm6.vnet.ibm.com

More information about the T10 mailing list