Latest Client Version
The latest available version of the VAST NFS driver is available here.
About the VAST Enhanced NFS Client
The VAST Enhanced NFS client is based on the standard Linux kernel NFS client driver and enhances it primarily with a feature named "multipathing" for TCP and RDMA mountpoints. Through multipathing, an individual NFS client can communicate with multiple NFS servers in parallel to improve performance and avoid hotspots among the servers. Multipathing also supports clients with multiple network cards, sending traffic over all available client-side links.
Supported Distributions
Supported Linux distributions:
Red Hat Enterprise Linux 8.1 to 8.9, 9.0 to 9.5, and derivatives (CentOS, Rocky, Alma)
Red Hat Enterprise Linux 7.x and derivatives (CentOS 7.x)
Ubuntu 18.04, 20.04, 22.04, 24.04 (up to kernel 6.8)
SLES 12, 15
Supported Mellanox OFED versions (optional):
MOFED 4.9 and newer
For more details about supported versions, see here. VAST is continuously adding support for new Linux kernel and MOFED versions. If it looks like your Linux distribution or MOFED version is currently not supported, reach out to your friendly VAST representative.
Download
The following commands download and extract the latest available VAST NFS client source package. The source package supports a wide range of Linux kernels and Mellanox OFED versions.
$ curl -sSf https://vastnfs.vastdata.com/download.sh | bash -s
$ tar xvf vastnfs-*.tar.xz
$ cd vastnfs-*/Build
From the source package, you can build the actual driver for the currently running Linux kernel and the (optionally) installed Mellanox OFED version. The resulting rpm/deb package can be installed on other hosts running the same combination of Linux kernel and Mellanox OFED.
Prerequisites
To build the driver package, some dependencies may need to be installed on the build host.
On RHEL/CentOS/Rocky/Alma:
$ sudo yum install gcc make rpm-build kernel-devel-$(uname -r)On Ubuntu:
$ sudo apt install gcc make dpkg-dev debhelper autotools-dev linux-headers-$(uname -r)Driver Package Build
The source package includes a build script that automatically generates an installable package. The script will generate a .rpm package on RHEL/CentOS and a .deb package on Ubuntu.
$ ./build.sh binAfter the build script completed successfully, the installable package is located in the dist/ subdirectory. After installation, it is important to update the initrd file via dracut / update-initramfs to ensure the updated driver is loaded after the system reboot.
On RHEL/CentOS:
$ sudo yum install ./dist/*.rpm
$ sudo depmod -a
$ sudo dracut -f
$ sudo rebootOn Ubuntu:
$ sudo apt install ./dist/*.deb
$ sudo depmod -a
$ sudo update-initramfs -u -k $(uname -r)
$ sudo reboot(update-initramfs -u -k all can be used to update the initramfs of all installed kernels, not only the currently running kernel, in case the system switches to a newer kernel after reboot.)
Mount
The enhanced NFS client adds the mount options remoteports to establish parallel connections to multiple server IP addresses and localports to specify multiple client network interface IP addresses. (The localports option is only available for NFSv3 mounts.) If the client uses only a single network interface on the storage network, then there is no need to specify the localports parameter.
The nconnect mount option defines how many connections the client establishes in total. The nconnect value can be smaller than the number of VIPs (i.e., the client selects a subset of VIPs to connect to) or larger than the number of VIPs (i.e., the client establishes more than one connection to some or all of the VIPs).
Mount Option - spread_reads, spread_writes
These mount option parameters are not mandatory; the client can reach line rate with/without them. By default, all IO going to a specific file will go through a single connection. With TCP mounts, this may be the bottleneck for applications reading/writing to a single large file. By specifying spread_reads/spread_writes, the respective operation can use all connections, resulting in increased throughput.
The vast majority of workloads benefit from spread_reads and spread_writes. The only known exceptions are single-thread applications reading files with O_DIRECT (not a default option). These applications have a single in-flight IO at a time, and having those go to the same connection/CNode results in lower latency (because of server-side prefetch).
Mount Option - lookupcache=pos
This setting is recommended to avoid a delay of one client searching for a file while another is creating it. This can happen if an application is repeatedly looking for a file, finds it is not there, caches the fact that it's not there for a few seconds, while another client has already created it. For distributed HPC applications that assume consistency between a client that creates a file and another that finds it, we recommend setting lookupcache=pos.
readahead Please see the article - VAST Quick NFS Read Ahead Tuning
The corresponding mount options can also be used in /etc/fstab, not only with the manual mount command in the examples below.
Mount Example 1
In this example, there is a VAST VIP pool configured on the IP range 192.168.0.1-192.168.0.64 , and our client should establish 8 parallel connections to a subset of these VIPs. The client only has a single network port on the corresponding subnet, so we can omit the localports option.
The single server IP (or DNS name) as part of the export parameter can be any IP address from the VIP pool and is irrelevant for NFS file data transfer in this case.
On an RDMA-capable network, we could also add the usual RDMA mount options proto=rdma,port=20049.
$ sudo mount -o vers=3,nconnect=8,remoteports=192.168.0.1-192.168.0.64 \
192.168.0.1:/myexport /mnt/vastMount Example 2
In this example, the VAST VIP pool is similar to the example above, but this time the client has two network ports over which the traffic should be spread. The IPs of these client ports are 192.168.0.100 and 192.168.0.200. Thus, we add the localports mount option and use the ~ character as the separator for multiple non-consecutive IPs.
$ sudo mount -o vers=3,nconnect=8,remoteports=192.168.0.1-192.168.0.64,localports=192.168.0.100~192.168.0.200 \
192.168.0.1:/myexport /mnt/vastAdditional Notes
This article only describes the download and installation of the VAST Enhanced NFS driver. It does not cover aspects like finding the right value for nconnect or how to make a RoCE network lossless, which is an important step for good RDMA performance in Ethernet networks. Please contact your friendly VAST representative to discuss these topics.
Additional information is available in the VAST Administrator Guide
Known Issues
RDMA mount failing on Ubuntu: For DKMS-based install on Ubuntu systems with multiple Linux kernels and Mellanox OFED installed, the Mellanox OFED headers symlink at
/usr/src/ofa_kernel/defaultdoes sometimes point to the wrong kernel version, leading to RDMA mounts failing.
This command can be used to update the MOFED symlink to the currently running kernel:$ sudo update-alternatives --set ofa_kernel_headers /usr/src/ofa_kernel/x86_64/$(uname -r)After this, the VAST NFS driver needs to be rebuilt. The easiest way to achieve this is by uninstalling and reinstalling the VAST NFS driver
.debpackage