1fi_provider(7)                 Libfabric v1.10.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       Sockets
29              A  general purpose provider that can be used on any network that
30              supports TCP/UDP sockets.  This provider is not intended to pro‐
31              vide  performance improvements over regular TCP/UDP sockets, but
32              rather to allow developers to write, test, and debug application
33              code  even  on platforms that do not have high-speed networking.
34              See fi_sockets(7) for more information.
35
36       usNIC  Ultra low latency Ethernet networking over Cisco  userspace  VIC
37              adapters.  See fi_usnic(7) for more information.
38
39       Verbs  This  provider  uses  the Linux Verbs API for network transport.
40              Application performance is, obviously expected to be similar  to
41              that  of  the  native Linux Verbs API.  Analogous to the Sockets
42              provider, the Verbs provider is intended to enable developers to
43              write,  test,  and debug application code on platforms that only
44              have Linux Verbs-based networking.  See fi_verbs(7) for more in‐
45              formation.
46
47       Blue Gene/Q
48              See fi_bgq(7) for more information.
49
50       EFA    A  provider  for  the  Amazon  EC2  Elastic Fabric Adapter (EFA)
51              (https://aws.amazon.com/hpc/efa/),  a  custom-built  OS   bypass
52              hardware interface for inter-instance communication on EC2.  See
53              fi_efa(7) for more information.
54
55       SHM    A provider for intranode communication using shared memory.  The
56              provider  makes use of the Linux kernel feature Cross Memory At‐
57              tach (CMA) which allows processes to have full access to another
58              process' address space.  See fi_shm(7) for more information.
59
60   Utility providers
61       RxM    The  RxM provider (ofi_rxm) is an utility provider that supports
62              RDM endpoints emulated over MSG endpoints of  a  core  provider.
63              See fi_rxm(7) for more information.
64
65       RxD    The  RxD  provider (ofi_rxd) is a utility provider that supports
66              RDM endpoints emulated over DGRAM endpoints of a core  provider.
67              See fi_rxd(7) for more information.
68
69   Special providers
70       Hook   The  hook  provider is a special type of provider that can layer
71              over any other provider, unless FI_FABRIC_DIRECT is  used.   The
72              hook  provider is always available, but has no impact unless en‐
73              abled.  When enabled, the hook provider will intercept all calls
74              to  the  underlying  core  or  utility  provider(s).   The  hook
75              provider is useful for capturing performance data  or  providing
76              debugging  information,  even  in release builds of the library.
77              See fi_hook(7) for more information.
78

CORE VERSUS UTILITY PROVIDERS

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

PROVIDER REQUIREMENTS

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

LOGGING INTERFACE

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

SEE ALSO

220       fi_gni(7),    fi_hook(7),    fi_psm(7),   fi_sockets(7),   fi_usnic(7),
221       fi_verbs(7), fi_bgq(7),
222

AUTHORS

224       OpenFabrics.
225
226
227
228Libfabric Programmer's Manual     2020-02-13                    fi_provider(7)
Impressum