|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: Review of the 07 draftJulian: Thanks, responses in line... Bob Robert Griswold Technologist Crossroads Systems, Inc. 512-928-7272 From: Julian Satran [mailto:Julian_Satran@il.ibm.com] Sent: Sunday, August 05, 2001 9:52 AM To: Robert Griswold Subject: Re: Review of the 07 draft Robert, Thanks for you kind opening and for taking the time to read it. Comments in text. Julo "Robert Griswold" <rgriswold@crossroads.com> on 03-08-2001 22:33:56 To: Julian Satran/Haifa/IBM@IBMIL Subject: Review of the 07 draft Julian: First, great work on this initiative and please forgive my huge email. ... ++++++++++ Section 1.2.2.1 (and others): ... +++ This point has a long history remains of which you can find in the mail archives. I and several other authors where inclined to "silently discard" whatever can't be repaired (e.g., bugs in the initiator, delayed packets or packets arriving late) and explicitly reject only what can be repaired. Debugging ease can be achieved by other means (event logs etc.). However many of our colleagues on the list wanted error rejects to be explicit whenever it is feasible and that is what you have now except for the cases in which discards are due to a "legitimate packet" arriving late (e.g., from a previous transmission attempt that is already recovered). Discards are also better in preventing DOS attacks by stream replay++++ [Bob Griswold] Thanks, that is good clarification. Again, while I realize there may have been a lot of history on some of these comments, having the evolution of the thinking helps. Section 1.2.5: ... +++ We envisioned TTTs to be used by the target to identify parts of the data stream that arrive in response of an R2T. Additionally they identify NOP-Outs that are sent in response to a polling Nop-IN and in general when valid indicate that the target expects something and identify the response (link it to the "cause") for the target. We mentioned that the protocol does not care about the value mainly to stress that, unlike ITT, the protocol has no uniqueness requirement for them and whenever they appear the LUN is also present and can serve as an additional differentiator. ++++ [Bob Griswold] This will help in understanding what TTTs will be used for. Section 1.2.6 ... +++ Logout has also history. We started without a logout but realized soon that we will need a synchronized logout to enable command allegiance change for recovery (that is possible only after logout). Besides it is a simple and painless way to do a clean shutdown of a connection. As for a target only logout that is what the Asynch Message does (after some timeouts) Please keep in mind that there is also a fine interplay between logout and recovery and that both initiator and target may decide to start some recovery action+++ [Bob Griswold] I see the need for the logout to be as quick and as clean as possible. If one assumes the Initiator and Target have agreed on some form of possible recovery scenario, then having the target spend cycles trying to deliver some recovery information in response to a Logout seems reasonable; but I am not confident divergent iSCSI platforms could come to such an agreement, short of it being defined in one of the iSCSI specifications. Section 1.2.7 ... +++ This is getting thrown out (it is already) considering that T10 has gone a long way to expand the addressing of third party command source and destinatiantion +++ [Bob Griswold] This is good news... This model assumes that the iSCSI layer will deliver complete PDUs to underlying layers in single (atomic) operations. The underlying layer doe not need to examine the stream content to discover the PDU boundaries. But please note that this whole sectionmight go away :-) [Bob Griswold] OK. ++++ The rest of this section uses the word MUST a few times in the description of actions or implementation assumptions. While the use of the word MUST may make complete sense to the topic, and the points they are being applied to, it seems out of place for an optional layer of the model. If the Synch and Steering layer is truly optional, then how can the specification make claims to what MUST happen? +++ it says that IF you doit that MUST be the way to do it ++++ [Bob Griswold] My main concern is over the ability to have this specification define implementations of internal "sync and steering" for different host implementations. Certainly the IETF should define the right method for on-the-wire communication between two systems that are implementing such layers, wherever that communication may exist, but internal implementations for iSCSI drivers, and how they handle these "sync and steering" delivered PDUs seems out of place. Assuming each OS needs its separate driver base, separate assumptions and separate legacies, there will be very little hope for having these PDUs delivered, internally in divergent operating systems, in the exact same manner. Have I made these comments clearer, or just confused it more? Section 2.2.2 The definition of the AHS (see below, 2.2.3.1) seems to be covered as a global PDU property, but only op-code 0x01 (SCSI Command) seems to make use of it. Since the AHS seems to be only needed to encapsulate an extended CDB, then why define its possible existence for all PDUs? Can the AHS be used in other commands? +++ There is another one - BiDirectional command fields. +++ [Bob Griswold] Sorry, emphases on the wrong point here, my fault. The use of the AHS is only for iSCSI PDU op-code 0x01, but is defined under section 2.2 (granted, optional) as a part of the general iSCSI PDU format. Since the AHS is only used for a SCSI Command, should it be defined only under this instance, or is there some future use of the AHS envisioned? This comment borderlines on just editorial, and for education for me. Section 2.2.2.7 ... +++ I've changed it to: 1.1.1.1 LUN Some opcodes operate on a specific Logical Unit. The Logical Unit Number (LUN) field identifies which Logical Unit. If the opcode does not relate to a Logical Unit, this field either is ignored or may be used in an opcode specific way. The LUN field is 64-bits and it is to be formatted in accordance with [SAM2]. ++++ [Bob Griswold] Great, that helps a lot. Section 2.2.3.1 The inclusion of a bit that identifies if the CDB is extended should not live in an optional header. Expecting that all implementations would correctly code the use of an optional header to return critical data that should be identified with the required portion of the CDB seems out of place. We would suggest that the use of a reserved bit or a bit in a reserved byte be used, from the BHS, be used to identify an extended CDB. Putting the spillover of the CDB into the AHS (section 2.3.6) is not an issue, but flagging if there is spillover should not be in the AHS. +++ That must be a "misreading" - We are talking about a coded field one of the values is Extended CDB. The whole code is the AHSType. And if you have an extended CDB this header is not optional - it is the way to code the extended CDB (no other way is decribed) ++++ [Bob Griswold] I am clear on the fact that the Extended CDB bit is in the AHSType field; I am assuming that you are referring to section 2.3.6 when you say the header is not optional. Can a developer assume that if a SCSI Command PDU is received, and the TotalAHSLength has a correctly formatted value, that there either must be an Extended CDB AHS, or Bi-directional AHS present? This may be sufficient to alert from inside of the required header that the additional header exists. Section 2.5.1 ... +++ I can refer to some "opaque" management structure instead of MIB [Bob Griswold] Sounds good. As for not returning anything this is acceptable for Target Cold Reset - where the TCP connections are teared down but not for those that leave the connections standing +++ [Bob Griswold] I have reread this comment, but cannot understand what you are saying. Section 2.8.5 ... +++ We think that hex will be the preferred encoding used but sometimes people will copy decimal numbers. Once you have to have a decimal conversion routine it makes little sense to force hexadecimal only by dictate +++ [Bob Griswold] Well, if you assume that someone somewhere will have to do the conversion of decimal to hex, then the burden has to live somewhere, right? If the wire is going to be exposed to two different encoding schemes, then how is a lowly target going to know if its getting decimal or hex values? Will there be some marker, key=value system, or something that will allow the receiver of an ambiguous data type to know what it is getting? Section 2.9.5 .. +++ It is not a MUST but it was thought by many (with some vehemence) as helping matching. IMHO it has no meaning and would suggest removing it. +++ [Bob Griswold] Agreed, there is no reason the same folks couldn't drive a great "best-practices" RFC, or some SNIA document that could be used by the industry developers to make life easier. The out-of-order key=value issue will never go away, but keeping code efficient is always good. Section 2.10.1 ... +++ The text only says that if you are going to support connection recovery you should be able to support opening a second connection in order to clean the first connection and close it. It also explicitly says that you don't have to support 2 connections in full feature phase. And even on 2 TCP connections it is just a recommendation - using IP-over-pidgeons can be an good alternative for forcing a TCP connection to close. On a more serious note the second TCP connection can be on the same physical connection. +++ [Bob Griswold] Thanks for the explanation, and the great visual. Section 2.12.4 If the limit of reflected data is 4096 bytes, then the instruction to the initiator should not be "avoid sending", it should be "MUST NOT" send more than 4096 bytes. Is there a reason why the initiator would want to send more than those number of bytes? +++ The implications of saying MUST NOT would be that the target has to check and to reject with a format error. We don't want this do we? +++ [Bob Griswold] Since the implications of ping data escape me (sorry, just a storage guy so pinging is something I don't understand) I probably need to defer this to the networking thinkers. I just hate to have language in a specification that allows the receiver of what should be a field overrun to do whatever it sees fit. Can you give a two sentence explanation on what the target would do with ping data that is truncated, and what the initiator would expect to see in such a case? Section 2.16 The last sentence in this section seems at odds with good error detection for targets, and at odds with section 2.19.1. If a SNACK received has and error, whether or not it was a miss-directed PDU, or a transit error, why would a target just silently ignore it? Should it use the SNACK Rejected code of the Reject response, or at least tell the initiator something? Besides, the use of the word "must" seems inconsistent with what this sentence is trying to say. If there is a good reason for a target to ignore this, then it should be mentioned, and the directive should be "MUST" if the expectations of the initiator are set that way. +++ A SNACK that is not supported is answered either by an Asynch Message asking logout - for failover - or total silence - in which case we assume SCSI will timeout and do its thing (abort, reissue the command or whatever neded. There no need to answer. A badly formed SNACK is rejected as any othe badly formed PDU (although even this is perceived by some as excessive when it does not help the initiator take repair action). ++++ [Bob Griswold] Well, I will continue to say that a target that provides no information on a received packet of information that is part of a SCSI transfer is not a great target. If some well-intentioned initiator keeps sending what it believes to be valid PDUs, but appears to the target to be invalid, then where and how does the initiator learn about what is going on at the target level? Section 2.16.1 ... +++ The target should request logout if it supports connection recovery but not data snack +++ [Bob Griswold] So is that information (supporting recovery but no data snack) inclusive in the discovery information? Section 4.2 ... +++ I think we can leave this to be implementation dependent. If I would have to chose a "way out" would say limited number of text exchanges rather than a timeout. ++++ [Bob Griswold] OK, then can that be defined, or should that also be left for implementation? Section 7.1c This description of the use of the Retry bit seems to put the onus of interpretation of the Retry bit on the target for command replay. Is it at all possible for a Replay request to get issued, within the scope of an initiator delaying its acknowledgement, such that the command actually did get completed, but the Retry bit was set too soon? Would one assume that an initiator just avoids doing something like this? +++ I will come back to this later. +++ [Bob Griswold] Great, I am looking forward to it. Section 7.6 ... +++ It is not defined here - it is assumed that when we let SCSI commands dry out (drop data packets, status etc.) the SCSI drivers will recover after a timeout and do some cleanup +++ [Bob Griswold] OK, but can ULP still be defined as an acronym for this document? Thanks, Bob Robert Griswold Technologist Crossroads Systems, Inc. 512-928-7272
Home Last updated: Tue Sep 04 01:04:04 2001 6315 messages in chronological order |