设置 NFS/RDMA

作者:

NetApp 和 Open Grid Computing(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 项目发行版(http://fedora.redhat.com/)上进行过测试。

  • 在客户端安装 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。

    从以下地址下载最新软件包:https://linuxkernel.org.cn/pub/linux/utils/nfs

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

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

    $ ./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
    

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

    注意

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

  • 安装带 NFS/RDMA 的 Linux 内核

    NFS/RDMA 客户端和服务器都包含在 Linux 内核主线版本 2.6.25 及更高版本中。此版本以及其他 Linux 内核版本可从以下地址获取:https://linuxkernel.org.cn/pub/linux/kernel/

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

  • 配置 RDMA 栈

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

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

    如果您正在使用 InfiniBand,请务必启用 IP-over-InfiniBand 支持。

  • 配置 NFS 客户端和服务器

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

  • 构建、安装、重启

    如果 NFS 和 RDMA 已启用,NFS/RDMA 代码将自动启用。NFS/RDMA 客户端和服务器通过依赖于 SUNRPC 和 INFINIBAND 的隐藏配置选项 SUNRPC_XPRT_RDMA 进行配置。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(这假设您有两个名为 host1 和 host2 的 IB 主机)

    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!