| =================== |
| Setting up NFS/RDMA |
| =================== |
| |
| :Author: |
| NetApp and Open Grid Computing (May 29, 2008) |
| |
| .. warning:: |
| This document is probably obsolete. |
| |
| Overview |
| ======== |
| |
| This document describes how to install and setup the Linux NFS/RDMA client |
| and server software. |
| |
| The NFS/RDMA client was first included in Linux 2.6.24. The NFS/RDMA server |
| was first included in the following release, Linux 2.6.25. |
| |
| In our testing, we have obtained excellent performance results (full 10Gbit |
| wire bandwidth at minimal client CPU) under many workloads. The code passes |
| the full Connectathon test suite and operates over both Infiniband and iWARP |
| RDMA adapters. |
| |
| Getting Help |
| ============ |
| |
| If you get stuck, you can ask questions on the |
| nfs-rdma-devel@lists.sourceforge.net mailing list. |
| |
| Installation |
| ============ |
| |
| These instructions are a step by step guide to building a machine for |
| use with NFS/RDMA. |
| |
| - Install an RDMA device |
| |
| Any device supported by the drivers in drivers/infiniband/hw is acceptable. |
| |
| Testing has been performed using several Mellanox-based IB cards, the |
| Ammasso AMS1100 iWARP adapter, and the Chelsio cxgb3 iWARP adapter. |
| |
| - Install a Linux distribution and tools |
| |
| The first kernel release to contain both the NFS/RDMA client and server was |
| Linux 2.6.25 Therefore, a distribution compatible with this and subsequent |
| Linux kernel release should be installed. |
| |
| The procedures described in this document have been tested with |
| distributions from Red Hat's Fedora Project (http://fedora.redhat.com/). |
| |
| - Install nfs-utils-1.1.2 or greater on the client |
| |
| An NFS/RDMA mount point can be obtained by using the mount.nfs command in |
| nfs-utils-1.1.2 or greater (nfs-utils-1.1.1 was the first nfs-utils |
| version with support for NFS/RDMA mounts, but for various reasons we |
| recommend using nfs-utils-1.1.2 or greater). To see which version of |
| mount.nfs you are using, type: |
| |
| .. code-block:: sh |
| |
| $ /sbin/mount.nfs -V |
| |
| If the version is less than 1.1.2 or the command does not exist, |
| you should install the latest version of nfs-utils. |
| |
| Download the latest package from: http://www.kernel.org/pub/linux/utils/nfs |
| |
| Uncompress the package and follow the installation instructions. |
| |
| If you will not need the idmapper and gssd executables (you do not need |
| these to create an NFS/RDMA enabled mount command), the installation |
| process can be simplified by disabling these features when running |
| configure: |
| |
| .. code-block:: sh |
| |
| $ ./configure --disable-gss --disable-nfsv4 |
| |
| To build nfs-utils you will need the tcp_wrappers package installed. For |
| more information on this see the package's README and INSTALL files. |
| |
| After building the nfs-utils package, there will be a mount.nfs binary in |
| the utils/mount directory. This binary can be used to initiate NFS v2, v3, |
| or v4 mounts. To initiate a v4 mount, the binary must be called |
| mount.nfs4. The standard technique is to create a symlink called |
| mount.nfs4 to mount.nfs. |
| |
| This mount.nfs binary should be installed at /sbin/mount.nfs as follows: |
| |
| .. code-block:: sh |
| |
| $ sudo cp utils/mount/mount.nfs /sbin/mount.nfs |
| |
| In this location, mount.nfs will be invoked automatically for NFS mounts |
| by the system mount command. |
| |
| .. note:: |
| mount.nfs and therefore nfs-utils-1.1.2 or greater is only needed |
| on the NFS client machine. You do not need this specific version of |
| nfs-utils on the server. Furthermore, only the mount.nfs command from |
| nfs-utils-1.1.2 is needed on the client. |
| |
| - Install a Linux kernel with NFS/RDMA |
| |
| The NFS/RDMA client and server are both included in the mainline Linux |
| kernel version 2.6.25 and later. This and other versions of the Linux |
| kernel can be found at: https://www.kernel.org/pub/linux/kernel/ |
| |
| Download the sources and place them in an appropriate location. |
| |
| - Configure the RDMA stack |
| |
| Make sure your kernel configuration has RDMA support enabled. Under |
| Device Drivers -> InfiniBand support, update the kernel configuration |
| to enable InfiniBand support [NOTE: the option name is misleading. Enabling |
| InfiniBand support is required for all RDMA devices (IB, iWARP, etc.)]. |
| |
| Enable the appropriate IB HCA support (mlx4, mthca, ehca, ipath, etc.) or |
| iWARP adapter support (amso, cxgb3, etc.). |
| |
| If you are using InfiniBand, be sure to enable IP-over-InfiniBand support. |
| |
| - Configure the NFS client and server |
| |
| Your kernel configuration must also have NFS file system support and/or |
| NFS server support enabled. These and other NFS related configuration |
| options can be found under File Systems -> Network File Systems. |
| |
| - Build, install, reboot |
| |
| The NFS/RDMA code will be enabled automatically if NFS and RDMA |
| are turned on. The NFS/RDMA client and server are configured via the hidden |
| SUNRPC_XPRT_RDMA config option that depends on SUNRPC and INFINIBAND. The |
| value of SUNRPC_XPRT_RDMA will be: |
| |
| #. N if either SUNRPC or INFINIBAND are N, in this case the NFS/RDMA client |
| and server will not be built |
| |
| #. M if both SUNRPC and INFINIBAND are on (M or Y) and at least one is M, |
| in this case the NFS/RDMA client and server will be built as modules |
| |
| #. Y if both SUNRPC and INFINIBAND are Y, in this case the NFS/RDMA client |
| and server will be built into the kernel |
| |
| Therefore, if you have followed the steps above and turned no NFS and RDMA, |
| the NFS/RDMA client and server will be built. |
| |
| Build a new kernel, install it, boot it. |
| |
| Check RDMA and NFS Setup |
| ======================== |
| |
| Before configuring the NFS/RDMA software, it is a good idea to test |
| your new kernel to ensure that the kernel is working correctly. |
| In particular, it is a good idea to verify that the RDMA stack |
| is functioning as expected and standard NFS over TCP/IP and/or UDP/IP |
| is working properly. |
| |
| - Check RDMA Setup |
| |
| If you built the RDMA components as modules, load them at |
| this time. For example, if you are using a Mellanox Tavor/Sinai/Arbel |
| card: |
| |
| .. code-block:: sh |
| |
| $ modprobe ib_mthca |
| $ modprobe ib_ipoib |
| |
| If you are using InfiniBand, make sure there is a Subnet Manager (SM) |
| running on the network. If your IB switch has an embedded SM, you can |
| use it. Otherwise, you will need to run an SM, such as OpenSM, on one |
| of your end nodes. |
| |
| If an SM is running on your network, you should see the following: |
| |
| .. code-block:: sh |
| |
| $ cat /sys/class/infiniband/driverX/ports/1/state |
| 4: ACTIVE |
| |
| where driverX is mthca0, ipath5, ehca3, etc. |
| |
| To further test the InfiniBand software stack, use IPoIB (this |
| assumes you have two IB hosts named host1 and host2): |
| |
| .. code-block:: sh |
| |
| host1$ ip link set dev ib0 up |
| host1$ ip address add dev ib0 a.b.c.x |
| host2$ ip link set dev ib0 up |
| host2$ ip address add dev ib0 a.b.c.y |
| host1$ ping a.b.c.y |
| host2$ ping a.b.c.x |
| |
| For other device types, follow the appropriate procedures. |
| |
| - Check NFS Setup |
| |
| For the NFS components enabled above (client and/or server), |
| test their functionality over standard Ethernet using TCP/IP or UDP/IP. |
| |
| NFS/RDMA Setup |
| ============== |
| |
| We recommend that you use two machines, one to act as the client and |
| one to act as the server. |
| |
| One time configuration: |
| ----------------------- |
| |
| - On the server system, configure the /etc/exports file and start the NFS/RDMA server. |
| |
| Exports entries with the following formats have been tested:: |
| |
| /vol0 192.168.0.47(fsid=0,rw,async,insecure,no_root_squash) |
| /vol0 192.168.0.0/255.255.255.0(fsid=0,rw,async,insecure,no_root_squash) |
| |
| The IP address(es) is(are) the client's IPoIB address for an InfiniBand |
| HCA or the client's iWARP address(es) for an RNIC. |
| |
| .. note:: |
| The "insecure" option must be used because the NFS/RDMA client does |
| not use a reserved port. |
| |
| Each time a machine boots: |
| -------------------------- |
| |
| - Load and configure the RDMA drivers |
| |
| For InfiniBand using a Mellanox adapter: |
| |
| .. code-block:: sh |
| |
| $ modprobe ib_mthca |
| $ modprobe ib_ipoib |
| $ ip li set dev ib0 up |
| $ ip addr add dev ib0 a.b.c.d |
| |
| .. note:: |
| Please use unique addresses for the client and server! |
| |
| - Start the NFS server |
| |
| If the NFS/RDMA server was built as a module (CONFIG_SUNRPC_XPRT_RDMA=m in |
| kernel config), load the RDMA transport module: |
| |
| .. code-block:: sh |
| |
| $ modprobe svcrdma |
| |
| Regardless of how the server was built (module or built-in), start the |
| server: |
| |
| .. code-block:: sh |
| |
| $ /etc/init.d/nfs start |
| |
| or |
| |
| .. code-block:: sh |
| |
| $ service nfs start |
| |
| Instruct the server to listen on the RDMA transport: |
| |
| .. code-block:: sh |
| |
| $ echo rdma 20049 > /proc/fs/nfsd/portlist |
| |
| - On the client system |
| |
| If the NFS/RDMA client was built as a module (CONFIG_SUNRPC_XPRT_RDMA=m in |
| kernel config), load the RDMA client module: |
| |
| .. code-block:: sh |
| |
| $ modprobe xprtrdma.ko |
| |
| Regardless of how the client was built (module or built-in), use this |
| command to mount the NFS/RDMA server: |
| |
| .. code-block:: sh |
| |
| $ mount -o rdma,port=20049 <IPoIB-server-name-or-address>:/<export> /mnt |
| |
| To verify that the mount is using RDMA, run "cat /proc/mounts" and check |
| the "proto" field for the given mount. |
| |
| Congratulations! You're using NFS/RDMA! |