Provided by: libfabric-dev_1.11.0-3_amd64 bug

NAME

       fi_provider - Fabric Interface Providers

OVERVIEW

       Conceptually,  a  fabric  provider may be viewed as a local hardware NIC driver, though a provider is not
       limited by this definition.  The first component of libfabric is a general purpose framework that is  ca‐
       pable  of  handling  different  types of fabric hardware.  All fabric hardware devices and their software
       drivers are required to support this framework.  Devices and the drivers that  plug  into  the  libfabric
       framework are referred to as fabric providers, or simply providers.

       This  distribution  of  libfabric  contains  the  following providers (although more may be available via
       run-time plug-ins):

   Core providers
       GNI    A provider for the Aries interconnect in Cray XC(TM) systems utilizing the user-space Generic Net‐
              working Interface.  See fi_gni(7) for more information.

       PSM    High-speed InfiniBand networking from Intel.  See fi_psm(7) for more information.

       Sockets
              A general purpose provider that can be used on any network that supports  TCP/UDP  sockets.   This
              provider  is  not  intended  to provide performance improvements over regular TCP/UDP sockets, but
              rather to allow developers to write, test, and debug application code even on  platforms  that  do
              not have high-speed networking.  See fi_sockets(7) for more information.

       usNIC  Ultra low latency Ethernet networking over Cisco userspace VIC adapters.  See fi_usnic(7) for more
              information.

       Verbs  This  provider  uses the Linux Verbs API for network transport.  Application performance is, obvi‐
              ously expected to be similar to that of the native Linux Verbs  API.   Analogous  to  the  Sockets
              provider,  the  Verbs provider is intended to enable developers to write, test, and debug applica‐
              tion code on platforms that only have Linux Verbs-based networking.  See fi_verbs(7) for more  in‐
              formation.

       Blue Gene/Q
              See fi_bgq(7) for more information.

       EFA    A  provider  for  the Amazon EC2 Elastic Fabric Adapter (EFA) (https://aws.amazon.com/hpc/efa/), a
              custom-built OS bypass hardware interface for inter-instance communication on EC2.  See  fi_efa(7)
              for more information.

       SHM    A  provider  for intranode communication using shared memory.  The provider makes use of the Linux
              kernel feature Cross Memory Attach (CMA) which allows processes to have  full  access  to  another
              process' address space.  See fi_shm(7) for more information.

   Utility providers
       RxM    The  RxM  provider  (ofi_rxm) is an utility provider that supports RDM endpoints emulated over MSG
              endpoints of a core provider.  See fi_rxm(7) for more information.

       RxD    The RxD provider (ofi_rxd) is a utility provider that supports RDM endpoints emulated  over  DGRAM
              endpoints of a core provider.  See fi_rxd(7) for more information.

   Special providers
       Hook   The  hook  provider  is  a special type of provider that can layer over any other provider, unless
              FI_FABRIC_DIRECT is used.  The hook provider is always available, but has  no  impact  unless  en‐
              abled.  When enabled, the hook provider will intercept all calls to the underlying core or utility
              provider(s).   The  hook  provider is useful for capturing performance data or providing debugging
              information, even in release builds of the library.  See fi_hook(7) for more information.

CORE VERSUS UTILITY PROVIDERS

       Core providers implement the libfabric interfaces directly over low-level hardware  and  software  inter‐
       faces.   They  are  designed  to support a specific class of hardware, and may be limited to supporting a
       single NIC.  Core providers often only support libfabric features and interfaces that map efficiently  to
       their underlying hardware.

       Utility  providers are distinct from core providers in that they are not associated with specific classes
       of devices.  They instead work with core providers to expand  their  features,  and  interact  with  core
       providers through libfabric interfaces internally.  Utility providers are often used to support a specif‐
       ic endpoint type over a simpler endpoint type.  For example, the RXD provider implements reliability over
       unreliable  datagram endpoints.  The utility providers will not layer over the sockets provider unless it
       is explicitly requested.

       Utility providers show up as a component in the core provider's component list.  See fi_fabric(3).  Util‐
       ity providers are enabled automatically for core providers that do not support the feature set  requested
       by an application.

PROVIDER REQUIREMENTS

       Libfabric  provides a general framework for supporting multiple types of fabric objects and their related
       interfaces.  Fabric providers have a large amount of flexibility in selecting which components  they  are
       able and willing to support, based on specific hardware constraints.  Provider developers should refer to
       docs/provider  for information on functionality supplied by the framework to assist in provider implemen‐
       tation.  To assist in the development of applications, libfabric  specifies  the  following  requirements
       that must be met by any fabric provider, if requested by an application.

       Note  that  the instantiation of a specific fabric object is subject to application configuration parame‐
       ters and need not meet these requirements.

       • A fabric provider must support at least one endpoint type.

       • All endpoints must support the message queue data transfer interface (fi_ops_msg).

       • An endpoint that advertises support for a specific endpoint capability must support  the  corresponding
         data transfer interface.

       • FI_ATOMIC - fi_ops_atomic

       • FI_RMA - fi_ops_rma

       • FI_TAGGED - fi_ops_tagged

       • Endpoints  must  support  all transmit and receive operations for any data transfer interface that they
         support.

       • Exception: If an operation is only usable for an operation that the provider does not support, and sup‐
         port for that operation is conveyed using some other mechanism, the operation may return

         • FI_ENOSYS.  For example, if the provider does not support injected data, it can set the attribute in‐
           ject_size = 0, and fail all fi_inject operations.

       • The framework supplies wrappers around the 'msg' operations that can be used.  For example, the  frame‐
         work  implements  the  sendv() msg operation by calling sendmsg().  Providers may reference the general
         operation, and supply on the sendmsg() implementation.

       • Providers must set all operations to an implementation.  Function pointers may  not  be  left  NULL  or
         uninitialized.   The  framework  supplies  empty functions that return -FI_ENOSYS which can be used for
         this purpose.

       • Endpoints must support the CM interface as follows:

       • FI_EP_MSG endpoints must support all CM operations.

       • FI_EP_DGRAM endpoints must support CM getname and setname.

       • FI_EP_RDM endpoints must support CM getname and setname.

       • Providers that support connectionless endpoints must support all AV operations (fi_ops_av).

       • Providers that support memory registration, must support all MR operations (fi_ops_mr).

       • Providers should support both completion queues and counters.

       • If FI_RMA_EVENT is not supported, counter support is limited to local events only.

       • Completion queues must support the FI_CQ_FORMAT_CONTEXT and FI_CQ_FORMAT_MSG.

       • Providers that support FI_REMOTE_CQ_DATA shall support FI_CQ_FORMAT_DATA.

       • Providers that support FI_TAGGED shall support FI_CQ_FORMAT_TAGGED.

       • A provider is expected to be forward compatible, and must be  able  to  be  compiled  against  expanded
         fi_xxx_ops  structures  that  define  new  functions added after the provider was written.  Any unknown
         functions must be set to NULL.

       • Providers shall document in their man page which features they support, and any missing requirements.

       Future versions of libfabric will automatically enable a more complete set of features for providers that
       focus their implementation on a narrow subset of libfabric capabilities.

LOGGING INTERFACE

       Logging is performed using the FI_ERR, FI_LOG, and FI_DEBUG macros.

   DEFINITIONS
              #define FI_ERR(prov_name, subsystem, ...)

              #define FI_LOG(prov_name, prov, level, subsystem, ...)

              #define FI_DEBUG(prov_name, subsystem, ...)

   ARGUMENTS
       prov_name
              String representing the provider name.

       prov   Provider context structure.

       level  Log level associated with log statement.

       subsystem
              Subsystem being logged from.

   DESCRIPTION
       FI_ERR Always logged.

       FI_LOG Logged if the intended provider, log level, and subsystem parameters match the user supplied  val‐
              ues.

       FI_DEBUG
              Logged if configured with the --enable-debug flag.

SEE ALSO

       fi_gni(7), fi_hook(7), fi_psm(7), fi_sockets(7), fi_usnic(7), fi_verbs(7), fi_bgq(7),

AUTHORS

       OpenFabrics.

Libfabric Programmer's Manual                      2020-02-13                                     fi_provider(7)