设置 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 的值将为
如果 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(这假设您有两个名为 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!