如何为 VMware ESXi 6.5 及以上版本配置 RoCEv2 无损网络

创建于 2019 年 6 月 9 日,更新于 2020 年 3 月 30 日。本文介绍如何在 NVIDIA Spectrum 交换机(运行 MLNX-OS)上配置基于 PCP 的 QoS 模式的优先级流控制(PFC),以构建支持 RoCE 的无损网络。

文档目录

创建于 2019 年 6 月 9 日

更新于 2020 年 3 月 30 日

简介

本文介绍如何在运行 MLNX-OS 的 NVIDIA Spectrum 交换机上配置基于 PCP 的 QoS 模式的优先级流控制(PFC),以构建支持 RoCE 的无损网络。

本文假设使用 VMware ESXi 6.5/6.7 原生版本及 MLNX-OS 3.6.5000 及以上版本。

参考

硬件与软件要求

  1. 服务器平台需配备基于以下 NVIDIA 技术 HCA 设备 的网卡:

  2. 安装权限:安装需要在目标机器上具有 管理员权限

  3. 设备 ID:最新设备 ID 列表请访问 NVIDIA 网站。

组件概述

RDMA over Converged Ethernet

来自 Wikipedia

RDMA over Converged Ethernet (RoCE) 是一种网络协议,允许通过 以太网 网络进行 远程直接内存访问 (RDMA)。RoCE 有两个版本:RoCE v1 和 RoCE v2。RoCE v1 是一种以太网 链路层 协议,因此允许同一以太网 广播域 内的任意两台主机通信。RoCE v2 是一种 互联网层 协议,意味着 RoCE v2 数据包可以路由。尽管 RoCE 协议受益于 融合以太网 的特性,但它也可以在传统或非融合以太网上使用。

优先级流控制 (PFC)

优先级流控制 (PFC) IEEE 802.1Qbb 将暂停功能应用于以太网链路上的特定流量类别。该机制的目标是在 数据中心桥接 (DCB) 网络中确保拥塞时零丢包,并允许例如将 RoCE 流量优先于 TCP 流量。PFC 可以为特定类别的以太网流量(使用 IEEE 802.1p 流量类别)提供不同级别的服务。

显式拥塞通知 (ECN)

显式拥塞通知 (ECN) 是 互联网协议传输控制协议 的扩展,定义于 RFC 3168 (2001)。ECN 允许在不丢弃数据包的情况下进行端到端的 网络拥塞 通知。ECN 是一个可选功能,可在底层网络基础设施也支持的情况下,在两个启用 ECN 的端点之间使用。

设置概述

设备

  • 2 台 ESXi 6.5/6.7 主机
  • 2 块 ConnectX®-3/ConnectX®-4/ConnectX®-4 Lx/ConnectX®-5 网卡(或任意组合)
  • 1 台 NVIDIA Ethernet Spectrum Switch SN2700 交换机

逻辑设计

1.png

网络交换机配置

如果您不熟悉 NVIDIA 交换机软件,请从 如何开始使用 NVIDIA 交换机 指南开始。

更多信息请参考 MLNX-OS 用户手册,位于 enterprise-support.nvidia.com/s/enterprise-support.nvidia.com/s/ → 交换机

第一步,请将交换机操作系统更新到最新的 ONYX OS 软件。请参考社区指南 如何升级 NVIDIA 交换机系统的 MLNX-OS 软件

RoCE 部署有几种行业标准的网络配置。

欢迎参考 RoCE 部署推荐网络配置示例 获取我们的建议和说明。

在我们的部署中,我们将配置网络为无损,并在主机和交换机侧使用 PCP 或 DSCP 基于 QoS 模式。

交换机配置

NVIDIA Onyx 3.8.2004 及以上版本

运行:

交换机控制台

switch (config) #roce lossless

注意: RoCE 功能已自动化,运行 "roce" 命令即可配置运行 RoCE 所需的所有设置(PFC+ECN)。

