Working with RDMA using Mellanox OFED
Contents
Mellanox OFED (MLNX-OFED) is a package that developed and released by Mellanox Technologies. It contains the latest software packages (both kernel modules and userspace code) to work with RDMA. It supports InfiniBand, Ethernet and RoCE transports and during the installation it updates the Firmware of Mellanox adapters.
This package is available for most major Linux distributions and CPU architectures.
Installing RDMA packages
Prerequisites
Make sure that there is at least 1 GB free space in your disk.
Download the package
Open the following URL in a web browser:
http://www.mellanox.com > Products > Software> InfiniBand
Drivers -> Linux SW/Drivers
Download the relevant package for your computer according to the Operating system and CPU architecture. There are two available formats for the package to download:
- ISO image
- tgz file
Both formats have the same content, and one should choose the best format for his needs.
Only the next pre-install/post-install sections depend on the chosen package format. The installation process is the same.
Note: it is highly recommended to compare the MD5sum of the downloaded package with the value that is published at Mellanox website (near the package download link); to verify that the downloaded package isn't corrupted.
1. ISO image
The ISO image can be mounted and used directly, without the need to extract it and use an extra space from the disk.
Pre-install
After downloading the ISO image, mount it and enter the mounted directory:
[root@localhost]# mount -o ro,loop MLNX_OFED_LINUX-<ver>-<OS label><CPU arch>.iso /mnt/MLNX_OFED
[root@localhost]# cd /mnt/MLNX_OFED
Post-install
Unmount the iso file and delete the created directory:
[root@localhost]# umount /mnt/MLNX_OFED
[root@localhost]# rmdir /mnt/MLNX_OFED
2. tgz file
This format can be easier for use (no need for mounting and unmounting the image), but it needs extra space since it should be extracted before use.
Pre-install
After downloading the tgz file, extract it and enter the directory that the files exist in:
[root@localhost]# cd /tmp/MLNX_OFED
[root@localhost]# tar xzf MLNX_OFED_LINUX-<ver>-<OS label><CPU arch>.tgz
[root@localhost]# cd MLNX_OFED_LINUX-<ver>-<OS label><CPU arch>
Post-install
Delete the generated directory that holds the extracted files:
[root@localhost]# rm -fr /tmp/MLNX_OFED
Installation
Now, everything is ready and installation of MLNX-OFED can be started.
The installation script will:
- Verify that installed kernel is supported.
- Uninstall all installed RDMA packages, which are part of the Linux distribution or part of any RDMA package.
- Install the MLNX-OFED binary RPMs.
- Detect the Mellanox RDMA adapters that exist in the machine and update their Firmware, if needed.
- Fix local configuration files, if needed.
The same installation procedure is used in all Linux distributions.
This program will install the MLNX_OFED_LINUX package on your machine.
Note that all other Mellanox, OEM, OFED, or Distribution IB packages will be removed.
Do you want to continue?[y/N]:
This "yes/no" question should be answered with "y". Only pressing the "enter" key will use the default (N) and the installation will be terminated.
Starting MLNX_OFED_LINUX-2.0-3.0.0 installation ...
Installing mlnx-ofa_kernel RPM
Preparing... ##################################################
mlnx-ofa_kernel ##################################################
Installing mlnx-ofa_kernel-kmp-default RPM
Preparing... ##################################################
mlnx-ofa_kernel-kmp-default ##################################################
Installing mlnx-ofa_kernel-kmp-pae RPM
Preparing... ##################################################
mlnx-ofa_kernel-kmp-pae ##################################################
Installing mlnx-ofa_kernel-kmp-trace RPM
Preparing... ##################################################
mlnx-ofa_kernel-kmp-trace ##################################################
Installing mlnx-ofa_kernel-kmp-xen RPM
Preparing... ##################################################
mlnx-ofa_kernel-kmp-xen ##################################################
Installing mlnx-ofa_kernel-devel RPM
Preparing... ##################################################
mlnx-ofa_kernel-devel ##################################################
Installing kernel-mft-mlnx-kmp-default RPM
Preparing... ##################################################
kernel-mft-mlnx-kmp-default ##################################################
Installing kernel-mft-mlnx-kmp-pae RPM
Preparing... ##################################################
kernel-mft-mlnx-kmp-pae ##################################################
Installing kernel-mft-mlnx-kmp-trace RPM
Preparing... ##################################################
kernel-mft-mlnx-kmp-trace ##################################################
Installing kernel-mft-mlnx-kmp-xen RPM
Preparing... ##################################################
kernel-mft-mlnx-kmp-xen ##################################################
Installing user level RPMs:
Preparing... ##################################################
ofed-scripts ##################################################
Preparing... ##################################################
libibverbs ##################################################
Preparing... ##################################################
libibverbs-devel ##################################################
Preparing... ##################################################
libibverbs-devel-static ##################################################
Preparing... ##################################################
libibverbs-utils ##################################################
Preparing... ##################################################
libmlx4 ##################################################
Preparing... ##################################################
libmlx4-devel ##################################################
Preparing... ##################################################
libmlx5 ##################################################
Preparing... ##################################################
libmlx5-devel ##################################################
Preparing... ##################################################
libcxgb3 ##################################################
Preparing... ##################################################
libcxgb3-devel ##################################################
Preparing... ##################################################
libcxgb4 ##################################################
Preparing... ##################################################
libcxgb4-devel ##################################################
Preparing... ##################################################
libnes ##################################################
Preparing... ##################################################
libnes-devel-static ##################################################
Preparing... ##################################################
libibcm ##################################################
Preparing... ##################################################
libibcm-devel ##################################################
Preparing... ##################################################
libibumad ##################################################
Preparing... ##################################################
libibumad-devel ##################################################
Preparing... ##################################################
libibumad-static ##################################################
Preparing... ##################################################
libibmad ##################################################
Preparing... ##################################################
libibmad-devel ##################################################
Preparing... ##################################################
libibmad-static ##################################################
Preparing... ##################################################
ibsim ##################################################
Preparing... ##################################################
ibacm ##################################################
Preparing... ##################################################
librdmacm ##################################################
Preparing... ##################################################
librdmacm-utils ##################################################
Preparing... ##################################################
librdmacm-devel ##################################################
Preparing... ##################################################
opensm-libs ##################################################
Preparing... ##################################################
opensm ##################################################
opensmd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
Preparing... ##################################################
opensm-devel ##################################################
Preparing... ##################################################
opensm-static ##################################################
Preparing... ##################################################
dapl ##################################################
Preparing... ##################################################
dapl-devel ##################################################
Preparing... ##################################################
dapl-devel-static ##################################################
Preparing... ##################################################
dapl-utils ##################################################
Preparing... ##################################################
perftest ##################################################
Preparing... ##################################################
mstflint ##################################################
Preparing... ##################################################
mft ##################################################
Preparing... ##################################################
srptools ##################################################
Preparing... ##################################################
rds-tools ##################################################
Preparing... ##################################################
rds-devel ##################################################
Preparing... ##################################################
ibutils2 ##################################################
Preparing... ##################################################
ibutils ##################################################
Preparing... ##################################################
cc_mgr ##################################################
Preparing... ##################################################
dump_pr ##################################################
Preparing... ##################################################
ar_mgr ##################################################
Preparing... ##################################################
ibdump ##################################################
Preparing... ##################################################
infiniband-diags ##################################################
Preparing... ##################################################
infiniband-diags-compat ##################################################
Preparing... ##################################################
qperf ##################################################
Preparing... ##################################################
mlnxofed-docs ##################################################
Installation finished successfully.
Configuring /etc/security/limits.conf.
Different versions of MLNX-OFED or different Linux distributions may have different RPM names and versions.
Reboot is usually required to complete the installation.
Notes
Failure in uninstalling automatically an RPM
If there is a problem to uninstall any RPM, the installer will print an error message and the user will need to remove this RPM manually.
Adding new kernel support
If the installed kernel doesn't match any binary RPM which is provided within MLNX_OFED, one can build the MLNX_OFED package for this kernel manually. The script mlnx_add_kernel_support.sh is the tool for doing so.
This operation requires the kernel sources be available in the machine and assumes that adding this support can be done by compilation of the sources and doesn't need any changes/adjustments in the code.
The following command line will generate a tgz file for the installed kernel:
Note: This program will create MLNX_OFED_LINUX TGZ for sles11sp3 under /tmp directory.
All Mellanox, OEM, OFED, or Distribution IB packages will be removed.
Do you want to continue?[y/N]:y
See log file /tmp/mlnx_ofed_iso.30869.log
Building OFED RPMs. Please wait...
Removing OFED RPMs...
Created /tmp/MLNX_OFED_LINUX-2.0-3.0.0-sles11sp3-i686.tgz
Similar command can be used for generating the ISO image for this kernel (using the parameter --make-iso).
The generated package can now be installed using the instructions that are written in the "Installation" section above in local machine or in any other machine with the same Linux distribution and kernel.
Uninstalling RDMA packages
This package comes with an uninstall script that will clean everything. The following command line will uninstall the MLNX_OFED packages:
This program will uninstall all MLNX_OFED_LINUX-2.0-3.0.0 packages on your machine.
Do you want to continue?[y/N]:
This "yes/no" question should be answered with "y". Only pressing the "enter" key will use the default (N) and the uninstallation will be terminated.
Uninstall finished successfully
Starting the RDMA services
Load the RDMA drivers using the following command line:
If one is using the InfiniBand transport and he doesn't have a managed switch in the subnet, he has to start the Subnet Manager (SM). Doing this in one of the machines in the subnet is enough, this can be done with the following command line:
By default, when installing the RDMA packages, the RDMA service will be loaded automatically when the operating system is loaded. If this doesn't happen, one should fix manually.
Stopping the RDMA services
If the SM is running, then it must be stopped before unloading the drivers. Stop the SM using the following command line:
Unload the RDMA drivers using the following command line:
RDMA configuration file(s)
1. The openibd service loads the configuration file: /etc/infiniband/openib.conf. This file controls which modules will be loaded during the service startup and some attributes about the RDMA modules. The following parameters are supported:
Parameter name | Description | Supported values |
---|---|---|
ONBOOT | Start RDMA modules/drivers upon machine boot | yes/no |
NODE_DESC | Node description prefix command | Command string. For example: $(hostname -s) |
NODE_DESC_TIME_BEFORE_UPDATE | Time, in seconds, to wait before updating node description | Non-negative integer numbers |
RUN_SYSCTL | Run sysctl performance tuning on network attributes script | yes/no |
RUN_AFFINITY_TUNER | Run affinity tuner script | yes/no |
RDMA_CM_LOAD | Load RDMA_CM module | yes/no |
RDMA_UCM_LOAD | Load RDMA_UCM module | yes/no |
UCM_LOAD | Load UCM module | yes/no |
RENICE_IB_MAD | Increase ib_mad thread priority | yes/no |
IPOIB_LOAD | Load IPoIB module | yes/no |
SET_IPOIB_CHANNELS | Set rx_channels/tx_channels to 1 to disable IPoIB RSS | yes/no |
SET_IPOIB_CM | Enable IPoIB Connected Mode | yes/no |
E_IPOIB_LOAD | Load E_IPOIB module | yes/no |
RDS_LOAD | Load RDS module | yes/no |
SRP_LOAD | Load SRP initiator module | yes/no |
SRP_DAEMON_ENABLE | Enable SRP daemon | yes/no |
SRPHA_ENABLE | Enable SRP High Availability daemon | yes/no |
SRP_TARGET_LOAD | Load SRP Target module | yes/no |
MLX5_LOAD | Load MLX5 driver | yes/no |
MLX4_LOAD | Load MLX4 driver | yes/no |
MLX4_EN_LOAD | Load MLX4_EN driver | yes/no |
MLX4_VNIC_LOAD | Load MLX4_VNIC driver | yes/no |
MTHCA_LOAD | Load MTHCA driver | yes/no |
CXGB3_LOAD | Load CXGB3 driver | yes/no |
NES_LOAD | Load iw_nes driver | yes/no |
2. RDMA needs to work with pinned memory, i.e. memory which cannot be swapped out by the kernel. By default, every process that is running as a non-root user is allowed to pin a low amount of memory (64KB). In order to work properly as a non-root user, it is highly recommended to increase the size of memory which can be locked. Edit the file /etc/security/limits.conf and add the following lines, if they weren't added by the installation script:
* soft memlock unlimited
* hard memlock unlimited
This will allow process that is running as any user to pin unlimited amount of memory. Changing this line will become effective for new login sessions.
After login again, executing the following command line will print how much memory (in KB) can be locked:
(the expected output is: "unlimited").
- If one wishes to allow better control on this configuration: e.g. less memory to be pinned, or allow only specific user(s) to pin more memory - please refer to the Linux distribution manual.
More information
Detailed information on how to work with MLNX-OFED can be found in the User Manual of MLNX-OFED, in the following URL:
http://www.mellanox.com > Products > Software> InfiniBand
Drivers -> Linux SW/Drivers
Comments
Tell us what do you think.
Hi Dotan,
I'm just curious what the difference is (if there is any) between the Mellanox OFED distributions and the packages that ship within the Linux kernel. Is one better or newer than the other? Or is it just a matter of how one wants to install/run? When working with the newest Linux kernels, do you recommend one over the other? Any advice would be greatly appreciated!
Thanks,
David
Hi.
Let's start with a word of ethics: I'm an employee of Mellanox Technologies.
The difference is that the MLNX-OFED contain features/commits that doesn't exist in the upstream kernel;
* Changes that weren't submitted (yet)
* Changes that can't be submitted (for many reasons)
It depends on the version, but in most cases the MLNX-OFED will contain the features that exists in the upstream kernel code.
Bottom line, if you would ask me what to use (even) in new kernels: MLNX-OFED.
Thanks
Dotan
Ah, I see. That makes sense. Thank you very much for the advice!