[openib-general] [PATCH] [CM] add private data comparison to match REQs with listens

Caitlin Bestler caitlinb at broadcom.com
Tue Nov 29 13:04:12 PST 2005


openib-general-bounces at openib.org wrote:
> The following patch modifies the kernel CM API to support
> matching private data in received REQs against listen
> requests.  This allows the CM to support multiple listeners
> on the same service ID if a discriminator is carried in the
> private data.
> 
> This will be used by the CMA to distinguish listen requests
> on the same port, but on different IP addresses.  Updates
> were made to SDP and kDAPL to support this change.
> 

A DAT Consumer does not issue multiple listens for the same
Interface Adapter differentiated on the IP address (source
or destination). Only a single listen per port/service ID
is allowed per Interface Adapter.

The resulting Connection Request events carry the remote
and local addresses to allow the DAT *consumer* to differentiate
based on the address.

There are several factors as to why this differentiation
is best done by the DAT Consumer, and not by the Connection
Manager or DAT Provider:

1) While supporting multiple addresses on the same Interface
   is an extremely common practice, typically it is the *same*
   service being supported for port X no matter what the local
   IP address is.
2) Virtual hosts may support *thousands* of IP addresses, and
   differentiate the content served for each of them. Such a
   large fan out is best supported by the daemon's own tables,
   rather than by general purpose Connection Manager tables.
3) The backlog is best expressed as a common limit (HTTPD will
   accept up to 50 pending connections) rather than a per IP
   address limit (since there are *thousands* of virtual sites,
   the aggregate limit simply dissapears).

Keep in mind that this is site virtualization where the daemon
is aware that it is supporting multiple sites using a *single*
Interface Adapter (HCA/RNIC). Apache is the prime example of 
this strategy.

Xen-style virtualization can have each GOS supplying a totally
different daemon for its virtual Interface Adapter on the same
TCP port/Service ID. But in that case each daemon/GOS thinks 
that it has a distinct device. The listents are segregated by
the virtual device, not by the destination IP address (unless
that is how the virtualizer splits the traffic, but that is
done *before* the Connection Manager is involved).




More information about the general mailing list