前面,我们介绍了RDMA技术的应用场景和基本机制、通过以太网承载RDMA的RoCE技术,以及如何保证RoCE的传输效率。
让我们再做一个简短的小结:
大规模分布式存储与计算的需求催生了RDMA技术,它可以大幅度提升计算资源效率。但基于IB的RDMA的封闭性以及高成本,使得工程师们设计了RoCE协议,通过以太网进行RDMA传输,并在以太网交换机中引入PFC和ECN,在两端服务器/虚拟机操作系统引入RCM机制,极大降低以太网丢包概率,保障RoCE的传输效率。
但是,前面提到,以太网产生丢包的原因是多方面的,光纤劣化、不合理的QoS队列设置以及交换机本身缓存错误,都有可能造成开启了RoCE各特性仍然产生丢包。
此外,网络中会产生很多所谓的“微突发”(Micro Boost),也就是极小的突发流量,如果造成短时拥塞,触发流量整形,也会大大增加瞬间数据包的延迟,以及抖动现象,这也会降低RoCE的传输速率。
因此,我们需要一种机制,在数据中心中实时监测以太网的丢包、时延和抖动。
熟悉传统网络技术的同学可能会问,在SNMP协议中不是可以采集以太网交换机各个接口的数据包传输速率、收发包数量吗?
但是,SNMP有着一些固有的限制。
首先,SNMP的采样率是比较低的,最高难以超过10秒一次。这会丢失很多信息,譬如时间单位在亚毫秒的微突发。
要知道,目前主流的数据中心交换机芯片的缓存能力在16MB-64MB之间,而服务器到交换机的端口速率为10Gbps/25Gbps,交换机之间互联的速率更是达到了100Gbps。以主流的交换机芯片Trident 3 X5为例:
TD3 X5 (SKU为BCM56873)有80个25G接口,交换机厂商一般开发为48个25G + 8个100G。它的缓存能力为32MB,相当于256Mbit。对于整机的交换能力而言,它只能够缓存256Mb/2000000Mbps = 0.000128秒的数据包。也就是说,在极端的情况下,每个端口产生128微秒的微突发,将使得交换芯片的缓存被写满,而产生丢包。
更为可怕的是,由于交换机对于超出QoS门限的默认行为为尾丢弃(Tail Drop),这种机制会导致所有丢包的TCP均在同一时间发起重传,造成网络的拥塞进一步恶化。
显然,由于SNMP根本无法检测这种亚毫秒级别的微突发,所以也无从诊断丢包原因,并给出解决方案。
我们需要一种新的代替SNMP的网络监测机制,最好是能钻到交换机芯片内部去查看缓存使用量、各端口收发速率、丢包率和转发时延,像精确的医学诊断那样。
事实上,早在2012年,交换机芯片厂商Marvell就提出了一种“包守恒算法”—— iPCA (Packet Conservation Algorithm for Internet ),宣称可以通过特定算法定位网络中的丢包。但由于该机制过于复杂,极少有商用案例。目前,该技术已经濒临淘汰,采用该技术的厂商,绝大多数也被排斥出市场的主流玩家圈子,只能通过非正当的技术以外的竞争手段获取份额。而首先提出该技术的Marvell,也逐渐退出高端交换机芯片市场,只有盒式设备基于降成本考虑而采用。
目前,业界最火热的主流监测技术,叫带内网络遥测(Inband Network Telemetry),缩写为INT。
在下一期中,我们将详解INT的具体实现。