基于融合以太网的 RDMA - RoCE

RoCE 使您能够使用 RDMA 通过以太网网络而不是使用主机 CPU 来写入计算或存储元件。 RoCE 依赖 ECNPFC 运行。 Cumulus Linux 支持可以为 RoCE 环境启用无损以太网的功能。

虽然 Cumulus Linux 可以支持 RoCE 环境,但终端主机必须支持 RoCE 协议。

RoCE 帮助您获得融合网络,其中所有服务都在以太网基础设施上运行,包括 Infiniband 应用程序。

默认 RoCE 配置

下表显示了有损和无损模式的默认 RoCE 配置。

配置有损模式无损模式
端口信任模式
端口交换机优先级到流量类映射
  • 交换机优先级 3 到流量类 3 (RoCE)
  • 交换机优先级 6 到流量类 6 (CNP)
  • 其他交换机优先级到流量类 0
端口 ETS
  • 流量类 6 (CNP) - 严格
  • 流量类 3 (RoCE) - WRR 50%
  • 流量类 0(其他流量)- WRR 50%
端口 ECN 绝对阈值为流量类 3 (RoCE) 的 1501500 字节
LLDP 和应用程序 TLV (RoCE)
(UDP,协议:4791,优先级:3)
在交换机优先级 3 (RoCE) 上启用 PFC
交换机优先级 3 分配给 RoCE 无损流量池

RoCE 无损(带有 PFC 和 ECN)

RoCE 在融合以太网上使用 Infiniband (IB) 协议。 IB 全局路由标头直接位于以太网标头之上。 无损以太网层逐跳处理拥塞。

要启用 RoCE 无损

cumulus@switch:~$ nv set qos roce
cumulus@switch:~$ nv config apply

NVUE 默认为 RoCE 无损。 命令 nv set qos rocenv set qos roce mode lossless 是等效的。

如果您启用 roce mode lossy,则配置不带 modenv set qos roce 不会更改 RoCE 模式。 要更改为无损模式,您必须使用 nv set qos roce mode lossless 命令配置无损模式。

链路暂停是提供无损以太网的另一种方法;但是,PFC 是首选方法。 PFC 允许更精细的控制,通过暂停给定 CoS 组的流量而不是整个链路。

RoCE 有损(带有 ECN)

RoCEv2 需要流控制来实现无损以太网。 RoCEv2 在 UDP 上使用 Infiniband (IB) 传输协议。 IB 传输协议包括端到端可靠的交付机制,并具有自己的发送方通知机制。

RoCEv2 拥塞管理使用 RFC 3168 来向接收方发出经历拥塞的信号。 接收方生成定向到数据包源的 RoCEv2 拥塞通知数据包。

要启用 RoCE 有损

cumulus@switch:~$ nv set qos roce mode lossy
cumulus@switch:~$ nv config apply

单个共享缓冲区池

默认情况下,Cumulus Linux 在入口和出口上将有损和无损流量分离到不同的专用缓冲区池中。 您可以将交换机配置为在同一入口缓冲区池上组合有损和无损流量,以便更好地吸收无损流量的负载。

要启用单个共享缓冲区池模式

cumulus@switch:~$ nv set qos roce mode lossless-single-ipool
cumulus@switch:~$ nv config apply

要禁用单个共享缓冲区池模式并使用默认模式(无损),请运行 nv unset qos roce mode lossless-single-ipool 命令。

删除 RoCE 配置

要删除 RoCE 配置

cumulus@switch:~$ nv unset qos roce
cumulus@switch:~$ nv config apply

验证 RoCE 配置

您可以使用 NVUE nv show 命令验证 RoCE 配置。

要显示有关配置的缓冲区、利用率和 DSCP 标记的详细信息,请运行 nv show qos roce 命令

cumulus@switch:mgmt:~$ nv show qos roce
                    operational            applied
------------------  ---------------------  ---------------------
enable                                     on
mode                lossless-single-ipool  lossless-single-ipool
pfc
  pfc-priority      3
  rx-enabled        enabled
  tx-enabled        enabled
  cable-length      100
congestion-control
  congestion-mode   ECN
  enabled-tc        0,3
  min-threshold     146.48 KB
  max-threshold     1.43 MB
  probability       100
trust
  trust-mode        pcp,dscp
lldp-app-tlv
  priority          3
  protocol-id       4791
  selector          UDP
