設定 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 的值將為

    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!