在2015年3月举行的OCP(Open Compute Project,开放计算项目)峰会上, 微软向OCP贡献SAI (Switch Abstraction Interface,交换机抽象接口)。当年7月,OCP正式接纳了SAI 。
2016年3月9日,微软在这届OCP峰会上,正式发布了SONiC ( Software for Open Networking in the Cloud)。SONiC的所有软件功能模块都是开源的,推动了OCP社区以及其他厂商在开放网络方面的创新。
SONiC是构建网络设备(如交换机)所需功能的软件集合。它可以通过交换机换抽象接口(SAI)运行在不同的ASIC平台。正是由于SAI的存在,SONiC的的app(网络功能)才能够支持多个厂家的ASIC而不需要为每一个平台进行针对性的修改。
需要注意的是,SAI没有公开源代码,ASIC厂家只提供二进制格式的SAI文件。虽然SAI没有开源,但是SAI向上给SONiC提供了一套统一的API 接口,向下则对接不同的ASIC。
SONiC 和 SAI 支持的ASIC芯片为:
SONiC是一个将传统交换机操作系统软件分解成多个容器化组件的创新方案,这使得增加新的组件和功能变得非常方便。(SONiC路线图:https://github.com/Azure/SONiC/wiki/Sonic-Roadmap-Planning)
SONiC大量使用了现有的开源项目和开源技术,如Docker,Redis,Quagga和LLDPD以及自动化配置工具Ansible、Puppet和Chef等。
OCP接纳SONiC和SAI,很重要的一点就是看重SONiC能够完善白盒交换机的生态链。试想一下,如果没有SAI,那么就需要白盒交换机厂商自行适配不同的ASIC。有了SAI之后,适配ASIC的工作就由芯片厂商完成,使得白盒交换机厂商推出一款新产品所花费的时间大大缩短。
前面已经提到过SONiC只是构建交换机网络功能的软件集合,它需要运行在Base OS上。SONiC所使用的BaseOS 是ONL (Open Network Linux ) 。ONL是一款为白盒交换机而设计的开源Linux操作系统。
将SONiC和Base OS、SAI、ASIC平台对应的驱动打包制作成为一个文件,这个文件才是可直接安装到白盒交换机的NOS镜像 。SONiC目前已经可以运行在Accton/EdgeCore 、Dell和Mellanox等厂商的白盒交换机上。SONiC社区提供一些制作好的NOS镜像 :https://github.com/Azure/SONiC/wiki/Supported-Devices-and-Platforms
由于SONiC的网络应用都是基于容器构建的,可以非常方便的在生产环境实现不停机部署或升级应用,这一点也吸引了不少的互联网公司的目光。百度、阿里、腾讯等公司于2017年8月成立的“凤凰项目”主要就是细化这个打包工作,并兼容更多白盒交换机,未来还会做LTS模式的版本管理工作。(凤凰项目相关介绍:http://www.opendatacenter.cn/work-group/p-958516783572459522.html)
上文提到的 Barefoot Tofino 交换芯片的交换机当然能完美支持P4 。随着P4越来越火,基于其它厂商的ASIC 的SONiC交换机现在也能以软件模拟器方式支持P4了,可以让您体验P4的魅力而不用专门购买基于Tofino芯片的交换机。
SONiC-P4是Barefoot公司开发的P4模拟交换机程序,运行真实的SONiC网络协议栈。它借助专门的SAI ——SAI_BM.p4 来仿真P4,并对普通SONiC交换机ASIC进行编程。
另外,由于SONiC-P4 软件交换机以docker镜像形式封装,它也可以运行在安装Linux 或 Windows的计算机上。由于SONiC-P4 软件交换机只是一个模拟器,其可编程性和性能还是要弱于内置Tofino 芯片的物理交换机。
https://github.com/Azure/SONiC/wiki/SONiC-P4-Software-Switch