查看 RoCE 配置:

交换机控制台

show roce

监控 RoCE 计数器:

交换机控制台

show interface ethernet counters roce

MLNX-OS 3.6.5000 至 3.8.2004 版本

请执行以下 5 个步骤:

请按照以下步骤配置交换机:

  1. 确保 交换机上运行 MLNX-OS 3.6.5000 至 3.8.2004 版本

  2. 启用 ECN 标记

注意: 为了与其他流量类别公平共享交换机缓冲区,建议在所有其他流量类别上配置 ECN。

交换机控制台

switch (config) # interface ethernet 1/1-1/32 traffic-class 3 congestion-control ecn

交换机配置

配置 ECN

  1. 启用 ECN

    交换机控制台

    switch (config) # interface ethernet 1/1-1/32 traffic-class 3 congestion-control ecn
    
  2. 设置 ECN 阈值

    交换机控制台

    switch (config) # interface ethernet 1/1-1/32 traffic-class 3 congestion-control ecn minimum-absolute 150 maximum-absolute 1500
    
  3. 创建 RoCE 池并设置 QoS配置 RoCE 的流量池

    交换机控制台

    switch (config) # no advanced buffer management force
    switch (config) # traffic pool roce type lossless
    switch (config) # traffic pool roce memory percent 50.00
    switch (config) # traffic pool roce map switch-priority 3
    
  4. 为 CNP 设置严格优先级,流量类别为 6

    交换机控制台

    switch (config) # interface ethernet 1/1-1/32 traffic-class 6 dcb ets strict
    
  5. 每端口配置

    设置接口的 QoS 信任模式

    仅 PCP – 带标签

    交换机控制台

    switch (config) # interface ethernet 1/1 qos trust L2
    

    仅 DSCP – 非标签 IP 帧

    交换机控制台

    switch (config) # interface ethernet 1/1 qos trust L3
    

    非标签使用 DSCP,带标签使用 PCP

    交换机控制台

    switch (config) # interface ethernet 1/1-1/32 qos trust both
    

    配置交换机端口

    交换机控制台

    switch (config) # interface ethernet 1/1-1/32 switchport mode trunk
    switch (config) # interface ethernet 1/1-1/32 switchport trunk allowed-vlan [vlan-id]
    

    交换机配置示例

    以下是我们使用的交换机配置,可作为参考,接口 QoS 信任模式为仅 DSCP(默认)。您可以复制/粘贴到交换机,但请注意这是干净的交换机配置,可能会破坏您现有的配置。

    swx-vmw-1-1 [standalone: master] > enable
    swx-wmv-1-1 [standalone: master] # configure terminal
    swx-vmw-1-1 [standalone: master] (config) # show running-config
    
    ##
    ## Running database "initial"
    ## Generated at 2018/03/10 09:38:38 +0000
    ## Hostname: swx-vmw-1-1
    ##
    ##
    ## Running-config temporary prefix mode setting
    ##
    no cli default prefix-modes enable
    ##
    ## License keys
    ##
    license install LK2-RESTRICTED_CMDS_GEN2-44T1-4H83-RWA5-G423-GY7U-8A60-E0AH-ABCD
    ##
    ## Interface Ethernet buffer configuration
    ##
    traffic pool roce type lossless
    traffic pool roce memory percent 50.00
    traffic pool roce map switch-priority 3
    ##
    ## QoS switch configuration
    ##
    interface ethernet 1/1-1/32 qos trust L3
    interface ethernet 1/1-1/32 traffic-class 3 congestion-control ecn minimum-absolute 150 maximum-absolute 1500
    ##
    ## DCBX ETS configuration
    ##
    interface ethernet 1/1-1/32 traffic-class 6 dcb ets strict
    ##
    ## Other IP configuration
    ##
    hostname swx-vmw-1-1
    ##
    ## AAA remote server configuration
    ##
    # ldap bind-password ********
    # radius-server key ********
    # tacacs-server key ********
    ##
    ## Network management configuration
    ##
    # web proxy auth basic password ********
    ##
    ## X.509 certificates configuration
    ##
    #
    # Certificate name system-self-signed, ID 108bb9eb3e99edff47fc86e71cba530b6a6b8991
    # (public-cert config omitted since private-key config is hidden)
    ##
    ## Persistent prefix mode setting
    ##
    cli default prefix-modes enable
    

