RE: Comments on IPoIB Connected Mode Connection Establ ishment
Vivek Kashyap <[email protected]> Wed, 17 Aug 2005 23:35:38 -0700 (PDT)
| Newsgroups | gmane.ietf.ipoib |
|---|---|
| Message-ID | <[email protected]> |
On Wed, 17 Aug 2005, Dror Goldenberg wrote: > > >> From: Vivek Kashyap [mailto:[email protected]] >> Sent: Monday, August 15, 2005 9:41 AM >> >> On Wed, 10 Aug 2005, Dror Goldenberg wrote: >> >>> Reviewing the ipoib-cm draft >>> >> (http://www1.ietf.org/mail-archive/web/ipoverib/current/msg01372.html >>> >> <http://www1.ietf.org/mail-archive/web/ipoverib/current/msg013 > 72.html> >>> ) I have three comments about the connection establishment of >>> IPoIB-CM. >>> >>> (1) Service ID Reserved Bits >>> >>> Section 3.3. defines the Service-ID as having reserved bits which must >>> be transmitted as zeroes and ignored on receive. >>> It doesn't sound right to ignore those bits on the receive side. > Ignoring >>> those bits on >>> receive essentially means that the IPoIB-CM has to listen on a range of >>> service IDs. >>> I believe that it's better to define a service ID without reserved bits > such >>> that the >>> passive side listens on a single service ID. >>> For example, service IDs defined for SDP, don't have any reserved bits. >> >> Is it not possible to mask the bits marked as reserved (or >> unused)? The draft requires that the reserved bits must be >> zeroes on send. If it is a limitation >> of the connection manager that it cannot mask the bits and >> will have to listen to the 'range' then I agree that the >> service-ID will have to be specified >> received as zeroes instead of ignoring them. >> > > The CM interface is not defined in the IB spec, it is therefore > implementation > dependent. My understanding is that in OpenIB, the Linux CM is capable of > masking the Service ID, but the Windows CM is not. I personally think that > we should define those reserved as zero in send and receive, unless we > can come up with an example of how future extension can leverage > this feature. ok, we might have to therefore check for zeros. Does anyone have experience with Solaris, HP/UX, other CM's? [Future...well, one could think of a service-ID that is tied to say a protocol/port pair...but then there might be other ideas. ] > >>> >>> >>> (2) Active/Active Model Support >>> >>> 2.3 implies that it is desirable to have one connection between peers, >>> i.e. one QP on each side. I believe that active-active connection >>> establishment model is more >>> appropriate here. Otherwise, there may be cases of simultaneous access > that >>> will >>> end up having two connections between the same two nodes (one for each >>> direction). >>> The current Service ID assignment, makes it impossible to use the >>> active-active >>> model. The main reason is that the service ID has to be identical at > both >>> ends. In >>> other words, active-active requires that both REQ messages be used with > the >>> same >>> Service ID. The current Service ID is different (it has the QP number > in >>> it). >>> >>> A model that enables active-active, for example, is using a Service ID >>> which is a derivative of the PKey (no QP# in the Service ID). However, >>> it will not support the model of more than >>> one UD QP on the same HCA on the same PKey. This model is important. >>> >>> Another model that enables active-active is to have both local and >>> remote QP numbers in the service ID. However, it will require both >>> ends to listen on many Service IDs. >>> >>> Another alternative is to stay with active-passive connection >>> establishment, but add an interface through which one of the >>> connection can be quiesced and closed. In the >>> case where you happened to open two connections between the hosts, then > you >>> can close one of them afterwards. >>> >>> >>> (3) Identification of Remote Peer in Passive Side >>> >>> It is unclear to me how can the passive side tell which is the remote >>> peer. It must be able to tell that, so that it can use the other half >>> of the connection to send messages >>> back to the active side (instead of creating a new connection). >>> The identification of the peer is based on Link-Layer Address, which is >>> {GID,QPN}. The >>> CM REQ message only includes GID. Maybe the QPN (the UD QP) should be > passed >>> through the REQ private data ? >> >> ok..thinking about the above points, how about: >> >> 1. Include the local QPN in the request >> 2. The receiver of CM REQ will have: >> - local QPN (by way of ServiceID requested) >> - remote QPN (in private data as above) >> - remote GID (in REQ) > > Sounds good. It will fully solve item (3) in my original mail. > >> 3. In case of the active-active connection the request from >> the numerically >> smaller MAC Address (QPN+GID or probably just the GID) is >> terminated. The error code 'state connection' is a possibility here. >> >> The active-active situation is known when it is determined >> that there is an outstanding request to the remote peer (as >> determined by >> GID+QPN) while a request from the same is received on local ServiceID. > > In IB, active-active is only determined by equal Service IDs. See IB > spec 1.2 vol1 12.9.7.1, the Active CM state machine goes to > Peer-Compare state based solely on the Service ID. > Therefore, if you want to have active-active, then you must ensure that > both service IDs are identical. In the current draft, the Service IDs are > different, as they include a remote QP number. > Yes, if we are determining it based on the CM. However, I was suggesting the above as what the ipoib component will do when it is informed by CM. It can return a suitable error to CM when it determines that a particular connection shouldn't be allowed. Is that not possible? >> >> 4. However, there might be a need to establish multiple >> connections between the same two peers. Therefore, if a >> connection already exits between the remote GID+QPN on the >> local ServiceID, it is up to the >> receiver to accept this connection. The implementation >> accepting multiple connections and the one requesting >> multiple connections on the same ServiceID must manage the >> load; it is beyond the scope of this spec. > > I agree. > >> >> If two connection requests cross then case 3. above applies. > > > They must have same Service ID in order to cross, from the IB > perspective. > >> >> thoughts? >> >> Vivek >> >>> >>> -Dror >>> >> >