适用于英特尔以太网设备的 RDMA(远程直接内存访问)

远程直接内存访问(RDMA)允许网络设备与另一台系统的应用程序内存之间直接传送数据,并在某些网络环境中增加吞吐量和降低延迟。

主要的区别是 iWARP 通过 TCP 执行 RDMA,而 RoCEv2 则使用 UDP。

为了避免因丢弃的数据包导致的性能下降,在所有网络接口和交换机上启用链路级流量控制或优先级流量控制。

注意:

  • 在运行 Microsoft Windows Server 操作系统的系统上,启用 *QoS/优先级流量控制将禁用链路级别流量控制。
  • 基于英特尔® 以太网控制器 800 系列的设备以超过 4 个端口的多端口模式操作时不支持 RDMA。
  • 在 Linux 系统上,RDMA 与绑定不兼容。如果启用了 RDMA,结合将不工作。

Linux 上的 RDMA

这些基本 Linux RDMA 安装说明适用于以下设备:

有关详细的安装和配置信息,请参阅支持 RDMA 的英特尔以太网设备的驱动程序压缩包内的 Linux RDMA 驱动程序 README 文件。

此示例特定于 RHEL。您的操作系统的具体情况可能有所不同。

  1. 解压 RDMA 驱动程序压缩包。例如:
    # tar zxf irdma-<x.x.x>.tar.gz
  2. 安装 RDMA PF 驱动程序。例如:
    # cd irdma-<x.x.x>
    # ./build.sh
    # modprobe irdma
    NOTE: By default, the irdma driver is loaded in iWARP mode. It uses the devlink interface to enable RoCEv2 per port. To load all irdma ports in RoCEv2 mode, use the following:
    # modprobe irdma roce_ena=1
  3. 卸载任何先前安装的 rdma-core 版本。
    # yum erase rdma-core
  4. 从 GitHub 下载 rdma-core 库压缩包。例如:
    # wget https://github.com/linux-rdma/rdma-core/releases/download/v27.0/rdma-core-27.0.tar.gz
    NOTE: Download the rdma-core version that matches the version of the libirdma patch file included with the driver. For example, libirdma-27.0.patch requires rdma-core-27.0.tar.gz.
  5. 解压 rdma-core 压缩包,应用补丁程序,并更改 spec 文件的组别。例如:
    # 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>
  6. 安装 rdma-core-intel 用户空间库。例如:
    # 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
  7. 在您的适配器上启用流量控制。您可以启用链路级或优先级流量控制;我们建议使用优先级流量控制。有关流量控制的详细信息,请参阅 Linux RDMA 驱动程序 README。
  8. 在您的系统与之连接的交换机上启用流量控制。查阅交换器文档以了解详细信息。

FreeBSD 上的 RDMA

这些基本 FreeBSD RDMA 安装说明适用于以下设备:

  1. 解压基础驱动程序和 RDMA 驱动程序压缩包。例如:
    # tar -xf ixl-<version>.tar.gz
    # tar -xf iw_ixl-<version>.tar.gz
  2. 安装基础驱动程序。例如:
    # cd ixl-<version>/src directory
    # make
    # make install
  3. 安装 RDMA 驱动程序。例如:
    # cd iw_ixl-<version>/src
    # make clean
    # make IXL_DIR=$PATH_TO_IXL/ixl-<version>/src
    # make install
  4. 启用流量控制。
    # sysctl dev.ixl.<interface_num>.fc=3
  5. 在您的系统与之连接的交换机上启用流量控制。查阅交换器文档以了解详细信息。

有关详细的安装和配置信息,请参阅支持 RDMA 的英特尔以太网设备的驱动程序压缩包内的 FreeBSD RDMA 驱动程序 README 文件。

适用于 Microsoft Windows Network Direct (ND) 用户模式应用程序的 RDMA

网络直接 (ND) 允许用户模式应用程序使用 RDMA 功能。

注:用户模式应用程序可能具有诸如 Microsoft HPC 包或英特尔 MPI 库之类的先决条件,请参阅应用程序文档以了解详细信息。

RDMA 用户模式安装

英特尔® 以太网用户模式 RDMA 提供程序受 Microsoft* Windows Server* 2012 R2 或更高版本的支持。