驱动配置

配置 PFC

在 NVIDIA 驱动(mnlx 驱动)上配置 PFC。请注意,不同的网卡对应不同的驱动。在本示例中,我们将在接收(Rx)和发送(Tx)方向上启用 PFC,优先级为 3

以下命令在主机上启用 PFC。参数 "pfctx"(PFC TX)和 "pfcrx"(PFC RX)按主机指定。如果服务器上有多个网卡,所有端口都必须启用 PFC。

该值是 8 位位图 = 8 个优先级。

要在服务器上运行多种流量类型,只需开启一个优先级(例如优先级 3),应配置参数 "0x08" = 00001000b(二进制)。只有第 4 位开启(从优先级 0,1,2,3 开始 -> 第 4 位)。

注意: 启用 PFC 后,全局暂停将操作上禁用,无论全局暂停流控制如何配置。 "pfctx" 和 "pfcrx" 的值必须相同。 如果配置了 SR-IOV,您需要在驱动中重新启用 SR-IOV,并设置 max_vfs 模块参数。 我们建议仅在特定优先级上启用无损应用。

将信任模式配置为 DSCP 并启用 PFC,可以基于 L3 DSCP 字段而非 L2 PCP 字段运行 PFC。这将消除以太网头部中 VLAN 的需求。

信任状态有两个值:

  • pcp - 将 pcp 映射到优先级。默认映射为 1 对 1。
  • dscp - 将 dscp 映射到优先级。默认映射为 priority[dscp] = dscp>>3。

默认信任状态为 "pcp"。

示例:

ConnectX-3 指定(将 PCP 映射到优先级):

ESXi 控制台

~ esxcli system module parameters set -m nmlx4_en -p "pfctx=0x08 pfcrx=0x08 trust_state=1 max_vfs=4"

ConnectX-4/5 指定(将 DSCP 映射到优先级):

ESXi 控制台

~ esxcli system module parameters set -m nmlx5_core -p "pfctx=0x08 pfcrx=0x08 trust_state=2 max_vfs=4"

要读取当前模块配置,运行:

ConnectX-3

ESXi 控制台

~ esxcli system module parameters list -m nmlx4_en

ConnectX-4/5

ESXi 控制台

~ esxcli system module parameters list -m nmlx5_core
...
pfcrx int 0x08 Priority based Flow Control policy on RX.
Values : 0-255
It's 8 bits bit mask, each bit indicates priority [0-7]. Bit value:
1 - respect incoming pause frames on the specified priority.
0 - ignore incoming pause frames on the specified priority.
Notes: Must be equal to pfctx.
Default: 0
pfctx int 0x08 Priority based Flow Control policy on TX.
Values : 0-255
It's 8 bits bit mask, each bit indicates priority [0-7]. Bit value:
1 - respect incoming pause frames on the specified priority.
0 - ignore incoming pause frames on the specified priority.
Notes: Must be equal to pfcrx.
Default: 0
...

配置全局 RDMA PCP(L2 出口优先级)和 DSCP 值(L3 可选)

RDMA 服务级别(sl)字段用于地址句柄的用户优先级,并映射到 VLAN 标签的 PCP 部分。

地址句柄的流量类别(tc)字段用于 GRH 头部,并映射到 IP 头部的 DSCP 位。

您可以强制设置 PCP 和 DSCP 值(仅适用于 RDMA 流量)。

