SMB Direct - 基於 RDMA 的 SMB3

本文件描述如何設定 Linux SMB 客戶端和伺服器以使用 RDMA。

概述

Linux SMB 核心客戶端支援 SMB Direct,這是一種 SMB3 的傳輸方案,它使用 RDMA(遠端直接記憶體訪問)來提供高吞吐量和低延遲,從而繞過傳統的 TCP/IP 協議棧。 Linux SMB 客戶端上的 SMB Direct 可以針對 KSMBD(一個核心空間的 SMB 伺服器)進行測試。

安裝

  • 安裝 RDMA 裝置。只要核心支援 RDMA 裝置驅動程式,它就應該可以工作。這包括軟體模擬器(soft RoCE,soft iWARP)和硬體裝置(InfiniBand,RoCE,iWARP)。

  • 安裝具有 SMB Direct 支援的核心。第一個同時支援客戶端和伺服器端 SMB Direct 的核心版本是 5.15。因此,需要與核心 5.15 或更高版本相容的發行版。

  • 安裝 cifs-utils,它提供 mount.cifs 命令來掛載 SMB 共享。

  • 配置 RDMA 堆疊

    確保您的核心配置已啟用 RDMA 支援。在 Device Drivers -> Infiniband support 下,更新核心配置以啟用 Infiniband 支援。

    根據您的硬體,啟用相應的 IB HCA 支援或 iWARP 介面卡支援。

    如果您使用的是 InfiniBand,請啟用 IP-over-InfiniBand 支援。

    對於 soft RDMA,啟用 soft iWARP (RDMA _SIW) 或 soft RoCE (RDMA_RXE) 模組。安裝 iproute2 包並使用 rdma link add 命令來載入模組並建立 RDMA 介面。

    例如,如果您的本地乙太網介面是 eth0,您可以使用

    sudo rdma link add siw0 type siw netdev eth0
    
  • 在核心配置中為伺服器和客戶端啟用 SMB Direct 支援。

    伺服器設定

    Network File Systems  --->
        <M> SMB3 server support
            [*] Support for SMB Direct protocol
    

    客戶端設定

    Network File Systems  --->
        <M> SMB3 and CIFS support (advanced network filesystem)
            [*] SMB Direct support
    
  • 構建並安裝核心。 SMB Direct 支援將在 cifs.ko 和 ksmbd.ko 模組中啟用。

設定和用法

  • 按照 KSMBD 文件中所述,設定並啟動 KSMBD 伺服器。 還要將“server multi channel support = yes”引數新增到 ksmbd.conf 中。

  • 在客戶端上,使用 rdma 掛載選項掛載共享以使用 SMB Direct(使用 vers 指定 SMB 版本 3.0 或更高版本)。

    例如

    mount -t cifs //server/share /mnt/point -o vers=3.1.1,rdma
    
  • 要驗證掛載是否正在使用 SMB Direct,您可以在掛載後檢查 dmesg 中是否有以下日誌行

    CIFS: VFS: RDMA transport established
    

    或者,驗證 /proc/mounts 中共享的 rdma 掛載選項

    cat /proc/mounts | grep cifs