RMA-capable Multi-EP support in ibv/FAST

Merged
#386 · Created  · Last updated

Merged pull request

Merge pull request #386 into memory_kinds

ac974cf·Author: ·Closed by: ·2020-10-05

Description

Summary:

This PR provides the ability to create non-primordial endpoints with GEX_EP_CAPABILITY_RMA with ibv conduit (FAST segment mode only) and enhancements to testtmpair to exercise the new endpoints. At this time, there is still no support for creating teams containing non-primordial endpoints, and all communication using them must be conducted using TM-pairs.

There are no new injection resources, such as an IBV QueuePair.

Status:

Ready for review.

Fairly well tested on Dirac and Wombat (both with and without PSHM).

The ibv-conduit testing on Wombat was dual-rail.

Commits:

  • Implement gasneti_[ei]_tm_rank_to_ep_index

    This commit implements gasneti_[ei]_tm_rank_to_ep_index() to lookup the index of the endpoint named by a (tm,rank) pair. It is able to handle TM-pairs correctly and optimizes for TM0.

    Prior to this call, it was necessary to query the entire EP_Location and extract the index portion. This is expected to be more ammenable to optimization than that pattern, for those cases where the jobrank is not also needed.

  • Initial multi-EP work in Bind, Publish and QueryBound

    This commit updates the conduit-independent code for gex_EP_BindSegment() and gex_EP_PublishBoundSegment() to store segment bounds for non-primordial endpoints. The implementation of gasneti_Segment_QueryBound() is updated to use this information to answer for non-primordial endpoints.

    This work also updates the bounds-checking macros to use the newly maintained segment bounds data.

  • PSHM: initial multi-EP support

    This commit updates the internal functions gasneti_pshm_local_rank() and gasneti_pshm_in_supernode() to correctly consider non-primordial endpoints as "outside" the supernode.

    Additionally, these two functions and another peer are documented as TM-pair aware (which was already true prior to this commit).

  • ibv: create/allow intra-nbrhd connections

    This commit changes connection and injection logic in ibv-conduit to permit intra-neighborhood communication over IBV. This is required for multi-EP support, because non-primordial EPs are not cross-mapped by PSHM. Additionally, this will be a requirement for eventual off-loaded remote atomics, which must perform all accesses via the HCA. It is the future case for atomics which motivates not retaining logic to exclude loopback.

    To compensate for the loss of "!IN_NBRHD" assertions at the deepest levels of the call stack (where endpoint index info is unavailable), this commit introduces new ones in the Put, Get and AM code paths. In the case of AMs the assertions is still "!IN_NBRHD". However, for RMA operations the assertion is "!PRIMORDIAL || !IN_NBDHB".

  • ibv: initial multi-EP support

    This commit implements initial multi-EP support in ibv-conduit, for FAST segment mode only.

    The value of GASNET_MAXEPS has been raised to 8 initially.

    The hook called by gex_EP_Create() has been updated to properly initialize non-primordial endpoints, but to restrict them only to GEX_EP_CAPABILITY_RMA.

    The conduit-specific portion of gex_EP_PublishBoundSegment() has been updated to maintain a table of remote RKeys of the segments bound to non-primordial endpoints.

    The logic for determining which RKey is used to inject communication has been updated by replacing a function argument rem_auxseg with rem_epidx. Now instead of passing a boolean to indicate if the remote address is in the aux-segment, the remote endpoint index is passed, with -1 used to indicate the aux-seg.

  • testtmpair: initial multi-EP support

    This commit adds initial support for exercising multi-EP support via testtmpair.

    Beyond removing an #if 0 from existing code for this purpose, non-trivial changes have been made to allow for the incremental introduction of capabilities. In particular "open box" testing of a conduit's CAPABILITY support for non-primordial endpoints is included.

    Additionally, this eliminates special-casing of EVERYTHING segment mode in this test.

  • Document GASNETI_NBRHD_LOCAL* status

    This commit documents the TM-pair and multi-EP awareness properties of the GASNETI_NBRHD_LOCAL{,_ADDR,_ADDR_OR_NULL} macros, and the lack of both for the GASNETI_NBRHD_JOBRANK_LOCAL* versions.

    Additionally, the macro GASNETI_NBRHD_JOBRANK_LOCAL_ADDR is annotated as [DEPRECATED] (since it is easily misused) and GASNETI_NBRHD_JOBRANK_LOCAL_ADDR_OR_NULL is removed since is is both dangerous an unused.

0 attachments

0 comments

Loading commits...