数据中心交换机的缓存大小是一个重要的性能指标。虽然缓存可以提高数据交换的效率,但是过大的缓存会导致更长的队列、更高的时延和抖动、更高的成本。因此,不能简单地去扩大缓存。
带宽延迟积BDP是确定合适的内存大小的关键因素之一。
缓存架构分类按照缓冲区的大小,以太网交换机通常分为深缓冲区交换机和浅缓冲区交换机,深缓冲区交换机缓冲区容量高达数GB,与浅缓冲区交换机的几十MB形成鲜明对比。
这种设计上的差异源于应用场景的差异,深缓冲区交换机(或路由器)主要面向路由和广域网场景,RTT时间长,希望能够容纳更多的数据流量,对微突发流量不敏感,但也意味着更高的尾延迟和抖动,这一点与HPC/AI大模型训练、分布式存储等场景的低时延要求显然是相违背的,浅缓冲区交换机在这种场景下更适合,以目前最高端的51.2Tbps(64个800G)的交换机为例,如果RTT时间是3~5微秒, 缓存仅需33MB左右,这是交换机中所需的总缓存,那么这个总的缓存能否被每一个端口充分利用吗?这就取决于交换机(交换芯片)所采用缓存架构。
交换芯片的缓存架构通常分为:完全共享缓存架构和分片报文缓存架构(也称分割缓冲区结构)。
完全共享缓存架构:设备内所有缓存可动态分配至任意端口,实现输入输出端口间无限制共享,大幅提升内存利用率。优化后的文章内容:芯片内部采用分片报文缓存架构,多个小缓存共同构成。物理接口分组,同一组内共享缓存单元,提高效率。不同缓存架构影响如下图所示,同样是16MB的缓存情况下,完全共享缓冲架构中的每个端口极限情况下(如多打一的Incast场景,)可以最大利用到16MB;如果是两个分片的分组端口缓存架构下,每个端口极限情况下仅可以最大利用到8MB;而如果是四个分片的分组端口缓存架构下,每个端口极限情况下仅可以最大利用到4MB。思科之前的文档中也做过分析,分片报文缓存架构下,不同的流量模型对微突发流量吸收的影响或限制也不同,如下图所示:以图中右侧图示情况为例,4个分片的架构下,如果四个输出端口位于4个不同的分片上,最理想的情况可以达到100%的缓存利用,但是任意一个输出端口最多仅可以消耗总内存的25%。在复杂的流量模式下,这种限制可能会更加痛苦,如图中右侧图示为例,此情况下,一个输出端口的缓存被限制为总缓冲区的1/16(6.25%),这种限制使得Incast下的缓冲行为不可预测。在完全共享缓存架构中,设备中的所有数据包缓冲区都可用于动态分配到任意一个端口,这意味着在所有输入输出端口之间共享缓存而没有任何限制,最大限度地提高了可用内存的效率,并且使微突发流量吸收能力可预测,与流量模型没有任何关系。
完全共享缓存的优势也体现在RoCEv2网络中,RoCEv2是TCP/IP协议中UDP层实现,因为使用不需要确认的UDP协议,此时RTT不是缓冲区需求的直接驱动因素,但是RDMA的无损特性往往要依靠PFC来实现,PFC逐级反压控制会导致拥塞蔓延,完全共享缓存通过在需要的时间和节点支持更多的缓存,有助于最大限度地减少触发PFC流量控制的需要。
主流厂商实现当前市场上,大多数数据中心交换机都是使用商用交换芯片ASIC构建的,这些ASIC针对传统的数据流量模式和数据包大小进行了成本优化,为了在实现带宽目标的同时保持低成本,芯片供应商更多使用了分片缓存架构,牺牲了公平性,同时面临不可预测性和微突发吸收的问题。但是,当前几个主要厂商51.2Tbps最高容量的交换芯片,由于应对场景以HPC/AI大模型训练等为主,基本都采用完全共享缓存架构,相关的交换芯片或交换机如博通Tomahawk5、英伟达Spectrum-4、思科Silicon One G200都是宣传采用完全共享缓存架构。-对此,您有什么看法见解?-
-欢迎在评论区留言探讨和分享。-