为什么数据中心交换机的缓存是它的重要性能指标

交换机是数据中心不可缺少的网络设备,在数据中心里发挥着重要作用。在平时使用和采购时,大多数都关注交换机的背板带宽、端口密度、单端口速度、协议特性等方面的性能指标,很少有人去关注缓存指标,这是一个常常被人所忽略的指标。其实,缓存是数据中心交换机的重要性能参数,是衡量一款交换机设备性能高低的重要指标。

交换机的缓存和通常的缓存概念不同,通常缓存指的是当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话再从内存中找,显然缓存中的数据查找速度比内存中要快得多,这是一个处于CPU内部的一块内存地址空间。而在交换机上,缓存就是数据交换的缓冲区,有时又叫做包缓冲区大小,是一种队列结构,被交换机用来协调不同网络设备之间的速度匹配问题。突发数据可以存储在缓冲区内,直到被慢速设备处理为止。交换机有三种转发模式:直通转发、存储转发和无碎片转发,用的最广泛的是存储转发模式。其实不管是哪种转发模式,都要用到缓存,只不过直通转发只解析报文的前几个字节就进行转发,存到缓存里的数据量小,转发速度快,但因没有对整体数据做校验,容易转发错误报文。大部分交换机的片上缓存都不大,一般都是几MB到几十MB,虽然单端口带宽在不到十年的时间里从1G发展到了100G,但缓存并没有很大提升,如果一个100G端口出现突发流量,十几MB就会出现丢包,显然在实际应用中会有限制,除非明确应用流量上不要有突发流量。

那么有人会有疑问,既然缓存这么重要,那为何不做的大一些?其实以现有的芯片集成技术应该不难实现。的确,缓存理论上可以通过芯片工艺设计放大,但是过大的缓存会影响正常通信状态下数据包的转发速度,因为过大的缓冲空间需要相对多一点的寻址时间,并增加设备的成本,在一些对延迟要求比较高的应用场景中,缓存过大反而会起反作用,所以不能简单地去扩大缓存,要在缓存和延迟两个方面做取舍,“鱼和熊掌不可得兼”。当然,随着技术的进步,在尽量不增加延迟的情况下,也可以不断提升交换机的缓存能力。受制于时钟、总线带宽的能力,缓存性能难以大幅提升,考虑到功耗、成本的平衡,缓存容量也不会大幅增加。

有的交换机还在交换芯片外部挂了一个DRAM缓存,用来提升交换机的缓存能力,这样延迟可能会更大,但缓存可以做得很大,达到1G以上。缓存十分重要,但我们究竟需要多大的缓存,却没有正确答案。巨大的缓存意味着网络不会丢弃任何流量,同时也意味着网络延迟的增加,具体要根据数据中心的业务来选择。比如在搜索业务中,一次搜索要在海量数据库里寻找结果,容易产生网络突发流量,甚至造成网络拥塞,在这样的网络业务中就需要部署缓存大的交换机设备;在金融领域,尤其是股票证券交易网络中,差一个纳秒都可以带来巨大收益或者损失,这样的领域对网络延迟要求非常高,不允许出现拥塞,也就不需要多少缓存,有的金融数据中心还要求使用低延迟交换机,转发延迟控制在纳秒级。

缓存通常都是因为网络接口速率不同造成的,流量突然爆发或者多对一的流量传输。最常见的问题是多对一的流量突然变化。例如,某个应用程序搭建在多个服务器集群结点上。如果其中某个结点同时请求来自其他所有结点的数据,那么所有答复应该在同一时间到达。这种情况发生时,所有网络流量洪水会涌向请求者的交换机端口。如果交换机没有足够的出口缓冲区,那么它可能会抛弃一些流量,或者增加应用程序延迟。足够的网络缓冲区可以防止因为低级别协议造成的丢包或网络延迟。缓存对交换机来说是一个整体的概念,整个交换芯片共享缓存,每个端口分多少都是可以调整的,交换机上对这些缓存是有管理的,于是就出现了两种模式:QOS模式和FC模式。硬件上对每个报文都要存储后,处理完再转发,但存储空间都是有限的,因此当缓存不足时,就会出现丢包。QOS模式下,发生拥塞时不会发出流控帧,但可以对端口上不同优先级的流量进行调度,一定要丢包,优先丢掉优先级低的包,通过设置相关配置,可以做到选择性丢包。而在FC模式下,发生拥塞时会发出流控帧(需要手工配置,默认一般设备都不开启,若开启对端设备拥塞也会发流控帧,设备要响应处理流控帧,这将极大消耗设备端口的缓存)。QOS模式所有缓存被所有端口共享,