坑边闲话:在高性能计算的互联解决方案中,Mellanox 家的产品一直是首选之一,甚至没有之一。基于 TCP/IP 的存储共享网络也可以从 Mellanox 技术获益,实现较高的 I/O 带宽和较低的延迟。

我们以 Windows Server 2022 为例,讲解如何配置基于 RDMA 的 SMB 文件共享。

1. SMB Direct·

2. 配置 Windows Server 驱动·

2.1 开启 Windows Server DCB 数据中心桥接功能·

IEEE 802.1 数据中心桥接(DCB)是一系列标准。DCB 的主要目的是让局域网和存储区域网络能在数据中心的同一个网络上运行。比如,同一台交换机可以同时承载普通以太网流量与存储流量。DCB 通过定义不同的链接级别,实现了 FCoE 和 iSCSI 等技术。同一台交换机承载不同类型的以太网流量本身就是天经地义,然而在存储和高性能计算领域,应用对延迟、丢包率的容忍度较普通流量更低,因此交换机不仅要提高性能,而且要有更先进的拥塞控制算法、QoS 算法。

DCB 有以下核心功能:

  • 基于优先级的流控制,即 PFC(Priority Flow Control)
  • 增强的传输选择(ETC)算法
  • DCBX 协议,即 DCB Exchange. 该协议允许两个直连的对等方之间交换 DCB 配置参数。DCBX 还可以用于检测网络适配器与远程对等节点之间的 QoS 参数设置冲突。DCBX 由 DCB type-length-value (TLV) 设置组成,这些设置通过链路层发现协议(LLDP)传输。

简而言之,此前为了保证存储流量和数据网络流量分开,一般采取给服务器配置多个网卡、给数据中心配置多台交换机的方式。一台机器装多个网卡浪费 PCIe 通道数量,一个机柜配置多个 ToR 交换机浪费空间。有了 DCB 之后,交换机内部集成了优先级控制,因此可以节约成本,数据中心用更少的网卡、交换机即可实现原有的功能,且不妥协服务质量。

2.2 下载 mlxup 并升级网卡固件·

2.2.1 下载固件并更新·

网卡的最新驱动对网卡固件版本有要求,过低的固件不能支持最新的网卡驱动。

mlxup.exe 是一个 Windows 平台的 Mellanox 固件升级工具,可用于

  • 搜索主机安装的 NVIDIA 网卡
  • 自动联机下载、刷固件

用 WinMFT 工具包中的 flint 也可以刷固件,但需要用户掌握高阶的执行参数,mlxup.exe 比较简单,省去了手动输入参数的过程,使用起来比较“傻瓜”。

mlxup 下载页面 Windows x64 mlxup 4.26.0 下载链接

图 1. 在终端里执行 mlxup.exe 升级固件。因为我的 MCX643106A-ECAT 是 HPE 版本,所以不能使用 Mellanox 官方软件升级固件。

mlxup 工具同时支持 Windows、Linux、FreeBSD、ESXi 等系统,然而该工具对非原厂固件的 Mellanox 网卡支持度不好,比如 HPE、Dell 等 OEM 卡均无法使用 mlxup 升级固件。

如果用户不喜欢“傻瓜式工具”,亦可使用 MFT 工具包。

MFT 工具官网页面 下载 WinMFT 4.26.1-LTS x64 版本

MFT 包含以下工具:

  • mst,打印网卡列表,控制卡上外设寄存器访问开关。
  • mlxburn,烧写固件、生成标准格式的固件
  • flint,可以刷固件,拥有的功能更多
  • Debug 工具

2.2.2 下载并安装 WinOF-2 驱动·

Mellanox 的网卡驱动在 Windows 平台称为 WinOF,在 Linux 平台称为 OFED.

WinOF-2 官方页面 显示文本

2.3 调整操作系统的网卡参数·

在网卡的配置页面,找到高级功能,设置以下参数:

1
2
NetworkDirect Functionality = Enable
NetworkDirect Technology = RoCEv2

2.4 启动网卡的 LLDP 功能·

一般 PCIe 网卡不开启 LLDP,OCP 网卡会在 BMC 里有开启选项。为了能让网卡使用 LLDP 链路层协议交换 DCB 流控参数,我们需要先开启网卡的 LLDP 服务。

1
2
3
4
5
6
mlxconfig -d mt4117_pciconf0 set LLDP_NB_DCBX_P1=1
mlxconfig -d mt4117_pciconf0 set LLDP_NB_DCBX_P2=1
mlxconfig -d mt4117_pciconf0 set LLDP_NB_RX_MODE_P1=2
mlxconfig -d mt4117_pciconf0 set LLDP_NB_RX_MODE_P2=2
mlxconfig -d mt4117_pciconf0 set LLDP_NB_TX_MODE_P1=2
mlxconfig -d mt4117_pciconf0 set LLDP_NB_TX_MODE_P2=2

2.5 一些可有可无的选项·

以下命令在 PowerShell 下运行(管理员权限)。

启用 ECN·

Windows Server 2022 默认开启,专业工作站版默认关闭。

1
netsh int tcp set global ecncapability=enabled

强制使用 SMB 3.1.1·

1
2
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" -Name "MinSMB2Dialect" -Value 0x000000311
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" -Name "MaxSMB2Dialect" -Value 0x000000311

启用 SMB-Direct·

1
Enable-WindowsOptionalFeature -Online -FeatureName SMBDirect

启用 SMB MultiChannel·

1
2
Set-SmbServerConfiguration -EnableMultiChannel $true
Set-SmbClientConfiguration -EnableMultiChannel $true

网卡启用 SMB Direct·

1
Set-NetOffloadGlobalSetting -NetworkDirect Enabled

配置 DCB(PFC 和 ETS)·

1
2
3
4
5
6
7
Install-WindowsFeature -Name Data-Center-Bridging -IncludeManagementTools
New-NetQoSPolicy "SMB" -NetDirectPortMatchCondition 445 -PriorityValue8021Action 3
Enable-NetQosFlowControl -Priority 3
Disable-NetQosFlowControl -Priority 0,1,2,4,5,6,7
New-NetQosTrafficClass -Name "SMB" -Priority 3 -BandwidthPercentage 60 -Algorithm ETS
Set-NetQosDcbxSetting -Willing $True
Enable-NetAdapterQos -Name "以太网 2"

验证配置·

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看是否开启 SMB-Direct
Get-WindowsOptionalFeature -Online -FeatureName SMBDirect

# 获取 SMB 服务接口
Get-SmbServerNetworkInterface
Get-SmbClientNetworkInterface

# 获取 RDMA 网卡列表
Get-NetAdapterRDMA

# 获取网络卸载列表
Get-NetOffloadGlobalSetting

netstat.exe -xan | ? {$_ -match "445"}