Linux Direct Interface

The Direct Interface allows you to access OrangeFS in a cluster similar to Linux (POSIX-based); however, the Direct Interface (also known by usrint, the system folder in which it is stored) bypasses the Linux Kernel for a more direct and better performing path to OrangeFS. It provides high performance access for programs that are not written for MPI.

The OrangeFS Direct Interface using Global Configuration will work only on systems configured with shared C libraries.

The Direct Interface is included with the OrangeFS standard installation, accessed  by copying appropriate files to a client location and activating it with configuration statements.

This topic is organized into two sections:

Understanding the Interface Levels

The Direct Interface offers three levels of access, so you must configure your access based on the level that works best for your needs.

Level 1: System Call Library

The first and lowest level is an API with OrangeFS-specific functions that can be substituted for each of the basic POSIX defined I/O related system calls. Essentially, each POSIX system call is replicated in the API. What makes this API different is that each function ONLY works with files in the OrangeFS file systems.

Level 2: POSIX Library

The next layer is a POSIX system call interposition library. Each of the same POSIX system calls represented in the lower layer are provided in this API, this time with the same interface syntax as Linux POSIX. Rather than calling the Linux kernel directly, each call is checked to see if it refers to an OrangeFS file, and if so the call is made to the corresponding function in the lower level API. Thus a call to open() will call pvfs_open() if the path refers to an OrangeFS file; otherwise it will call the Linux open system call. This API is more convenient, though slightly less efficient, than the lower level one.

Level 3: C Library

Finally, many programmers prefer to use the C library interface rather than the system call interface to file I/O, in part because it provides I/O buffering and a richer set of interface options. Any C calls are implemented using the POSIX calls, and so their implementation can, in theory, be linked from the C library, and use the OrangeFS POSIX interposition API.

Virtually all modern Linux systems use shared libraries for the C library. Shared libraries tend to link all of the various functions at various levels into a single shared object that is loaded dynamically. Thus, if you call fopen() using the standard shared C library, there is no means to get that function to call the OrangeFS pvfs_open() function. For this reason, OrangeFS provides its own implementation of these functions in an OrangeFS C Library interposition API. These functions are identical to those in the standard C library implementation, except that they call the OrangeFS functions, and, in some cases, can be optimized for specific OrangeFS features.

Configuring the Direct Interface

This section explains two methods for configuring the Direct Interface.

Program Configuration: Use this method to specify an individual program to run through the OrangeFS Direct Interface.
Global Configuration: Use this method to specify that all programs will run through the OrangeFS Direct Interface.

Program Configuration

Programs, and higher level libraries, written to any of the three library levels included in the Direct Interface should link to the appropriate OrangeFS replacement library (liborangefsposix or liborangefs) to directly access the OrangeFS file system. The command for this configuration also determines whether to use a shared or static version of the library.

To link a program with the replacement library, include the following command when compiling the program:

gcc -o <program> <program_source> -L<orangefs_lib_path> <rep_lib>

where…

program = the name of your program, including the path

program_source = the name of your program source code, including the path

orangefs_lib_path = path to lib directory in the OrangeFS installation directory

rep_lib = one of the following options:

If your program is written to: Enter this option: To use this replacement library:
C Library or POSIX Library -lorangefsposix liborangefsposix
OrangeFS System Call Library -lorangefs liborangefs

Example command line:

gcc -o /programs/foo /programs/foo.c -L/opt/orangefs/lib -lorangefsposix

 

Global Configuration

Programs not specifically recompiled to use OrangeFS can still be redirected to do so by preloading the shared version of the appropriate OrangeFS replacement library (libofs and/or libpvfs2). You must configure the source to build the shared library before compiling OrangeFS.

Assuming the shared libraries are installed, set the following environment variables:

export OFS_LIB_PATH=<orangefs_lib_path>
export LD_LIBRARY_PATH=$OFS_LIB_PATH:$LD_LIBRARY_PATH
export LD_PRELOAD=$OFS_LIB_PATH/<rep_shared_library>

where…

orangefs_lib_path = path to lib directory (in the OrangeFS installation directory)

Example: /opt/orangefs/lib

rep_shared_lib = one of the following replacement library files:

To redirect programs written to: Use these replacement library files:
C Library or POSIX Library libofs.so and libpvfs2.so
OrangeFS System Call Library libpvfs2.so

Example: LD_PRELOAD=$OFS_LIB_PATH/libpvfs2.so

The global configuration method does not work if you use the static version of libc.

Ensure that your system’s /etc/ld.so.preload includes libdl, libssl, libcrypto and libpthreads preloaded through /etc/ld.so.preload. Most Linux systems will already include this.

If this configuration method is used in the shell, every program (including such commands as ls, vi and cp) will redirect through the OrangeFS libraries. You can set these variables in a script to affect only the desired commands.

If all users on a system want the shared libraries preloaded, the system administrator can edit the file /etc/ld.so.preload and list the libraries there.