流控制
优先级流控制 (PFC) IEEE 802.1Qbb 将暂停功能应用于以太网链路上的特定类别的流量。例如,PFC 可以为 RoCE 流量提供无损服务,为标准以太网流量提供尽力而为的服务。PFC 可以为特定类别的以太网流量(使用 IEEE 802.1p 流量类别)提供不同级别的服务。
在 ConnectX-4 及更高版本上配置 PFC
在所需的优先级上启用 PFC
mlnx_qos -i <ethX> --pfc <
0
/1
>,<0
/1
>,<0
/1
>,<0
/1
>,<0
/1
>,<0
/1
>,<0
/1
>,<0
/1
>示例 (优先级=4)
mlnx_qos -i eth1 --pfc
0
,0
,0
,0
,1
,0
,0
,0
创建 VLAN 接口
vconfig add <ethX> <VLAN_ID>
示例 (VLAN_ID=5)
vconfig add eth1
5
设置出口映射
对于以太网流量
vconfig set_egress_map <vlan_einterface> <skprio> <up>
示例 (skprio=3, up=5)
vconfig set_egress_map eth1.
5
3
5
创建 8 个流量类别 (TC)
tc_wrap.py -i <
interface
>在交换机上启用 PFC。
有关如何在各自的交换机上启用 PFC 的信息,请参阅 RDMA/RoCE 解决方案 社区页面中的“交换机 FC/PFC 配置”部分。
使用 LLDP DCBX 配置 PFC
主机上的 PFC 配置
在操作系统中使用 LLDP 工具进行 PFC 自动配置
在主机上启动 lldpad 守护程序。
lldpad -d
或
service lldpad start
将 lldpad 数据包发送到交换机。
lldptool set-lldp -i <ethX> adminStatus=rxtx lldptool -T -i <ethX> -V sysName enableTx=yess lldptool -T -i <ethX> -V portDesc enableTx=yess lldptool -T -i <ethX> -V sysDesc enableTx=yess lldptool -T -i <ethX> -V sysCap enableTx=yess lldptool -T -i <ethX> -V mngAddr enableTx=yess lldptool -T -i <ethX> -V PFC enableTx=yes; lldptool -T -I <ethX> -V CEE-DCBX enableTx=yess
设置 PFC 参数。
对于 CEE 协议,请使用 dcbtool
dcbtool sc <ethX> pfc pfcup:<xxxxxxxx>
示例:
dcbtool sc eth6 pfc pfcup:
01110001
其中
[pfcup:xxxxxxxx]
启用/禁用优先级流控制。从左到右(优先级 0-7)- x 可以等于 0 或 1。1 表示优先级配置为传输优先级暂停。
对于 IEEE 协议,请使用 lldptool
lldptool -T -i <ethX> -V PFC enabled=x,x,x,x,x,x,x,x
示例:
lldptool -T -i eth2 -V PFC enabled=
1
,2
,4
其中
已启用
显示或设置启用 PFC 的优先级。set 属性接受要启用的优先级逗号分隔列表,或字符串 none 以禁用所有优先级。
在固件中使用 LLDP 进行 PFC 自动配置(适用于 mlx5 驱动程序)
在服务器上配置 PFC 和 ETS 有两种方法
本地配置 - 手动配置每台服务器。
远程配置 - 在交换机上配置 PFC 和 ETS,之后交换机将使用 LLDP DCBX TLV 将配置传递给服务器。
使用 mlx5 驱动程序实现远程配置有两种方法
配置适配器固件以启用 DCBX。
配置主机以启用 DCBX。
有关如何在固件中使用 LLDP 自动配置 PFC 的更多信息,请参阅 如何通过 LLDP DCBX 在 ConnectX-4 上自动配置 PFC 和 ETS 社区帖子。
交换机上的 PFC 配置
为了启用 DCBX,应首先启用 LLDP
switch
(config) # lldp show lldp interfaces ethernet remote将 DCBX 添加到每个所需接口的受支持 TLV 列表。
对于 IEEE DCBX:
switch
(config) #interface
1
/1
switch
(configinterface
ethernet1
/1
) # lldp tlv-select dcbx对于 CEE DCBX:
switch
(config) #interface
1
/1
switch
(configinterface
ethernet1
/1
) # lldp tlv-select dcbx-cee[可选] 应用程序优先级可以在交换机上配置,具有所需的以太网类型和优先级。例如,IP 数据包,优先级 1
switch
(config) # dcb application-priority0x8100
1
确保在主机上启用了 PFC(有关在主机上启用 PFC 的信息,请参阅上面的 主机上的 PFC 配置 部分)。启用后,它将在 LLDP TLV 中传递。
在以太网端口上启用具有所需优先级的 PFC。
dcb priority-flow-control enable force dcb priority-flow-control priority <priority> enable
interface
ethernet <port> dcb priority-flow-control mode on force示例 - 在端口 1/1 上启用优先级 3 的 PFC
dcb priority-flow-control enable force dcb priority-flow-control priority
3
enableinterface
ethernet1
/1
dcb priority-flow-control mode on force
优先级计数器
支持每个优先级的多个入口和出口计数器。运行 ethtool -S 以获取完整的端口计数器列表。
ConnectX-4 计数器
Rx 和 Tx 计数器
数据包
字节
八位字节
帧
暂停
暂停帧
暂停持续时间
暂停转换
示例
# ethtool -S eth35 | grep prio4
prio4_rx_octets: 62147780800
prio4_rx_frames: 14885696
prio4_tx_octets: 0
prio4_tx_frames: 0
prio4_rx_pause: 0
prio4_rx_pause_duration: 0
prio4_tx_pause: 26832
prio4_tx_pause_duration: 14508
prio4_rx_pause_transition: 0
仅对于启用 PFC 的优先级,ConnectX-4 中的暂停计数器才通过 ethtool 可见。
PFC 风暴预防
PFC 风暴预防允许在默认模式和自动模式之间切换。
默认情况下, stall 预防超时配置为 8 秒。自动模式将 stall 预防超时设置为 100 毫秒。
可以使用 sysfs 在以下目录中控制该功能:/sys/class/net/eth*/settings/ pfc_stall_prevention
查询 PFC stall 预防模式
cat /sys/
class
/net/eth*/settings/pfc_stall_prevention示例
$ cat /sys/
class
/net/ens6/settings/pfc_stall_preventiondefault
配置 PFC stall 预防模式
echo <option> /sys/
class
/net/<interface
>/settings/pfc_stall_prevention
以下两个计数器已添加到 ethtool -S
tx_pause_storm_warning_events - 当设备 stall 的时间超过预配置的水印时,计数器会增加,从而使调试实用程序能够深入了解当前的设备状态。
tx_pause_storm_error_events - 当设备 stall 的时间超过预配置的超时时间时,暂停传输将被禁用,并且计数器会增加。
无丢包 RQ 功能使驱动程序能够在软件接收队列过载时通知固件。当软件接收队列的处理速度慢于硬件接收队列的处理速度时,就会发生这种情况。
启用此功能后,当接收队列已满时接收到的数据包不会立即丢弃。固件将累积这些数据包,假设新 WQE 的发布将很快恢复。如果在一定时间后未发布接收到的 WQE,则 out_of_buffer 计数器将增加,表明数据包已被丢弃。
此功能默认禁用。为了激活它,请确保还启用了流控制功能。
ethtool --set-priv-flags ens6 dropless_rq on
要获取功能状态,请运行:
ethtool --show-priv-flags DEVNAME
输出示例:
Private flags for
DEVNAME:
rx_cqe_moder : on
rx_cqe_compress: off
sniffer : off
dropless_rq : off
hw_lro : off
要禁用该功能,请运行:
ethtool --set-priv-flags ens6 dropless_rq off