设置 NFS/RDMA

作者:

NetApp 和开放网格计算 (2008 年 5 月 29 日)

警告

此文档可能已过时。

概述

本文档介绍如何安装和设置 Linux NFS/RDMA 客户端和服务器软件。

NFS/RDMA 客户端首次包含在 Linux 2.6.24 中。NFS/RDMA 服务器首次包含在后续版本 Linux 2.6.25 中。

在我们的测试中,我们在许多工作负载下获得了出色的性能结果(在最小的客户端 CPU 上达到完整的 10Gbit 线带宽)。该代码通过了完整的 Connectathon 测试套件,并可在 Infiniband 和 iWARP RDMA 适配器上运行。

获取帮助

如果您遇到问题,可以在 nfs-rdma-devel@lists.sourceforge.net 邮件列表中提问。

安装

以下说明是逐步构建用于 NFS/RDMA 的机器的指南。

  • 安装 RDMA 设备

    drivers/infiniband/hw 中的驱动程序支持的任何设备都可以接受。

    已使用多个基于 Mellanox 的 IB 卡、Ammasso AMS1100 iWARP 适配器和 Chelsio cxgb3 iWARP 适配器进行了测试。

  • 安装 Linux 发行版和工具

    包含 NFS/RDMA 客户端和服务器的第一个内核版本是 Linux 2.6.25。因此,应安装与此及后续 Linux 内核版本兼容的发行版。

    本文档中描述的过程已使用 Red Hat 的 Fedora 项目 ( <a class="reference external" href="http://fedora.redhat.com/">http://fedora.redhat.com/</a> ) 的发行版进行了测试。

  • 在客户端上安装 nfs-utils-1.1.2 或更高版本

    可以使用 nfs-utils-1.1.2 或更高版本中的 mount.nfs 命令获取 NFS/RDMA 挂载点(nfs-utils-1.1.1 是第一个支持 NFS/RDMA 挂载的 nfs-utils 版本,但由于各种原因,我们建议使用 nfs-utils-1.1.2 或更高版本)。要查看您正在使用的 mount.nfs 版本,请键入

    $ /sbin/mount.nfs -V
    

    如果版本低于 1.1.2 或该命令不存在,您应该安装最新版本的 nfs-utils。

    从以下位置下载最新软件包:<a class="reference external" href="https://linuxkernel.org.cn/pub/linux/utils/nfs">https://linuxkernel.org.cn/pub/linux/utils/nfs</a>

    解压缩软件包并按照安装说明进行操作。

    如果您不需要 idmapper 和 gssd 可执行文件(您不需要这些来创建启用 NFS/RDMA 的挂载命令),则可以通过在运行配置时禁用这些功能来简化安装过程

    $ ./configure --disable-gss --disable-nfsv4
    

    要构建 nfs-utils,您需要安装 tcp_wrappers 软件包。有关此软件包的更多信息,请参阅软件包的 README 和 INSTALL 文件。

    构建 nfs-utils 软件包后,utils/mount 目录中将有一个 mount.nfs 二进制文件。此二进制文件可用于启动 NFS v2、v3 或 v4 挂载。要启动 v4 挂载,必须将二进制文件称为 mount.nfs4。标准技术是创建一个名为 mount.nfs4 的符号链接到 mount.nfs。

    此 mount.nfs 二进制文件应安装在 /sbin/mount.nfs 中,如下所示

    $ sudo cp utils/mount/mount.nfs /sbin/mount.nfs
    

    在此位置,系统挂载命令将自动为 NFS 挂载调用 mount.nfs。

    注意

    mount.nfs,因此只有 NFS 客户端机器才需要 nfs-utils-1.1.2 或更高版本。您不需要服务器上此特定版本的 nfs-utils。此外,客户端只需要 nfs-utils-1.1.2 中的 mount.nfs 命令。

  • 安装带有 NFS/RDMA 的 Linux 内核

    NFS/RDMA 客户端和服务器都包含在主线 Linux 内核版本 2.6.25 及更高版本中。此版本和其他版本的 Linux 内核可以在以下位置找到:<a class="reference external" href="https://linuxkernel.org.cn/pub/linux/kernel/">https://linuxkernel.org.cn/pub/linux/kernel/</a>

    下载源代码并将其放置在适当的位置。

  • 配置 RDMA 堆栈

    确保您的内核配置已启用 RDMA 支持。在设备驱动程序 -> InfiniBand 支持下,更新内核配置以启用 InfiniBand 支持 [注意:该选项名称具有误导性。所有 RDMA 设备(IB、iWARP 等)都需要启用 InfiniBand 支持]。

    启用适当的 IB HCA 支持(mlx4、mthca、ehca、ipath 等)或 iWARP 适配器支持(amso、cxgb3 等)。

    如果您使用的是 InfiniBand,请务必启用 IP over InfiniBand 支持。

  • 配置 NFS 客户端和服务器

    您的内核配置还必须启用 NFS 文件系统支持和/或 NFS 服务器支持。这些和其他与 NFS 相关的配置选项可以在文件系统 -> 网络文件系统下找到。

  • 构建、安装、重新启动

    如果 NFS 和 RDMA 已打开,NFS/RDMA 代码将自动启用。NFS/RDMA 客户端和服务器通过隐藏的 SUNRPC_XPRT_RDMA 配置选项进行配置,该选项依赖于 SUNRPC 和 INFINIBAND。SUNRPC_XPRT_RDMA 的值将为

    1. 如果 SUNRPC 或 INFINIBAND 中的任何一个是 N,则为 N,在这种情况下,将不会构建 NFS/RDMA 客户端和服务器

    2. 如果 SUNRPC 和 INFINIBAND 均为开启 (M 或 Y) 且至少一个是 M,则为 M,在这种情况下,NFS/RDMA 客户端和服务器将构建为模块

    3. 如果 SUNRPC 和 INFINIBAND 均为 Y,则为 Y,在这种情况下,NFS/RDMA 客户端和服务器将构建到内核中

    因此,如果您已按照上述步骤操作并开启了 NFS 和 RDMA,则将构建 NFS/RDMA 客户端和服务器。

    构建新的内核、安装它并启动它。

检查 RDMA 和 NFS 设置

在配置 NFS/RDMA 软件之前,最好测试一下您的新内核,以确保内核正常工作。特别是,最好验证 RDMA 堆栈是否按预期工作,以及通过 TCP/IP 和/或 UDP/IP 的标准 NFS 是否正常工作。

  • 检查 RDMA 设置

    如果您将 RDMA 组件构建为模块,请此时加载它们。例如,如果您使用的是 Mellanox Tavor/Sinai/Arbel 卡

    $ modprobe ib_mthca
    $ modprobe ib_ipoib
    

    如果您正在使用 InfiniBand,请确保网络上运行着一个子网管理器 (SM)。如果您的 IB 交换机具有嵌入式 SM,则可以使用它。否则,您需要在其中一个终端节点上运行一个 SM,例如 OpenSM。

    如果您的网络上正在运行 SM,您应该看到以下内容

    $ cat /sys/class/infiniband/driverX/ports/1/state
    4: ACTIVE
    

    其中 driverX 是 mthca0、ipath5、ehca3 等。

    要进一步测试 InfiniBand 软件堆栈,请使用 IPoIB(假设您有两个 IB 主机,分别名为 host1 和 host2)

    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
    

    对于其他设备类型,请遵循相应的步骤。

  • 检查 NFS 设置

    对于上面启用的 NFS 组件(客户端和/或服务器),使用 TCP/IP 或 UDP/IP 测试其在标准以太网上的功能。

NFS/RDMA 设置

我们建议您使用两台机器,一台作为客户端,另一台作为服务器。

一次性配置:

  • 在服务器系统上,配置 /etc/exports 文件并启动 NFS/RDMA 服务器。

    已测试具有以下格式的 Exports 条目

    /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)
    

    IP 地址是 InfiniBand HCA 的客户端 IPoIB 地址或 RNIC 的客户端 iWARP 地址。

    注意

    必须使用 “insecure” 选项,因为 NFS/RDMA 客户端不使用保留端口。

