sigcomm·18 workshop NetCompute
摘要:
背景:数据中心环境,拥塞可感知的负载均衡策略,已有方案:CONGA和HULA。对于MPTCP传输协议,上述负载均衡策略可能导致转发策略的次最优,因为同一MPTCP连接的多个子流可能会指向同一条路径,产生羊群效应。
主要创新点:1)针对目的地址,每个MP-HULA交换机跟踪拥塞信息,选出最优的k条路径,而不是一条最优路径。2)数据平面可编程,叶子交换机支持P4程序,可以识别出同一MPTCP连接的不同子流,然后根据网络拥塞状态为不同子流选择不同的下一跳,这样可以聚合同一条MPTCP流的带宽。
性能测试结果:MP-HULA配合MPTCP的平均流完成时间在负载为50%时,性能是其2.1倍,在负载为80%时,性能是其1.7倍。
简介:
背景:数据中心中90%流量为长流(大于1M),现代操作系统支持MPTCP协议。随着无状态MPTCP服务器负载均衡器发展(Beamer),MPTCP将在数据中心中流行起来。目前数据中心中仍然用ECMP作为选路策略,当MPTCP结合ECMP时,会发生大量的哈希碰撞。Hedera提出动态流调度的集中式解决方案,但时延较高。CONGA和HULA提出分布式解决方案,不存在集中式的时延问题。HULA为flowlet选择最小拥塞的路径,拥塞信息由探针收集,数据平面有P4实现。但CONGA和HULA不能应用MPTCP协议流。
方案解决思路:数据平面负载均衡方案,多路径可感知。MP-HULA交换机可以通过解析MPTCP头部字段,将子流与MPTCP连接关联起来。改进探针机制,探测针对某个目的地址的k个最优下一跳的拥塞信息。将子流分割成flowlet,避免MPTCP流的重排序。MPTCP交换机利用收集到的拥塞信息,到达的MPTCP的子flowlet信息,为其选择合适的下一跳。
方案具体设计:
一个MPTCP连接可以看做是一个套接字连接,可分为多个子连接,每个子连接都有自己的序列号和拥塞窗口,因此可以根据路径拥塞状态自适应。MPTCP可以多个子流在同一路径上传输,使用ECMP+MPTCP的解决方案容易造成哈希碰撞,多条子流会受限于相同的链路瓶颈,导致总的吞吐量下降。MP-HULA的核心思想为:在考虑链路拥塞状态的情况下,以flowlet粒度为同一MPTCP连接的不同子流选择不同的路径,实现负载均衡。
1.怎样识别给定MPTCP的子流,怎样跟踪这些子流,收集拥塞信息
2.怎样将拥塞信息用在flowlet粒度的路由策略上
3.怎样实现探针复制和收集最优k条路径信息,怎样用P4解析探针的处理逻辑
P4处理MPTCP头部:
每条子流都有唯一的端口号和IP地址。在连接建立和子流建立时,TOR交换机需要解析MPTCP协议头部扩展字段,从而获取令牌(MPTCP连接的唯一标识)。在TOR交换机之后,负载均衡器可能会将数据包分散到不同的路径,之后的交换机可能不会收到所有关联子流的信息,所以,将子流与给定MPTCP连接关联起来的任务只能在发送端的Hypervisor或者是基于P4的网卡上进行。
在TOR交换机上存储了MPTCP Association Table(包含每条子流,子流的五元组哈希结果,令牌A,令牌B,子流计数器,子流数,MPTCP连接ID)。
MPTCP子流连接建立过程三次握手:第一次:keyA为64比特的随机数。TOR交换机解析SYN包,计算五元组哈希结果,并作为索引存储在辅助表(Auxiliary Table for keys)中,HASH1,A。第二次:TOR交换机收到收端的ACK包,解析,计算五元组,寻找索引,插入key B。一旦B被插入,则TOR交换机运行外部函数SHA-1生成32比特的令牌A和B(截取64比特Key中的关键比特),插入MPTCP Association Table中(HASH1,A,B,1,1,)。此时辅助表中相应表项删除。此时。Token table中生成新表项,A,HASH1,B,HASH1,用于之后新的子流识别。存在问题,以令牌作为索引可能会存在哈希碰撞的风险,尤其是在来自不同服务器的大量子流通过该TOR交换机时,非常容易引发哈希碰撞,建议流的监测和识别功能在发端的网卡或是hypervisor上。
另外,本方案中还会为每个端口创建一个token表,用另一张表将入端口和端口令牌表关联起来。当新的子流被创建时,该令牌会被使用,用来辨认该连接的MPTCP的ID。
MPTCP建立连接时用到的表当新的子流创建时,发端发送SYN包(包含令牌和随机数nonceA),TOR交换机解析获取令牌,在Token 表中查找(4),更新MPTCP association 表中的子流counter值,计算MPTCP ID。计算方法为用令牌A,B组合成64位ID,存储在表中(5b)。然后将该新子流添加到MPTCP Association表中,sub-flow num表示第几条子流。,sub-flow counter表示中的子流数。为了安全和数据包验证,nonceA和B在建立连接时交换,存储在另外的辅助表中,之后用作生成HMAC A和HMAC B,验证连接是否正确。
多路径子流连接映射:
入口的TOR交换机可以识别不同子流和他们连接ID,但上层交换机,例如汇聚层和核心层,不能够识别。当子流数量大于1时,这时会生成MPTCP ID,此时TOR交换机会将所有的MPTCP包都添加MPTCP头部(包含连接ID号(64位),子流索引(4位)),用于上层交换机唯一的标识该数据包。
逐跳探针处理:
HULA中,探测包中包含TOR交换机ID和一个域,用于存储探测到的链路利用率,继而用该值更新源TOR交换机用于存储最优下一跳以及他的链路利用率的表。MP-HULA中维持K张这样的表,用于存储k个最优的下一跳和对应的链路利用率。本方案的探测包格式与HULA中相同。
探针处理逻辑:交换机收到探测包后,选取探测包中的值与接收该探测包的端口的链路利用率的最大值,继而更新最优K跳表。然后将最大链路利用率的最小值封装到探测包中,从除了接收端口以外的其他端口发送出去。
最优K个下一跳交换机和flowlet表Flowlet 路由:
每个flowlet选择同一连接中没有被分配的最优路径。
路径选择和MPTCP关联:
所有的交换机都是MP-HULA交换机,只有TOR交换机具备添加MPTCP头部和删除该头部的权限,其他层交换机只具备读的权限。每个交换机都要维持三种类型的表,用于为数据包选择合适的下一跳,如上图所示。当只有一条子流时,数据包不添加MPTCP头部,直接选择最优的下一跳。当有多条子流时,flowlet表存储了flowlet五元组哈希结果,以及该flowlet所属的MPTCP子流的信息。然后,结合最优K跳表和MPTCP子流映射表,为其选择合适的下一跳,并将该信息插入flowlet表中。若最后一个hop3也被分配出去,则将其分配到hop1上,循环选择最优下一跳。
MP-HULA用P4实现的可行性:
SHA-1算法外包给了P4的加密加速模块。
解析状态:TOR交换机需要的状态信息可以存储在服务器的可编程网卡上或是Hypervisor上,P4交换机上没有那么大的存储空间。
转发状态:所有flowlet表,连接映射表,最优下一跳表等的大小与解析状态模块是相同数量级的。
交换机处理:连接状态的表只存在于TOR交换机中,转发状态的表存在于所有交换机中。并且在选择下一跳和更新最优K个下一跳表的时候,由于P4交换机中不支持循环,则需要用复杂的if-else语句执行处理逻辑,增加复杂度。
网友评论