RoCE PCP/DSCP->SP mapping configurations
===========================================
       pcp  dscp                     switch-prio
    -  ---  -----------------------  -----------
    0  0    0,1,2,3,4,5,6,7          0
    1  1    8,9,10,11,12,13,14,15    1
    2  2    16,17,18,19,20,21,22,23  2
    3  3    24,25,26,27,28,29,30,31  3
    4  4    32,33,34,35,36,37,38,39  4
    5  5    40,41,42,43,44,45,46,47  5
    6  6    48,49,50,51,52,53,54,55  6
    7  7    56,57,58,59,60,61,62,63  7
RoCE SP->TC mapping and ETS configurations
=============================================
       switch-prio  traffic-class  scheduler-weight
    -  -----------  -------------  ----------------
    0  0            0              DWRR-50%
    1  1            0              DWRR-50%
    2  2            0              DWRR-50%
    3  3            3              DWRR-50%
    4  4            0              DWRR-50%
    5  5            0              DWRR-50%
    6  6            6              strict-priority
    7  7            0              DWRR-50%
RoCE pool config
===================
       name                   mode     size  switch-priorities  traffic-class
    -  ---------------------  -------  ----  -----------------  -------------
    0  lossy-default-ingress  Dynamic  100%  0,1,2,3,4,5,6,7    -
    2  lossy-default-egress   Dynamic  100%  -                  0,6
    3  roce-reserved-egress   Dynamic  inf   -                  3
Exception List
=================
No Data

要显示有关单个接口的详细 RoCE 信息,请运行 nv show interface <interface> qos roce status 命令。

cumulus@switch:mgmt:~$ nv show interface swp16 qos roce status
                    operational    applied  description
------------------  -------------  -------  ---------------------------------------------------
congestion-control
  congestion-mode   ecn, absolute           Congestion config mode
  enabled-tc        0,3                     Congestion config enabled Traffic Class
  max-threshold     1.43 MB                 Congestion config max-threshold
  min-threshold     153.00 KB               Congestion config min-threshold
  probability       100                  
lldp-app-tlv                             
  priority          3                    
  protocol-id       4791                 
  selector          UDP
pfc
  pfc-priority      3                       switch-prio on which PFC is enabled
  rx-enabled        yes                     PFC Rx Enabled status
  tx-enabled        yes                     PFC Tx Enabled status
trust
  trust-mode        pcp,dscp                Trust Setting on the port for packet classification
mode                lossless                Roce Mode
 
 
RoCE PCP/DSCP->SP mapping configurations
===========================================
          pcp  dscp  switch-prio
    ----  ---  ----  -----------
    cnp   6    48    6
    roce  3    26    3
 
 
RoCE SP->TC mapping and ETS configurations
=============================================
          switch-prio  traffic-class  scheduler-weight
    ----  -----------  -------------  ----------------
    cnp   6            6              strict priority
    roce  3            3              dwrr-50%
 
 
RoCE Pool Status
===================
        name                   mode     pool-id  switch-priorities  traffic-class  size      current-usage  max-usage
    --  ---------------------  -------  -------  -----------------  -------------  --------  -------------  ---------
    0   lossy-default-ingress  DYNAMIC  2        0,1,2,4,5,6,7      -              15.16 MB  0 Bytes        16.00 MB
    1   roce-reserved-ingress  DYNAMIC  3        3                  -              15.16 MB  7.30 MB        7.90 MB
    2   lossy-default-egress   DYNAMIC  13       -                  0,6            15.16 MB  0 Bytes        16.01 MB
    3   roce-reserved-egress   DYNAMIC  14       -                  3              inf       7.29 MB        13.47 MB

要显示有关当前缓冲区利用率以及历史 RoCE 字节和数据包计数的详细信息,请运行 nv show interface <interface> qos roce counters 命令

cumulus@switch:mgmt:~$ nv show interface swp16 qos roce counters
                               operational   applied  description
-----------------------------  ------------  -------  ------------------------------------------------------
rx-stats
  rx-non-roce-stats
    buffer-max-usage           144 Bytes              Max Ingress Pool-buffer usage for non-RoCE traffic
    buffer-usage               0 Bytes                Current Ingress Pool-buffer usage for non-RoCE traffic
    no-buffer-discard          55                     Rx buffer discards for non-RoCE traffic
    non-roce-bytes             56.52 MB               non-roce rx bytes
    non-roce-packets           462975                 non-roce rx packets
    pg-max-usage               144 Bytes              Max PG-buffer usage for non-RoCE traffic
    pg-usage                   0 Bytes                Current PG-buffer usage for non-RoCE traffic
  rx-pfc-stats
    pause-duration             0                      Rx PFC pause duration for RoCE traffic
    pause-packets              0                      Rx PFC pause packets for RoCE traffic
  rx-roce-stats
    buffer-max-usage           0 Bytes                Max Ingress Pool-buffer usage for RoCE traffic
    buffer-usage               0 Bytes                Current Ingress Pool-buffer usage for RoCE traffic
    no-buffer-discard          0                      Rx buffer discards for RoCE traffic
    pg-max-usage               0 Bytes                Max PG-buffer usage for RoCE traffic
    pg-usage                   0 Bytes                Current PG-buffer usage for RoCE traffic
    roce-bytes                 0 Bytes                Rx RoCE Bytes
    roce-packets               0                      Rx RoCE Packets
