Hey all -

Thought I would give you guys a heads up on some code that will be coming into the trunk in the not too distant future (hopefully tomorrow?). The changes revolve around the RML/OOB interface and include:

  * General TCP cleanup for OPAL / ORTE
  * Simplifying the OOB by moving much of the logic into the RML
  * Allowing the OOB RML component to do routing of messages
  * Adding a component framework for handling routing tables
* Moving the xcast functionality from the OOB base to its own framework

The IPv6 code did some things that I (and I know George) didn't like. Some functions had their interface change depending on whether IPv6 support was enabled (taking either an sockaddr_in or sockaddr_in6 instead of just a sockaddr) and we were inconsistent about storage sizes. I've added a bunch of compatibility code to opal_config_bottom.h so that we can always have sockaddr_storage and some of the required IPv6 defines, which drastically simplified the IPv6 code in the TCP OOB.

Previously, the OOB and RML component interfaces were essentially equivalent. This isn't surprising, as the RML was added at the last minute as a wrapper around the OOB as a forward looking way of solving multi-cell architectures. The interface into the OOB was also strange, requiring the upper layer (the RML) to call base functions that did a bit of work, then called the component. With this change, all the base code has been moved into the RML, and the OOB interface has been simplified by removing all the blocking and dss buffer communication. The RML now handles the implementation of blocking sends and dss buffer communication. This not only greatly simplifies writing an OOB component, but removes the base code in the oob, which was causing problems as it implied that there was one and only one oob component active at a time, which some people are apparently trying to break (by having multiple OOB components alive).

The OOB RML can now also route messages, using a new framework (the routed framework) for determining how a message should be routed. Currently, only direct routing is supported, although that will change in the near future. The not-so-long term goal is to allow MPI processes to talk to each other and to the HNP through their local daemon, rather than directly. This will drastically reduce the number of sockets open in the system, which can only help with the speed thing.

Finally, we moved the xcast functionality out of the OOB base and into its own framework. It really didn't make sense to have it in the OOB base, as it didn't do anything OOB specific and just utilized the RML to move data around. By moving it to its own framework, we can more easily experiment with new xcast protocols (using the component infrastructure, rather than the games Ralph currently has to play using MCA parameters and if statements). It also makes a clearer distinction as to which components are responsible for which functionality.

Anyway, that's where we're at. You can take a look at the code in the temporary branch bwb-oob-rml-cleanup, although it currently does not work for singletons due to some merge conflicts from last night. This will be resolved before the merge back into the trunk, obviously.


Brian

--
  Brian W. Barrett
  Networking Team, CCS-1
  Los Alamos National Laboratory


Reply via email to