远程直接内存访问(RDMA)允许网络设备与另一台系统的应用程序内存之间直接传送数据,并在某些网络环境中增加吞吐量和降低延迟。
主要的区别是 iWARP 通过 TCP 执行 RDMA,而 RoCEv2 则使用 UDP。
为了避免因丢弃的数据包导致的性能下降,在所有网络接口和交换机上启用链路级流量控制或优先级流量控制。
注意:
|
这些基本 Linux RDMA 安装说明适用于以下设备:
有关详细的安装和配置信息,请参阅支持 RDMA 的英特尔以太网设备的驱动程序压缩包内的 Linux RDMA 驱动程序 README 文件。
此示例专门针对 Red Hat* Enterprise Linux*。您的操作系统的具体情况可能有所不同。
# tar zxf irdma-<x.x.x>.tar.gz
# cd irdma-<x.x.x>
# ./build.sh
# modprobe irdma
注意:默认情况下,irdma 驱动程序在 iWARP 模式下加载。它使用 devlink 接口来启用每个端口的 RoCev2。要在 RoCEv2 模式下加载所有的 irdma 端口,请使用以下方法:# modprobe irdma |
# yum erase rdma-core
# wget https://github.com/linux-rdma/rdma-core/releases/download/v27.0/rdma-core-27.0.tar.gz
注意:请下载与驱动器附带的 libirdma 补丁文件相匹配的 rdma-core 版本。例如,libirdma-27.0.patch 要求 rdma-core-27.0.tar.gz 。 |
# tar -xzvf rdma-core-<version>.tar.gz
# cd rdma-core-<version>
# patch -p2 <<path-to-component-build>/libirdma-<version>.patch
# cd ..
# chgrp -R root <path-to-rdma-core>/redhat
# tar -zcvf rdma-core-<version>.tgz rdma-core-<version>
# mkdir -p ~/rpmbuild/SOURCES
# mkdir -p ~/rpmbuild/SPECS
# cp rdma-core-<version>.tgz ~/rpmbuild/SOURCES/
# cd ~/rpmbuild/SOURCES
# tar -xzvf rdma-core-<version>.tgz
# cp ~/rpmbuild/SOURCES/rdma-core-<version>/redhat/rdma-core.spec ~/rpmbuild/SPECS/
# cd ~/rpmbuild/SPECS/
# rpmbuild -ba rdma-core.spec
# cd ~/rpmbuild/RPMS/x86_64
# yum install *<version>*.rpm
提供适用于以下设备系列的 FreeBSD RDMA 驱动程序:
设备 | 基础驱动程序名称 | RDMA 驱动程序名称 | 支持的协议 |
英特尔® 以太网 800 系列 | ice | irdma | RoCEv21,iWARP |
英特尔® 以太网 X722 系列 | ixl | iw_ixl | iWARP |
1有限的支持;仅用于功能测试。目前不支持 DCB 和优先流量控制 (PFC)。
以下说明描述了每个设备系列的基本 FreeBSD RDMA 安装。有关详细的安装和配置信息,请参阅 FreeBSD RDMA 驱动程序 tarball 中的 README 文件。
英特尔® 以太网 800 系列:
# tar -xf ice-<version>.tar.gz
# tar -xf irdma-<version>.tar.gz
# cd ice-<version>/ directory
# make
# make install
# cd irdma-<version>/src
# make clean
# make ICE_DIR=$PATH_TO_ICE/ice-<version>/
# make install
注意:默认情况下,irdma 驱动程序在 iWARP 模式下加载。若要以 RoCEv2 模式加载 irdma 端口,请将下列行添加到 /boot/loader.conf ,其中 <port> 是用于启用 RoCEv2 模式的接口,然后重新启动:dev.irdma<port>.roce_enable=1 例如,要在 ice1 上启用 RoCEv2 模式: dev.irdma1.roce_enable=1 |
# sysctl dev.ice.<interface_num>.fc=3
英特尔® 以太网 X722 系列:
# tar -xf ixl-<version>.tar.gz
# tar -xf iw_ixl-<version>.tar.gz
# cd ixl-<version>/src directory
# make
# make install
# cd iw_ixl-<version>/src
# make clean
# make IXL_DIR=$PATH_TO_IXL/ixl-<version>/src
# make install
# sysctl dev.ixl.<interface_num>.fc=3
网络直接 (ND) 允许用户模式应用程序使用 RDMA 功能。
注:用户模式应用程序可能具有诸如 Microsoft HPC 包或英特尔 MPI 库之类的先决条件,请参阅应用程序文档以了解详细信息。 |
英特尔® 以太网用户模式 RDMA 提供程序受 Microsoft Windows Server 2012 R2 及更高版本的支持。
按照以下步骤安装用户模式网络直接功能。
注:如果 Windows 防火墙被禁用,或者您使用的是第三方防火墙,您将需要手动添加此规则。 |
RDMA 网络直接内核(NDK)功能包含在英特尔基础网络驱动程序中,并不需要安装额外的功能。
如果你想跨子网允许 NDK 的 RDMA 功能,您需要在基础驱动程序安装过程中在 RDMA 配置选项屏幕上选择“启用跨 IP 子网的 RDMA 路由”。
为避免因丢弃数据包导致的性能下降,请在所有网络接口和交换机上启用优先级流量控制 (PFC) 或链路级流量控制。
注:在运行 Microsoft* Windows Server* 操作系统的系统上,启用 *QoS/优先级流控制将禁用链路级别流控制。 |
使用以下 PowerShell* 命令在 Microsoft Windows Server 上启用 PFC:
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 $FALSE
Enable-NetAdapterQos -Name "Slot1 4 2 Port 1"
您可以使用以下 Microsoft PowerShell 命令检查 RDMA 是否已在网络接口中启用:
Get-NetAdapterRDMA
使用以下的 PowerShell 命令检查网络接口是否与 RDMA 兼容,以及多通道是否已启用:
et-SmbClientNetworkInterface
使用以下命令 PowerShell 命令检查网络直接是否已在操作系统中启用:
Get-NetOffloadGlobalSetting | 选择 NetworkDirect
使用 netstat 以确保每个具备 RDMA 功能的网络接口在端口 445 上有一个侦听器。(支持 RDMA 的 Windows 客户端操作系统可能不标明侦听器)。例如:
netstat.exe -xan | ? {$_ -match "445"}
要在连接到 VMSwitch 的虚拟适配器上启用 RDMA 功能,SRIOV(单根 IO 虚拟化)和 VMQ(虚拟机队列)高级属性必须在每个端口上启用。在某些情况下,这些设置可能会默认禁用。可以在英特尔® PROSet ACU 的“适配器设置”面板、适配器属性对话框的“高级”选项卡中手动设置这些选项,或使用以下 PowerShell 命令:
Set-NetAdapterAdvancedProperty -Name <nic_name> -RegistryKeyword *SRIOV -RegistryValue 1
Set-NetAdapterAdvancedProperty -Name <nic_name> -RegistryKeyword *VMQ -RegistryValue 1
NDK 模式 3 允许内核模式 Windows 组件在 Hyper-V 来宾分区中使用 RDMA 功能。要在英特尔以太网设备上启用 NDK 模式 3,请执行以下操作:
New-VMSwitch -Name <switch_name> -NetAdapterName <device_name>
-EnableIov $true
Set-NetAdapterAdvancedProperty -Name <device_name> -RegistryKeyword RdmaMaxVfsEnabled -RegistryValue <Value: 0 - 32>
Get-NetAdapterRdma | Disable-NetAdapter
Get-NetAdapterRdma | Enable-NetAdapter
Add-VMNetworkAdapter -VMName <vm_name> -VMNetworkAdapterName <device_name> -SwitchName <switch_name>
Set-VMNetworkAdapterRdma -VMName <vm_name> -VMNetworkAdapterName <device_name> -RdmaWeight 100
Set-VMNetworkAdapter -VMName <vm_name> -VMNetworkAdapterName <device_name> -IovWeight 100
Set-NetAdapterAdvancedProperty -Name <device_name> -RegistryKeyword RdmaVfEnabled -RegistryValue 1
Get-NetAdapterRdma | Enable-NetAdapterRdma
NDK 允许 Windows 组件(如 SMB 直接存储)使用 RDMA 功能。
本节概述了我们推荐的在 Microsoft Windows 操作系统上测试适用于英特尔以太网功能和性能的 RDMA 的方法。
注:由于 SMB 直接是存储工作负载,因此基准测试的性能可能仅限于存储设备的速度,而不是被测试的网络接口。英特尔建议尽可能使用最快的存储,以对所测试的网络设备的真实功能进行测试。
测试说明:
New-SmbShare -Name <SMBsharename> -Path <SMBsharefilepath> -FullAccess <domainname>\Administrator,Everyone
New-SmbShare -Name RAMDISKShare -Path R:\RAMDISK -FullAccess group\Administrator,Everyone
.\diskspd.exe -b4K -d60 -h -L -o16 -t16 -r -w0 -c10G \\<SMBserverTestIP>\<SMBsharename>\test.dat
版权所有 (C) 2019 - 2021,英特尔公司。保留所有权利。
英特尔公司对本文档中的错误和遗漏不负责任。英特尔公司对更新本文档中的信息不作任何承诺。
英特尔是英特尔公司在美国和/或其它国家(地区)的商标。
*文中涉及的其它名称及商标属于各自所有者资产。
本软件根据许可提供,仅允许按照许可条款使用或复制。本手册中的信息仅供参考,可能随时变更而不另行通知,并且不得将其视为英特尔公司的承诺。对于本文或提供的与本文有关的任何软件中可能出现的任何错误或不准确之处,英特尔公司概不承担任何责任或义务。除非许可证允许,在未获得英特尔公司明确的书面同意前提下,不得以任何形式或任何手段复制或传输本文档的任何部分,也不得将其存储到检索系统中。