1
1

187 Коммитов

Автор SHA1 Сообщение Дата
Ralph Castain
780c93ee57 Per the PR and discussion on today's telecon, extend the process name definition as a two-field struct of uint32_t's down to the OPAL layer. This resolves issues created by prior commits that impacted both heterogeneous and SPARC support. This also simplifies the OMPI code base by removing the need for frequent memcpy's when transitioning between the OMPI/ORTE layers and OPAL.
We recognize that this means other users of OPAL will need to "wrap" the opal_process_name_t if they desire to abstract it in some fashion. This is regrettable, and we are looking at possible alternatives that might mitigate that requirement. Meantime, however, we have to put the needs of the OMPI community first, and are taking this step to restore hetero and SPARC support.
2014-11-11 17:00:42 -08:00
Jeff Squyres
ec4268b59c usnic: do not send zero-length modex message
If there are no usnic BTL modules, then just avoid sending any modex
message at all (other BTLs do this; it's safe to do).

The change is smaller than it looks: I added a "if 0 ==..." check at
the top to return immediately if there are no BTL modules.  Then I
removed some now-unnecessary conditionals and un-indented as
appropriate.

Fixes #248
2014-10-22 11:11:58 -07:00
Jeff Squyres
c22e1ae33b configury: new OPAL_SET_LIB_PREFIX/ORTE_SET_LIB_PREFIX macros
These two macros set the prefix for the OPAL and ORTE libraries,
respectively.  Specifically, the OPAL library will be named
libPREFIXopen-pal.la and the ORTE library will be named
libPREFIXopen-rte.la.

These macros must be called, even if the prefix argument is empty.

The intent is that Open MPI will call these macros with an empty
prefix, but other projects (such as ORCM) will call these macros with
a non-empty prefix.  For example, ORCM libraries can be named
liborcm-open-pal.la and liborcm-open-rte.la.

This scheme is necessary to allow running Open MPI applications under
systems that use their own versions of ORTE and OPAL.  For example,
when running MPI applications under ORTE, if the ORTE and OPAL
libraries between OMPI and ORCM are not identical (which, because they
are released at different times, are likely to be different), we need
to ensure that the OMPI applications link against their ORTE and OPAL
libraries, but the ORCM executables link against their ORTE and OPAL
libraries.
2014-10-22 10:32:19 -07:00
Jeff Squyres
51027a6635 usnic: fix minor typo
Change harmless-but-weird comma to semicolon.  Found during code
review.
2014-10-15 05:32:36 -07:00
Ralph Castain
fd6a044b7f Cleanup some cruft resulting from the move of the btl's to opal. We had created the ability to delay modex operations, which included a need to delay retrieving hostname info for remote procs. This allowed us to not retrieve the modex info until first message unless required - the hostname is generally only required for debug and error messages.
Properly setup the opal_process_info structure early in the initialization procedure. Define the local hostname right at the beginning of opal_init so all parts of opal can use it. Overlay that during orte_init as the user may choose to remove fqdn and strip prefixes during that time. Setup the job_session_dir and other such info immediately when it becomes available during orte_init.
2014-10-03 16:02:57 -06:00
Jeff Squyres
733316372b usnic: remove suggestion of enabling no-drop in the fabric
Reviewed by Reese Faucette

cmr=v1.8.3:reviewer=ompi-rm1.8

This commit was SVN r32628.
2014-08-28 23:56:56 +00:00
Jeff Squyres
b0dfb9f401 usnic: avoid a possible race condition
Per #4874, code review revealed a possible race condition in the
module struct and the connectivity agent.  Move the setup of the
connectivity agent listener until the module struct has been fully
setup.

This commit was SVN r32573.
2014-08-22 02:34:24 +00:00
Ralph Castain
aec5cd08bd Per the PMIx RFC:
WHAT:    Merge the PMIx branch into the devel repo, creating a new
               OPAL “lmix” framework to abstract PMI support for all RTEs.
               Replace the ORTE daemon-level collectives with a new PMIx
               server and update the ORTE grpcomm framework to support
               server-to-server collectives

WHY:      We’ve had problems dealing with variations in PMI implementations,
               and need to extend the existing PMI definitions to meet exascale
               requirements.

WHEN:   Mon, Aug 25

WHERE:  https://github.com/rhc54/ompi-svn-mirror.git

Several community members have been working on a refactoring of the current PMI support within OMPI. Although the APIs are common, Slurm and Cray implement a different range of capabilities, and package them differently. For example, Cray provides an integrated PMI-1/2 library, while Slurm separates the two and requires the user to specify the one to be used at runtime. In addition, several bugs in the Slurm implementations have caused problems requiring extra coding.

All this has led to a slew of #if’s in the PMI code and bugs when the corner-case logic for one implementation accidentally traps the other. Extending this support to other implementations would have increased this complexity to an unacceptable level.

Accordingly, we have:

* created a new OPAL “pmix” framework to abstract the PMI support, with separate components for Cray, Slurm PMI-1, and Slurm PMI-2 implementations.

* Replaced the current ORTE grpcomm daemon-based collective operation with an integrated PMIx server, and updated the grpcomm APIs to provide more flexible, multi-algorithm support for collective operations. At this time, only the xcast and allgather operations are supported.

* Replaced the current global collective id with a signature based on the names of the participating procs. The allows an unlimited number of collectives to be executed by any group of processes, subject to the requirement that only one collective can be active at a time for a unique combination of procs. Note that a proc can be involved in any number of simultaneous collectives - it is the specific combination of procs that is subject to the constraint

* removed the prior OMPI/OPAL modex code

* added new macros for executing modex send/recv to simplify use of the new APIs. The send macros allow the caller to specify whether or not the BTL supports async modex operations - if so, then the non-blocking “fence” operation is used, if the active PMIx component supports it. Otherwise, the default is a full blocking modex exchange as we currently perform.

* retained the current flag that directs us to use a blocking fence operation, but only to retrieve data upon demand

This commit was SVN r32570.
2014-08-21 18:56:47 +00:00
Jeff Squyres
ac7c907f8d usnic: ensure to have a safe destruction of an opal_list_item_t
It turns out that we ''can'' get to the endpoint destructor with the
endpoint still on the "endpoints needing ACKs" list.  So if it's on
the list, remove it first, and then DESTRUCT the opal_list_item_t.

This prevents an assert() fail in debug builds.  We'd like to let this
soak over the weekend.

cmr=v1.8.2:reviewer=dgoodell

This commit was SVN r32546.
2014-08-15 21:52:36 +00:00
Jeff Squyres
1cdcb7290b usnic: no need to check before calling this function
This function is intentionally always safe to call -- no need for a
double redundant check.

This commit was SVN r32545.
2014-08-15 21:39:29 +00:00
Jeff Squyres
082ab15d19 usnic: increase the listen() backlog size
Rarely -- but it happens -- the connectivity client gets ECONNREFUSED
because the connectivity agent listen() backlog is too small.  Rather
than put in a loop on the client side, take the simple way out for
now: increase the backlog size to an arbitrarily-large number.

Reviewed by Dave Goodell.

cmr=v1.8.2:reviewer=ompi-rm1.8

This commit was SVN r32543.
2014-08-15 19:12:18 +00:00
Jeff Squyres
9373d6420e usnic: when a module is finalized, "unlisten" the connectivity checker
Instead of waiting to destroy the connectivity agent during component
shutdown, have the module shutdown send an "unlisten" command to the
cagent that will tell it to stop listening on a given interface.

This commit was SVN r32536.
2014-08-15 00:52:43 +00:00
Jeff Squyres
6b592d3016 usnic: convert some BTL_ERRORs to more descriptive show_help messages
1. After we receive N abnormally-short messages (meaning: corrupted),
print a show_help message about it.  N defaults to 25.  N can be set
to 0 disable the message via btl_usnic_max_short_packets.
1. If we receive a completion error for something other than a
receive, display a show_help message.

Reviewed by Dave Goodell.

CMR'ing to v1.8.3, but it will require a custom patch because of the
OMPI->OPAL BTL move.

cmr=v1.8.3

This commit was SVN r32522.
2014-08-13 15:01:20 +00:00
Jeff Squyres
65767aff68 usnic: remove errant OMPI header file
This commit was SVN r32469.
2014-08-08 20:34:50 +00:00
Jeff Squyres
323b9f346c usnic: update connectivity checker help message
Show an example of using the btl_usnic_connectivity_map option.  Also,
mention that another reason for the "total connectivity failure" may
be due to asymmetric / unexpected routing.

Reviewed by Dave Goodell.

cmr=v1.8.2:reviewer=ompi-rm1.8

This commit was SVN r32465.
2014-08-08 17:18:29 +00:00
Jeff Squyres
6bf28a6940 usnic: update help messages
These messages were committed in the v1.8 branch in r32341, but were
never committed to the trunk (because we were waiting for the OPAL BTL
move).  This commit brings the trunk and v1.8 help messages in line
with each other.

This commit was SVN r32445.

The following SVN revision numbers were found above:
  r32341 --> open-mpi/ompi@5e752b4aba
2014-08-07 20:50:29 +00:00
Jeff Squyres
70f5a10128 usnic: fix typo from r32438
This commit was SVN r32440.

The following SVN revision numbers were found above:
  r32438 --> open-mpi/ompi@d2e31ac647
2014-08-06 19:29:46 +00:00
Jeff Squyres
d2e31ac647 usnic: Fix connectivity checker pointer mismatch
Ensure that the connectivity checker agent only uses pointers from the
client that is the same process as the agent.

Not necessary for the v1.8 branch -- this is a trunk/v1.9-only problem.

This commit was SVN r32438.
2014-08-05 23:07:01 +00:00
Jeff Squyres
34897cee9f usnic: unify teardown between trunk and v1.8 branches
Make the del_procs, module finalize, and endpoint destructors be the
same between trunk and v1.8, with one exception: the very beginning of
v1.8 module_finalize calls del_procs for each proc to simulate/pretend
the trunk/v1.9 PML behavior of calling del_procs before module_finalize.

This commit was SVN r32437.
2014-08-05 22:31:55 +00:00
Jeff Squyres
1a8d72119f usnic: Fix configure.ac typo
This commit was SVN r32436.
2014-08-05 22:31:07 +00:00
Dave Goodell
13b104bdef usnic: fix endpoint destruction on the trunk
Fixes an assertion failure in --enable-debug builds and SEGVs in normal
builds.

I'm not 100% sure I like this model, but it at least seems to be
consistent.  Some variation on this scheme will need to be adapted to
the trunk, where usnic_del_procs() is called by the PML instead of
internally in usnic_finalize().

A related bug (but with different mechanics) is #4832.

This commit was SVN r32424.
2014-08-04 21:30:21 +00:00
Dave Goodell
490c484f8c usnic: fix uninitialized param to accept(2)
This commit was SVN r32423.
2014-08-04 21:30:08 +00:00
Dave Goodell
61a9b49d5b usnic: fix usnic breakage in ORCM repo
This commit was SVN r32416.
2014-08-04 19:34:55 +00:00
Jeff Squyres
ff4717b727 usnic: cagent now checks that incoming pings are expected
Previously, the connectivity agent was pretty dumb: it took whatever
pings it got and ACKed them.  Then we added an agent check to ensured
that the ping actually came from the source interface that it said it
came from.  Now we add another check such that when a ping is received
on interface X that corresponds to usnic module Y, we ensure that the
source interface of the ping is on the all_endpoints list for module Y
(i.e., module Y expects to be able to talk to that peer interface).

This detects cases where peers have come to different conclusions
about which interfaces should be used to communicate (which is bad!).
This usually reflects a network misconfiguration.

Fixes CSCuq05389.

This commit was SVN r32383.
2014-07-31 22:30:20 +00:00
Ralph Castain
db89071dc2 Cleanup the moved component's Makefile.am to use the opal instead of ompi directories
This commit was SVN r32370.
2014-07-31 04:41:04 +00:00
Jeff Squyres
959bdace3c usnic: check that connectivity pings came from where they said they came from
Ensure that incoming "ping" messages came from the IP address that
they think they came from.  If they don't, drop them (because it is
probably routing error), which will likely eventually cause the
connectivity checker to timeout, and therefore cause the job to abort.

