SORT BY:

LIST ORDER
THREAD
AUTHOR
SUBJECT


SEARCH

IPS HOME


    [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

    Re: iSCSI: frame formats



    Sandeep,
    
    > 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