SORT BY:

LIST ORDER
THREAD
AUTHOR
SUBJECT


SEARCH

IPS HOME


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

    Re: iSCSI - Change Proposal X bit



    Santosh,
    
    Some comments in text.  I suggest you discuss the scenarios with 
    Mallikarjun or if you can't do that for some reason
    please call me. We can't go on with this ad nauseam on the list.
    
    Julo
    
    
    
    
    Santosh Rao <santoshr@cup.hp.com>
    Sent by: owner-ips@ece.cmu.edu
    24-10-01 18:29
    Please respond to Santosh Rao
    
     
            To:     Julian Satran/Haifa/IBM@IBMIL
            cc:     ips@ece.cmu.edu
            Subject:        Re: iSCSI - Change Proposal X bit
    
     
    
    Julian,
    
    Some comments on the below quoted scenarios :
    
    >    session has 3 connections
    >    on connection 1 I->T c1,c2,c3,C6
    >    on connection 2 I->T c4,c5,c7,c8
    >    Target receives 1,2,4,5,7,8 (miss 3 and 6) and acks 1 & 2
    >    Initiator closes 1 and resends c3, c4, c5,c7,c8  on connection 2 and 
    6
    >    on connection 3
    >    target receives all and starts executing and acks 8 on connection 3 
    but
    >    connection 2 stalls after c3 for a  LONG TIME
    >    then (after 2 full sequence wraps) connection 2 is gets alive and
    >    delivers c4,c5 etc (that are now valid)
    
    When the target acks CmdSN 8 on connection 3, it has, in effect, sent
    CmdSN ack's for CMdSNs 3,4,5,6,7,8. This implies that the commands with
    CmdSN 3, 4, 5, 7, & 8 were received by the target on connection 2 and
    their processing was commenced.
    
    +++ to understand fully the scenario make a timeline and observe taht 
    after 3 and 6 where received 4-8 can be executed and their answers sent 
    (connection 2 has not died). But c3 and the rest reach the pipe (depending 
    on implementation this may happen after statuses have reached the 
    initiator and TCP acks have been sent) and then the pipe stalls with the 
    duplicates in the pipe without the target knowing about them+++
    
    Hence, the following does not make sense :
    
    >    connection 2 stalls after c3 for a  LONG TIME
    >    then (after 2 full sequence wraps) connection 2 is gets alive and
    >    delivers c4,c5 etc (that are now valid)
    
    c4, c5, etc were already delivered to the target and are not being
    re-delivered. There is no problem in this case. (??).
    
    Take the next scenario :
    > 2 connections:
    > 
    > connection1  I->T c3,c4,c5
    >       status of 3 contains ack up to 6 and it and all other statuses are
    > lost
    > connection2  resend c3, c4 & c5 (no logout) and those are executed!
    
    Since the initiator got CmdSN ack's upto 6, the initiator should not be
    re-issuing these I/Os ??
    
    I still don't see justification to require that initiators send a
    immediate NOP-OUT in the manner being advocated.
    
    
    On a more fundamental note, I see some issues with the initiator being
    allowed to re-issue the commands on a different connection without
    having first logged out the previous connection successfully. I see
    nothing in the draft that suggests such behaviour, while at the same
    time, it is not forbidden.
    
    +++ the problem appears WHEN THE INITIATOR REISSUES THE COMANDS ON THE 
    SAME CONNECTION +++
    
    By resorting to command retries on a different connection in an attempt
    to plug the hole, without first logging out the previous connection, the
    initiator is susceptible to encountering I/O failure of that I/O due to
    ULP timeout.
    
    +++ That is not what the first scenario says. The second is trickier and 
    involves the fact
    
    Here's the scenario why such recovery should not be allowed :
    - Initiator sends CmdSN 3 on connection 1.
    - No CmdSN updates for a while and initiator re-sends CmdSn 3 on
    connection 2.
    - At the same time, target has sent CmdSN ack's for CmdSN 3 on
    connection 1.
    
    - Initiator has transferred the command allegiance on its side from
    connection 1 to connection 2 and is attempting the command on connection
    2. However, the command does not go through, since the (ExpCmdSN,
    MaxCmdSN) window has advanced and the trget discards the command.
    
    - Target sends in data and/or R2T and/or status for CmdSN 3 on
    connection 1. Since the initiator is not expecting any traffic for that
    I/O on connection 1, it discards any PDUs received on that connection 1
    for which no I/O state existed.
    
    In the above scenario, initiator will never get a CmdSN ack on
    connection 2 and will never be able to plug the hole despite repeated
    retries, finally, causing a ULP timeout, followed by session recovery.
    
    Given the above scenario, I suggest that the initiator must only
    re-issue commands on the same connection, and can re-issue them on
    another connection only following a successful logout.
    
    +++ That is what the current text says explicitly.  Scenario 2 has not 
    been properly stated. +++
    Comments ?
    
    Thanks,
    Santosh
    
    
    Julian Satran wrote:
    > 
    > Santosh,
    > 
    > The scenarios I am talking about are all derivatives of an initiator 
    trying
    > to plug-in holes and switching connections.
    > As the initiator does know the "extent" of a hole it can send-out 
    commands
    > that he did not have to.
    > I have sent the attached not to Mallikarjun  a while ago.  I think that
    > there might be many of this kind.  I am also aware that X bit by itself
    > might have some bad scenarios but the new proposal fixes them all.
    > 
    > Julo
    > 
    > _____________________________
    > 
    > Mallikarjun,
    > 
    > Take the following sequence scenario:
    > 
    >    session has 3 connections
    >    on connection 1 I->T c1,c2,c3,C6
    >    on connection 2 I->T c4,c5,c7,c8
    >    Target receives 1,2,4,5,7,8 (miss 3 and 6) and acks 1 & 2
    >    Initiator closes 1 and resends c3, c4, c5,c7,c8  on connection 2 and 
    6
    >    on connection 3
    >    target receives all and starts executing and acks 8 on connection 3 
    but
    >    connection 2 stalls after c3 for a  LONG TIME
    >    then (after 2 full sequence wraps) connection 2 is gets alive and
    >    delivers c4,c5 etc (that are now valid)
    > 
    > That is not a very likely scenario, I admit, but it is possible.
    > With X bit I could not find any such scenario since an X either follows 
    a
    > good one on the same connection or can be safely discarded.
    > I suspect that there are some more scenarios that involve immediate
    > commands or commands that carry their own ack in the status and are 
    acked
    > like:
    > 
    > 2 connections:
    > 
    > connection1  I->T c3,c4,c5
    >       status of 3 contains ack up to 6 and it and all other statuses are
    > lost
    > connection2  resend c3, c4 & c5 (no logout) and those are executed!
    > 
    > I think we can avoid those be requiring a NOP exchange before reissuing 
    a
    > command on a new connection or reissue the command with a task 
    management
    > (that has an implied ordering) but why do it if X is an obvious and safe
    > solution.
    > 
    > Julo
    > 
    > Regards,
    > Julo
    > 
    > 
    >                     "Mallikarjun
    >                     C."                  To:     Julian 
    Satran/Haifa/IBM@IBMIL
    >                     <cbm@rose.hp.c       cc:
    >                     om>                  Subject:     Re: iscsi : X bit 
    in SCSI Command PDU.
    > 
    >                     08-10-01 21:45
    >                     Please respond
    >                     to cbm
    > 
    > 
    > 
    > Julian,
    > 
    > We currently have the following specified in section 2.2.2.1 -
    > 
    > "The target MUST NOT transmit a MaxCmdSN that is more than
    > 2**31 - 1 above the last ExpCmdSN."
    > 
    > It appears to me that the above is sufficient to ward off the
    > accidents of the sort you describe.  Do you think otherwise?
    > --
    > Mallikarjun
    > 
    > Mallikarjun Chadalapaka
    > Networked Storage Architecture
    > Network Storage Solutions Organization
    > MS 5668 Hewlett-Packard, Roseville.
    > cbm@rose.hp.com
    > 
    > Julian Satran wrote:
    > >
    > > Mallikarjun,
    > >
    > > There is at least one theoretical scenario in which an "old" command
    > > may appear in a "new window" and be reinstantiated.
    > > At 10Gbs and several connection that does not take months. With X the
    > > probability is far lower (not 0).   I have no other strong arguments
    > > but I am still  thinking.  Matt Wakeley that insisted on it (against
    > > me) had some other argument that I am trying to find (I am note
    > > remembering).
    > >
    > > Julo
    > >
    > >   "Mallikarjun C."
    > >   <cbm@rose.hp.com>                  To:        Julian
    > >                              Satran/Haifa/IBM@IBMIL
    > >   08-10-01 20:39                     cc:
    > >   Please respond to cbm              Subject:        Re: iscsi : X
    > >                              bit in SCSI Command PDU.
    > >
    > >
    > >
    > > Julian,
    > >
    > > Now that you put me on the spot, :-), my response -
    > >
    > > Santosh argued with me privately that X-bit no longer serves a
    > > useful purpose after the advent of task management commands to
    > > reassign.  My response was that it never was a requirement per se,
    > > but always a "courtesy" extended by the initiator to help the
    > > target.  I also suggested that X-bit may be considered for its
    > > usefulness in debugging.
    > >
    > > He still had some (very reasonable) comments for simplification
    > > - the most appealing of which (to me) was the opportunity to do
    > > away with the X-bit checking for *every* command PDU that the target
    > > has to endure now.
    > >
    > > If I missed a legitimate use of X-bit, please comment. Do you
    > > think it is a protocol requirement per se?  I couldn't justify
    > > to myself so far (except the Login).
    > >
    > > Regards.
    > > --
    > > Mallikarjun
    > >
    > > Mallikarjun Chadalapaka
    > > Networked Storage Architecture
    > > Network Storage Solutions Organization
    > > MS 5668 Hewlett-Packard, Roseville.
    > > cbm@rose.hp.com
    > >
    > >
    > >
    > > Julian Satran wrote:
    > > >
    > > > Santosh,
    > > >
    > > > I am not sure you went through all scenarios. A conversation with
    > > your
    > > > colleague - Mallikarjun - and getting through the state table may go
    > > a
    > > > long way to clarify the need for X.
    > > >
    > > > And I am sure that by now you found yourself several .
    > > >
    > > > Julo
    > > >
    > > >   Santosh Rao
    > > >   <santoshr@cup.hp.com>                   To:        IPS Reflector
    > > >   Sent by: owner-ips@ece.cmu.edu  <ips@ece.cmu.edu>
    > > >                                           cc:
    > > >   06-10-01 01:56                          Subject:        iscsi : X
    > > >   Please respond to Santosh Rao   bit in SCSI Command PDU.
    > > >
    > > >
    > > >
    > > > All,
    > > >
    > > > With the elimination of command relay from iscsi [in the interests
    > > of
    > > > simplification ?], I believe that the X bit in the SCSI Command PDU
    > > > can
    > > > also be removed. As it exists today, the X bit is only being used
    > > for
    > > > command restart, which is at attempt by the initiator to plug a
    > > > potential hole in the CmdSN sequence at the target. It does this on
    > > > failing to get an ExpCmdSN ack for a previously sent command within
    > > > some
    > > > timeout period.
    > > >
    > > > Given the above usage of command restart, no X bit is required to be
    > > > set
    > > > in the SCSI Command PDU when command re-start is done.
    > > >
    > > > Either :
    > > > (a) the target had dropped the command earlier due to a digest
    > > error,
    > > > in
    > > > which case, the command restart plugs the CmdSN hole in the target.
    > > >
    > > > [OR]
    > > >
    > > > (b) the target had received the command and was working on it, when
    > > > the
    > > > initiator timed out too soon and attempted a command restart to plug
    > > > [what it thought was] a possible hole in the CmdSN sequence.
    > > >
    > > > In case (a), no X bit was required, since the target knows nothing
    > > of
    > > > the original command. In case (b), no X bit is required again, since
    > > > the
    > > > (ExpCmdSN, MaxCmdSN) window would have advanced and the target can
    > > > silently discard the received retry and continue working on the
    > > > original
    > > > command received.
    > > >
    > > > Removal of the X bit in the SCSI Command PDU has the following
    > > > benefits
    > > > :
    > > >
    > > > a) The CmdSN rules at the target are simplified. No need to look at
    > > X
    > > > bit, only validate received CmdSN with (ExpCmdSN, MaxCmdSN) window.
    > > >
    > > > b) The reject reason code "command already in progress" can be
    > > > removed.
    > > > There's no need for this reject reason code anymore, since X bit
    > > > itself
    > > > is not required, and the targets can silently discard commands
    > > outside
    > > > the command window and continue to work on the original instance of
    > > > the
    > > > command already being processed at the target.
    > > >
    > > > c) Less work for the target and less resources consumed since it no
    > > > longer needs to generate a Reject PDU of type "command in progress".
    > > > It
    > > > can just silently discard any command PDU outside the (ExpCmdSN,
    > > > MaxCmdSN) window.
    > > >
    > > > d) Less code for the target, since it does not need :
    > > > - any Reject code paths when it receives X bit command PDUs that are
    > > > already in progress.
    > > > - No special casing of CmdSN checking rules.
    > > > - No overheads of verifying a received command based on its
    > > initiator
    > > > task tag, to check if the task is currently active, prior to sending
    > > a
    > > > Reject response with "command in progress".
    > > >
    > > > Comments ?
    > > >
    > > > Thanks,
    > > > Santosh
    > > >
    > > > --
    > > > ##################################
    > > > Santosh Rao
    > > > Software Design Engineer,
    > > > HP-UX iSCSI Driver Team,
    > > > Hewlett Packard, Cupertino.
    > > > email : santoshr@cup.hp.com
    > > > Phone : 408-447-3751
    > > > ##################################
    > 
    > 
    >                     Santosh Rao
    >                     <santoshr@cup.       To:     IPS Reflector 
    <ips@ece.cmu.edu>
    >                     hp.com>              cc:
    >                     Sent by:             Subject:     Re: iSCSI - Change 
    Proposal X bit
    >                     owner-ips@ece.
    >                     cmu.edu
    > 
    > 
    >                     23-10-01 22:50
    >                     Please respond
    >                     to Santosh Rao
    > 
    > 
    > 
    > Julian Satran wrote:
    > >
    > > However in order to drop "old" commands that might in the pipe on a
    > > sluggish connection - removing the X bit will require the initiator to
    > > issue an immediate NOP requiring a NOP response on every open 
    connection
    > > whenever CmdSN wraps around (becomes equal to InitCmdSN).
    > 
    > Julian,
    > 
    > Can you please explain further the corner case you are describing above
    > ? Are you suggesting that special action should be taken every time
    > CmdSN wraps around, in case there were holes in the CmdSN sequence at
    > the wrap time ? Why is that ?
    > 
    > Here's my understanding of how this plays out :
    > 
    > Rule 1)
    > The CmdSN management rules at the target should be handling CmdSN wrap
    > case and the initiator cannot issue more than 2^32 -1 commands beyond
    > the last ExpCmdSN update it has received from the target, since the
    > target MUST NOT transmit a MaxCmdSN that is more than 2**31 - 1 above
    > the last ExpCmdSN. (per Section 2.2.2.1)
    > 
    > Rule 2)
    > Any holes that occur in the CmdSN sequence are attempted to be plugged
    > by the initiator by re-issuing the original command. If the CmdSN never
    > got acknowledged and the I/O's ULP timeout expired, the initiator MUST
    > perform session recovery. (per Section 8.6)
    > 
    > Thus, going by the above 2 rules, if the CmdSN sequence wraps upto
    > ExpCmdSN, the initiator will not be able to issue further commands,
    > since the target will keep the CmdSN window closed. The window can only
    > re-open when the CmdSN holes are plugged allowing ExpCmdSN and thereby,
    > MaxCmdSN to advance.  (rule 1 above).
    > 
    > Under the above circumstances, the initiator will possibly try to plug
    > the CmdSN hole by re-issuing the original command. It may do this 1 or
    > more times before its ULP timeout expires. Either the holes get plugged
    > and the windoe re-opens, or ULP timeout occurs without the corresponding
    > CmdSN for that I/O having been acknowledged, resulting in session
    > logout. (rule 2 above).
    > 
    > What is required over and beyond the above ? Why does removal of X-bit
    > require an immediate NOP to be issued every time CmdSN wraps and a hole
    > exists in the CmdSN sequence (??).
    > 
    > Regards,
    > Santosh
    > 
    > --
    > ##################################
    > Santosh Rao
    > Software Design Engineer,
    > HP-UX iSCSI Driver Team,
    > Hewlett Packard, Cupertino.
    > email : santoshr@cup.hp.com
    > Phone : 408-447-3751
    > ##################################
    
    -- 
    ##################################
    Santosh Rao
    Software Design Engineer,
    HP-UX iSCSI Driver Team,
    Hewlett Packard, Cupertino.
    email : santoshr@cup.hp.com
    Phone : 408-447-3751
    ##################################
    
    
    
    


Home

Last updated: Thu Oct 25 04:17:32 2001
7381 messages in chronological order