自从2016年微软在OCP推出SONiC,SONiC作为云数据中心网络的首选开源操作系统发展势头迅猛,交换机抽象接口(SAI)在保证SONiC适应各种底层硬件方面发挥了重要作用。SAI为ASIC提供了一个统一接口,使得网络设备供应商能够在其平台上快速开发SONiC,同时还可以通过特定扩展在芯片和光学层面进行多种创新。这就使得云服务商在受益于硬件创新的同时,还能拥有一个通用的上层接口。下图所示为SONiC各组件与硬件交换机的简要关系。

本周,也许是有了Big Switch团队的加持(SDN落幕:一代明星终嫁做商人妇 十年创业或成黄粱一梦),Arista宣布推出全新Arista SAI接口,加速拥抱开放的SONiC。

几乎同时,思科宣布全新Cisco 8000系列平台支持SONiC。(首度揭秘:思科Silicon ONE掀起盖头来)
SONiC传统上是在一个NPU系统上通过一个实例支持BGP、SwSS(交换机状态服务)和同步容器。现在它已经扩展到支持系统中有多个NPU,在每个NPU实例上都可以运行BGP、Syncd以及其它相关容器。
思科走出的一小步,是SONiC迈出的一大步。
Cisco 8000系列支持SONiC
作为思科与OCP社区合作的延续,继在Nexus平台上支持SONiC之后,思科8000系列盒式和框式路由器上现在可以支持SONiC了。
虽然在盒式的单一NPU系统上支持SONiC本身是一个渐进的过程,但是SONiC/SAI获得思科最新的ASCI芯片和平台支持,并且能在框式平台上支持SONiC,这是一个里程碑性质的事件,标志着模块化路由系统可以支持完全分布式的SONiC。
接下来我们将介绍框式路由器的细节,以及SONiC是如何在Cisco 8000模块化系统上工作。
思科8000模块化系统架构
我们先来深入了解一下思科8000模块化系统。一个模块化系统通常有以下几个关键部件:
一个或两个路由处理器RP
多个线卡LC
多个Fabric卡FC
机箱共用件,比如风扇、电源单元等
下图是处理器、线卡和FC组件及其连接方式。

线卡上的NPU和机框内的Fabric卡组成一个CLOS网络。每个线卡上的NPU由相应线卡上的CPU管理,所有Fabric卡上的NPU由RP卡上的CPU管理。线卡和Fabric卡的NPU通过背板连接,所有的节点(LC和RP)通过机箱内的以太交换网络与外部连接。
这种结构从逻辑上来说,是一个单层的leaf-spine网络,其中每个Leaf节点和Spine节点都是一个多NPU系统。
从转发的角度来看,Cisco 8000模块化系统作为一个单一的转发网元,线卡和Fabric 功能按照如下分工:
入端口线卡NPU执行隧道终止、数据包转发查找、多级ECMP负载均衡、以及QoS、ACL、入端口镜像等入端口功能,然后报文被封装Fabric和NPU头后,通过虚拟输出队列(VOQ)被转发到相应的出端口线卡NPU。报文以package-by-package负载均衡的方式送到Fabric卡;
Fabric NPU对接收到的Fabric头进行处理,并将数据报文通过某条链路向出端口线卡NPU发送;
Egress线卡NPU利用NPU报头中的信息对来自Fabric的数据报文进行出端口处理,包括数据包封装、优先级标记以及QoS、ACL等功能。
在单NPU非模块化系统中,上述的入端口和出端口功能都是在同一个NPU中完成,并不存在Fabric NPU功能。
Cisco 8000模块化SONiC系统
思科8000模块化系统内部的CLOS设计使得实现Leaf-Spine SONiC系统成为可能。下图所示为基于Leaf-Spine网络的SONiC系统。

leaf-spine网络中的每个节点都运行一个独立的SONiC实例。Leaf和spine节点通过标准以太网端口连接,支持网络内基于以太网/IP的转发。标准的监控和故障诊断技术,如过滤、镜像、监控等也可在Leaf和spine中使用。如下图所示。


