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

CORE VERSUS UTILITY PROVIDERS

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

PROVIDER REQUIREMENTS

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

LOGGING INTERFACE

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

SEE ALSO

229       fi_gni(7),   fi_hook(7),   fi_psm(7),    fi_sockets(7),    fi_usnic(7),
230       fi_verbs(7), fi_bgq(7), fi_opx(7),
231

AUTHORS

233       OpenFabrics.
234
235
236
237Libfabric Programmer’s Manual     2022-03-30                    fi_provider(7)
Impressum