交换机是数据中心不可缺少的网络设备,在数据中心里发挥着重要作用。在平时使用和采购时,大多数都关注交换机的背板带宽、端口密度、单端口速度、协议特性等方面的性能指标,很少有人去关注缓存指标,这是一个常常被人所忽略的指标。
其实,缓存是数据中心交换机的重要性能参数,是衡量一款交换机设备性能高低的重要指标。交换机的缓存和通常的缓存概念不同,通常缓存指的是当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话再从内存中找,显然缓存中的数据查找速度比内存中要快得多,这是一个处于CPU内部的一块内存地址空间。
而在交换机上,缓存就是数据交换的缓冲区,有时又叫做包缓冲区大小,是一种队列结构,被交换机用来协调不同网络设备之间的速度匹配问题。突发数据可以存储在缓冲区内,直到被慢速设备处理为止。
交换机有三种转发模式:直通转发、存储转发和无碎片转发,用的最广泛的是存储转发模式。其实不管是哪种转发模式,都要用到缓存,只不过直通转发只解析报文的前几个字节就进行转发,存到缓存里的数据量小,转发速度快,但因没有对整体数据做校验,容易转发错误报文。大部分交换机的片上缓存都不大,一般都是几MB到几十MB,虽然单端口带宽在不到十年的时间里从1G发展到了100G,但缓存并没有很大提升,如果一个100G端口出现突发流量,十几MB就会出现丢包,显然在实际应用中会有限制,除非明确应用流量上不要有突发流量。
那么有人会有疑问,既然缓存这么重要,那为何不做的大一些?
其实以现有的芯片集成技术应该不难实现。的确,缓存理论上可以通过芯片工艺设计放大,但是过大的缓存会影响正常通信状态下数据包的转发速度,因为过大的缓冲空间需要相对多一点的寻址时间,并增加设备的成本,在一些对延迟要求比较高的应用场景中,缓存过大反而会起反作用,所以不能简单地去扩大缓存,要在缓存和延迟两个方面做取舍,“鱼和熊掌不可得兼”。
当然,随着技术的进步,在尽量不增加延迟的情况下,也可以不断提升交换机的缓存能力。受制于时钟、总线带宽的能力,缓存性能难以大幅提升,考虑到功耗、成本的平衡,缓存容量也不会大幅增加。
有的交换机还在交换芯片外部挂了一个DRAM缓存,用来提升交换机的缓存能力,这样延迟可能会更大,但缓存可以做得很大,达到1G以上。
缓存十分重要,但我们究竟需要多大的缓存,却没有正确答案。巨大的缓存意味着网络不会丢弃任何流量,同时也意味着网络延迟的增加,具体要根据数据中心的业务来选择。比如在搜索业务中,一次搜索要在海量数据库里寻找结果,容易产生网络突发流量,甚至造成网络拥塞,在这样的网络业务中就需要部署缓存大的交换机设备;在金融领域,尤其是股票证券交易网络中,差一个纳秒都可以带来巨大收益或者损失,这样的领域对网络延迟要求非常高,不允许出现拥塞,也就不需要多少缓存,有的金融数据中心还要求使用低延迟交换机,转发延迟控制在纳秒级。
缓存通常都是因为网络接口速率不同造成的,流量突然爆发或者多对一的流量传输。最常见的问题是多对一的流量突然变化。例如,某个应用程序搭建在多个服务器集群结点上。如果其中某个结点同时请求来自其他所有结点的数据,那么所有答复应该在同一时间到达。这种情况发生时,所有网络流量洪水会涌向请求者的交换机端口。如果交换机没有足够的出口缓冲区,那么它可能会抛弃一些流量,或者增加应用程序延迟。足够的网络缓冲区可以防止因为低级别协议造成的丢包或网络延迟。
缓存对交换机来说是一个整体的概念,整个交换芯片共享缓存,每个端口分多少都是可以调整的,交换机上对这些缓存是有管理的,于是就出现了两种模式:QOS模式和FC模式。硬件上对每个报文都要存储后,处理完再转发,但存储空间都是有限的,因此当缓存不足时,就会出现丢包。
QOS模式下,发生拥塞时不会发出流控帧,但可以对端口上不同优先级的流量进行调度,一定要丢包,优先丢掉优先级低的包,通过设置相关配置,可以做到选择性丢包。而在FC模式下,发生拥塞时会发出流控帧(需要手工配置,默认一般设备都不开启,若开启对端设备拥塞也会发流控帧,设备要响应处理流控帧,这将极大消耗设备端口的缓存)。
QOS模式所有缓存被所有端口共享,FC模式缓存被均匀固定的分配给每个端口,因此QOS模式单个端口可能会获得更多的存储能力,减少了丢包,但带来的影响是可影响其它端口低优先级报文的传输。
现在的交换机基本采用的是两种模式的结合,即为每个端口固定分配一些缓存,保证一定的转发带宽,同时再留一部分缓存作为公共部分,当有端口固定分配的部分不够用时,就可以使用公共部分,为防止一个端口拥塞将所有共享缓存占光,每个端口还可以设定一个最大允许占用的缓存,以此保证多端口拥塞时,公共缓存部分依然有剩余,所以缓存容量虽然不大,但是管理上是比较灵活的。不过,由于缓存管理是交换机非常底层的东西,调整不大对设备的转发影响很大,所以这部分调整一般都是在设备出厂之前调好,默认是最为通用的方式,有特殊应用的场景,再根据实际情况由专业技术人员来调整。