Re: iSCSI ACA - Implementers Guide (long, sorry)

"Eddy Quicksall" <[email protected]>
Newsgroups gmane.ietf.ips
Message-ID <[email protected]>
I only read about 3/4 of this but one there thing that I would like to 
comment on:

If the target is going to have wait for acknowledgement of all responses 
outstanding on other connections  then wouldn't it have to use a NOP-in to 
solicit the next ExpStatSN?  (because it can't be guaranteed that the 
initiator will be sending another command). I don't see any big deal in the 
but just thought it would be worth mentioning.

I would think that the delay mentioned would not be much of a concern 
because this would only happen if there is a check condition followed by 
recovery action in which case performance would be suffering anyway.

Also I think that the delay we introduce with this proposal is consistent 
with the sentence in SAM-2 you have mentioned.

Eddy

----- Original Message ----- 
From: <[email protected]>
To: <[email protected]>
Sent: Saturday, January 14, 2006 7:38 PM
Subject: [Ips] iSCSI ACA - Implementers Guide (long, sorry)


> An Implementer working on ACA (Auto-Contingent Allegiance)
> has pointed out some issues that could use some attention
> in the implementers guide.  The SCSI reference for this is
> Section 5.9.1 of SAM-2.  NOTE: This message is not written
> in my role as WG Chair.
>
> A quick introduction is that ACA is an alternative behavior
> for error handling (CHECK CONDITION) to the more familiar
> behavior of CA (Contingent Allegiance) that is immediately
> exited via Autosense.  ACA is requested on a per command
> basis via the NACA bit in the CDB.  The Autosense transmission
> of sense data still occurs as a result of CHECK CONDITION
> (Autosense is required by iSCSI), but unlike CA, the ACA
> condition persists until it is cleared by a CLEAR ACA task
> management function.  During ACA, the initiator uses commands
> with the ACA attribute (cf Section 10.3 of RFC 3720) to
> deal with the situation.  One ACA command at a time is
> permitted, and non ACA commands are rejected with an "ACA
> ACTIVE" status.
>
> The change in command processing behavior when entering ACA
> raises a number of concurrency issues, as SAM-2 is specified
> as if the initiator and target interact synchronously, which
> is not the case for iSCSI.  SAM-2 contains the following
> somewhat cryptic text in Section 5.9.1.2 whose consequences
> the implementers guide could help explain:
>
> If the SCSI transport protocol does not enforce state
> synchronization as described in 4.6.2, there may be a
> time delay between the occurrence of the CA or ACA
> condition and the time at which the application client
> becomes aware of the condition.
>
> iSCSI does not enforce state synchronization.  Further, in a
> multi-connection session, iSCSI does not support status
> sequencing (order of delivery of status/responses) across
> connections.  So, for a multi-connection, session, there are
> (at least) 4 interesting potential concurrency conditions:
>
> (1) The SCSI response indicating that CHECK CONDITION has
> caused establishment of ACA could get ahead of a response
> to a command completed prior to establishment of ACA.
>
> (2) An ACA ACTIVE status response could get ahead of the SCSI
> response that indicates establishment of ACA.
>
> (3) A command issued prior to establishment of ACA could
> arrive after ACA is established.
>
> (4) The CLEAR ACA task management function could get ahead of
> a command that is dealing with the ACA condition.
>
> Here are some initial thoughts on how to deal with these
> situations:
>
> -- (1) The SCSI response indicating that CHECK CONDITION has
> caused establishment of ACA could get ahead of a response
> to a command completed prior to establishment of ACA.
>
> This is only a concern in multi-connection sessions, as in a
> single-connection session, the response indicating ACA
> establishment will come after responses to all prior commands.
> This behavior can be preserved for multi-connection sessions
> by saying that the target MUST wait for acknowledgement of all
> responses outstanding on other connections at the time of ACA
> establishment before sending the response that indicates ACA
> has been established.  This "MUST" would be an additional
> requirement to RFC 3720 for multi-connection targets.
>
> This seems like a useful thing to require, as one of the first
> things an initiator will probably want to do on learning
> that ACA has happened is figure out what commands completed
> successfully prior to ACA (vs. are still at the target, and
> hence have been blocked by the ACA), and only the target knows
> what statuses are outstanding against the other connections.
>
> OTOH, it causes delays, so the alternative is to leave the
> initiator to sort this out, which may entail issuing NOPs
> to determine command status on other connections.  That
> would have the advantage of limiting the impact of ACA
> support to multi-connection initiators that actually want
> to use ACA, but the need to use the NOPs is unpleasant,
> leading me to favor having the target get this right
> (initiators who don't like the resulting delay in entering
> ACA shouldn't use it).
>
> I don't think ignoring the issue causes any SCSI specification
> violations, but it may make ACA error handling behave badly
> as command completions will be unexpectedly received during ACA.
>
> -- (2) An ACA ACTIVE status response could get ahead of the SCSI
> response that indicates establishment of ACA.
>
> Again, this is only a concern in multi-connection sessions, as
> in a single-connection session, ACA ACTIVE responses will come
> after the response indicating that ACA has been entered.  The
> approach to this should probably match (1) - if the target is
> required to wait for outstanding responses on other connections
> in (1), we should require that the target MUST receive
> acknowledgement of the response indicating establishment of ACA
> before issuing any ACA ACTIVE status responses on any connection
> other than the one that response used.  This "MUST" would be an
> additional requirement to RFC 3720 for multi-connection targets.
>
> The resulting delay in issuing ACA ACTIVE responses seems to be
> less of a concern, as the initiator can figure out what's
> going to happen:
> - Based on (1), the initiator has responses to the completed
> commands,
> - Uncompleted commands prior to ExpCmdSN in the response that
> established ACA were delivered to SCSI and have been
> blocked by the ACA.
> - All other commands will receive ACA ACTIVE status responses,
> as they were not delivered to SCSI when the ACA occurred.
>
> If we don't require the wait in (1), initiator use of NOP on
> other connections will flush out delayed ACA ACTIVE responses,
> but still leave a multi-connection initiator who wants to use
> ACA with the surprise that ACA ACTIVE responses can show up
> before the response indicating that an ACA has occurred.  This
> will result in a requirement on initiators to hold ACA ACTIVE
> status responses until the SCSI response indicating that ACA
> has occurred is delivered.  This is an additional requirement
> to RFC 3720, and may require initiators to track NACA on all
> outstanding commands to determine whether an Autosense response
> caused ACA or not.  This is probably better left to SCSI.
>
> IMHO, something needs to be done here, as delivery of an ACA
> ACTIVE response to SCSI before the response indicating ACA
> establishment is pretty clearly wrong from a SCSI perspective.
>
> Between (1) and (2) it's probably a good idea to advise
> initiator implementers that the synchronous nature of ACA
> makes it a poor fit with the concurrency of multi-connection
> iSCSI sessions.
>
> -- (3) A command issued prior to establishment of ACA could
> arrive after ACA is established.
>
> For a command without the ACA attribute, this is not an issue -
> such a command will be rejected with ACA ACTIVE status if ACA
> is in effect when it is due to be delivered to SCSI at the
> target.
>
> For a command with the ACA attribute, the situation is less
> clear, courtesy of the text quoted from SAM-2 above.  I talked
> with at least one other SCSI expert at T10 last week, and the
> two of us concur that this initiator behavior (initiator issues
> a command with the ACA attribute without knowing that ACA is
> in effect at the target) is questionable at best and probably
> wrong (and hence if the target unexpectedly executes the
> command because an ACA occurred, the initiator got what it
> deserved).
>
> Hence I suggest guidance (for both single and multi-connection
> sessions) that an initiator SHOULD NOT issue commands with the
> ACA attribute unless it knows that ACA is in effect at a target,
> because targets will process all commands with the ACA attribute
> if they are received while ACA is in effect, irrespective of
> whether an initiator may have issued such a command prior to
> ACA being established.  I believe this target behavior is
> permitted by the text quoted from SAM-2 above.  This is a
> general SCSI matter, and is not a change from RFC 3720.
>
> One of the reasons for taking this approach is that determining
> what ACA command to issue could well depend on what went wrong
> to cause the CHECK CONDITION in the first place, and an
> initiator that thinks it knows all the possible ways in which a
> target could get into a CHECK CONDITION is probably kidding
> itself in most cases.  It's better in general to wait for the
> ACA, look at the sense data and figure out what to do rather
> than blindly fire an ACA command into the dark based on a guess
> about what will cause the ACA.
>
> -- (4) The CLEAR ACA task management function could get ahead of
> a command that is dealing with the ACA condition.
>
> The corresponding race for exiting ACA - issue CLEAR ACA while a
> command with the ACA attribute is outstanding - seems less of a
> concern. An initiator who has done this clearly doesn't care
> whether that command (and there can only be one) executes or not.
>
> SAM-2 says that CLEAR ACA has the side effect of aborting a task
> with the ACA attribute.  iSCSI's logical ordering of command (and
> task management function) delivery to SCSI at the target ensures
> that this abort side effect will take place, but it's probably
> worth pointing out that the ordering responsibilities in Section
> 10.5.1 apply to this situation:
> - The target MUST wait for all tasks prior to the CLEAR ACA
> function to arrive in order to issue the ACA ACTIVE response
> (non ACA task) or abort them (ACA task).
> - The initiator MUST NOT deliver responses from affected
> tasks (all tasks prior to the CLEAR ACA function) to
> SCSI after the response to CLEAR ACA is delivered.
> An initiator that wishes to deal with ACA as expeditiously as
> possible should (lower case):
> - Issue all commands with the ACA attribute as well as the
> CLEAR ACA task management function on the same connection
> as the SCSI response that indicated establishment of ACA.
> - Not issue any commands without the ACA attribute prior to
> the CLEAR ACA task management function.
>
> Comments? (and sorry for the length)
>
> Thanks,
> --David
> ----------------------------------------------------
> David L. Black, Senior Technologist
> EMC Corporation, 176 South St., Hopkinton, MA  01748
> +1 (508) 293-7953             FAX: +1 (508) 293-7786
> [email protected]        Mobile: +1 (978) 394-7754
> ----------------------------------------------------
>
>
> _______________________________________________
> Ips mailing list
> [email protected]
> https://www1.ietf.org/mailman/listinfo/ips 


_______________________________________________
Ips mailing list
[email protected]
https://www1.ietf.org/mailman/listinfo/ips
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.