数据中心网络的未来:超越TCP的限制与挑战
在最近结束的Netdev 0x16会议上,斯坦福大学教授就数据中心网络的发展方向发表了个人观点。他指出,尽管硬件方面取得了惊人的进步,链接速度已超过100Gbps,并且随着硬件往返时间(RTT)的降低,未来几年还可能会进一步下降。然而,应用程序无法访问原始网络速度,特别是在小消息的延迟和吞吐量方面,与硬件支持的量级相差甚远。
教授认为,问题的根源在于软件网络堆栈的开销。为了充分发挥硬件的潜力,并使这些功能真正适用于应用程序,他建议对数据中心网络进行一些“根本性的改变”。他认为需要做三件事情,但最重要的是更换TCP协议。虽然他承认这并非易事,但他认为如果想要释放硬件的全部潜力,这是唯一可行的方法。
教授表示,他将在很大程度上专注于摆脱TCP,但也需要一个更轻量级的远程过程调用(RPC)框架。此外,他认为在软件中实现传输协议已无意义,因此这些协议最终需要转移到网络接口卡(NIC)中,这需要对NIC架构进行重大更改。
对于数据中心网络,人们可能有不同的目标,但他希望专注于高性能。在大对象传输时,他希望能达到完整的链接速度,这是他所谓的“数据吞吐量”。这在今天的TCP和数据中心网络中已经做得很好。然而,对于短消息,需要低延迟,特别是“低尾延迟”,因此99%或99.9%的消息应该具有极低的往返延迟。原则上,他认为我们应该能够将这个数字降低到10微秒以下,但目前的延迟水平大约差了两个数量级。
对于短消息的延迟,TCP的延迟上升到了毫秒级别。另一个被忽视的衡量标准是短消息的消息吞吐量。硬件应该能够每秒发送1000万到1亿条短消息,这对于大型数据中心应用程序的紧密协作和执行各种组通信操作至关重要。然而,在软件领域,每秒处理一百万条消息几乎是不可能的,我们与这一目标只有一步之遥。
教授重申,目标是始终在应用程序中提供这种性能。这意味着需要跨多个内核进行负载平衡,因为单个内核无法跟上超过10Gbps的速度。然而,负载均衡很难做到完美,因此可能导致热点,影响吞吐量和尾部延迟。这也是他认为传输协议需要移入NIC的部分原因。
另一个隐含的要求是在网络中进行拥塞控制。需要正确管理网络设备中的缓冲区和队列。他认为,如果能够正确地进行负载平衡,核心结构中的拥塞是可以避免的,而这是今天不会发生的事情。“TCP无法正确进行负载平衡”。边缘的拥塞(即到终端主机的下行链路)是不可避免的,因为下行链路容量总是可能被多个发送者超过;但是,如果管理不当,由于缓冲的增加,延迟会增加。
TCP的局限性
TCP是一个了不起的协议,它是在40年前设计的,当时的互联网与今天大不相同。令人惊讶的是,随着网络在这个跨度内的变化,它仍然持续有效。即使在今天,它也适用于广域网,但在设计TCP时并没有考虑到数据中心,“所以不出所料,它不是为数据中心设计的”。教授认为TCP设计的每个主要方面对于数据中心来说都是错误的。“我无法确定任何适合数据中心的TCP。”
他列出了TCP设计的五个主要方面(面向流、面向连接、公平调度、发送方驱动的拥塞控制和有序数据包传递),并表示这些方面在数据中心中都是错误的,他将在谈话中分别讨论每个方面;“我们必须改变所有这五个”。
为了解决TCP的这些限制,必须至少从数据中心中删除大部分TCP;它需要用新的东西取代,虽然不是完全取代。一个候选者是他和其他人一直在研究的Homa传输协议。但是,由于从TCP切换会很困难,因此在RPC框架下添加对Homa或其他一些面向数据中心的传输的支持将通过减少所需的应用程序更改数量来简化过渡。
TCP是面向字节流的,其中每个连接都由一个字节流组成,没有任何消息边界。但是应用程序实际上关心的是消息。接收TCP数据通常在固定大小的块中完成,这些块可以包含多条消息、单个消息的一部分或这些消息的混合。因此,每个应用程序都必须在TCP之上添加自己的消息格式,并为从接收到的块中重新组装消息付出时间和复杂性的代价。
他说,这虽然烦人,但不会妨碍性能。您不能使用TCP进行负载平衡,这是一个性能障碍。您不能将接收到的字节流数据的处理拆分到多个线程,因为线程可能不会收到可以分派的完整消息,并且消息的一部分可能与多个线程共享。试图以某种方式在线程之间以某种方式重新组合消息将是令人担忧的