
1、为什么要配置流控
高性能存储系统对于网络的要求非常的严苛,需要低延时、高带宽和零丢包,而流控技术是能够满足这些要求的,因为该技术通常与RMDA技术协同工作。RDMA技术大大降低了延迟和CPU开销。但是,RDMA本身不具备重传机制(或者重传机制非常基础),因此需要底层网络是无损的,流控技术(PFC)正是为此提供了无损网络环境。
Remote Direct Memory
Access,远程直接内存访问(远程直接数据存取),是一种完全由硬件层面执行I/O交换的工作方式,数据交换不经过操作系统CPU,可直接在内存和I/O设备之间进行,节省I/O时间实现业务性能的提升。需要有特殊的网卡硬件支持,通常说的RDMA网卡。
RDMA通常是指infiniband设备网络。随着数据中心硬件的发展,出现了成熟的基于以太网的RDMA技术,RoCE RDMA over Converged
Ethernet 特指基于以太网的RDMA技术。
RoCE两个版本:
RoCE
v1:这个协议是将RDMA数据段封装到以太网数据段内,再加上以太网的头部,因此属于二层数据包,为了对它进行分类的话,只能使用VLAN头部中的PCP域来设置优先级值,因此还需要额外开启VLAN功能。
RoCE
v2:这个协议是将RDMA数据段先封装到UDP数据段内,加上UDP头部,再加上IP头部,最后再加上以太网头部,属于三层数据包,为了对它进行分类的话,既可以使用以太网VLAN中的PCP域,也可以使用IP头部的DSCP域。
2、交换机需要支持流控
交换机是否支持流控配置,可参考官方文档,若文档中明确说明对应型号的交换机同时支持支持DSCP、PFC、ECN,则可判定该交换机支持流控配置。因为无损网络RoCE(RoCEv1/RoCEv2
功能)/RDMA需要设置功能。
DSCP:差分服务代码点,是交换机上做QoS的一种分类策略标准,这种策略可以实现在每个数据包IP头部的服务类别TOS标识字节中,通过编码值来区分数据包的优先级。我们会配置所有存储流量(RoCE流量)为最高队列优先级,保证优先级保证带宽。
CNP:是一种拥塞通知报文,此报文占用带宽很小,当交换机检测到拥塞时会在数据包上进行拥塞标记,然后数据包到达目标,由目标节点向源节点发送cnp报文,通知降低速率。
ECN:显式拥塞通知,对应交换机端配置叫做:使能ECN,交换机会在检测到拥塞时对网络数据包打标记,可以通知客户端降低数据包发送频率,该功能可以用于RoCEv2的拥塞控制。
交换机端的流控配置,根据厂商的不同,配置命令以及实现方式会不同。
3、服务端配置
以下所有配置都写到 rc.local ,保证开机网卡启动后进行自动配置:
网卡开启使用DSCP的流控方式:
mlnx_qos -i <interface> --trust dscp
把所有RoCE流量的DSCP值设置为26对应于tos 106(01101010),在交换机上面需要针对DSCP
26进行对应的设置(对应011010的比特位):
echo 106 > /sys/class/infiniband/<mlx-device>/tc/1/traffic_class
将rdma connection manager的优先级也设置为DSCP 26:
cma_roce_tos -d <mlx-device> -t 106
使ECN报文走TCP协议,保证拥塞发生时ECN报文能可靠到达对端(对应1的比特位):
sysctl -w net.ipv4.tcp_ecn=1
** 开启 DCQCN in priority 3 **
echo 1 > /sys/class/net/<interface>/ecn/roce_np/enable/3
echo 1 > /sys/class/net/<interface>/ecn/roce_rp/enable/3
** 配置 CNP 使用 DSCP over priority 6 **
echo 48 > /sys/class/net/<interface>/ecn/roce_np/cnp_dscp
** 使用 mlnx_qos 工具 **
mlnx_qos -i <interface> --trust=dscp --pfc 0,0,0,1,0,0,1,0
12

被折叠的 条评论
为什么被折叠?