RDMA 驱动(nmlx5_rdma)通过以下模块参数支持 PCP(sl)和 DSCP(traffic class)的全局设置:

  1. pcp_force:值:(-1) - 7,默认:(-1 = 关闭) 指定的值将设置为所有出站 RoCE 流量的 PCP,无论 sl 值如何。此参数

如何为 VMware ESXi 6.5 及以上版本配置 RoCEv2 无损网络

简介

本文档介绍如何配置基于 NVIDIA Spectrum 交换机(运行 MLNX-OS)和 ConnectX 网卡的 RoCEv2 无损网络。

配置 PFC

交换机配置

登录到交换机控制台。

交换机控制台

switch (config) # interface ethernet 1/1 priority-flow-control mode on
switch (config) # interface ethernet 1/1 priority-flow-control priority 3
switch (config) # interface ethernet 1/1 dcb priority 3

网卡配置

配置 PCP

pcp_force:值:(-1) - 7,默认:(-1 = 关闭)

指定的值将设置为所有出站 RoCE 流量的 PCP 值(3 位)。

dscp_to_pcp 启用时,此参数无法启用。

dscp_force:值:(-1) - 63,默认:(-1 = 关闭)

指定的值将设置为所有出站 RoCE 流量的服务类型(ToS)的 DSCP 部分(6 位),无论指定的流量类别如何。

dscp_to_pcp:值 0(关闭)- 1(开启),默认:0

启用时,DSCP 值的高三位将被视为所有出站 RoCE 流量的 PCP。如果未使用 dscp_force,则用于映射的 DSCP 值取自 GRH 头中的流量类别字段。否则,取 dscp_force 中设置的值。

pcp_force 启用时,此参数无法启用。

以 root 权限登录 ESXi vSphere 命令行界面

例如,强制 PCP 值 以值 3 出站:

ConnectX-3

ESXi 控制台

# esxcli system module parameters set -m nmlx4_rdma -p "pcp_force=3"

ConnectX-4/5

ESXi 控制台

# esxcli system module parameters set -m nmlx5_rdma -p "pcp_force=3"

Name Type Value Description
----------------- ---- ----- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------
dscp_force int DSCP value to force on outgoing RoCE traffic.
Values : -1 - Disabled, 0-63 - DSCP value to force
Default: -1
dscp_to_pcp int Map the three MSBs of DSCP value to PCP on outgoing RoCE traffic.
Cannot be enabled when pcp_force is active.
Values : 0 - Disabled, 1 - Enabled
Default: 0
enable_nmlx_debug int Enable debug prints.
Values : 1 - enabled, 0 - disabled
Default: 0
pcp_force int 3 PCP value to force on outgoing RoCE traffic.
Cannot be active when dscp_to_pcp is enabled.
Values : -1 - Disabled, 0-7 - PCP value to force
Default: -1

例如,配置 DSCP(可选)

ConnectX-3

ESXi 控制台

# esxcli system module parameters set -m nmlx4_rdma -p "dscp_force=26"

ConnectX-4/5

ESXi 控制台

# esxcli system module parameters set -m nmlx5_rdma -p "dscp_force=26"

配置 ECN

