手册下载
SprayLink技术白皮书-6W100-整本手册.pdf (378.03 KB)
SprayLink技术白皮书
Copyright © 2024 新华三技术有限公司 版权所有,保留一切权利。
非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。
除新华三技术有限公司的商标外,本手册中出现的其它公司的商标、产品标识及商品名称,由各自权利人拥有。
本文中的内容为通用性技术信息,某些信息可能不适用于您所购买的产品。
随着数据中心网络技术的进步,RoCE(RDMA over Converged Ethernet,以太网上的远程直接内存访问)技术已经成为现代数据中心网络设计的关键组成部分。RoCE技术通过在以太网基础上实现高效的RDMA(Remote Direct Memory Access,远程直接内存访问)通信,能够显著提高网络传输效率,减少CPU负载,从而提升数据中心处理大规模数据的能力。
然而,RoCE网络在实际应用中面临着大象流(流数少、数据量大、占用带宽大,如业务报文)和老鼠流(流数多、数据量少、对丢包敏感,如RoCE协议报文)共存时负载分担不均和带宽利用率低的问题:
· 相同特征的流量总是选择固定路径,导致大象流集中在某一条或几条链路上,使得一些链路处于空闲状态,而另一些链路则可能拥塞。
· 大象流所走链路负载较大,老鼠流所走链路负载较轻,链路间带宽利用率不均衡。
为了解决以上问题,H3C推出了SprayLink技术方案。
SprayLink是一种端网融合的逐包负载分担方案,通过在网络侧采用逐流负载分担技术处理协议报文,而对业务报文采用Spray逐包负载分担,提升整体链路的带宽利用率。此外,在主机侧进行报文乱序调整,保证数据包的正确性和完整性。SprayLink技术方案有效解决了RoCE网络中负载分担不均和带宽利用率低的问题。
在深入了解SprayLink技术原理之前,本章节将首先介绍SprayLink相关的背景知识。
等价路由(ECMP,Equal-Cost Multi-Path routing)是同一路由协议发现的、目的地址和开销值都相同的多条路由。当到同一目的地的路由中,没有更高优先级的路由时,这几条等价路由均被采纳。在转发去往该目的地的报文时,依次通过各条路径发送,从而实现网络的负载分担。
根据报文的五元组(源/目的IP地址、源/目的端口号、协议号)等判断报文所属的数据流,为同一数据流的报文选择相同的链路进行转发。
图2 逐流负载分担
按照报文到达设备的先后顺序,采用轮询的方式依次为每个报文选择一条链路进行转发。
图3 逐包负载分担
静态负载分担是将数据包的特征字段(比如源MAC地址、目的MAC地址、IP五元组信息等)作为Hash计算因子,以此来确定数据包的转发路径。换言之,具有相同特征字段的数据包将被转发到相同的成员链路,而具有不同特征字段的数据包则可能被发送至不同的成员链路。
静态负载分担的选路结果仅与报文特征绑定,没有考虑负载分担链路中各成员链路的利用率。因此可能导致成员链路的负载分担不均衡。尤其当出现大象流时,选路结果与报文特征绑定的做法可能会加剧某条链路的拥塞,引发时延增加以及丢包等问题。
动态负载分担(DLB,Dynamic Load Balancing)通过引入时间戳、实时负载度量(端口带宽负载、队列大小)因子,在时间和带宽空间两个维度优化了负载分担效果。支持动态负载分担的设备会持续监控链路的负载状态,根据实际情况动态地将报文分配到负载较低的路径上,以实现负载均衡。
链路负载分担是通过Hash算法来实现的。哈希(Hash)算法,也被称为散列算法,是把任意长度的输入通过散列算法变换成固定长度的输出,该输出被称为散列值或哈希值(Hash Value)。这种转换是一种压缩映射,即散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,通过输出值无法得出输入值。
(1) 根据报文的以太网类型选择进行Hash计算的报文域(Field Selection)。
Field Selection在设备上的取值分为A和B两种,聚合端口(LAGs)负载分担使用Field Selection A,等价路由(ECMP)负载分担使用Field Selection B。
(2) Field Selection生成13个Hash Bin(如图5所示),这13个Hash Bin中包含了参与Hash计算的所有报文特征域。
Hash Bin,即哈希桶,是存储报文特征数据的单元,通常为一个数组或链表。
(3) Hash bins根据配置的负载分担Hash算法计算得出Hash结果。(LAGs:Hash A0和Hash A1,ECMP:Hash B0和Hash B1)。
某些特征的流量计算出的Hash结果高位变化少,会出现明显的Hash不均。此时可以通过调整Hash算法、Seed值以及Shift值来改变Hash计算结果。
Hash不均:流量集中到一条或者其中几条路径转发,其他路径分配到较少的流量或者没有流量。
(4) 如图5所示,Hash A0(16bits)、Hash A1(16bits)、Hash B0(16bits)、Hash B1(16bits)、LBN(通过Ingress Port得到,4bits)、Destination Port(7bits)、LBID(Load Balance ID,8bits)结合得到83bits的Hash Key,ECMP和LAGs从83bits中选择子集进行出接口计算。
当前LAGs仅会选取Hash A1、ECMP仅会选取Hash B1参与出接口计算,其余字段置为0。
(5) 通过Offset公式计算出接口。Offset = ((Hash Value & 65535) % (Flowset Group Size + 1)) & 0x3FF。其中Hash Value & 65535是为了保证Hash值在有效取值范围内。& 0x3FF是为了保证出接口编号在有效取值范围内。
· Hash Value:Hash值,由Hash Key通过异或(XOR)或CRC运算得到。
· Flowset Group Size:流组大小,表示等价路由条数或聚合成员端口数。
图5 Hash Key计算方法
SprayLink技术通过在网络侧实现负载分担和在主机侧实现乱序调整,来提高网络性能和数据传输效率。
在RoCE组网中,当RoCE协议报文和数据报文均使用逐流Hash时,由于Hash因子变化有限,Hash不均程度会提高,从而造成部分链路拥塞,增加了时延。同时,由于RoCE协议报文不能乱序,因此需要保证协议报文的Hash结果一致性,即保证RoCE协议报文通过同一条链路转发。
为了解决以上问题,SprayLink方案提出了一种对报文进行区分处理的网络侧负载分担方法:对协议报文进行逐流Hash,而对数据报文则进行逐包Hash。这样可以尽可能地减少数据报文的Hash不均,同时还能保证协议报文的Hash一致性。
传统的ECMP Hash运算在输出选路结果时,并未考虑ECMP成员当前的负载情况。当ECMP成员的流量分配不太理想时,设备无法根据ECMP成员的负载情况及时调整之前错误的ECMP选路结果。
作为一种动态负载分担(DLB)算法,Spray Hash是在传统ECMP Hash运算的基础上增加带宽和队列深度对选路结果的影响,通过定期检测流量来纠正流量不均衡问题:
· 检测:对ECMP成员的流量分支进行定期测量。测量对象:
¡ ECMP成员口发送的字节数量。
¡ ECMP成员入队列单元数量。
将以上各ECMP成员的两组数据分别采用指数加权移动均值(EWMA)计算平均值并进行排序后,结合Hash运算结果,从中选出最优路径。
· 纠正:将流量从负载较重的ECMP成员移动到负载较轻的ECMP成员上。
设备网卡支持自动识别RoCE协议报文和数据报文,并为RoCE协议报文打上Reserved标记后,可以通过如下两种方案实现对RoCE协议报文进行逐流Hash,对数据报文进行逐包Spray Hash。
方案一
(1) 对所有数据流进行ECMP Hash计算,选择的负载分担模式为Spray模式,即采用Spray Hash算法对报文进行逐包负载分担。
(2) 下发一条全局的驱动自定义的负载分担ACL,用于匹配UDP目的端口号为4791、Reserved字段为0的报文(即RoCE协议报文),动作为进行逐流负载分担。未匹配上负载分担ACL的报文仍进行逐包负载分担。
图6 网络侧负载分担(方案一)工作机制示意图
方案二
策略路由存在两种应用方式,用户可根据实际组网需求进行选择:
· 接口级应用:仅指导特定接口接收的所有报文的转发。
· 全局级应用:指导设备上所有接口接收的所有报文的转发。
(1) 对所有数据流进行ECMP Hash计算,采用缺省普通模式(普通模式采用的是RTAG7 Hash算法)进行逐流负载分担。
(2) 定义自定义ACL1,用于匹配UDP目的端口号为4791、Reserved字段为0的RoCE协议报文,动作为允许报文通过。
配置策略路由PBR1,允许匹配上ACL1的报文进行步骤(1)中配置的逐流负载分担。
(3) 定义自定义ACL2(优先级低于ACL1),用于匹配所有的数据报文,动作为允许报文通过。配置策略路由PBR2,允许匹配上ACL2的报文通过Spray逐包负载分担方式转发。
方案对比
若用户希望对设备所有接口接收的报文应用SprayLink网络侧负载分担方案,则建议采用方案一;若仅需对特定接口接收的报文应用SprayLink网络侧负载分担方案,则采用方案二。
SprayLink采用Spray模式的动态逐包负载分担机制转发数据报文,设备基于数据包选取当前等价路由组中负载最轻的路径进行转发。同一个数据流的多个数据包的转发链路可能不同,因此主机侧接收端可能会面临报文乱序的问题。此时,通过接收端设备网卡的报文乱序重组功能对报文进行重新排序,从而保证数据的完整性和准确性。
图8 主机侧乱序调整示意图
如图9所示,在数据中心RoCE网络中,通常会部署多台服务器,这些服务器之间需要进行大量的数据交换。为了提高数据交换的效率和稳定性,可以采用SprayLink端网融合方案,即数据报文使用Spray Hash逐包负载分担并在接收端进行乱序调整,而协议报文因不能乱序,则使用传统的逐流负载分担方式。图9以业务集群1向业务集群2发送报文为例,反方向同理。
图9 SprayLink技术应用典型组网图