每次机器启动时:

  • 加载并配置 RDMA 驱动程序

    对于使用 Mellanox 适配器的 InfiniBand

    $ modprobe ib_mthca
    $ modprobe ib_ipoib
    $ ip li set dev ib0 up
    $ ip addr add dev ib0 a.b.c.d
    

    注意

    请为客户端和服务器使用唯一的地址!

  • 启动 NFS 服务器

    如果 NFS/RDMA 服务器构建为模块(内核配置中的 CONFIG_SUNRPC_XPRT_RDMA=m),请加载 RDMA 传输模块

    $ modprobe svcrdma
    

    无论服务器是如何构建的(模块还是内置),都启动服务器

    $ /etc/init.d/nfs start
    

    $ service nfs start
    

    指示服务器侦听 RDMA 传输

    $ echo rdma 20049 > /proc/fs/nfsd/portlist
    
  • 在客户端系统上

    如果 NFS/RDMA 客户端构建为模块(内核配置中的 CONFIG_SUNRPC_XPRT_RDMA=m),请加载 RDMA 客户端模块

    $ modprobe xprtrdma.ko
    

    无论客户端是如何构建的(模块还是内置),都使用此命令挂载 NFS/RDMA 服务器

    $ mount -o rdma,port=20049 <IPoIB-server-name-or-address>:/<export> /mnt
    

    要验证挂载是否正在使用 RDMA,请运行 “cat /proc/mounts” 并检查给定挂载的 “proto” 字段。

    恭喜!您正在使用 NFS/RDMA!