SORT BY:

LIST ORDER
THREAD
AUTHOR
SUBJECT


SEARCH

IPS HOME


    [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

    RE: Status summary on multiple connections



    > Randall and Mark:
    >
    > Both of you forget about the case when multiple PDUs are
    > inflight, say N, N+1, and N+2, and one of them has CRC error, say
    > N+1.  The receiver throws away N+1 because the bad CRC.  N+2 is
    > received long before N+1 is retransmitted after a timeout by the
    > sender.  Of course, a sequence number inside the PDU will ensure
    > sequentialality.
    
    OK, last time I didn't do too well with the above example.  Let me try
    again.
    
    A target device receives one TCP segment within which there are three PDUs
    for commands N, N+1, and N+2.  The target ACK'ed the TCP segment and passes
    it to iSCSI who parses the TCP payload.  After accepting N, the target has
    to reject N+1 because of a queue-full condition.  Right at this moment, the
    target finishes one previous command and now has room for one more.  Should
    it accept N+2 or reject all subsequent commands until N+1 is received again?
    What if N+1 never comes again?  On a network with long delay there are many
    commands inflight.  My preference is letting the target accept the N+2 as
    long as the application software does not mind out-of-order execution.  For
    folks who design tape drives, I don't recall if we ever send multiple writes
    without interleaving data. In fact, if we need write a large amount of data
    to a tape drive, instead of multiple commands, we should have one command
    with a very large block count.  With one command at a time, there should not
    be any out-of-order execution problem.  Modern tape drives are doing "lying
    writes", i.e. accepting write data immediately after the command, then
    report command complete before data is written to the media.  By accepting a
    write, receiving data, and report completion sequentially, there is no need
    to accept more than one write command at a time.  On reading from a tape, we
    could send multiple reads to keep the pipeline filled.  Then, if we drop one
    read command, whoops, we are in big trouble!  Because the next read command,
    N+2, -- if not rejected -- will get the data belonging to N+1.
    
    Therefore, the only sensible solution is that the initiator should never
    send more commands than the maximum queue depth allowed by the target.  This
    is what we do in SCSI and 1394 adapters and should be done by a fibre
    channel and iSCSI adapter.  On a network with long delay, we need a large
    queue to keep enough commands inflight.
    
    Am I OK this time?
    
    Y.P. Cheng, CTO, ConnectCom Solutions Corp.
    
    


Home

Last updated: Tue Sep 04 01:06:51 2001
6315 messages in chronological order