1fi_provider(7)                 Libfabric v1.6.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
18       (although 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 uti‐
22       lizing  the user-space Generic Networking Interface.  See fi_gni(7) for
23       more information.
24
25       PSM : High-speed InfiniBand networking from Intel.  See  fi_psm(7)  for
26       more information.
27
28       Sockets  :  A  general purpose provider that can be used on any network
29       that supports TCP/UDP sockets.  This provider is not intended  to  pro‐
30       vide  performance improvements over regular TCP/UDP sockets, but rather
31       to allow developers to write, test, and debug application code even  on
32       platforms  that  do  not have high-speed networking.  See fi_sockets(7)
33       for more information.
34
35       usNIC : Ultra low latency Ethernet networking over Cisco userspace  VIC
36       adapters.  See fi_usnic(7) for more information.
37
38       Verbs  :  This provider uses the Linux Verbs API for network transport.
39       Application performance is, obviously expected to be similar to that of
40       the  native  Linux  Verbs  API.  Analogous to the Sockets provider, the
41       Verbs provider is intended to enable developers  to  write,  test,  and
42       debug  application  code  on platforms that only have Linux Verbs-based
43       networking.  See fi_verbs(7) for more information.
44
45       Blue Gene/Q : See fi_bgq(7) for more information.
46
47   Utility providers
48       RxM : The RxM provider (ofi_rxm) is an utility provider  that  supports
49       RDM  endpoints  emulated  over  MSG  endpoints of a core provider.  See
50       fi_rxm(7) for more information.
51

CORE VERSUS UTILITY PROVIDERS

53       Core  providers  implement  the  libfabric  interfaces  directly   over
54       low-level  hardware and software interfaces.  They are designed to sup‐
55       port a specific class of hardware, and may be limited to  supporting  a
56       single  NIC.   Core providers often only support libfabric features and
57       interfaces that map efficiently to their underlying hardware.
58
59       Utility providers are distinct from core providers in that they are not
60       associated  with  specific  classes of devices.  They instead work with
61       core providers  to  expand  their  features,  and  interact  with  core
62       providers  through  libfabric interfaces internally.  Utility providers
63       are often used to support a specific endpoint type over a simpler  end‐
64       point  type.  For example, the RXD provider implements reliability over
65       unreliable datagram endpoints.  The utility providers  will  not  layer
66       over the sockets provider unless it is explicitly requested.
67
68       Utility  providers show up as a component in the core provider's compo‐
69       nent list.  See fi_fabric(3).  Utility providers are enabled  automati‐
70       cally  for core providers that do not support the feature set requested
71       by an application.
72

PROVIDER REQUIREMENTS

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

LOGGING INTERFACE

163       Logging is performed using the FI_ERR, FI_LOG, and FI_DEBUG macros.
164
165   DEFINITIONS
166              #define FI_ERR(prov_name, subsystem, ...)
167
168              #define FI_LOG(prov_name, prov, level, subsystem, ...)
169
170              #define FI_DEBUG(prov_name, subsystem, ...)
171
172   ARGUMENTS
173       prov_name : String representing the provider name.
174
175       prov : Provider context structure.
176
177       level : Log level associated with log statement.
178
179       subsystem : Subsystem being logged from.
180
181   DESCRIPTION
182       FI_ERR : Always logged.
183
184       FI_LOG : Logged if the intended  provider,  log  level,  and  subsystem
185       parameters match the user supplied values.
186
187       FI_DEBUG : Logged if configured with the --enable-debug flag.
188

SEE ALSO

190       fi_gni(7),    fi_psm(7),   fi_sockets(7),   fi_usnic(7),   fi_verbs(7),
191       fi_bgq(7),
192

AUTHORS

194       OpenFabrics.
195
196
197
198Libfabric Programmer's Manual     2017-12-01                    fi_provider(7)
Impressum