Greetings Open MPI developers,
Karol Mroz and I at UBC have been working on a BTL component for SCTP.
With our own internal testing, the BTL has stabilized so we were
hoping to commit it to ompi-trunk. Prior to doing so though, we
wanted get some feedback from the community. Particularly we were
curious if there were any objections to putting an initial version in
the trunk, initially with an ompi_ignore. The SCTP BTL component
stands alone completely. So what we're wondering....
Any objections to us committing an SCTP BTL to ompi-trunk if it has
the ompi_ignore file in it first?
I'll try to tell a little bit about this new SCTP BTL. Feel free to
write back if you have any questions.
For starters, SCTP is an IP-based transport protocol. There are
kernel-based implementations on most major operating systems. The
best implementation seems to be the FreeBSD stack (now by default in
FreeBSD 7), but the Linux one (lksctp.sf.net) has been getting better
and is currently a module in the vanilla kernel. These have been the
only two stacks that we have tested on so far; we've been able to run
a handful of our own tests in addition to the OSU, NAS, and Intel
benchmarks. At present, our autoconf rules only build the component
on these two platforms. We've also conformed to the Open MPI coding
standards as outlined on the wiki.
For fault tolerance purposes, SCTP connections (termed "associations")
can be made aware of multiple interfaces on the endpoints by binding
to more than one interface (for performance, the CMT extension uses
this multihoming feature to stripe data). SCTP also has several
different APIs that it supports. Like TCP, there can be a one-to-one
socket per connection. Another option is that like UDP, there can be
a single one-to-many socket that is used for all connections. The
SCTP BTL has the option of using either socket style, depending on the
value of the btl_sctp_if_11 MCA option. When this value is 1, the
one-to-one socket is used and like the TCP BTL, there are as many BTL
component modules as the number of network cards specified with
if_include and friends. By default, this value is 0 which means that
a single one-to-many socket is used; here only one BTL module is used
and internally, SCTP itself handles within that one socket all the
network cards specified with if_include, etc.
Currently, both the one-to-one and the one-to-many make use of the
event library offered by Open MPI. The callback functions for the
one-to-many style however are quite unique as multiple endpoints may
be interested in the events that poll returns. Currently we use these
unique callback functions, but in the future the hope is to play with
the potential benefits of a btl_progress function, particularly for
the one-to-many style.
At a high level, that's a review of the SCTP BTL component. The
current design does not make use of the SCTP multistreaming feature;
that is the intent of a future MTL so that we have access to MPI
information (like the context and tag). The question here is if I can
go ahead and commit, initially with the proper ignore files.... any