• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..16-Dec-2021-

config/H03-May-2022-28,13822,346

contrib/H10-Nov-2020-3,8223,051

docs/H03-May-2022-177139

fabtests/H10-Nov-2020-35,65227,592

include/H10-Nov-2020-15,31010,197

man/H10-Nov-2020-30,87827,198

prov/H10-Nov-2020-264,983189,503

src/H10-Nov-2020-8,3836,305

util/H10-Nov-2020-3,5492,722

.appveyor.ps1H A D10-Nov-2020627 1711

.appveyor.ymlH A D10-Nov-2020591 3527

.gitattributesH A D10-Nov-202015 21

.gitignoreH A D10-Nov-2020834 7769

.mailmapH A D10-Nov-2020514 1110

.travis.ymlH A D10-Nov-20203.9 KiB127122

AUTHORSH A D10-Nov-20206 KiB162161

CONTRIBUTORSH A D10-Nov-2020954 2418

COPYINGH A D10-Nov-202019.4 KiB380311

Libfabric.Build.Default.propsH A D10-Nov-20207.3 KiB4935

Makefile.amH A D10-Nov-202012 KiB430385

Makefile.inH A D16-Dec-20211.7 MiB16,26014,891

NEWS.mdH A D10-Nov-202064.4 KiB1,8571,485

READMEH A D10-Nov-20202.8 KiB8462

README.mdH A D10-Nov-202014.4 KiB418284

aclocal.m4H A D16-Dec-202144 KiB1,2391,126

autogen.shH A D10-Nov-2020182 116

config.h.inH A D16-Dec-20217.8 KiB333223

configureH A D16-Dec-20211.1 MiB35,44030,008

configure.acH A D10-Nov-202016.3 KiB572500

info.vcxprojH A D10-Nov-202013 KiB254254

info.vcxproj.filtersH A D10-Nov-20201.3 KiB3333

libfabric.defH A D10-Nov-2020292 1210

libfabric.map.inH A D10-Nov-2020512 4137

libfabric.pc.inH A D10-Nov-2020325 1413

libfabric.slnH A D10-Nov-20205.5 KiB8684

libfabric.spec.inH A D10-Nov-20203 KiB11995

libfabric.vcxprojH A D10-Nov-202056 KiB677676

libfabric.vcxproj.filtersH A D10-Nov-202028.3 KiB735734

pingpong.vcxprojH A D10-Nov-202015 KiB259259

pingpong.vcxproj.filtersH A D10-Nov-20201.2 KiB3030

strerror.vcxprojH A D10-Nov-202014.1 KiB253252

strerror.vcxproj.filtersH A D10-Nov-2020942 2222

README

1Version @VERSION@
2Released on @DATE@
3
4Introduction
5============
6Libfabric is a communication library that exports interfaces for
7fabric services to applications.  Libfabric is the core component
8of the Open Fabrics Interfaces (OFI) framework.
9
10Libfabric has the following objectives:
11
12* High-performance: provide optimized software paths to hardware
13  - Independent of hardware implementations
14* Scalable: targets support for millions of processes
15  - Designed to reduce cache and memory footprint
16  - Scalable address resolution and storage
17  - Tight data structures
18* Application-centric
19  - Interfaces co-designed with application developers and hardware
20    vendors
21* Extensible
22  - Easily adaptable to support future application needs
23
24OFI is being developed by the OFI Working Group (OFIWG) a subgroup
25of the OpenFabrics Alliance (OFA).  Participation in OFIWG
26(pronounced o-fee-wig) is open to anyone, regardless of their
27membership in OFA.
28
29The goal of OFI and libfabric is to define interfaces that enable
30a tight semantic map between applications and underlying fabric
31services.  Specifically, libfabric software interfaces have been
32co-designed with fabric hardware providers and application developers,
33with an initial focus on the needs of HPC users.  OFI supports multiple
34interface semantics, is fabric and hardware implementation agnostic,
35and leverages and expands the existing RDMA open source community.
36
37For more information regarding the OFI project, please visit the OFIWG
38GitHub site:
39
40http://ofiwg.github.io/libfabric/
41
42
43Support
44=======
45OFI targets support for the Linux operating system. A reasonable effort
46is made to support all major, modern Linux distributions; however,
47validation is limited to the most recent 2-3 releases of RedHat
48Enterprise Linux (RHEL)and SUSE Linux Enterprise Server (SLES).
49OFI aligns its supported distributions with the most current
50OpenFabrics Enterprise Distribution (OFED) software releases. With
51the exception of the sockets provider, which is provided for development
52purposes, distro support for a specific provider is vendor specific.
53
54Libfabric will also run on OS X, but OS X support is provided as a convenience
55for developers.
56
57Bugs, issues, or requests for feature enhancements may be made directly to
58the github issues list:
59
60https://github.com/ofiwg/libfabric/issues
61
62Additionally, users may post questions, comments, bugs, etc. to the Libfabric
63users mailing list.  (Don't be bashful.  We don't bite.)
64
65libfabric-users@lists.openfabrics.org
66
67Patches may be submitted using github (preferred) or posted to the OFIWG
68mail list.
69
70
71Building
72========
73To install from a libfabric source package run the following commands:
74
75./configure && make && make install
76
77If building directly from the libfabric git tree, run './autogen.sh'
78before the configure step.
79
80Windows
81=======
82Please find Windows specific instructions in docs/windows.txt file
83
84

