基于融合以太网的 RDMA - RoCE
RoCE 使您能够使用 RDMA 通过以太网网络而不是使用主机 CPU 来写入计算或存储元件。 RoCE 依赖 ECN 和 PFC 运行。 Cumulus Linux 支持可以为 RoCE 环境启用无损以太网的功能。
虽然 Cumulus Linux 可以支持 RoCE 环境,但终端主机必须支持 RoCE 协议。
RoCE 帮助您获得融合网络,其中所有服务都在以太网基础设施上运行,包括 Infiniband 应用程序。
默认 RoCE 配置
下表显示了有损和无损模式的默认 RoCE 配置。
配置 | 有损模式 | 无损模式 |
---|---|---|
端口信任模式 | 是 | 是 |
端口交换机优先级到流量类映射
| 是 | 是 |
端口 ETS
| 是 | 是 |
端口 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 roce
和 nv set qos roce mode lossless
是等效的。
如果您启用 roce mode lossy
,则配置不带 mode
的 nv 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