因为缓存小,交换机上的缓存一直是其比较鸡肋的部分。那一定有人会问,就不能将缓存做得大些吗?可以,其实后来有人研究出采用外扩DRAM来扩大缓存能力,不过这样基本都会降低报文转发速度,使得延迟增大,对网络影响也比较大,对于一些对时延比较敏感的业务网络,就不能采用这种大缓存的方式,不过在一些突发流量比较多,比如搜索业务中,对时延不敏感,这种大缓存设备就可以派上用场,避免在突发时出现丢包,即便延迟大一些也能接受,不过因为多了一个专门存储数据的芯片,设备造价上要高得多,所以一般大缓存的设备价格都比较昂贵,基本是越大越贵。这里所说的延迟大,都是指的有拥塞的情况,如果没有拥塞,其实大小缓存都没有区别,存储转发时延都是几个微秒,与缓存大小无绝对关系。交换机上的转发芯片,受制造工艺和技术所限,还无法在片内将缓存做得很大。当然,这些年转发芯片的技术也在不断进步,不仅是转发表项规格越来越大,缓存也在变大,现在片内缓存达到20~30M的已经比较常见,这要比十年前只有1M~2M的交换机缓存要大得多。缓存变大,以前的那些技术的意义就大了,可以设置各种阈值和优先级,对缓存的使用进行管控,这样才能真正发挥作用。缓存大小阈值设置要适度,过大的缓存空间会影响正常通信状态下数据包转发速度(因为过大的缓冲空间需要相对多一点的寻址时间),并增加设备的成本。而过小的缓冲空间在发生拥塞时又容易丢包出错。所以,适当的缓存空间加上先进的缓存调度算法是解决缓存问题的合理方式。
借助于RDMA技术的热门,缓存技术引起了人们的关注。众所周知,RDMA技术是一种提升数据包处理速度的新技术,一直采用专有网络协议和专有网卡,应用来实现的,造价非常贵,一般只有在高性能计算的网络中才会部署,随着以太网技术的成熟,RDMA的一种替代技术RoCE出现,RoCE是一种允许通过以太网使用远程直接内存访问(RDMA)的网络协议,就是通过以太网来跑RDMA协议,PFC和ECN是RoCE实现的基础,而PFC是实现基于队列的流控,ECN是实现基于WRED打标技术,两种技术都与缓存密切相关,这让人不得不将缓存技术重拾起来。而现在的交换机缓存有数十MB,在技术上也足够可以做做文章,很多人开始深入研究交换机的缓存技术。
当一台交换机出厂之后,它的缓存大小就确定了,无法再改变,这就像我们买的手机一样,CPU和内存大小都无法改变。我们只能通过命令去设置出入门限,管控缓存的使用情况,将缓存尽可能公平地分给各个端口使用,同时针对突发流量、流控攻击等异常情况,都可以应对。缓存虽不涉及到转发表项,但每个数据包都要经过缓存存储,所以一旦缓存出了问题,影响是全局性的,可能导致整个设备的业务异常,影响很大。早期的设备缓存都不会开放给使用者去随意修改各种阈值,随着RoCE网络的出现,为了更好地适应RDMA网络,各家网络厂商才将缓存这部分调整放开。即便这样,也建议遵从厂商提供的建议数值进行设置,这些阈值背后有很多缓存的技术含义,稍有不慎就可能调整错误,同时针对特殊应用场景,评估后再调整。有没有不用缓存的交换机?答案是有,就是直通转发模式,优点自然是转发快,时延低,这种交换机在还没有收到完整报文就开始转发,无法检验CRC,这样错包也发现不了,实际应用中使用会有很大限制。