Subject: RE: Target record not to span PDUs?

From: "Wheat, Stephen R" <[email-masked]>
Date: Thu, 23 Aug 2001 14:34:39 -0700

Julian,

Not to be pedantic, but, again, the arbitrary decision to avoid the
concatenation adds burden to the target side and restricts the future
capability of key=values that exceed the max text PDU length.

Again, the host side will need to buffer the input until it has all arrived
anyway.  Is there a stronger technical reason for this other than the
avoidance of concatenation?

The approach you propose adds processing burden to every action on a target
side to put a key=action into a PDU.  I envision the target side having
contiguous memory to formulate the entire text response, and it then sends
this in sequential PDUs.  Having to search for where a key=value pair spans
the PDU boundary is work.

Furthermore, being able to span PDUs facilitates a simpler specification.

Maybe Tow can explain the burden of concatenation.  If Tow really doesn't
care, can we go back to allowing the records to span PDUs?

Does anyone else care about this?

Stephen

-----Original Message-----
From: Julian Satran [mailto:[email-masked]]
Sent: Thursday, August 23, 2001 2:01 PM
To: [email-masked]
Subject: RE: Target record not to span PDUs?

Bob,

The record in question is a key=value pair. What Tow was asking is a about
a way to avoid having to "concatenate
strings" from two Text responses that carry the SendTargets answers one
after another and we have stated that
explicitly now.

Julo

Robert Snively <[email-masked]>@ece.cmu.edu on 22-08-2001 19:00:18

Please respond to Robert Snively <[email-masked]>

Sent by:  [email-masked]

To:   Tow Wang <[email-masked]>, Julian Satran/Haifa/IBM@IBMIL
cc:   "[email-masked]'" <[email-masked]>
Subject:  RE: Target record not to span PDUs?

It sounds like there may be some confusion between "physical
data unit" (the TCP/IP frame) and "iSCSI Protocol Data Unit"
(the messaging unit for iSCSI).  I cannot see where Tom's
problem arises, since Protocol Data Units are very well
behaved and should not have the problems he is discussing.
You cannot complete Protocol Data Unit processing until you
know you have all of them and that useful information does not
span them.  The assembly of protocol data units into useful
complete messages should be done at a layer below that where
you interpret the contiguous bytes of data in the context of
the complete messages.  I think as a general rule that any
iSCSI action should be able to span PDUs, including the
Target Record.

Bob

> -----Original Message-----
> From: Tow Wang [mailto:[email-masked]]
> Sent: Tuesday, August 21, 2001 7:07 PM
> To: 'Julian Satran'
> Cc: [email-masked]'
> Subject: Target record not to span PDUs?
>
>
> Julian (and all):
>
> Hello. This is regarding draft 07; could we require that
> target records NOT span across
> PDU's if a text response for SendTargets is very long? Upon
> reading appendix E, it seems
> that a response (of 4096 bytes in length) could end with:
>
> [Begin data segment]
> ...
> TargetName=I.got.chopped.4096
> TargetAddress=10.1.1.45
> [End data segment]
>
> In the above case, one could not determine whether the
> address is IP V4 or V6. Even if it
> had had enough space to put in the whole address, port and
> group tag, one cannot parse and
> process the record until inspecting the data segment of the
> next text response PDU, and
> this would involve cumulative buffering, back-parsing, etc. I
> think the above complexity
> could be avoided, as I can't imagine any single record
> exceeding 4096 bytes in length.
>
> Tow Wang
>
>

---

From: Tow Wang <[email-masked]>
Date: Thu, 23 Aug 2001 15:49:00 -0700

Stephen and all:

Hello. Let me explain myself further, as I do care about this issue. As I
interpret the appendix E, the amount of data (bytes) generated in response to
"SendTargets" can be arbitrarily long, and thus may require an unpredictable
number of text command/text response exchanges until all target records have
been delivered to the initiator.

I don't think it is a good idea to have to buffer all the data segments of
these text responses (until seeing a final bit) before parsing the target
records and freeing the buffers. I was not confusing between the concepts of
"having to buffer all TCP frames until all bytes of a single PDU have been
received"
and
"having to buffer and hold all PDU's sent in response to SendTargets"
The former is a given due to the nature of networking, but the latter is bad,
and likely unfeasible, if one has limited buffering memory. It is more
memory-efficient (and slightly improves performance) to FULLY process each
INDIVIDUAL PDU that has been delivered to the recipient, so one can release the
buffering resources and prepare to process the following PDUs coming in.

Also, in this situation the target is much better informed about the sizes,
starting points and end points of the target records. While the target writes
each record into the "contiguous memory" buffer alluded to, it must keep track
of the offset for the amount of space already used in the buffer (as it
certainly is not infinite in size!). That will give an immediate indication of
whether a record will fit within the a PDU, or should be shipped in the
following PDU.

Tow