延续上篇RoCE网络的介绍,我们知道承载ROCEv2流量必须有一张无损网络。
本章主要介绍在以太网环境部署无损网络的关键点。
首先是QoS,包含流分类和队列调度两部分。
流分类:在网络接入设备(TOR)配置if-match类的语句,根据报文的特征(五元组、vlan等)打上相应的标记(802.1p、DSCP)。当然如果也可以事先规划好终端侧在发送特定流量时打上相应标记,这样在网络接入侧就省去了流分类环节。
队列调度:出向时,将不同标记的流量放到不同队列,通常信令类流量绝对优先,ROCEv2和普通流量加权重轮询调度,也就是SP+WRR。
以上做完可以保证ROCEv2流量可以和普通流量区分开。
如下图:ROCEv2放在Q5,普通流放在Q1,权重各是50%,这样在信令优先转发后,ROCEv2和普通流会按1:1比例轮询转发。
然后是PFC
可以在接收方拥塞时基于队列做反压。我们一般会在ROCEv2的队列配置PFC,普通流量的队列默认不设置。
这样在链路拥塞时,ROCEv2的队列上游受到反压降低流速不会丢包,而普通流量队列则会丢包。
下图中Spine接口的Q5队列是启用了PFC的,
当链路拥塞时,Spine反压Leaf减少发包量避免Q5队列丢包,Q1因为没有FPC则会丢包。
最后是ECN
发送端发送ECN标记的包,中间网络设备触发拥塞阈值时会将ECN置位,接收端收到置位ECN时会发送CNP通知发送端 , 发送端根据DCQCN等算法调整发送速率。
ECN部署时也可以基于队列只在ROCEv2队列部署,
另外在VxLAN这样的overlay的网络中,我们必须还要考虑到内外层报文ECN的一致性,例如:Spine链路拥塞时ECN置位也只是在外层报文, 这就要求Leaf到接收端时先要将外层的ECN状态同步到内层报文,然后再剥离外层报文送到接收端侧。这样接收端才能感知到网络中链路拥塞。
如下图,拥塞时内外层的ECN是一致的。
最后,很多时候无损网络部署时会将PFC和ECN同时部署,考虑到PFC可能的死锁等问题,一般发生拥塞时会首先触发ECN,使终端主动降速。