1fi_provider(7)                 Libfabric v1.8.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   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

CORE VERSUS UTILITY PROVIDERS

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

PROVIDER REQUIREMENTS

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

LOGGING INTERFACE

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

SEE ALSO

211       fi_gni(7),   fi_hook(7),   fi_psm(7),    fi_sockets(7),    fi_usnic(7),
212       fi_verbs(7), fi_bgq(7),
213

AUTHORS

215       OpenFabrics.
216
217
218
219Libfabric Programmer's Manual     2019-06-15                    fi_provider(7)
Impressum