使用默认参数 启用 ECN

  1. 下载 最新的 NVIDIA 数据包捕获工具 for ESXi 6.5/6.7。

    2.png

  2. 使用 SCP 或其他文件传输方法将驱动程序 复制 到所需的 ESXi 主机。

  3. 以 root 权限登录 ESXi vSphere 命令行界面

  4. 进入维护模式 ESXi 主机。

  5. 在 ESXi 主机上 安装数据包捕获工具

    示例:

    ESXi 控制台

    ~ esxcli software vib install -d /tmp/MLNX-NATIVE-NMLXCLI_1.17.13.8-10EM-670.0.0.7535516.zip
    
  6. 重启 ESXi 服务器。

  7. 检查 物理网络接口状态。

    ESXi 控制台

    ~ esxcli network nic list
    
    Name PCI Device Driver Admin Status Link Status Speed Duplex MAC Address MTU Description
    ------ ------------ ---------- ------------ ----------- ------ ------ ----------------- ---- ----------------------------------------------------
    vmnic0 0000:81:00.0 igbn Up Up 1000 Full 0c:c4:7a:e3:5c:8c 1500 Intel Corporation I350 Gigabit Network Connection
    vmnic1 0000:81:00.1 igbn Up Down 0 Half 0c:c4:7a:e3:5c:8d 1500 Intel Corporation I350 Gigabit Network Connection
    ...
    vmnic4 0000:02:00.1 nmlx5_core Up Down 0 Half ec:0d:9a:8c:c7:97 1500 Mellanox Technologies MT28800 Family [ConnectX-5 Ex]
    vmnic5 0000:02:00.0 nmlx5_core Up Up 100000 Full ec:0d:9a:8c:c7:96 1500 Mellanox Technologies MT28800 Family [ConnectX-5 Ex]
    
  8. 在相关设备上 启用 ECN

    ConnectX-3/4/5

    ESXi 控制台

    ~ esxcli mellanox uplink ecn rRoceNp enable -u vmnic5
    ~ esxcli mellanox uplink ecn rRoceRp enable -u vmnic5
    
  9. 退出维护模式 ESXi 主机。

ESXi VLAN 配置

下图描述了两台机器。两者都将 vmnic5 作为网卡上行链路。

3.jpg

要将 流量的 VLAN ID 设置为 100,请执行以下操作:

  1. 编辑 分布式 端口组设置
  2. 从左侧面板选择 "VLAN"。
  3. VLAN 类型 设置为 "VLAN"
  4. VLAN 标签 设置为 "100"。
  5. 点击 "确定"。

更多信息请参考 VMware 文档。

验证

以 root 权限登录 ESXi vSphere 命令行界面

为了验证,当您使用 NVIDIA 交换机时,可以降低一个交换机端口的速度,强制由于带宽不足而使用 PFC 暂停帧:

交换机控制台

switch (config) # interface ethernet 1/1 shutdown
switch (config) # interface ethernet 1/1 speed 10000
switch (config) # no interface ethernet 1/1 shutdown

注意: 您可以使用其他方法创建拥塞以强制启用 PFC。例如,您可以使用两台主机向第三台主机发送流量,这是一个简单的配置。 在优先级 3 上运行主机之间的流量。 注意: 最终的 PCP 值将由 pcp_force 决定。 注意: 如果未通过 pfctx 和 pfcrx 启用某个优先级的 PFC,则该优先级的 HCA 计数器不会增加,数据将计入优先级 0。

查看 HCA 和交换机在优先级 3 上发送/接收的暂停帧:

# vish -e cat /net/pNics/vmnic5/stats | grep -e "Pause\|PerPrio"

PerPrio[0]
rxPause : 0
txPause : 0
PerPrio[1]
rxPause : 0
txPause : 0
PerPrio[2]
rxPause : 0
txPause : 0
PerPrio[3]
rxPause : 3348591
txPause : 12217
PerPrio[4]
rxPause : 0
txPause : 0
PerPrio[5]
rxPause : 0
txPause : 0
PerPrio[6]
rxPause : 0
txPause : 0
PerPrio[7]
rxPause : 0
txPause : 0

完成!

作者

BK.jpg Boris KovalevBoris Kovalev 过去几年担任解决方案架构师,专注于 NVIDIA Networking/Mellanox 技术,负责复杂的机器学习、大数据和基于 VMware 的高级云研究与设计。Boris 此前在多家公司担任高级顾问和解决方案架构师超过 20 年,最近在 VMware 工作。他在 NVIDIA 文档网站上撰写了多篇涵盖 VMware、机器学习、Kubernetes 和容器解决方案的参考设计。