[openib-general] Re: Dual Sided RMPP Support as well as OpenSM Implications
Sean Hefty
mshefty at ichips.intel.com
Mon Apr 10 10:33:39 PDT 2006
Hal Rosenstock wrote:
>>This is my understanding of what needs to happen to support dual-sided RMPP.
>>
>>Node A sends an RMPP message. This requires normal RMPP processing.
>>Node A sends an ACK of the final ACK (I'll call ACK2), giving a new window.
>>Node B receives ACKs.
>>Node B sends the response. This requires normal RMPP processing.
>>
>> From the perspective of node A, the RMPP code only needs to know to send ACK2.
>
> There's more to the state machine in turning the direction around in
> terms of the sender becoming the receiver. I thought that this is the
> "harder" direction change.
Can you describe what more is needed that what's listed above?
In terms of compliance, if node A is not, but node B is;
Node B cannot send back the response until ACK2 is received. Since node A does
not understand dual-sided RMPP, it will not send ACK2. Node B will never send
the response.
If node A is, but node B is not:
Node A will send ACK2, which node B should drop. Node B will send an RMPP
message assuming an initial window size of 1. If node A had set the window
larger, it may delay the ACK of segment 1. Node B will eventually timeout and
resend segment 1. Most likely, this will cause node A to ACK segment 1, which
will update the window size at node B.
>> It can do this based on the method, or per transaction if directed by the client.
>
> Yes; I was thinking of class/method based approach for this.
Currently, only a MultiPathRecord query requires this. Why not limit dual-sided
RMPP to _only_ this request? All other queries can just use an RMPP message one
direction, followed by an RMPP message in the other direction. Beyond
MultiPathRecord queries, aren't we talking about vendor specific queries anyway?
Personally, I'd vote for removing dual-sided RMPP completely from the spec.
It's of questionable benefit and complicates the implementation, but it's
probably a little too late for that. Couldn't we just keep from defining
anything else as "dual-sided"?
>>Node B is more complex. It must now wait for ACK2, using timeout and retries of
>>ACK1 until ACK2 is received. And the response that will be generated by the
>>client must be delayed until that ACK2 is received.
>
>
> Yes but isn't much of this already needed for the normal termination
> case or is that part not implemented yet ?
No - ACK2 is a new message unique to dual-sided RMPP transfers (an ACK of an ACK).
>> The only information from ACK2 that's needed when sending the
>>response is NewWindowLast. A client could be expected to give this back to the
>>RMPP layer when sending the response. (A client that lied about NewWindowLast
>>should only lead to sending some packets that would be dropped, with the
>>transaction aborted.)
>
>
> Good idea. That would eliminate the need for some context transfer from
> the receive side to the send side in the RMPP code itself.
>
> Leaving the NWL up to the client could have the effect you mentioned but
> this is known to the RMPP core and hence we needn't rely on the client
> for this.
For the RMPP core to know what NWL is, it would need to track that information
between receiving a request and the generation of the reply. Since the RMPP
code can't trust the client to generate a reply, it would also need some sort of
timeout for how long the NWL information is valid. Tracking NWL by the client
seems trivial, whereas, it's substantially more complex for the RMPP core.
- Sean
More information about the general
mailing list