按照以下步骤安装用户模式网络直接功能。

  1. 从安装介质运行 Autorun.exe 以启动安装程序,然后选择”安装驱动程序和软件”,并接受许可协议。
  2. 在安装选项屏幕上,选择“英特尔® 以太网用户模式 RDMA 提供程序”。
  3. 在 RDMA 配置选项屏幕上,选择“启用跨 IP 子网的 RDMA 路由”(如果需要)。请注意,在基础驱动程序安装过程中,即使未选择用户模式 RDMA,此选项仍会显示,因为此选项也适用于网络直接内核功能。
  4. 如果 Windows 防火墙已安装,并处于活动状态,则选择“在 Windows 防火墙中创建一条英特尔® 以太网 RDMA 端口映射服务规则”,并选择要对其应用该规则的网络。

    注:如果 Windows 防火墙被禁用,或者您使用的是第三方防火墙,您将需要手动添加此规则。

  5. 继续安装驱动程序和软件。

RDMA 网络直接内核 (NDK)

RDMA 网络直接内核(NDK)功能包含在英特尔基础网络驱动程序中,并不需要安装额外的功能。

跨 IP 子网的 RDMA 路由

如果你想跨子网允许 NDK 的 RDMA 功能,您需要在基础驱动程序安装过程中在 RDMA 配置选项屏幕上选择“启用跨 IP 子网的 RDMA 路由”。

在 Microsoft Windows Server 操作系统上启用优先级流量控制 (PFC)

