排查Mellanox ConnectX-3 Pro 在Windows下无法启动RDMA的问题

背景

最近在安装了Mellanox ConnectX-3 Pro的网卡,想要使用RDMA来加速网络传输,但是在安装好驱动后,发现SMB无法启动RDMA。在网上找了一圈,也没有找到解决方案,最后自己摸索了一下,终于解决了这个问题,就此记录一下。

环境

为了最简单地启用RDMA,我两端都使用了Windows系统,客户端是Windows 10 22H2,服务端是Windows Server 2022。两端都使用了Mellanox ConnectX-3 Pro 40G网卡。通过软路由连接,题外话,软路由的软交换是能够支持RDMA的,这里我使用的软路由系统是iKuai。两端配置如下:

客户端:

  • Windows 10 22H2
  • Ryzen 9 7950X
  • Mellanox ConnectX-3 Pro 40G网卡

服务端:

  • Windows Server 2022
  • Xeon E5-2640 v4
  • Mellanox ConnectX-3 Pro 40G网卡

排查

首先,我们需要确认网卡的驱动是否安装正确。在设备管理器中,我们可以看到Mellanox ConnectX-3 Pro网卡的驱动已经安装成功。通过Get-NetAdapter命令,我们可以看到网卡的详细信息,包括网卡的名字、状态、MAC地址等。通过Get-NetAdapterRDMA命令,我们可以看到网卡是否支持RDMA,以及RDMA是否已经启用。在我的环境中,服务端的RDMA是已经启用的,但是客户端的RDMA是没有启用的,所以需要排查客户端的问题。

1
2
3
4
5
6
7
8
9
10
11
PS C:\>Get-NetAdapterRDMA
Name InterfaceDescription Enabled PFC ETS
---- -------------------- ------- --- ---
以太网 13 HP InfiniBand FDR/Ethernet 10Gb/40Gb ... False False False
以太网 14 HP InfiniBand FDR/Ethernet 10Gb/40Gb ... False False False
PS C:\>
PS C:\>Get-SmbServerNetworkInterface
Interface Index RSS Capable RDMA Capable Speed IpAddresses
--------------- ----------- ------------ ----- -----------
12 True False 40 Gbps {...}
...

通过Get-MlnxDriverCoreSetting命令,可以查看ConnectX-3 Pro网卡的驱动设置,包括RoCE版本、网卡的状态等。我们需要使用RoCEv2,所以需要确认RoCEv2是否已经启用。在我的环境中,客户端的RoCEv2是没有启用的,找到问题所在了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
PS C:\>Get-MlnxDriverCoreSetting

Caption : DriverCoreSettingData 'mlx4_bus'
Description : Mellanox Driver Option Settings
ElementName : mlx4_bus
InstanceID : mlx4_bus
Name : mlx4_bus
Source : 3
SystemName : DESKTOP-ONVNK2T
LogMttsPerSeg : 0
LogNumCq : 19
LogNumMac : 7
LogNumMcg : 4294967295
LogNumMpt : 19
LogNumMtt : 20
LogNumQp : 20
LogNumRdmaRc : 4
LogNumSrq : 16
LogNumVlan : 7
MaximumWorkingThreads : 4294967295
RoceMode : 0
Set4kMtu : True
SriovPort1NumVFs :
SriovPort2NumVFs :
SriovPortMode :
PSComputerName :

可以看到,RoceMode是0,说明RoCE是没有启用的,我们需要将RoCEv2启用。通过Set-MlnxDriverCoreSetting命令,我们可以修改RoCEv2的设置。

1
PS C:\>Set-MlnxDriverCoreSetting -RoceMode 2

修改成功后,我们需要重启网卡,使设置生效。

1
PS C:\>Restart-NetAdapter -Name "以太网 13"

重启成功后,我们再次查看RDMA的状态,可以看到RDMA已经启用了。

1
2
3
4
5
PS C:\>Get-NetAdapterRDMA
Name InterfaceDescription Enabled PFC ETS
---- -------------------- ------- --- ---
以太网 13 HP InfiniBand FDR/Ethernet 10Gb/40Gb ... True False False
以太网 14 HP InfiniBand FDR/Ethernet 10Gb/40Gb ... True False False

检查SMB的RDMA状态,可以看到客户端SMB的RDMA也已经启用了。

1
2
3
4
5
PS C:\>Get-SmbClientNetworkInterface
Interface Index RSS Capable RDMA Capable Speed IpAddresses
--------------- ----------- ------------ ----- -----------
12 True True 40 Gbps {...}
...