I am testing Mellanox hardware and software with Ubuntu 16.04, using two machines with ConnectX-3 adapters, connected directly with a cable, without a switch. I have tested all combinations of InfiniBand and Ethernet modes, inbox and OFED drivers, and three kernel versions, and discovered that I am unable to use NFS over RDMA with the OFED driver, while it works fine with the inbox driver (as included with Ubuntu 16.04). The problem occurs in both IB and Ethernet mode, but, strangely, OFED driver fails in three distinct ways depending on which kernel is in use. Both machines exhibit the same issue, so this is not a hardware defect. Non-NFS RDMA tests such as ib_write_bw work fine with both drivers and all kernels.
The question is: Am I doing something wrong or is this a bug (or, perhaps, three bugs)? I followed the tutorials available online, and I got everything working except for the problem described here. The failures have an unhealthy look and feel (see detailed description below), so I am leaning toward the bugs. If so, where to report them? Mellanox, openfabrics.org, linux-rdma@GitHub, LKML, somewhere else? Number of parts involved, and variety of distinct symptoms makes this issue somewhat of a conundrum.
Hardware - two identical machines
CPU: Intel Core i5-6600 3.30GHz
RAM: 64GB DDR4 non-ECC unbuffered
Motherboard: Gigabyte Z170X-UD5-CF
IB Adapter: Mellanox ConnectX-3 MCX353A-FCBT (Firmware version: 2.42.5000)
Software
OS: Ubuntu 16.04.3 LTS
Kernels tested:
4.4.0-101-generic (standard Ubuntu 16.04 kernel)
4.10.0-40-generic (HWE kernel)
4.13.0-17-generic (HWE-edge kernel)
OFED: MLNX_OFED_LINUX-4.2-1.0.0.0
mlnx-nfsrdma:
mlnx_ofed/mlnx-ofa_kernel-4.0.git mlnx_ofed_4_2
commit f36c8704a9cd969fd5b3ecdf142c6f2ffde495f8
Test environment
The following modules are loaded (if not already loaded):
modprobe mlx4_ib; modprobe ib_umad; modprobe ib_cm; modprobe ib_ucm; modprobe rdma_ucm
In IB mode, opensm is started on one of the machines, and module ib_ipoib is loaded on both machines.
Networking is then configured (IP 10.2.0.1 and 10.2.0.2) and verified to work (ping, iperf, qperf, ib_write_bw, etc). e.g.:
ifconfig ib0 10.2.0.1 netmask 255.255.255.0
(interface name in Ethernet mode is different)
On the machine acting as NFS server, a ramdisk is created and exported as a share, and module svcrdma is loaded:
mount -t tmpfs -o size=60G tmpfs /mnt/ramdisk/
exportfs -o rw,fsid=1,async,no_subtree_check 10.2.0.0/24:/mnt/ramdisk/
modprobe svcrdma
echo rdma 20049 > /proc/fs/nfsd/portlist