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