RoCEv2
实现RDMA的协议是Infiniti Band协议,是一种非以太类的协议,在实际应用中,组网和互联存在一个很大的问题,而且Infiniti Band交换机价格十分昂贵,为了实现互联,因此需要将Infiniti Band的封装到以太协议中来传输。因此,目前实现RDMA有以下几种协议:
目前应用最广的是RoCEv2,也就是将BTH以上的协议头封装到UDP报文中传输。但UDP是一种不可靠的传输协议,要在不可靠的传输协议上实现可靠传输,需要实现QOS。
QOS
背景
在数据中心当中,主要以下三种流量:
1)存储数据流:要求无丢包;
2)高性能计算流:要求低延迟;
3)以太网流:允许一定的丢包和时延。
由于对数据流的要求不同,传统的数据中心使用三种不同类型的网络承载不同的流。
随着数据中心规模的扩大,运行三种不同类型的网络,并不是经济的解决方案。一种可选的方法是:统一采用以太网承载三种不同类型的流,并定义附加机制,以使以太网能够满足三种不同类型网络的要求。为此,IEEE定义了以下规范:
1)ETS(Enhanced Transmission Selection,增强传输选择):为不同的流量类型提供最小带宽保证,这使多种流量类型可在同一网络中和谐共存;
2)PFC(Priority-based Flow Control,基于优先级的流量控制):工作在L2网络,基于优先级来对不同流量进行点到点的流控,实现在以太网链路上运行多种类型的流量而互不影响;
3)ECN(Explicit Congestion Notification,显示拥塞通知):工作在L3网络,通过对报文 IP 头中 ECN 域的标识,由接收端发送报文告知发送端,发送端降低发送速率,从而实现端到端的拥塞管理,减缓拥塞扩散恶化;
4)DCBX(Data Center Bridging Exchange Protocol,数据中心桥能力交换协议):它是基于LLDP(Link Layer Discovery Protocol)的扩展协议,用于在设备间自动协商并配置PFC、ETS及CN等。
以上四个功能是DCB协议族中定义的解决越来越庞大的数据中心网络所遇到的传统网络无法解决的问题。
因为IB协议最开始工作在IB网络中,是一种无损网络,但在以太网络中丢包却是很常见的,如果丢包,依赖于应用层来发现,会大大降低效率。在RoCE 网络中,需要构建无损以太网保证网络不丢包,因此需要支持以下关键特性:
1)PFC(必选);
2)ECN(必选);
3)DCBX(建议);
4)ETS(可选);
5)DC-QCN(可选)。
PFC
交换机不能因为缓冲区溢出而丢包。为此,RoCE使用PFC(Priority-based Flow Control)进行流控。一旦交换机的port的接收队列超过一定阀值(shreshold)时,就会向对端发送PFC pause frame,通知发送端停止继续发包。一旦接收队列低于另一个阀值时,就会发送一个pause with zero duration,通知发送端恢复发包。
PFC对数据流进行分类(class),不同种类的数据流设置不同的优先级。比如将RoCE的数据流和TCP/IP等其它数据流设置不同的优先级。
对于IP/Ethernet,有2种方式对网络流量分类:VLAN-based PFC和DSCP-based PFC,前者工作在L2网络,后者工作在L3网络,RoCEv1只能使用前者, RoCEv2两种都可以使用。
VLAN-based PFC
在二层网络中,RoCEv1使用VLAN tag的Priority code point (PCP,3 bits)定义了8个优先级队列,每个队列可以单独控制。基于VLAN的PFC机制需要交换机工作在trunk模式。
DSCP-based PFC
IPv4头中的TOS字段在过去有多种定义,现在被重新定义为6 bits的DSCP(Differentiated Services Code Point)和2 bits的ECN(Explicit Congestion Notification)。在三层网络的情况下,PFC既可以使用PCP、也可以使用DSCP,使得不同数据流可以享受到独立的流控制。DSCP的bit2~bit4为优先级。
PFC报文结构
DA:目的 MAC地址,为固定的组播 MAC地址 01:80:c2:00:00:01;
SA:源 MAC地址;
Type:报文类型,为 0x8808;
Data:数据,为 PFCPDU;
FCS:帧检验序列。
PFCPDU不包括pad部分的格式如下:
Control opcode:MAC控制码,占两个字节,对于PFC pause帧,控制码为0x0101;
priority_enable_vector:占两个字节,高字节为0,低字节每个bit分别对应8个优先级,表示后续的time是否有效,1有效,0无效;
time:共8个,每个占两字节,分别表示对应优先级的流量要停止发送的时间,单位为物理层发送512字节数据所需的时间。
PFC存在的问题
l 死锁
当多个交换机之间因微环路等原因同时出现拥塞,各自端口缓存消耗超过阈值,而又相互等待对方释放资源,从而导致所有交换机上的数据流都永久阻塞。在特殊情况下,例如发生链路故障或设备故障时,BGP路由重新收敛期间可能会出现短暂环路,会导致出现一个循环的缓冲区依赖。
l 效率低
因为PFC工作在链路层,需要一级一级反压,效率较低,所以需要更高效的、端到端的流控能力。
l PFC风暴
由于PFC pause是传递的,所以很容易引起PFC风暴。比如,NIC因为bug导致接收缓冲区填满,NIC会一直对外发送pause frame。因此,需要在NIC端和交换机端使用watchdog机制来防止pause storm。
对头阻塞
图a,Flow 1 和 Flow 2 从同一个 Ingress 1 流向不同的 Egress 1 和 2。
图b,Egress 1 触发了 PFC Pause,Ingress 1 暂停发送,Flow 2 并不需要经过 Egress 1,却受其影响也被暂停了。
ECN
RoCE拥塞控制依赖ECN(Explicit Congestion Notification,显式拥塞通知)来运行。ECN最初在RFC 3168中定义,网络设备会在检测到拥塞时,通过在IP头部嵌入一个拥塞指示器和在TCP头部嵌入一个拥塞确认实现。对于支持ECN的路由器,当发生网络拥塞时,会设置IP头部的ECN(2bits)标志位,而接收端会给发送端返回拥塞的通知(echo of the congestion indication),然后发送端降低发送速率。
IP头部TOS字段的低2个bit是ECN标志位:
00 – Non ECN-Capable Transport, Non-ECT
10 – ECN Capable Transport, ECT(0)
01 – ECN Capable Transport, ECT(1)
11 – Congestion Encountered, CE.
如果端点支持ECN,就在数据包中的标志位设置为ECT(0)或者ECT(1),发生拥塞就把标志位设置为CE。
RoCEv2引入了ECN机制来实现拥塞控制,一旦网络发生拥塞,就会通知发送端降低发送速率。
交换过程
RCM的ECN交换过程如下:
1)发送端发送的IP报文标记支持ECN(10);
2)交换机在队列拥塞情况下收到该报文,将ECN字段修改为11并发出,网络中其他交换机将透传;
3)接收端收到ECN为11的报文发现拥塞,正常处理该报文;
4)接收端产生拥塞通告,每ms级发送一个CNP(Congestion Notification Packets)报文,ECN字段为01,要求报文不能被网络丢弃。接收端对同一个QP的多个数据包只发送一个CNP;
5)交换机收到CNP报文后正常转发该报文;
6)发送端收到ECN标记为01的CNP报文,解析CNP后对相应的流(QP)应用速率限制算法。
RoCEv2使用CNP报文来告知发送端拥塞,CNP报文中Base Transport Header (BTH)的FECN标志位用来解释拥塞的意义,其中指定了要降速的QP。
CNP报文结构如下:
PFC与ECN对比
1.PFC工作在二层网络,ECN工作在三层网络;
2.PFC只能点对点的控制发送速率,控制对象是直连的两个端点,通过逐级反压最终到达发送端,而ECN是端到端的,控制对象是发送端;
3.PFC受控制的是8个队列中的某个队列的所有流量,而ECN是某个连接对应的QP;
4.PFC响应速度较快,ECN需要路由器逐条转发,延迟较大。
ETS
多个网络流量共享同一条物理链路,带来了一个问题,在网络繁忙的情况下,如何保证各个网络能够运行正常的最小带宽。为此IEEE引入ETS(Enhanced Transmission Selection,增强传输选择)协议,来对不同网络流量进行带宽分配,保证各个网络正常运行所需的最小带宽。
ETS提供两级调度,分别基于优先级组PG(Priority Group)和优先级队列,如下图所示。接口首先对优先级组进行第一级调度,然后对优先级组的优先级队列进行第二级调度。
第一级调度,将同一类型的流量归入同一优先级组,使得同一类流量能够获得相同的服务等级。用户可通过设置将不同的优先级队列加入到优先级组中。第二级调度提供基于优先级的队列拥塞管理、队列整形、队列拥塞避免。
缺省情况下,在ETS中定义了3个优先级组PG0、PG1和PG15,分别代表是LAN流量、SAN流量和IPC流量。
在IEEE 802.1qaz文档定义了ETS调度方式有如下三种:
1)WRR算法WRR(Weighted Round Robin)
WRR(Weighted Round Robin)是目前一个比较常见的轮循(Round Robin)调度算法,它给每个队列分配一定的权重(weight)。WRR算法在队列之间进行轮流调度,队列权重决定在从该队列取报文出来发送的次数。WRR算法可以保证每个队列都能够得到调度,不会出现低优先级队列被饿死的情况。如果出现某一个队列为空,那马上换到下一个队列调度,这样可以使带宽资源可以得到充分的利用。WRR可以保证每个队列能够至少得到相应权重比例的带宽;当某一个队列没有使用完所分配给他的带宽时,其他队列可以使用这部分带宽,一般用于保证队列的最小带宽。
2)严格优先级算法SP(Strict priority algorithm)
SP总是先从高优先级的队列中取报文出来发送;当高优先级队列中的队列为空时,才从低优先级的队列取报文出来发送。一般情况下,严格优先级算法用于通过将关键业务报文放到高优先级队列,来保证一些关键业务的正常运行 。
3)令牌整形调度算法CBS(Credit-based shaper algorithm)
CBS基于现有令牌桶整形算法模型。当队列中有报文时,往桶放入令牌(速率为idleslope);发包时,从桶中取相应的令牌出来;队列中没有任何报文时,令牌个数设置成0。当令牌个数为非负数时,从队列取报文出来发送;当令牌个数为负数时,不从队列取报文出来发送。
DCB
在数据中心网络当中,典型的存在着两种流量:存储数据流(要求无丢包)和普通数据流(允许一定的丢包和时延)。很显然两种数据流对服务的要求是不同的,因而传统的数据中心也往往会部署两个网络来满足对数据中心的这些需求。这种网络在一定意义上来说是冗余的,会造成资源的浪费,当数据中心规模扩大时,这种方案就变的不可接受了。因此急需一种可以将两种网络统一起来的网络技术。当不考虑上层承载业务,并且考虑以当今最普遍的以太网为基础进行网络融合时,需要考虑的最主要就是不能丢包。为此IEEE定义了DCB(Data Center Bridging)。
DCB = PFC(流控) + ETS(带宽分配)
DCB是IEEE 提出的数据中心桥接技术,主要包含:
1.IEEE 802.1Qbb Priority-based Flow Control(PFC):用于满足两种流量在以太网中共存时,存储流量无丢包,且对其它的流量无影响的要求。
2.IEEE 802.1Qaz Enhanced Transmission Selection(ETS):用于避免一种流量大规模暴发影响其它流量,为不同的流量类型提供最小带宽保证。一种类型流量只有在其它类型流量带宽空闲的情况下,才能占用额外带宽。
DCBX
简介
在数据中心网络融合场景下,为实现无丢包以太网,链路两端的PFC和ETS的参数配置需要保持一致。如果依靠管理员手工配置,不仅工作量庞大而且容易出错。数据中心桥接交换协议DCBX(Data Center Bridging Exchange Protocol)作为一种链路发现协议,能够使链路两端的设备自动发现并交换DCB配置信息,大大减轻了管理员的工作量。
DCBX是基于LLDP(Link Layer Discovery Protocol)的扩展协议,用于在设备间自动协商并配置PFC、ETS及CN等。DCBX协议将需要交互的DCB配置信息封装入链路层发现协议LLDP(Link Layer Discovery Protocol)中的TLV中,由LLDP来进行链路两端设备的DCB配置交换。
DCBX的具体功能包括:
1)发现对端设备的DCB配置信息;
2)发现对端设备的DCB配置错误;
3)配置对端设备的DCB参数。
DCBX能够交换的DCB配置信息如下:
1)ETS的优先级组信息;
2)PFC信息。
交换过程
DCBX交换过程入下图所示:
1)PortA和PortB上分别配置PFC参数,并使能DCBX功能。DCBX模块通知PortA和PortB可以将各自配置的PFC参数封装到LLDP报文中发送给对端;
2)PortA的LLDP模块根据自己的报文发送周期定期向PortB发送携带了DCBX TLV的LLDP报文;
3)PortB接收到LLDP报文后解析出DCBX TLV,将PortA的PFC参数通知给DCBX模块。DCBX模块将PortA的PFC参数和本端配置的PFC参数进行比较,协商一致之后生成配置文件,保证两端配置一致。
DCBX TLV介绍
DCB的信息被封装在特定的TLV中,采用两级结构,TLV格式如下:
TYPE:固定为127;
OUI:IEEE DCBX的OUI为0x0080c2,INTEL DCBX的OUI为0x001b21;
Subtype:子类型,根据OUI的不同,分IEEE DCBX TLV和INTEL DCBX TLV。