Fork me on GitHub

OpenFabrics Interface Overview

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 Red Hat 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?

Read the documentation

First, take a look at the above documentation and tutorial. Then read the documentation:

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.

Get the software

Next, download the latest releases:

The libfabric code base is being developed in the main OFIWG libfabric GitHub repository.

Join the conversation

There are two mailing lists for OFIWG discussions:

  • The Libfabric users mailing list. This list is intended for general user questions about the Libfabric library, to include questions from developers trying to use Libfabric in their applications.
  • The OFI working group mailing list. This list is used for the discussion and development of the OFI APIs themselves (and by extension, the continued development of the Libfabric library).

Notices of the every-other-Tuesday OFIWG Webexes are sent to the OFIWG mailing list. Anyone can join the calls to listen and participate in the design of Libfabric.