This commit was SVN r32368.
2014-07-30 21:03:56 +00:00
Jeff Squyres
20349da03b usnic: minor cleanup
This commit was SVN r32367.
2014-07-30 20:56:49 +00:00
Jeff Squyres
f1fb4970a5 usnic: remove all trailing whitespace
Style cleanup only; no code changes.

This commit was SVN r32366.
2014-07-30 20:56:15 +00:00
Jeff Squyres
a6c6aa2815 usnic: remove compatibility with v1.6 series
Update compat.h to only handle compatability between v1.7/v1.8 and
v1.9/2.0 (i.e., the current trunk).  Remove what seems to be the last
vestiages of OMPI/ORTE pollution in the now-OPAL-ized usnic BTL.

Currently use a hard-coded constant for the MCW size (i.e.,
MPI_COMM_WORLD size) for some initialization values in the v1.9/2.0
series; still need to figure out something better there.

This commit was SVN r32365.
2014-07-30 20:55:26 +00:00
Jeff Squyres
aed8b43db2 usnic: remove last vestiges of ORTE process names
These were missed when the BTLs moved to OPAL.

This commit was SVN r32364.
2014-07-30 20:53:41 +00:00
Jeff Squyres
d195b8caf4 usnic: fix a bunch of OMPI_* and ORTE_* constant usage
Somehow a bunch of OMPI_* and ORTE_* constants didn't get renamed in
the BTL move to OPAL.  This commit fixes that.