tx-stats
  tx-cnp-stats
    buffer-max-usage           16.02 MB               Max Egress Pool-buffer usage for CNP traffic
    buffer-usage               0 Bytes                Current Egress Pool-buffer usage for CNP traffic
    cnp-bytes                  0 Bytes                Tx CNP Packet Bytes
    cnp-packets                0                      Tx CNP Packets
    tc-max-usage               0 Bytes                Max TC-buffer usage for CNP traffic
    tc-usage                   0 Bytes                Current TC-buffer usage for CNP traffic
    unicast-no-buffer-discard  0                      Tx buffer discards for CNP traffic
  tx-ecn-stats
    ecn-marked-packets         693777677344           Tx ECN marked packets
  tx-pfc-stats
    pause-duration             0                      Tx PFC pause duration for RoCE traffic
    pause-packets              0                      Tx PFC pause packets for RoCE traffic
  tx-roce-stats
    buffer-max-usage           13.47 MB               Max Egress Pool-buffer usage for RoCE traffic
    buffer-usage               7.29 MB                Current Egress Pool-buffer usage for RoCE traffic
    roce-bytes                 92824.38 GB            Tx RoCE Packet bytes
    roce-packets               803785675319           Tx RoCE Packets
    tc-max-usage               16.02 MB               Max TC-buffer usage for RoCE traffic
    tc-usage                   7.29 MB                Current TC-buffer usage for RoCE traffic
    unicast-no-buffer-discard  663060754115           Tx buffer discards for RoCE traffic

要重置 nv show interface <interface> qos roce 命令输出中的计数器,请运行 nv action clear interface <interface> qos roce counters 命令。

更改 RoCE 配置

启用 RoCE 后,您可以使用 NVUE 调整 RoCE 设置。 要将 RoCE 无损模式的内存分配更改为 60%

cumulus@switch:mgmt:~$ nv set qos traffic-pool default-lossy memory-percent 40
cumulus@switch:mgmt:~$ nv set qos traffic-pool roce-lossless memory-percent 60
cumulus@switch:mgmt:~$ nv config apply

要将 RoCE 有损流量池的内存分配更改为 60%,并将交换机优先级 4 重新映射到 RoCE 有损流量

cumulus@switch:mgmt:~$ nv set qos traffic-pool default-lossy switch-priority 0-3,5-7
cumulus@switch:mgmt:~$ nv set qos traffic-pool roce-lossy memory-percent 60
cumulus@switch:mgmt:~$ nv set qos traffic-pool default-lossy memory-percent 40
cumulus@switch:mgmt:~$ nv set qos traffic-pool roce-lossy switch-priority 4
cumulus@switch:mgmt:~$ nv set qos egress-queue-mapping default-global switch-priority 4 traffic-class 3
cumulus@switch:mgmt:~$ nv set qos egress-queue-mapping default-global switch-priority 3 traffic-class 0
cumulus@switch:mgmt:~$ nv set qos mapping default-global trust both
cumulus@switch:mgmt:~$ nv set qos mapping default-global dscp 26 switch-priority 4
cumulus@switch:mgmt:~$ nv config apply

要将 RoCE 无损交换机优先级从交换机优先级 3 更改为交换机优先级 2

cumulus@switch:mgmt:~$ nv set qos pfc default-global switch-priority 2
cumulus@switch:mgmt:~$ nv set qos egress-queue-mapping default-global switch-priority 2 traffic-class 3
cumulus@switch:mgmt:~$ nv set qos egress-queue-mapping default-global switch-priority 3 traffic-class 0
cumulus@switch:mgmt:~$ nv set qos mapping default-global trust both
cumulus@switch:mgmt:~$ nv set qos mapping default-global dscp 26 switch-priority 2

RoCE 简介 - roceinitiative.org