为避免因丢弃数据包导致的性能下降,请在所有网络接口和交换机上启用优先级流量控制 (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 操作

您可以使用以下 Microsoft* PowerShell* 命令检查 RDMA 是否在网络接口中启用:

Get-NetAdapterRDMA

使用以下的 PowerShell 命令检查网络接口是否与 RDMA 兼容,以及多通道是否已启用:

Get-SmbClientNetworkInterface

使用以下命令 PowerShell 命令检查网络直接是否已在操作系统中启用:

Get-NetOffloadGlobalSetting | Select NetworkDirect

使用 netstat 以确保每个具备 RDMA 功能的网络接口在端口 445 上有一个侦听器。(支持 RDMA 的 Windows 客户端操作系统可能不标明侦听器)。例如:

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

适用于虚拟化环境的 RDMA

要在连接到 VMSwitch 的虚拟适配器上启用 RDMA 功能,SRIOV(单根 IO 虚拟化)和 VMQ(虚拟机队列)高级属性必须在每个端口上启用。在某些情况下,这些设置可能会默认禁用。可以在“适配器属性”对话框的“高级”选项卡中手动设置这些选项,也可以使用以下 Powershell 命令:

Set-NetAdapterAdvancedProperty -Name <nic_name> -RegistryKeyword *SRIOV -RegistryValue 1

Set-NetAdapterAdvancedProperty -Name <nic_name> -RegistryKeyword *VMQ -RegistryValue 1

配置 RDMA 来宾支持(NDK 模式 3)

NDK 模式 3 允许内核模式 Windows 组件在 Hyper-V 来宾分区中使用 RDMA 功能。要在英特尔以太网设备上启用 NDK 模式 3,请执行以下操作:

  1. 在系统的 BIOS 或 UEFI 中启用 SR-IOV。
  2. 在设备上启用 SR-IOV 高级设置。
  3. 要在与设备绑定的 VMSwitch 上启用 SR-IOV,对同一个设备上的所有物理功能执行以下操作:
    New-VMSwitch -Name <switch_name> -NetAdapterName <device_name>
    -EnableIov $true
  4. 通过设置“RdmaMaxVfsEnabled”高级设置来配置设备上的 RDMA 虚函数 (VF) 的数目。所有物理函数都必须设置为相同的值。该值是在整个设备中同一时间内具有 RDMA 能力的 VF 的最大数目。启用更多的 VF 将限制来自物理函数 (PF) 和其他 VF 的 RDMA 资源。
    Set-NetAdapterAdvancedProperty -Name <device_name> -RegistryKeyword RdmaMaxVfsEnabled -RegistryValue <Value: 0 - 32>
  5. 禁用主机上的所有 PF 适配器并重新予以启用。对于更改注册表关键字 “RdmaMaxVfsEnabled”,或者创建或销毁 VMSwitch,这是必需的。
    Get-NetAdapterRdma | Disable-NetAdapter
    Get-NetAdapterRdma | Enable-NetAdapter
  6. 为需要 RDMA VF 支持的 VM 创建 VM 网络适器。
    Add-VMNetworkAdapter -VMName <vm_name> -VMNetworkAdapterName <device_name> -SwitchName <switch_name>
  7. 如果计划在来宾分区上使用 Microsoft Windows 10 Creators Update (RS2) 或更高版本,则在主机上输入以下命令来设置 VM 网络适配器上的 RDMA 重量:
    Set-VMNetworkAdapterRdma -VMName <vm_name> -VMNetworkAdapterName <device_name> -RdmaWeight 100
  8. 在 VM 网络适配器上设置 SR-IOV 权重(注:在将 RdmaWeight 设置为 0 之前,必须先将 SR-IOV 权重设置为 0):
    Set-VMNetworkAdapter -VMName <vm_name> -VMNetworkAdapterName <device_name> -IovWeight 100
  9. 在 VM 中使用 PROSET 安装程序安装 VF 网络适配器。
  10. 使用 VM 中的 PowerShell 在 VF 驱动程序和 Hyper-V 网络适配器上启用 RDMA:
    Set-NetAdapterAdvancedProperty -Name <device_name> -RegistryKeyword RdmaVfEnabled -RegistryValue 1
    Get-NetAdapterRdma | Enable-NetAdapterRdma

适用于 NDK 的 RDMA 功能,如 SMB 直接(服务器消息块)等

NDK 允许 Windows 组件(如 SMB 直接存储)使用 RDMA 功能。

测试 NDK:带 DiskSPD 的 Microsoft* Windows* SMB 直接

本节概述了我们推荐的在 Microsoft windows* 操作系统上测试适用于英特尔以太网功能和性能的 RDMA 的方法。

注:由于 SMB 直接是存储工作负载,因此基准测试的性能可能仅限于存储设备的速度,而不是被测试的网络接口。英特尔建议尽可能使用最快的存储,以对所测试的网络设备的真实功能进行测试。

测试说明:

  1. 设置和连接至少两台运行受支持的 Microsoft* Windows* 服务器操作系统的服务器,每台服务器至少有一个兼容 RDMA 的英特尔® 以太网设备。
  2. 在指定为 SMB 服务器的系统上设置一个 SMB 共享。注:基准测试的性能可能仅限于存储设备的速度,而不是被测试的网络接口。存储的设置不在本文的范围之内。您可以使用以下的 PowerShell 命令:
    New-SmbShare -Name <SMBsharename> -Path <SMBsharefilepath> -FullAccess <domainname>\Administrator,Everyone

    例如:
    New-SmbShare -Name RAMDISKShare -Path R:\RAMDISK -FullAccess group\Administrator,Everyone

  3. 从此处下载并安装 Diskspd Microsoft 实用程序: https://gallery.technet.microsoft.com/DiskSpd-a-robust-storage-6cd2f223
  4. 使用 CMD 或 Powershell,cd 到 DiskSpd 文件夹并运行测试。(参考 Diskspd 文档以了解关于参数的更多信息)

    例如:将块大小设置为 4K,运行测试 60 秒钟,禁用所有硬件和软件缓存,测量和显示延迟统计数据,利用 16 个重叠的 IO 和 16 个线程每目标,随机 0% 写入和 100% 读取,并在以下位置创建一个 10GB 的测试文件:“\\<SMBserverX722IP>\<SMBsharename>\test.dat” :
    .\diskspd.exe -b4K -d60 -h -L -o16 -t16 -r -w0 -c10G \\<SMBserverX722IP>\<SMBsharename>\test.dat

  5. 确认 RDMA 通信正在使用“RDMA 活动”和“SMB 直接连接”之类的性能计数器。参考 Microsoft 文档以了解更多细节。

客户支持

法律声明 / 免责声明

版权所有 © 2019 - 2020 英特尔公司。保留所有权利。

英特尔公司对本文档中的错误和遗漏不负责任。英特尔公司对更新本文档中的信息不作任何承诺。

英特尔是英特尔公司在美国和/或其它国家(地区)的商标。

*文中涉及的其它名称及商标属于各自所有者资产。

本软件根据许可提供,仅允许按照许可条款使用或复制。本手册中的信息仅供参考,可能随时变更而不另行通知,并且不得将其视为英特尔公司的承诺。对于本文或提供的与本文有关的任何软件中可能出现的任何错误或不准确之处,英特尔公司概不承担任何责任或义务。除非许可证允许,在未获得英特尔公司明确的书面同意前提下,不得以任何形式或任何手段复制或传输本文档的任何部分,也不得将其存储到检索系统中。