1fi_provider(7) Libfabric v1.8.0 fi_provider(7)
2
3
4
6 fi_provider - Fabric Interface Providers
7
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 Utility providers
56 RxM The RxM provider (ofi_rxm) is an utility provider that supports
57 RDM endpoints emulated over MSG endpoints of a core provider.
58 See fi_rxm(7) for more information.
59
60 Special providers
61 Hook The hook provider is a special type of provider that can layer
62 over any other provider, unless FI_FABRIC_DIRECT is used. The
63 hook provider is always available, but has no impact unless en‐
64 abled. When enabled, the hook provider will intercept all calls
65 to the underlying core or utility provider(s). The hook
66 provider is useful for capturing performance data or providing
67 debugging information, even in release builds of the library.
68 See fi_hook(7) for more information.
69
71 Core providers implement the libfabric interfaces directly over
72 low-level hardware and software interfaces. They are designed to sup‐
73 port a specific class of hardware, and may be limited to supporting a
74 single NIC. Core providers often only support libfabric features and
75 interfaces that map efficiently to their underlying hardware.
76
77 Utility providers are distinct from core providers in that they are not
78 associated with specific classes of devices. They instead work with
79 core providers to expand their features, and interact with core
80 providers through libfabric interfaces internally. Utility providers
81 are often used to support a specific endpoint type over a simpler end‐
82 point type. For example, the RXD provider implements reliability over
83 unreliable datagram endpoints. The utility providers will not layer
84 over the sockets provider unless it is explicitly requested.
85
86 Utility providers show up as a component in the core provider's compo‐
87 nent list. See fi_fabric(3). Utility providers are enabled automati‐
88 cally for core providers that do not support the feature set requested
89 by an application.
90
92 Libfabric provides a general framework for supporting multiple types of
93 fabric objects and their related interfaces. Fabric providers have a
94 large amount of flexibility in selecting which components they are able
95 and willing to support, based on specific hardware constraints.
96 Provider developers should refer to docs/provider for information on
97 functionality supplied by the framework to assist in provider implemen‐
98 tation. To assist in the development of applications, libfabric speci‐
99 fies the following requirements that must be met by any fabric
100 provider, if requested by an application.
101
102 Note that the instantiation of a specific fabric object is subject to
103 application configuration parameters and need not meet these require‐
104 ments.
105
106 · A fabric provider must support at least one endpoint type.
107
108 · All endpoints must support the message queue data transfer interface
109 (fi_ops_msg).
110
111 · An endpoint that advertises support for a specific endpoint capabili‐
112 ty must support the corresponding data transfer interface.
113
114 · FI_ATOMIC - fi_ops_atomic
115
116 · FI_RMA - fi_ops_rma
117
118 · FI_TAGGED - fi_ops_tagged
119
120 · Endpoints must support all transmit and receive operations for any
121 data transfer interface that they support.
122
123 · Exception: If an operation is only usable for an operation that the
124 provider does not support, and support for that operation is conveyed
125 using some other mechanism, the operation may return
126
127 · FI_ENOSYS. For example, if the provider does not support injected
128 data, it can set the attribute inject_size = 0, and fail all fi_in‐
129 ject operations.
130
131 · The framework supplies wrappers around the 'msg' operations that can
132 be used. For example, the framework implements the sendv() msg oper‐
133 ation by calling sendmsg(). Providers may reference the general op‐
134 eration, and supply on the sendmsg() implementation.
135
136 · Providers must set all operations to an implementation. Function
137 pointers may not be left NULL or uninitialized. The framework sup‐
138 plies empty functions that return -FI_ENOSYS which can be used for
139 this purpose.
140
141 · Endpoints must support the CM interface as follows:
142
143 · FI_EP_MSG endpoints must support all CM operations.
144
145 · FI_EP_DGRAM endpoints must support CM getname and setname.
146
147 · FI_EP_RDM endpoints must support CM getname and setname.
148
149 · Providers that support connectionless endpoints must support all AV
150 operations (fi_ops_av).
151
152 · Providers that support memory registration, must support all MR oper‐
153 ations (fi_ops_mr).
154
155 · Providers should support both completion queues and counters.
156
157 · If FI_RMA_EVENT is not supported, counter support is limited to local
158 events only.
159
160 · Completion queues must support the FI_CQ_FORMAT_CONTEXT and
161 FI_CQ_FORMAT_MSG.
162
163 · Providers that support FI_REMOTE_CQ_DATA shall support FI_CQ_FOR‐
164 MAT_DATA.
165
166 · Providers that support FI_TAGGED shall support FI_CQ_FORMAT_TAGGED.
167
168 · A provider is expected to be forward compatible, and must be able to
169 be compiled against expanded fi_xxx_ops structures that define new
170 functions added after the provider was written. Any unknown func‐
171 tions must be set to NULL.
172
173 · Providers shall document in their man page which features they sup‐
174 port, and any missing requirements.
175
176 Future versions of libfabric will automatically enable a more complete
177 set of features for providers that focus their implementation on a nar‐
178 row subset of libfabric capabilities.
179
181 Logging is performed using the FI_ERR, FI_LOG, and FI_DEBUG macros.
182
183 DEFINITIONS
184 #define FI_ERR(prov_name, subsystem, ...)
185
186 #define FI_LOG(prov_name, prov, level, subsystem, ...)
187
188 #define FI_DEBUG(prov_name, subsystem, ...)
189
190 ARGUMENTS
191 prov_name
192 String representing the provider name.
193
194 prov Provider context structure.
195
196 level Log level associated with log statement.
197
198 subsystem
199 Subsystem being logged from.
200
201 DESCRIPTION
202 FI_ERR Always logged.
203
204 FI_LOG Logged if the intended provider, log level, and subsystem param‐
205 eters match the user supplied values.
206
207 FI_DEBUG
208 Logged if configured with the --enable-debug flag.
209
211 fi_gni(7), fi_hook(7), fi_psm(7), fi_sockets(7), fi_usnic(7),
212 fi_verbs(7), fi_bgq(7),
213
215 OpenFabrics.
216
217
218
219Libfabric Programmer's Manual 2019-06-15 fi_provider(7)