背景 最近在安装了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 10 Gb/40 Gb ... False False False 以太网 14 HP InfiniBand FDR/Ethernet 10 Gb/40 Gb ... False False FalsePS 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 10 Gb/40 Gb ... True False False 以太网 14 HP InfiniBand FDR/Ethernet 10 Gb/40 Gb ... 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 {...} ...