設定 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://kernel.linux.club.tw/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://kernel.linux.club.tw/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!