RDMA over Commodity Ethernet at scale
rdma trying
RDMA over Commodity Ethernet at scale
改进PFC
过去的PFC基于2层的协议VLAN,在以太网帧中夹带VLAN TAG来表示优先级。这会带来两个问题。
- 必须使用trunk模式的端口。操作系统的一些支持服务比如安装升级命令就很难使用,二数据中心中的自动化管理如他们的PXE就没办法用了。
- 难以转成3层的IP转发而不是继续用mac的二层桥接。3层网络可以有更好的扩展性,监控,公开而且标准等特性。但这将导致在跨子网的时候无法继续使用VLAN。
解决方案:PFC报文不变,在IP报文中新增字段DSCP来取代VLAN TAG,来完成包的优先级的功能。
安全性挑战
RDMA传输活锁 livelock
livelock, 链接一直在传东西,但是实际上完全没成功传过去。
实验: 每次传一个4MB(4000个包),设定每隔256个丢一个包(seq&0xff == 0xff),即丢包率1/256.这个时候假设从0开始传,那个第256个包就会丢,然后需要从0开始重传。然后在256继续丢。
原因: RDMA使用的是go back 0算法来进行重传。因为假设极少丢包,使用goback0可以不需要管理那么多的状态。
解决方法: 改成go back N。从丢掉的那个包开始重传。同样简单,而且不会死锁。
PFC死锁
图片里面S1尝试发送紫色包到S3,黑色包到S5. 而S4打算发送蓝色包到S2. S2和S3挂掉了,S5对应的对口T1.p2拥堵状态。
s1的包经过T0.p0,T0.p2, La.P0,La.P1到达T1.p3, 这个时候T1上S3的MAC地址已经没了,ARP还在,那么就会洪泛这个包。这个时候p3仍然不会删掉紫色包,直到他去到队列头。而黑色包因为拥挤的T1.p2而无法转发过去。因此T1.p3,La.p1,La.p0,T0.p2,To.p0,S1都会被PFC暂停发包。
而S4发的包同样地经过T1.p1,T1.p4, Lb.p1, Lb.p0到达T0.p3,而S2的记录没了,洪泛蓝色包,发现T0.p2无法转发,触发PFC,暂停掉T0.p3,Lb.p0,Lb.p1,T1.p4,T1.p1,S4.
这个时候死循环形成即使S5的包都拿走了,也没办法解决。因为T1.p4包含的紫色包没有释放,T1.p3的紫色包不会被丢弃。因此死锁会持续
主要原因是PFC和ARP的交互。交换机里ARP的记录存活时间是4小时,而MAC表的是5分钟,因此存在一种可能就是ARP表能找到,但MAC表里面没有。默认的行为里,交换机会进行洪泛,来找对应的机器。而如果有port拥挤或者说是被暂停了的话,这个传输路径的端口都会被暂停。就像图里的两条反向路径,互相锁死。即使后来拥挤解除,端口的死锁也已经解不开了。
解决方法: 找到ARP但找不到MAC就丢掉,这样就不需要洪泛来查找,被其他无关端口停住。
(opt)统一存活时间会带来额外的开销,卸载到cpu同理
找不到ARP也会洪泛?
不会,那说明机器就关了,不需要找。。。
NIC PFC暂停帧风暴
起因是网卡接收端流水线出了个bug,但是后来修正了。但是提出了两个预防措施。
NIC PFC暂停帧风暴指的是一个网卡使用PFC暂停了整个网络。
- 网卡端,发现流水线停住一段时间(100ms)就关掉无损模式,不再发出PFC帧,开始丢包。因为他们发现这时网卡一般就不能用了。
- 交换机端,发现有端口无法清空,而且不停进来PFC帧就把端口的无损模式关掉,直到一段时间(200ms)不在收到PFC帧,再打开。因为网卡可能被重置了。
- 一起用也没关系,网卡会丢报的。不会影响网络。
接收端过慢
因为接收端有一个MTT存储vpn2ppn的映射,没命中的时候就需要替换。而他只有2K,默认4KB的页而言只能处理8MB的内存。替换和获取新的虚拟地址都需要时间。接受流水会受到很大的影响。
进而会导致很多的PFC暂停帧出现。只是没有风暴那么严重,但对网络的性能还是会有影响。
缓解办法
- 大页
- 交换机动态buffer共享
RDMA的管理和测量
记录每个时间段的包数量,byte总数,PFC数量等用来监控集群状态。
建立一个RDMA的Pingmesh用来动态监测集群的延迟变化,发512byte的包到交换机和服务器来测。
延迟和带宽
在他们的数据中心上,总体的延迟状态对比,尾延迟大幅降低。
用一个三层的576台服务器来测试带宽,podset和spine之间的带宽能到到2.56Tb/s.而ToR之间贷款为3.0Tb/s这大概是总带宽的60%。(说是因为ECMP的哈希碰撞,不是很懂)
用一个两层的24台服务器来测试,维持每台服务器7Gb/s的带宽,测试集群中的延迟,发现集群的RDMA延迟从99th的50us,99.9th的80us上升到400us和800us。而这里tcp的99th延迟大概是500us。随着带宽增大,延迟会上升。
配置相关
其他主要是一些配置细节,效果很好,问题都避免了。 不是很懂。。。没有实感。
pavilion's blog
图片里面S1尝试发送紫色包到S3,黑色包到S5. 而S4打算发送蓝色包到S2. S2和S3挂掉了,S5对应的对口T1.p2拥堵状态。