[openib-general] Re: RMPP

Hal Rosenstock halr at voltaire.com
Wed May 4 11:29:19 PDT 2005


On Wed, 2005-05-04 at 13:43, Sean Hefty wrote:
> Hal Rosenstock wrote:
> > Hi Sean,
> > 
> > In addition to passing the hdr_len and data_len to ib_create_send_mad: 
> >                 rmpp_mad->rmpp_hdr.paylen_newwin = cpu_to_be32(hdr_len -
> >                         offsetof(struct ib_rmpp_mad, data) + data_len);
> > That's not the "real" payload length that would go into the packet; just
> > one segment's worth of class header. Correct ?
> 
> There are two sizes needed by the RMPP code.  First, it needs the total 
> length of the data buffer, which includes any necessary padding.  This is 
> set in the scatter-gather entry for the work request.  Second, it needs to 
> know how much of the data buffer contains valid user data.

Got it.

> ib_create_send_mad returns the length of the of the valid user data in a 
> slightly encoded format.  It subtracts the size of the RMPP and common MAD 
> headers from the size (see below).  The intent is that the payload length 
> value is set to the correct value for MADs that are a single segment in length.

Right. That might be a better way of expressing it than how I did :-)

> -------------
> MAD header
> -------------
> RMPP header
> -------------
> SA/Vendor hdr
> -------------
> User data
> -------------
> Pad
> -------------
> 
> sge length = size from MAD header to end of pad.
> payload = size from SA/Vendor hdr to end of user data.
> 
> > If the above is correct, I'm not sure the actual payload lengths in the
> > DATA packets are correct. I also see the padding on the last segment of
> > a multipacket send not cleared (I integrated the part of your patch
> > relating to the pad calculation).
> 
> I will run some tests and verify the payload values using madeye.  I'm not 
> sure why the padding isn't cleared.  It may be an indication that 
> create_send_mad isn't allocating the correct pad size.

Thanks.

> > In one test case, I see the first RMPP DATA segment sent and there is no
> > response (ACK) from the receiver (this was due to a (receiver) test
> > program issue). The transmitter retry depends on retries in the send_wr
> > ud structure. Does it need to known/Is there a way to know that this
> > failed (no ACK, etc.) when retries are exhausted or is this reliant on
> > the receiver rerequesting or is the entire RMPP transaction treated like
> > a UD send (e.g. unreliable) ?
> 
> The RMPP send is treated as reliable, even if no response is expected.  If 
> the send is not ACKed completely, the request will timeout, and a send 
> failure is reported to the user.  If the send completes successfully, then 
> the user knows that it was received by the remote side; although, there's no 
> guarantee that it was processed by anyone.

Is this on any (RMPP) transmits or just requests ? I will check to see
if I can see this.

> The code will retry a given segment the number of times specified by the 
> user.  If forward progress is made on the send, the retry count is reset.

for each subsequent segment. Makes sense.

> > Here's a summary of changes so far:
> > 1. ib_create_send_mad either needs an additional parameter (RMPP active
> > in current send packet) or the paylen_newwin needs to be set by the user
> > outside of this routine.
> 
> I have this on my short term to-do list.  I'm just not sure on the best 
> approach yet...

OK. I'll wait. I have my workaround right now.

> > 2. Some minor ib_mad.h commentary changes for more clarity on the
> > assumptions of the RMPP API.

Thanks.

-- Hal





More information about the general mailing list