1fi_provider(7)                 Libfabric v1.14.0                fi_provider(7)
2
3
4

NAME

6       fi_provider - Fabric Interface Providers
7

OVERVIEW

9       Conceptually,  a  fabric provider may be viewed as a local hardware NIC
10       driver, though a provider is not limited by this definition.  The first
11       component  of  libfabric is a general purpose framework that is capable
12       of handling different types of fabric hardware.   All  fabric  hardware
13       devices  and their software drivers are required to support this frame‐
14       work.  Devices and the drivers that plug into the  libfabric  framework
15       are referred to as fabric providers, or simply providers.
16
17       This  distribution  of  libfabric contains the following providers (al‐
18       though more may be available via run-time plug-ins):
19
20   Core providers
21       GNI    A provider for the Aries interconnect  in  Cray  XC(TM)  systems
22              utilizing  the  user-space  Generic  Networking  Interface.  See
23              fi_gni(7) for more information.
24
25       PSM    High-speed InfiniBand networking from Intel.  See fi_psm(7)  for
26              more information.
27
28       PSM2   High-speed  Omni-Path networking from Intel.  See fi_psm2(7) for
29              more information.
30
31       PSM3   High-speed Ethernet networking from Intel.  See  fi_psm3(7)  for
32              more information.
33
34       Sockets
35              A  general purpose provider that can be used on any network that
36              supports TCP/UDP sockets.  This provider is not intended to pro‐
37              vide  performance improvements over regular TCP/UDP sockets, but
38              rather to allow developers to write, test, and debug application
39              code  even  on platforms that do not have high-speed networking.
40              See fi_sockets(7) for more information.
41
42       usNIC  Ultra low latency Ethernet networking over Cisco  userspace  VIC
43              adapters.  See fi_usnic(7) for more information.
44
45       Verbs  This  provider  uses  the Linux Verbs API for network transport.
46              Application performance is, obviously expected to be similar  to
47              that  of  the  native Linux Verbs API.  Analogous to the Sockets
48              provider, the Verbs provider is intended to enable developers to
49              write,  test,  and debug application code on platforms that only
50              have Linux Verbs-based networking.  See fi_verbs(7) for more in‐
51              formation.
52
53       Blue Gene/Q
54              See fi_bgq(7) for more information.
55
56       EFA    A  provider  for  the  Amazon  EC2  Elastic Fabric Adapter (EFA)
57              (https://aws.amazon.com/hpc/efa/),  a  custom-built  OS   bypass
58              hardware interface for inter-instance communication on EC2.  See
59              fi_efa(7) for more information.
60
61       SHM    A provider for intranode communication using shared memory.  The
62              provider  makes use of the Linux kernel feature Cross Memory At‐
63              tach (CMA) which allows processes to have full access to another
64              process’ address space.  See fi_shm(7) for more information.
65
66   Utility providers
67       RxM    The  RxM provider (ofi_rxm) is an utility provider that supports
68              RDM endpoints emulated over MSG endpoints of  a  core  provider.
69              See fi_rxm(7) for more information.
70
71       RxD    The  RxD  provider (ofi_rxd) is a utility provider that supports
72              RDM endpoints emulated over DGRAM endpoints of a core  provider.
73              See fi_rxd(7) for more information.
74
75   Special providers
76       Hook   The  hook  provider is a special type of provider that can layer
77              over any other provider, unless FI_FABRIC_DIRECT is  used.   The
78              hook  provider is always available, but has no impact unless en‐
79              abled.  When enabled, the hook provider will intercept all calls
80              to  the  underlying  core  or  utility  provider(s).   The  hook
81              provider is useful for capturing performance data  or  providing
82              debugging  information,  even  in release builds of the library.
83              See fi_hook(7) for more information.
84

CORE VERSUS UTILITY PROVIDERS

86       Core  providers  implement  the  libfabric  interfaces  directly   over
87       low-level  hardware and software interfaces.  They are designed to sup‐
88       port a specific class of hardware, and may be limited to  supporting  a
89       single  NIC.   Core providers often only support libfabric features and
90       interfaces that map efficiently to their underlying hardware.
91
92       Utility providers are distinct from core providers in that they are not
93       associated  with  specific  classes of devices.  They instead work with
94       core providers  to  expand  their  features,  and  interact  with  core
95       providers  through  libfabric interfaces internally.  Utility providers
96       are often used to support a specific endpoint type over a simpler  end‐
97       point  type.  For example, the RXD provider implements reliability over
98       unreliable datagram endpoints.  The utility providers  will  not  layer
99       over the sockets provider unless it is explicitly requested.
100
101       Utility  providers show up as a component in the core provider’s compo‐
102       nent list.  See fi_fabric(3).  Utility providers are enabled  automati‐
103       cally  for core providers that do not support the feature set requested
104       by an application.
105

PROVIDER REQUIREMENTS

107       Libfabric provides a general framework for supporting multiple types of
108       fabric  objects  and their related interfaces.  Fabric providers have a
109       large amount of flexibility in selecting which components they are able
110       and  willing  to  support,  based  on  specific  hardware  constraints.
111       Provider developers should refer to docs/provider  for  information  on
112       functionality supplied by the framework to assist in provider implemen‐
113       tation.  To assist in the development of applications, libfabric speci‐
114       fies  the  following  requirements  that  must  be  met  by  any fabric
115       provider, if requested by an application.
116
117       Note that the instantiation of a specific fabric object is  subject  to
118       application  configuration  parameters and need not meet these require‐
119       ments.
120
121       • A fabric provider must support at least one endpoint type.
122
123       • All endpoints must support the message queue data transfer  interface
124         (fi_ops_msg).
125
126       • An endpoint that advertises support for a specific endpoint capabili‐
127         ty must support the corresponding data transfer interface.
128
129         • FI_ATOMIC - fi_ops_atomic
130
131         • FI_RMA - fi_ops_rma
132
133         • FI_TAGGED - fi_ops_tagged
134
135       • Endpoints must support all transmit and receive  operations  for  any
136         data transfer interface that they support.
137
138         • Exception: If an operation is only usable for an operation that the
139           provider does not support, and support for that operation  is  con‐
140           veyed using some other mechanism, the operation may return
141
142           • FI_ENOSYS.  For example, if the provider does not support inject‐
143             ed data, it can set the attribute inject_size = 0, and  fail  all
144             fi_inject operations.
145
146         • The  framework  supplies  wrappers around the `msg' operations that
147           can be used.  For example, the framework implements the sendv() msg
148           operation by calling sendmsg().  Providers may reference the gener‐
149           al operation, and supply on the sendmsg() implementation.
150
151       • Providers must set all operations  to  an  implementation.   Function
152         pointers  may  not be left NULL or uninitialized.  The framework sup‐
153         plies empty functions that return -FI_ENOSYS which can  be  used  for
154         this purpose.
155
156       • Endpoints must support the CM interface as follows:
157
158         • FI_EP_MSG endpoints must support all CM operations.
159
160         • FI_EP_DGRAM endpoints must support CM getname and setname.
161
162         • FI_EP_RDM endpoints must support CM getname and setname.
163
164       • Providers  that  support connectionless endpoints must support all AV
165         operations (fi_ops_av).
166
167       • Providers that support memory registration, must support all MR oper‐
168         ations (fi_ops_mr).
169
170       • Providers should support both completion queues and counters.
171
172         • If FI_RMA_EVENT is not supported, counter support is limited to lo‐
173           cal events only.
174
175         • Completion  queues  must  support  the   FI_CQ_FORMAT_CONTEXT   and
176           FI_CQ_FORMAT_MSG.
177
178         • Providers  that  support FI_REMOTE_CQ_DATA shall support FI_CQ_FOR‐
179           MAT_DATA.
180
181         • Providers that support FI_TAGGED shall support FI_CQ_FORMAT_TAGGED.
182
183       • A provider is expected to be forward compatible, and must be able  to
184         be  compiled  against  expanded fi_xxx_ops structures that define new
185         functions added after the provider was written.   Any  unknown  func‐
186         tions must be set to NULL.
187
188       • Providers  shall  document in their man page which features they sup‐
189         port, and any missing requirements.
190
191       Future versions of libfabric will automatically enable a more  complete
192       set of features for providers that focus their implementation on a nar‐
193       row subset of libfabric capabilities.
194

LOGGING INTERFACE

196       Logging is performed using the FI_ERR, FI_LOG, and FI_DEBUG macros.
197
198   DEFINITIONS
199              #define FI_ERR(prov_name, subsystem, ...)
200
201              #define FI_LOG(prov_name, prov, level, subsystem, ...)
202
203              #define FI_DEBUG(prov_name, subsystem, ...)
204
205   ARGUMENTS
206       prov_name
207              String representing the provider name.
208
209       prov   Provider context structure.
210
211       level  Log level associated with log statement.
212
213       subsystem
214              Subsystem being logged from.
215
216   DESCRIPTION
217       FI_ERR Always logged.
218
219       FI_LOG Logged if the intended provider, log level, and subsystem param‐
220              eters match the user supplied values.
221
222       FI_DEBUG
223              Logged if configured with the –enable-debug flag.
224

SEE ALSO

226       fi_gni(7),    fi_hook(7),    fi_psm(7),   fi_sockets(7),   fi_usnic(7),
227       fi_verbs(7), fi_bgq(7),
228

AUTHORS

230       OpenFabrics.
231
232
233
234Libfabric Programmer’s Manual     2021-03-22                    fi_provider(7)
Impressum