README.md

1[<img alt="libfabric master branch Travis CI status" src="https://travis-ci.org/ofiwg/libfabric.svg?branch=master"/>](https://travis-ci.org/ofiwg/libfabric)
2[<img alt="libfabric Coverity scan suild status" src="https://scan.coverity.com/projects/4274/badge.svg"/>](https://scan.coverity.com/projects/4274)
3[![libfabric release version](https://img.shields.io/github/release/ofiwg/libfabric.svg)](https://github.com/ofiwg/libfabric/releases/latest)
4
5# libfabric
6
7The Open Fabrics Interfaces (OFI) is a framework focused on exporting fabric
8communication services to applications.
9
10See [the OFI web site](http://libfabric.org) for more details, including a
11description and overview of the project, and detailed documentation of the
12Libfabric APIs.
13
14## Installing pre-built Libfabric packages
15
16On OS X, the latest release of Libfabric can be installed using the
17[Homebrew](https://github.com/Homebrew/homebrew) package manager using the
18following command:
19
20```
21$ brew install libfabric
22```
23
24Libfabric pre-built binaries may be available from other sources, such as Linux
25distributions.
26
27## Building and installing Libfabric from source
28
29Distribution tarballs are available from the Github
30[releases](https://github.com/ofiwg/libfabric/releases) tab.
31
32If you are building Libfabric from a developer Git clone, you must first run
33the `autogen.sh` script. This will invoke the GNU Autotools to bootstrap
34Libfabric's configuration and build mechanisms. If you are building Libfabric
35from an official distribution tarball, there is no need to run `autogen.sh`;
36Libfabric distribution tarballs are already bootstrapped for you.
37
38Libfabric currently supports GNU/Linux, Free BSD, and OS X.
39
40### Configure options
41
42The `configure` script has many built in options (see `./configure --help`).
43Some useful options are:
44
45```
46--prefix=<directory>
47```
48
49By default `make install` will place the files in the `/usr` tree.
50The `--prefix` option specifies that Libfabric files should be installed into
51the tree specified by named `<directory>`. The executables will be located at
52`<directory>/bin`.
53
54```
55--with-valgrind=<directory>
56```
57
58Directory where valgrind is installed. If valgrind is found, then valgrind
59annotations are enabled. This may incur a performance penalty.
60
61```
62--enable-debug
63```
64
65Enable debug code paths. This enables various extra checks and allows for using
66the highest verbosity logging output that is normally compiled out in
67production builds.
68
69```
70--enable-<provider>=[yes|no|auto|dl|<directory>]
71--disable-<provider>
72```
73
74This enables or disables the provider named `<provider>`. Valid options are:
75- auto (This is the default if the `--enable-<provider>` option isn't specified)
76
77  The provider will be enabled if all of its requirements are satisfied. If one
78  of the requirements cannot be satisfied, then the provider is disabled.
79- yes (This is the default if the `--enable-<provider>` option is specified)
80
81  The configure script will abort if the provider cannot be enabled (e.g., due
82  to some of its requirements not being available.
83- no
84
85  Disable the provider. This is synonymous with `--disable-<provider>`.
86- dl
87
88  Enable the provider and build it as a loadable library.
89- \<directory\>
90
91  Enable the provider and use the installation given in `<directory>`.
92
93### Examples
94
95Consider the following example:
96
97```
98$ ./configure --prefix=/opt/libfabric --disable-sockets && make -j 32 && sudo make install
99```
100This will tell Libfabric to disable the `sockets` provider, and install
101Libfabric in the `/opt/libfabric` tree. All other providers will be enabled if
102possible and all debug features will be disabled.
103
104Alternatively:
105
106```
107$ ./configure --prefix=/opt/libfabric --enable-debug --enable-psm=dl && make -j 32 && sudo make install
108```
109
110This will tell Libfabric to enable the `psm` provider as a loadable library,
111enable all debug code paths, and install Libfabric to the `/opt/libfabric`
112tree. All other providers will be enabled if possible.
113
114
115## Validate installation
116
117The fi_info utility can be used to validate the libfabric and provider
118installation, as well as provide details about provider support and available
119interfaces.  See `fi_info(1)` man page for details on using the fi_info
120utility.  fi_info is installed as part of the libfabric package.
121
122A more comprehensive test package is available via the fabtests package.
123
124
125## Providers
126
127### gni
128
129***
130
131The `gni` provider runs on Cray XC (TM) systems utilizing the user-space
132Generic Network Interface (`uGNI`) which provides low-level access to
133the Aries interconnect.  The Aries interconnect is designed for
134low-latency one-sided messaging and also includes direct hardware
135support for common atomic operations and optimized collectives.
136
137See the `fi_gni(7)` man page for more details.
138
139#### Dependencies
140
141- The `gni` provider requires `gcc` version 4.9 or higher.
142
143### mxm
144
145***
146
147The MXM provider has been deprecated and was removed after the 1.4.0 release.
148
149### psm
150
151***
152
153The `psm` provider runs over the PSM 1.x interface that is currently supported
154by the Intel TrueScale Fabric. PSM provides tag-matching message queue
155functions that are optimized for MPI implementations.  PSM also has limited
156Active Message support, which is not officially published but is quite stable
157and well documented in the source code (part of the OFED release). The `psm`
158provider makes use of both the tag-matching message queue functions and the
159Active Message functions to support a variety of Libfabric data transfer APIs,
160including tagged message queue, message queue, RMA, and atomic
161operations.
162
163The `psm` provider can work with the `psm2-compat` library, which exposes
164a PSM 1.x interface over the Intel Omni-Path Fabric.
165
166See the `fi_psm(7)` man page for more details.
167
168### psm2
169
170***
171
172The `psm2` provider runs over the PSM 2.x interface that is supported
173by the Intel Omni-Path Fabric. PSM 2.x has all the PSM 1.x features plus a set
174of new functions with enhanced capabilities. Since PSM 1.x and PSM 2.x are not
175ABI compatible, the `psm2` provider only works with PSM 2.x and doesn't support
176Intel TrueScale Fabric.
177
178See the `fi_psm2(7)` man page for more details.
179
180### rxm
181
182The `ofi_rxm` provider is an utility provider that supports RDM endpoints emulated
183over MSG endpoints of a core provider.
184
185See [`fi_rxm`(7)](https://ofiwg.github.io/libfabric/master/man/fi_rxm.7.html) for more information.
186
187### sockets
188
189***
190
191The sockets provider has been deprecated in favor of the tcp, udp, and
192utility providers, which provide improved performance and stability.
193
194The `sockets` provider is a general purpose provider that can be used on any
195system that supports TCP sockets.  The provider is not intended to provide
196performance improvements over regular TCP sockets, but rather to allow
197developers to write, test, and debug application code even on platforms
198that do not have high-performance fabric hardware.  The sockets provider
199supports all Libfabric provider requirements and interfaces.
200
201See the `fi_sockets(7)` man page for more details.
202
203### tcp
204
205***
206
207The tcp provider is an optimized socket based provider that supports
208reliable connected endpoints.  It is intended to be used directly by
209apps that need MSG endpoint support, or in conjunction with the rxm
210provider for apps that need RDM endpoints.  The tcp provider targets
211replacing the sockets provider for applications using standard
212networking hardware.
213
214See the `fi_tcp(7)` man page for more details.
215
216
217### udp
218
219***
220
221The `udp` provider is a basic provider that can be used on any system that
222supports UDP sockets.  The provider is not intended to provide performance
223improvements over regular UDP sockets, but rather to allow application and
224provider developers to write, test, and debug their code.  The `udp` provider
225forms the foundation of a utility provider that enables the implementation of
226Libfabric features over any hardware.
227
228See the `fi_udp(7)` man page for more details.
229
230### usnic
231
232***
233
234The `usnic` provider is designed to run over the Cisco VIC (virtualized NIC)
235hardware on Cisco UCS servers. It utilizes the Cisco usnic (userspace NIC)
236capabilities of the VIC to enable ultra low latency and other offload
237capabilities on Ethernet networks.
238
239See the `fi_usnic(7)` man page for more details.
240
241#### Dependencies
242
243- The `usnic` provider depends on library files from either `libnl` version 1
244  (sometimes known as `libnl` or `libnl1`) or version 3 (sometimes known as
245  `libnl3`). If you are compiling Libfabric from source and want to enable
246  usNIC support, you will also need the matching `libnl` header files (e.g.,
247  if you are building with `libnl` version 3, you need both the header and
248  library files from version 3).
249
250#### Configure options
251
252```
253--with-libnl=<directory>
254```
255
256If specified, look for libnl support. If it is not found then the `usnic`
257provider will not be built. If `<directory>` is specified, then check in the
258directory and check for `libnl` version 3. If version 3 is not found, then
259check for version 1. If no `<directory>` argument is specified, then this
260option is redundant with `--with-usnic`.
261
262### verbs
263
264***
265
266The verbs provider enables applications using OFI to be run over any verbs
267hardware (Infiniband, iWarp, etc). It uses the Linux Verbs API for network
268transport and provides a translation of OFI calls to appropriate verbs API calls.
269It uses librdmacm for communication management and libibverbs for other control
270and data transfer operations.
271
272See the `fi_verbs(7)` man page for more details.
273
274#### Dependencies
275
276- The verbs provider requires libibverbs (v1.1.8 or newer) and librdmacm (v1.0.16
277  or newer). If you are compiling Libfabric from source and want to enable verbs
278  support, you will also need the matching header files for the above two libraries.
279  If the libraries and header files are not in default paths, specify them in CFLAGS,
280  LDFLAGS and LD_LIBRARY_PATH environment variables.
281
282### bgq
283
284***
285
286The `bgq` provider is a native provider that directly utilizes the hardware
287interfaces of the Blue Gene/Q system to implement aspects of the libfabric
288interface to fully support MPICH3 CH4.
289
290See the `fi_bgq(7)` man page for more details
291
292#### Dependencies
293
294- The `bgq` provider depends on the system programming interfaces (SPI) and
295  the hardware interfaces (HWI) located in the Blue Gene/Q driver installation.
296  Additionally, the open source Blue Gene/Q system files are required.
297
298#### Configure options
299
300```
301--with-bgq-progress=(auto|manual)
302```
303
304If specified, set the progress mode enabled in FABRIC_DIRECT (default is FI_PROGRESS_MANUAL).
305
306```
307--with-bgq-mr=(basic|scalable)
308```
309
310If specified, set the memory registration mode (default is FI_MR_BASIC).
311
312### Network Direct
313
314***
315
316The Network Direct provider enables applications using OFI to be run over
317any verbs hardware (Infiniband, iWarp and etc). It uses the Microsoft Network
318Direct SPI for network transport and provides a translation of OFI calls to
319appropriate Network Direct API calls.
320The Network Direct providers allows to OFI-based applications utilize
321zero-copy data transfers between applications, kernel-bypass I/O generation and
322one-sided data transfer operations on Microsoft Windows OS.
323An application is able to use OFI with Network Direct provider enabled on
324Windows OS to expose the capabilities of the networking devices if the hardware
325vendors of the devices implemented the Network Direct service provider interface
326(SPI) for their hardware.
327
328See the `fi_netdir(7)` man page for more details.
329
330#### Dependencies
331
332- The Network Direct provider requires Network Direct SPI. If you are compiling
333  Libfabric from source and want to enable Network Direct support, you will also
334  need the matching header files for the Network Direct SPI.
335  If the libraries and header files are not in default paths (the default path is
336  root of provier directory, i.e. \prov\netdir\NetDirect, where NetDirect contains
337  the header files), specify them in the configuration properties of the VS project.
338
339### mlx
340
341***
342
343The MLX provider enables applications using OFI to be run over UCX
344communication library. It uses libucp for connections control and data transfer operations.
345Supported UCP API version: 1.2
346
347See the `fi_mlx(7)` man page for more details.
348
349#### Dependencies
350
351- The MLX provider requires UCP API 1.2 capable libucp and libucs (tested with hpcx v1.8.0, v1.9.7).
352  If you are compiling Libfabric from source and want to enable MLX
353  support, you will also need the matching header files for UCX.
354  If the libraries and header files are not in default paths, specify them using:
355
356```
357--with-mlx=<path to local UCX installation>
358```
359
360### shm
361
362***
363
364The shm provider enables applications using OFI to be run over shared memory.
365
366See the `fi_shm(7)` man page for more details.
367
368#### Dependencies
369
370- The shared memory provider only works on Linux platforms and makes use of
371  kernel support for 'cross-memory attach' (CMA) data copies for large
372  transfers.
373
374### efa
375
376***
377
378The `efa` provider enables the use of libfabric-enabled applications on [Amazon
379EC2 Elastic Fabric Adapter (EFA)](https://aws.amazon.com/hpc/efa/), a
380custom-built OS bypass hardware interface for inter-instance communication on
381EC2.
382
383See [`fi_efa`(7)](https://ofiwg.github.io/libfabric/master/man/fi_efa.7.html) for more information.
384
385## WINDOWS Instructions
386
387Even though windows isn't fully supported yet it is possible to compile and link your library.
388
389- 1. first you need the NetDirect provider:
390  Network Direct SDK/DDK may be obtained as a nuget package (preferred) from:
391
392  https://www.nuget.org/packages/NetworkDirect
393
394  or downloaded from:
395
396  https://www.microsoft.com/en-us/download/details.aspx?id=36043
397  on page press Download button and select NetworkDirect_DDK.zip.
398
399  Extract header files from downloaded
400  NetworkDirect_DDK.zip:`\NetDirect\include\` file into `<libfabricroot>\prov\netdir\NetDirect\`,
401  or add path to NetDirect headers into VS include paths
402
403- 2. compiling:
404  libfabric has 6 Visual Studio solution configurations:
405
406      1-2: Debug/Release ICC (restricted support for Intel Compiler XE 15.0 only)
407      3-4: Debug/Release v140 (VS 2015 tool set)
408      5-6: Debug/Release v141 (VS 2017 tool set)
409
410  make sure you choose the correct target fitting your compiler.
411  By default the library will be compiled to `<libfabricroot>\x64\<yourconfigchoice>`
412
413- 3. linking your library
414  - right click your project and select properties.
415  - choose C/C++ > General and add `<libfabricroot>\include` to "Additional include Directories"
416  - choose Linker > Input and add `<libfabricroot>\x64\<yourconfigchoice>\libfabric.lib` to "Additional Dependencies"
417  - depending on what you are building you may also need to copy `libfabric.dll` into the targetfolder of your own project.
418