设置 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 的值将为
如果 SUNRPC 或 INFINIBAND 中的任何一个是 N,则为 N,在这种情况下,将不会构建 NFS/RDMA 客户端和服务器
如果 SUNRPC 和 INFINIBAND 均为开启 (M 或 Y) 且至少一个是 M,则为 M,在这种情况下,NFS/RDMA 客户端和服务器将构建为模块
如果 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!