SORT BY:

LIST ORDER
THREAD
AUTHOR
SUBJECT


SEARCH

IPS HOME


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

    RE: iSCSI: Recognizing Recovery R2Ts



    On Mon, 2002-09-16 at 04:52, Julian Satran wrote:
    > Nick,
    > 
    > In case you have ErrorRecoveryLevel >=1 and DataSequenceInOrder=Yes then 
    > then either:
    > 
    > the target has only one outstanding R2T (to avoid at all price an 
    > out-of-order R2T)
    > or the initiator can go by an out-of-order R2T if it is a data-offset it 
    > has "passed-over" (even if not touched). Please observe that an initiator 
    > is aware of the gap in the R2T sequence when an R2T is lost if the target 
    > has more than one R2T missing and the missing one is not the last. If the 
    > missing one is the last (or only) there will be no violation of ordering.
    > 
    > Regards,
    > Julo.
    > The ordering rules require the offsets to be in non-decreasing order.
    > 
    >
    
    Ok,  just to few more points to verify with regard to a lost R2T due to
    a Header Digest error:
    
    In the case of ErrorRecoveryLevel=>1, DataSequenceinOrder=No and
    MaxOutStandingR2T=>1:
    
    	Initiator is able to ascertain a lost R2T by receiving an
    	R2TSN greater than expected,  and sends a SNACK of type R2T
    	to request retransmission of the lost R2T. Target retransmits 	R2T with
    identical values as the lost R2T.
    
    In the case of ErrorRecoveryLevel=>1, DataSequenceinOrder=Yes and
    MaxOutStandingR2T=1:
    
    	Target will timeout waiting for Data OUT from the lost R2T
    	and sends a Recovery R2T with identical values of the lost R2T.
    
    
    Thanks again for your time gentlemen,
    	
    		Nicholas Bellinger - Pyxtechnologies.com
    
     
    > 
    > 
    > Nick Bellinger <nickb@attheoffice.org>
    > 16/09/02 09:18
    > 
    >  
    >         To:     Julian Satran/Haifa/IBM@IBMIL
    >         cc:     Black_David@emc.com, ips@ece.cmu.edu, cbm@rose.hp.com
    >         Subject:        RE: iSCSI: Recognizing Recovery R2Ts
    > 
    >  
    > 
    > Julian,
    > 
    > On Sun, 2002-09-15 at 23:50, Julian Satran wrote:
    > > Nick,
    > > 
    > > I understand that your issue is mainly related to an initiator expecting 
    > 
    > > "in order" R2Ts and seing an R2T that is out of order.
    > > 
    > > The simplest answer (and the one that we had in mind when we designed 
    > the 
    > > protocol) is that in general nodes willing to accept ErrorRecoveryLevels 
    > 1 
    > > and 2 will probably accept R2Ts out of order. In this case an initiator 
    > > does not need to make any distinction.
    > > 
    > > But not wanting to be that restrictive we let even nodes accepting only 
    > > ordered R2Ts do recovery but then (if they care) they may::
    > > 
    > > initiators:
    > > 
    > > reject any R2T that is unordered (i.e. do not recover)
    > > accept R2T based on having "previously seen it"  (as David Black 
    > suggests) 
    > > - with the caveat that if the R2T is lost you may have to fall back to 1
    > 
    > Considering ErrorRecoveryLevel>=1 and DataSequenceinOrder=Yes:
    > 
    > The potentially lost R2T your referring to is the original one correct? 
    > Original meaning the R2T the initiator can use to determine if the R2T
    > is infact a recovery R2T and is requesting retransmissing of an
    > previously requested offset. 
    > 
    > If this is the case,  I dont see how this situation could possibly
    > happen.  If the R2T the target originally sent gets lost and the
    > initiator cannot send any data out without the lost R2T,  how could the
    > target possibly be able to generate a recovery r2t with differing
    > offsets for a data out that was never received? 
    > 
    > So if this is indeed correct,  the target generates a sequence timeout
    > under the guise of within-command recovery,  and sends a Recovery R2T
    > with identical values to the one no data out was received for and
    > presumed lost. And then if there is a Data Digest failure on data out
    > the target generates a recovery R2T with a previously requested offset,
    > and the initiator is able to tell the difference in R2Ts. 
    > 
    > I think this is a bit confusing (to me anyways) as a recovery R2T can
    > either mean:
    >                  a) A identical retransmission due to a header digest 
    > error (no                   data
    > out received, manifests as a sequence timeout)
    >                  b) Previously requested offset requested due to a data 
    > digest 
    > error.
    >  
    > Is there something I am missing as to how the initiator with
    > DataSequenceinOrder=Yes could lose an original R2T and still somehow
    > receive a Recovery R2T (of type b) and have within-command recovery
    > fail?
    > 
    > Thanks Julian!
    > 
    >                  Nicholas Bellinger - Pyxtechnologies.com
    > 
    > > targets:
    > > have only one R2T outstanding if you have both "in order" and error 
    > > recovery (a rare thing we believe)
    > > 
    > > 
    > > Regards,
    > > Julo
    > > 
    > > 
    > > 
    > > 
    > > Black_David@emc.com
    > > Sent by: owner-ips@ece.cmu.edu
    > > 16/09/02 04:58
    > > 
    > > 
    > >         To:     nickb@attheoffice.org
    > >         cc:     ips@ece.cmu.edu
    > >         Subject:        RE: iSCSI: Recognizing Recovery R2Ts
    > > 
    > > 
    > > 
    > > One additional important note - the Recovery R2T generates
    > > its own data sequence, so in the following:
    > > 
    > > > > Following a)
    > > > > I-> ISCSI_INIT_SCSI_DATA_OUT, Offset=16384 DataSN=2, DataLength=8192
    > > > > I-> ISCSI_INIT_SCSI_DATA_OUT F_BIT, Offset=24576, DataSN=3,
    > > > > DataLength=8192
    > > > > 
    > > > > Following B)
    > > > > I-> ISCSI_INIT_SCSI_DATA_OUT, Offset=16384 DataSN=2, DataLength=8192
    > > 
    > > The DataSN's should be 0 and 1, not 2 and 3 (and in the B) case above,
    > > the F bit needs to be set, as I previously noted).  The initiator really
    > > does respond to a Recovery R2T in the same fashion as any other R2T.
    > > 
    > > Thanks,
    > > --David
    > > 
    > > > -----Original Message-----
    > > > From: Black_David@emc.com [mailto:Black_David@emc.com]
    > > > Sent: Sunday, September 15, 2002 9:45 PM
    > > > To: nickb@attheoffice.org
    > > > Cc: ips@ece.cmu.edu
    > > > Subject: RE: iSCSI: Recognizing Recovery R2Ts
    > > > 
    > > > 
    > > > > Im still lost here.  Please consider the example:
    > > > > 
    > > > > MaxDataSegmentLength=8192, MaxBurstLength=32768, ImmediateData=No,
    > > > > InitialR2T=Yes.
    > > > > 
    > > > > I-> ISCSI_INIT_SCSI_CMND, EDTL=131072, SCSI Opcode WRITE_10 
    > > > > T-> ISCSI_TARG_R2T, DDTL=32768, Offset=0
    > > > > I-> ISCSI_INIT_SCSI_DATA_OUT, Offset=0, DataSN=0, DataLength=8192
    > > > > I-> ISCSI_INIT_SCSI_DATA_OUT, Offset=8192, DataSN=1, DataLength=8192
    > > > > I-> ISCSI_INIT_SCSI_DATA_OUT, Offset=16384, DataSN=2, 
    > > > DataLength=8192
    > > > > 
    > > > > (Data Payload Fails on DataSN=2)
    > > > > 
    > > > > T-> ISCSI_TARG_RJT, Reason=Data Digest (Payload) Error
    > > > > I-> ISCSI_INIT_SCSI_DATA_OUT, F_BIT, Offset=24576, DataSN=3,
    > > > > DataLength=8192
    > > > > 
    > > > > Can the Target either: (Are both of these legal?)
    > > > > 
    > > > >              a) Accept DataSN=3 even though DataSN=2 Failed
    > > > >                 Only request retransmisson of Failed DataOut
    > > > >              T-> ISCSI_TARG_R2T (Recovery) DDTL=8192, Offset=16384
    > > > > 
    > > > >              or b) Discard DataSN=3, Request retransmission of
    > > > >                    all DataOut from failed to MaxBurstLength 
    > > > >              T-> ISCSI_TARG_R2T (Recovery) DDTL=16384, Offset=16384
    > > > 
    > > > Yes, both are legal, a) is preferred for obvious reasons.
    > > > 
    > > > > Initiator: (This is where im confused)
    > > > >              Received either a) or b),  and knows the R2T is a 
    > > Recovery
    > > > >              R2T because the DDTL is not 32768 (MaxBurstLength or 
    > rest 
    > > of
    > > > >              the original EDTL) and Offset is not 32768.
    > > > 
    > > > Not exactly.  The R2T is a recovery R2T because it requests data
    > > > covered by the previous R2T (Offset < 32768).  This doesn't affect
    > > > the initiator's behavior - it just responds to the R2T it receives.
    > > > 
    > > > > Following a)
    > > > > I-> ISCSI_INIT_SCSI_DATA_OUT, Offset=16384 DataSN=2, DataLength=8192
    > > > > I-> ISCSI_INIT_SCSI_DATA_OUT F_BIT, Offset=24576, DataSN=3,
    > > > > DataLength=8192
    > > > > 
    > > > > Following B)
    > > > > I-> ISCSI_INIT_SCSI_DATA_OUT, Offset=16384 DataSN=2, DataLength=8192
    > > > 
    > > > I think you flipped the a) and b) cases above, so you clearly are
    > > > confused :-).  In both cases, the initiator looks at the R2T to
    > > > determine what data the Target is asking for and sends it - a) asked
    > > > for 8k, b) asked for 16k.  The one PDU that responds to a) needs
    > > > to have the F bit set, as it completes the response to the second
    > > > R2T.  If the target needs to distinguish the recovery data transfer
    > > > from the original transfer, it should use a different Target Transfer
    > > > Tag in the recovery R2T.
    > > > 
    > > > > Target:
    > > > >              MaxBurstLength is Completed:
    > > > > T-> ISCSI_TARG_R2T, Offset=32768, DDTL=32768
    > > > > 
    > > > > I-> ISCSI_INIT_SCSI_DATA_OUT, Offset=32768, DataSN=0, 
    > > > DataLength=8192
    > > > 
    > > > Ok.
    > > > 
    > > > > Your statement "Whether the initiator knows this depends on 
    > > > whether it
    > > > > saw the previous R2T" is still confusing to me.  The logic 
    > > > used in the
    > > > > above example (EDTL and Offset) I assume is incorrect. 
    > > > Would you mind
    > > > > elaborating with a specific example of the proper method of 
    > > > doing so?
    > > > 
    > > > I don't understand the problem here.  In all cases, the initiator
    > > > looks at the offset and length in the R2T it receives and sends the
    > > > data requested by that R2T.  In both cases a) and b) above, 
    > > > the initiator
    > > > can tell that it's a recovery R2T because the requested data 
    > > > range overlaps
    > > > a previous R2T.  The statement I wrote covers a completely different
    > > > case in which the target sends an R2T that doesn't arrive 
    > > > (e.g., header
    > > > digest error), and decides to try to recover from that.
    > > > 
    > > > I also don't understand the reference to EDTL in the command
    > > > (as opposed to DDTL in the R2T0.  If a Recovery R2T causes
    > > > more than EDTL of data to be transferred for a command that's fine -
    > > > the target is in charge of data flow and will tell the initiator when
    > > > the command was complete and how much was actually transferred
    > > > (consider unexpected end-of-tape on a tape device to understand
    > > > why this is done this way).
    > > > 
    > > > Thanks,
    > > > --David
    > > > ---------------------------------------------------
    > > > David L. Black, Senior Technologist
    > > > EMC Corporation, 42 South St., Hopkinton, MA  01748
    > > > +1 (508) 249-6449            FAX: +1 (508) 497-8018
    > > > black_david@emc.com       Mobile: +1 (978) 394-7754
    > > > ---------------------------------------------------
    > > > 
    > > 
    > > 
    > 
    > 
    > 
    > 
    
    
    


Home

Last updated: Mon Sep 16 19:19:06 2002
11844 messages in chronological order