|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: iSCSI : Review Feedback on iSCSI Rev 06Santosh, > 3) Why does the new draft limit the size of text commands and nop commands to > 4096 bytes ? What is the rationale behind the magic number selection of 4096 > ? The reason for a limit like this (I won't argue that we've done it quite right here, in fact, I may argue against it a little bit below), is for to allow the receiving endpoints to have only extremely modest, tightly bounded resources for handling this non-nominal (or, at least, non-performance) traffic. DataPDULength is way too large a limit. I'm still optimistic that the maximum DataPDULength limit will be relaxed back towards 4G, even though I know that y'all have decided against it and everybody out there thinks I'm on dust (you'll see...). The limit that makes slightly more sense from an engineering standpoint, but makes no sense whatsoever from a standards standpoint, is FirstBurstSize. In a hardware implementation, DataPDULength is a property associated with the hardware data handling path. The data arriving in DataPDULength units is destined for buffers which are known to have already been allocated and supplied from the upper level. The resource cost for these buffers is a direct function of the application, as opposed to iSCSI overhead. The Login[Response], Text and Ping PDUs, and probably (but not definitely) unsolicited data, flow through a path where the buffers are iSCSI implementation overhead. iSCSI must provide a mechanism for reducing this resource overhead to an arbitrary, manageable size. The alternative is to require an iSCSI implementation to allocate a gratuitously large quantity of memory to handle occurences which a) may rarely (probably never) happen b) don't provide the implementation anything at all worthwhile in return for that memory. Because this is a non-performance path, having this parameter being negotiable is also a waste of effort. The iSCSI negotiation protocol should be (it mostly already is) designed to tightly bound the worst-case (largest) text payload in a Text or Login[Response]. To do this we must: 1) determine the maximum text payload size which contains all `fixed' length keys 2) create an iterator protocol for arbitrary, or even just large text messages. This includes X-* parameters---an X-* exchange must be structured to work within the max text PDU limits. In addition the X-* parameter definitions must create their own iterator if necessary---iSCSI only needs to handle iSCSI specified keys. Looking over the present set of text keys, the security exchanges already have tight size bounds, and clearly aren't going to be the limiting factor in the maximal text payload. That leaves the operation parameters. Most of the operational PDUs also have a small maximum fixed size. The exceptions are: InitiatorName InitiatorAlias TargetName TargetAddress TargetAlias We can probably put a modest bound on each of these keys individually (e.g. 512 bytes), which means that the maximum text payload size within a Login exchange is tightly bounded and 4K seems adequate. The problem comes with SendTargets=. That is why I proposed an iterator protocol for SendTargets= instead of having the target information gush back from the target uncontrolled. Simply bounding the maximum text payload and allowing and arbitrary sequence of text payloads to be sent in response to a single request doesn't cut it. We need to be able to bound the total amount of data returned from each particular request. SendTargets= actually has two problems. 1) an arbitrary number of targets per endpoint, 2) an arbitrary number of addresses per target. Given the second problem, unfortunately, it's not adequate to merely have a target iterator, since the data for each target may be arbitrarily long. Therefore, here's another proposal which might be close to the mark: Initiator keys: SendTargetStart= Send first PDU of target list information If already in the midst of a target list exchange, restart at the beginning SendTargetMore= Send next PDU of target list information SendTargetEnd= Terminate a target list exchange Target Keys: TargetName=name one per target TargetAddress=address one or more per target TargetAlias=alias one per target (may be empty) TargetMore= more target information remaining within the present target A target list exchange always terminates with a Text PDU with final=1. In the case that the exchange is ended by a SendTargetEnd=, the target's Text PDU with final=1 would have no payload. We would specify at most one target list request outstanding per session. Personally, I'd like to be even more restrictive and say that target list exchanges are only allowed on single connection sessions where a TargetName was not specified at login. However, Mark Bakke seemed to think that rather than a session with no TargetName, it should be a session with TargetName=iSCSI. Either way is fine with me, assuming that we do not want to allow a regular, operational login with TargetName=iSCSI (e.g. for boot, or simple initiators). I happen to think that operational login with TargetName=iSCSI is useful. The fact is, many boxes, even big ones, will have only a single target, but many LUNs. This corresponds to present storage boxes (as opposed to bridges). Steph
Home Last updated: Tue Sep 04 01:04:46 2001 6315 messages in chronological order |