|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: iSCSI: frame formatsSandeep, > DataLen will now be max 8M/4M but then we dont wish to have large > iSCSI PDUs in any case. This max size is getting the the point where I'm sure it'll be an irritant. I would like (but, in fact, a sure way to guarantee that it won't happen is for me to like it :^) to view iSCSI PDUs as the expected grain size at which you might have software involvement in an otherwise hardware-driven iSCSI implementation. For example, when a target is returning read data for multiple outstanding reads, it might want to return a bit at a time from each, and each `bit' should be an iSCSI PDU. Clearly sending these bits will be a software-level decision. That certainly was the rational for allowing multiple FCP DATA PDUs per read operation, and I naively assumed similar logic was being applied here. The alternative is to say that the hardware will do iSCSI PDU chunking, but if that's the case, I expect that the header is, well, a bit bulky. I'm also incredibly unexcited about having data length be a multiple of 4 bytes (if that's still in the cards). There operations within the SCSI command set which return arbitrary length data. There are perfectly nominal cases where you get less data than you requested (e.g. inquiry & request sense). Furthermore, the SCSI architecture does not prohibit this, even though certain commands do, so it is not for iSCSI to say anything about this one way or the other. The problem with handling lengths that include padding comes when you're trying to move the data into a buffer which is a non-multiple length. For example, if I ask for 22 bytes of inquiry data (with a 22 byte buffer), what can I say, at the time a PDU arrives that has 24 bytes? It might have 21 or 22 bytes (or perhaps even, erroneously 23 or 24 bytes). A data residual coming later will tell the software how much was actually there, but it can't tell the hardware. The typical expectation of this type of transfer is that it will only overwrite bytes of the buffer that are actually transferred, but having padded lengths will not allow this. The completely standard solution to carrying arbitrary data of arbitrary length in an aligned transfer unit is to pad the transfer unit but report the exact (shorter) length. Another solution, used by FC, is to carry a pad length. In iSCSI, why bother---you've just reintroduced added the 2 bits you were trying to remove? The data length scenario is not comparable to IP header lengths, where what is being carried is not arbitrary data. Certainly, for iSCSI additional header segments (AHSs) you could arguably use this cell length technique, since we can control what we're carrying (AHSs that need exact byte lengths will have to be internally self-describing) but frankly, I still think it's a bad idea. I can't understand why we're messing around with all these tricky `solutions' to standard problems. We should avoid the temptation to get cute, and wholesomely provide the same capabilities as any other SCSI transport. Specifically: o allow long PDUs o carry exact data lengths Steph
Home Last updated: Tue Sep 04 01:05:12 2001 6315 messages in chronological order |