This commit was SVN r32363.
2014-07-30 20:52:54 +00:00
Jeff Squyres
2447c8479f usnic: do not call ompi_rte_abort()
Adapt to moving down to OPAL: find a PML-registered error callback,
and use that when we don't have a module context and we need to abort.

Failing that, just call exit().

This commit was SVN r32362.
2014-07-30 20:52:06 +00:00
Jeff Squyres
10a58992af usnic: add --with-usnic configure switch
If --with-usnic is specified and we can't build the usnic BTL, abort.
If --without-usnic is specified, gracefully skip building the usnic
BTL.  If neither is specified, do the OMPI-default behavior: try to
configure/build the usnic BTL, and if we can't, skip it.
    
Fixes CSCuq13889.

This commit was SVN r32349.
2014-07-30 02:11:04 +00:00
George Bosilca
3d5578d6df No vestiges of the RTE or OMPI left.
This commit was SVN r32327.
2014-07-26 22:19:49 +00:00
George Bosilca
f217661ee0 Use opal_process_info whenever possible. Some other minor cleanups.
This commit was SVN r32325.
2014-07-26 21:48:23 +00:00
Ralph Castain
fbed15072c Add missing rename of file
This commit was SVN r32318.
2014-07-26 01:21:07 +00:00
Ralph Castain
552c9ca5a0 George did the work and deserves all the credit for it. Ralph did the merge, and deserves whatever blame results from errors in it :-)
WHAT:    Open our low-level communication infrastructure by moving all necessary components (btl/rcache/allocator/mpool) down in OPAL

All the components required for inter-process communications are currently deeply integrated in the OMPI layer. Several groups/institutions have express interest in having a more generic communication infrastructure, without all the OMPI layer dependencies.  This communication layer should be made available at a different software level, available to all layers in the Open MPI software stack. As an example, our ORTE layer could replace the current OOB and instead use the BTL directly, gaining access to more reactive network interfaces than TCP.  Similarly, external software libraries could take advantage of our highly optimized AM (active message) communication layer for their own purpose.  UTK with support from Sandia, developped a version of Open MPI where the entire communication infrastucture has been moved down to OPAL (btl/rcache/allocator/mpool). Most of the moved components have been updated to match the new schema, with few exceptions (mainly BTLs where I have no way of compiling/testing them). Thus, the completion of this RFC is tied to being able to completing this move for all BTLs. For this we need help from the rest of the Open MPI community, especially those supporting some of the BTLs.  A non-exhaustive list of BTLs that qualify here is: mx, portals4, scif, udapl, ugni, usnic.

This commit was SVN r32317.
2014-07-26 00:47:28 +00:00