OpenFabrics Interfaces (OFI) is a framework focused on exporting fabric communication services to applications. OFI is best described as a collection of libraries and applications used to export fabric services. The key components of OFI are: application interfaces, provider libraries, kernel services, daemons, and test applications.
Libfabric is a core component of OFI. It is the library that defines and exports the user-space API of OFI, and is typically the only software that applications deal with directly. It works in conjunction with provider libraries, which are often integrated directly into libfabric.
Libfabric is being developed by the OFI Working Group (OFIWG, pronounced “ofee-wig”), a subgroup of the OpenFabrics Alliance - OFA. Participation in the OFIWG is open to anyone, and not restricted to only members of OFA.
The goal of OFI, and libfabric specifically, is to define interfaces that enable a tight semantic map between applications and underlying fabric services. Specifically, libfabric software interfaces have been co-designed with fabric hardware providers and application developers, with a focus on the needs of HPC users. Libfabric supports multiple interface semantics, is fabric and hardware implementation agnostic, and leverages and expands the existing RDMA open source community.
Libfabric is designed to minimize the impedance mismatch between applications, including middleware such as MPI, SHMEM, and PGAS, and fabric communication hardware. Its interfaces target high-bandwidth, low-latency NICs, with a goal to scale to tens of thousands of nodes.
Libfabric targets support for the Linux operating system, with developer support for OS X. A reasonable effort is made to support all major, modern Linux distributions; however, validation is limited to the most recent 2-3 releases of RedHat Enterprise Linux (RHEL)and SUSE Linux Enterprise Server (SLES). Libfabric aligns its supported distributions with the most current OpenFabrics Enterprise Distribution (OFED) software releases. With the exception of the sockets provider, which is provided for development purposes, distro support for a specific provider is vendor specific.
Overview of libfabric
The following document provides a short introduction to the libfabric architecture and concepts. It is recommended for anyone new to libfabric.
Developers coding to libfabric may find the following tutorial useful. It walks through low-level interface details, followed by examples of application and middleware (MPI, SHEM) using the APIs.
Finally, this document describes how to get started writing to the libfabric interfaces.
How do I get involved?
First, take a look at the above documentation and tutorial. Then read the documentation:
- Man pages for v1.2.0
- Man pages for current head of development
A set of Linux man pages have been carefully written to specify the libfabric API. Read through these man pages to get a sense of the libfabric API. A set of example applications have been developed to highlight how an application might use various aspects of libfabric.
Next, download the latest releases:
- The libfabric library itself (including documentation): libfabric-1.2.0.tar.bz2 (or see all prior releases)
- Examples and unit tests: fabtests-1.2.0.tar.bz2 (or see all prior releases)
The libfabric code base is being developed in the main OFIWG libfabric GitHub repository.
Finally, become part of the conversation
Join the ofiwg mailing list. Notices of the every-other-Tuesday OFIWG Webexes are sent on this list; anyone can join the calls to listen and participate in the design of libfabric.