初识SONiC,官方文档

网络操作系统_用Docker体验微软开源网络操作系统SONiC SONiC全名Software for Open Networking in the Cloud,是微软在2016年开源的网络操作系统,主要用于数据中心交换机。就是一种可以运行在多家网络设备上的开放操作系统。搭建SONiC下面我们看看SONiC的直观体验,参照https://github.com/Azure/SONiC/wiki/SONiC-P4-Software-Switch, 我们可以实验一下... 阅读详情
AI摘要

本文深入解析SONiC(Software for Open Networking in the Cloud),一种安装在Linux上的软件集合,专为数据中心网络提供路由功能。涵盖组件、架构、特征及关键服务,如BGP、QoS、L2/L3功能、平台管理等。

认识一下SONiC到底是啥。开始可能有好多地方理解有误,请多指正。文章参照SONiC文档。

概览

SONiC(Software for Open Networking in the Cloud)是安装在Linux上的软件合集,运行在硬件交换机上,在数据中心网络中提供路由功能。因为是一个合集,所以我们首先看一下他由哪些东西组成。

组件

由上图可以看出SONiC由几层组成,由下到上分别是Hardware components,Drivers,Linux Kernel Interface,Other source/bin,SONiC Open Source,Applications。

Hardware components

硬件组件是指交换机内所有物理组件,包括风扇、电源、LED和网络收发器。

Drivers

应该是各个厂商提供的相关驱动。

Linux Kernel Interface

图上看主要是netdev和sysfs。

Other source/bin

暂时不清楚。

SONiC Open Source

这是重头戏,主要包含了SAI API、ASIC Control Software、Object Library三块。

  • SAI(Switch Abstraction Interface)是标准的C语言API,有特定的交换机ASIC的SDK实现。
  • ASIC Control Software是指SWSS(Switch State Service),主要是收集硬件交换机的状态信息。
  • Object Library

SWSS

SWSS是一组软件,提供了数据库接口,用于网络应用程序和网络硬件交换机进行通信和状态表示。

网络应用程序读写数据库APP_DB。比如netlink route syncer,guagga FPM route syncer,ACL control,QoS control,LB,telemetry control等等。
Orchestration agents同时读写APP_DB和ASIC_DB。他负责验证和传输应用数据到SAI对象的逻辑。
syncd进程同时读写ASIC_DB和SAI SDK。

kv数据库

选择kv数据库,是为了提供与语言无关的接口,并且提供数据持久性,复制和多进程通信的方法。
Redis被选择为底层数据库引擎,但是未来可能会改变。

网络应用

SONiC网络应用程序使用SwSS编写完全独立于硬件的通信细节。应用程序仅仅订阅所需的数据。例子包括L3路由、L2桥接、ACL、QoS、Telemetry streaming、Tunneling、link aggregation、LB和策略路由等。

Orchestration Agent

该模块主要是负责在APP表和ASIC表之间转换和复制数据。每个ASIC表只能有一个生产者。目前只有一个业务流agent,后面可以添加。只有一个Orchestration Agent可以写入ASIC_DB数据库。

syncd

syncd主要是负责在ASIC_DB和符合SAI的ASIC SDK之间复制数据,每个SAI SDK只能有一个syncd进程。

Object Library

主要负责SONiC应用和外部应用的交互。Object Library定义了两种类型的应用程序:

  • 客户端,对Objects执行创建、设置、获取和删除操作。
  • 服务端,执行客户端的请求操作

另外,Object Library实现了publish/subscribe模型。服务端发布事件;客户端订阅事件和对象。客户端可以订阅创建、修改和删除对象时生成的事件。

SONiC架构的关键租户是允许停止、启动、重启和替换进程的。

Applications

主要是通过docker运行一些网络相关功能的app。

Database

SwSS通过使用前缀命名实现redis表的概念,设计producer/consumer时要确保数据的完整性。

APP_表是针对每个场景设计的,比如:ROUTE_TABLE和NEIGH_TABLE。

ASIC_表是从SAI头文件创建的,比如ASIC_sai_unicast_route_entry_t和ASIC_sai_neighbor_entry_t。

Table Operations

Producer

SET - insert or update a key -> fileds and values.
DEL - deletes a key

Consumer

POP - get a table change notification, the key name and the key->feilds and values and operation[SET, DEL]
SELECT - check if a table notifications exists

Transactions

SwSS在内部实现transactions,所以producers和consumers可以使用类似队列的方法与数据库保持同步。

每个TABLE,都有用于内部通知实现的QUEUE key。

下面介绍一个工作实例:

intfsyncd进程使用swss producer API对APP.INTF_TABLE执行SET。producer API在TABLE中配置key/value,并且为每个QUEUE key设置一个等效条目。

OA(the orchestration agent)是APP.INTF_TABLE的consumer,OA将从swss consumer API收到APP.INTF_TABLE数据更改的通知。consumer API将从QUEUE key中pop key、value和OP。intfsyncd写入APP.INTF_TABLE的数据保持不变。

详细信息参照代码:

Tablename+”_KEY_QUEUE”
Tablename+”_VALUE_QUEUE”
Tablename+”_OP_QUEUE”

Switch Data Service Database Schema

定义了两个数据库,APP和ASIC。SwSS之外的APP期望通过明确定义名称的keys添加到APP数据库来存储数据。ASIC数据库存储硬件同步agent使用的数据。ASIC数据库中的key预计严格遵守SAI属性。

keys必须看起来像是表名的字符串作为前缀。允许的key是”[a-z][A-Z][0-9]_”并且以”_TABLE:”结尾

在redis中,数据库只定义我的数字:

数据库0 = APP_DB
数据库1 = ASIC_DB
数据库7 = TEST

schema

详见文档

Database 1 – ASIC_DB

ASIC数据库存储硬件同步agents的数据。ASIC数据库中的keys严格按照SAI属性命名。详情见文档。

Switch state service Layer 3 Implementation

本节提供了如何学习BGP路由并将其传播到ASIC的示例。以quagga为例,但也可以使用其他路由APP。

Platform Management Service

平台管理服务管理外围设备,比如风扇、PDU、LED和收发器。通用交换机平台利用I2C总线,通常与一个或者多个I2C主设备来管理这些设备。这些器件通常通过一些列的I2C多路复用器连接到I2C主器件。

Linux内核具有非常成熟的I2C子系统和定义良好的API。它支持几乎所有常用的I2C设备(主设备、多路复用器、传感器)。然后,SONiC利用Linux内核公开接口来管理这些设备。在这种方式中,SONiC首先为这些I2C设备安装kernel drivers,创建I2C书拓扑,并暴露像hwmon这样的sysfs接口来管理这些设备。

SONiC提供了一些服务和实用程序来管理这些设备:

  • decode-syseeprom:显示系统eeprom信息
  • sensors:监控温度和风扇速度
  • fancontrol:根据传感器温度调整风扇速度
  • ledd:根据链路或者系统状态更改LED灯
  • sfputil:管理收发器,比如show transceiver eeprom,检测存在,重置,更改lpmode

平台供应商有望开发他们的平台模块来构建I2C树,公开sysfs接口并且开发插件已将他们的设备钩挂到SONiC平台管理服务。详细信息可以查看平台移植指南。

主要是了解一下SONiC的features,以便于整理一下一点一点从上往下熟悉。文章参照SONiC Features文档。

 

Features

L2

  • LAG,链路聚合组,将多个端口合并使用的,常用LACP控制协议。
  • LLDP,链路层发现协议,在本地子网中通告自己的设备标识和性能。
  • COS,服务等级(Class of Service)在数据和语音协议中使用的参数,存在于运行VLAN报文的链路层。
  • VLAN
  • ACL permit/deny
  • Mirroring
  • LACP Fallback,fallback模式时把bond当成一个NIC来用,因为另外一个NIC显示mac为全0
  • Vlan Trunk
  • Dynamic ACL Upgrade
  • MAC Aging

L3

  • BGP,边界网关协议,运行在一个单独的AS中,BGP之间同步路由信息。
  • ECMP,多路径等价路由,用于均衡流量的。
  • QoS-ECN,显式ECN调整QoS
  • QoS-RDMA
  • Priority Flow Control,PFC是普通流控的升级版,普通流控是针对端口的,PFC根据流来进行管理,控制
  • PFC WD,PFC Watchdog Design
  • Asymmetric PFC
  • WRED,加权随机先期检测(Weighted Random Early Detection)是将随机先期检测与优先级排队结合起来,这种结合为高优先级报文提供了优先通信处理能力。当某个接口开始出现拥塞时,它有选择地丢弃较低优先级的通信,而不是简单地随机丢弃报文。
  • COPP,思科私有的安全策略协议。
  • DHCP Relay Agent,把DHCP/BOOTP广播信息从一个网段转播到另一个网段。
  • IPv6
  • Tunnel Decap
  • BGP MP
  • BGP Graceful restart helper,协议重启和另外一台协助重启的设备。
  • BGP/Neighbor-down fib-accelerate,路径上有端口down的时候,收敛快一些
  • IPv6 ACL
  • Routing Stack Graceful Restart
  • FRR,源于quagga,适用于IP路由协议套件的守护进程,支持平台Linux和Unix,协议包括BGP,IS-IS,LDP,OSPF,PIN和RIP
  • IPv6 Link Local
  • VRF
  • Vxlan
  • L3 MLAG
  • EVPN

management

  • SNMP,简单网络管理协议。用于监测连接到网络上的设备。
  • Syslog
  • Sysdump
  • NTP,网络时间同步协议。
  • Post Speed Setting
  • TACACS+(Terminal Access Controller Access Control System)终端访问控制器访问控制系统。
  • MTU Setting
  • gRPC
  • Cirtical Resource Monitoring
  • Incremental Config(IP, LAG, Port shut/unshut)
  • sFlow

模块

kernel & drivers

  • sonic-mgmt,管理、配置和监控SONiC,需要单独编译。

  • sonic-buildimage,编译安装镜像,以下都是该git的子模块。

  • sonic-linux-kernel,内核补丁。
  • SAI(Switch Abstraction Interface)
  • sonic-swss,SwSS(Switch State Service)是一个软件合集,提供数据库接口,用于和网络应用程序以及网络交换机硬件进行通信和状态表示。
  • sonic-swss-common,SwSS公共库提供了用于数据库通信、netlink wrappers、和SwSS所需的其他功能功能的库。
  • sonic-py-swsssdk,用于SONiC交换机状态服务数据库访问的Python实用程序库。
  • sonic-dbsyncd,SONiC SwSS LLDP数据同步daemon。
  • sonic-quagga,Quagga支持BGP4, BGP4+, OSPFv2, OSPFv3, RIPv1, RIPv2, RIPng和IS-IS。
  • sonic-platform-common,为硬件外围设备提供通用接口,Python的软件包集合。
  • sonic-platform-daemons,SONiC中控制指定平台功能的daemon程序。
  • sonic-sairedis,基于redis数据库构建的SAI redis服务,主要包含了两个组件:将SAI对象放入redis数据库的SAI库;获取SAI对象,并且放入ASIC的syncd。
  • sonic-snmpagent,a net-snmpd agentx subagent。
  • sonic-utilities,命令行工具。
  • p4-hlir,仅支持P4_14版本,如果编译P4_16版本,可以使用p4c。
  • p4c-bm,为bmv2(behavioral-model)生成JSON配置。
  • ptf,PTF是基于Python的数据平面测试框架。基于Python发行版中的unittest。
  • frr, FRRouting是实现和管理各种IPv4和IPv6的免费路由协议软件,目前支持BGP4,BGP4+,OSPFv2,OSPFv3,RIPv1,RIPv2,RIPng,IS-IS,PIN-SM/MSDP,LDP和Babel。
为字节节省数十万核的json库sonic json编解码在微服务cpu开销中占据相当的比重,本文介绍字节golang自研json库的降本效果和部分重要模块的实现,并借此引申更多场景的优化建议,希望对当下如火如荼的降本提供一个思路。 阅读详情

相关推荐

深入解析SONiC配置数据库:从基础到实战

本文深入解析SONiC网络操作系统的核心组件——配置数据库(ConfigDB)。文章将其比作网络设备的“中央大脑”,详细阐述了其基于Redis的架构、表格式数据结构与发布订阅模型的工作原理。通过实战示例,指导读者如何安全地查看和操作ConfigDB,并详解了PORT、VLAN、BGP_NEIGHBOR等核心配置表,帮助网络工程师从基础到实战全面掌握SONiC的集中化配置管理。

weixin_29292535的博客 630

SONiC学习笔记(1)--SONiC架构与各模块功能

SONiC学习笔记(1)什么是SONiCSONiC for usersSONiC for developers参考文档 什么是SONiC SONiC是构建网络设备(如交换机)所需功能的软件集合。它可以通过交换机换抽象接口(SAI)运行在不同的ASIC平台。正是由于SAI的存在,SONiC的的app(网络功能)才能够支持多个厂家的ASIC。 SAI向上给SONiC提供了一套统一的API 接口,向下则对接不同的ASIC。 SONiC是一个将传统交换机操作系统软件分解成多个容器化组件的创新方案,这使得增加新的

weixin_42896572的博客 2万+

深入解析SONiC ConfigDB:从基础配置到高级应用

本文深入解析了SONiC操作系统的核心组件ConfigDB,它作为网络交换机的“中央配置仓库”,基于Redis数据库统一管理所有配置。文章详细介绍了其基础操作、核心配置表(如PORT、VLAN、BGP、ACL)的语法,并探讨了缓冲区与QoS等高级应用及运维技巧,是掌握SONiC自动化网络配置管理的关键。

weixin_29278805的博客 446

Sonic测试架构介绍

Sonic项目简介 Sonic:Software for Open Networking in the Cloud Sonic是基于Linux的开源网络操作系统,可以跑在多个不同芯片厂商交换机上 Sonic在2016年OCP峰会上,由微软发布 Sonic提供了全套的网络功能,并且都是开源的,如BGP、RDMA等协议 Sonic项目更多信息请查阅Github:github.com/Azure/SONic Sonic测试框架介绍 Sonic项目专门成立了一个子项目Sonic-mgmt来负责Sonic

weixin_39094034的博客 4357

开源网络操作系统sonic编译指南

开源网络操作系统sonic编译指南

SFP.zip_SFP_sff8472_sfp 程序_sfp+_光通讯

ADI公司的关于光通讯模块的监控程序,在KEIL FOR ARM 的编译环境编译.程序大小约12K,芯片是ADu7020.

SONiC 入门实践教程

SONiC(Software for Open Networking in the Cloud)是微软主导、Linux Foundation 托管的开源网络操作系统(NOS)。它基于 Debian Linux,采用容器化微服务架构和Redis 中心化数据库,通过实现硬件与软件解耦,可运行在多家厂商的白盒交换机上。✅ 使用 ContainerLab + SONiC VS 搭建虚拟实验环境✅ 掌握 SONiC 的基本架构(容器、Redis、SAI)✅ 完成基础网络配置(接口、VLAN、IP)

eloudy的专栏 345

AI工程实战:如何在实际工程中运用Claude Code

本文探讨了利用大型语言模型(LLM)进行复杂工程项目的结构化工作流。核心策略包括:1)规划先行,通过"探索子代理任务"主动分析代码库并澄清需求;2)定制AI行为,要求简洁输出和列出未解决问题;3)将大型任务分解为多阶段计划以管理上下文窗口限制;4)利用GitHub Issues作为外部存储实现跨会话状态持久化。这种"规划-执行"模式将AI从代码生成器升级为项目管理代理,通过与GitHub CLI等工具深度集成,实现了高效的多阶段工程协作。该方法展示了AI辅助编程向流程

老孙 | Ethan Sun 的博客:AI 智能体与 AI 原生软件的工程实践 1091

Sonic数字人能否用于器官捐献?生命延续倡导

腾讯与浙大研发的Sonic数字人技术,通过AI让已逝器官捐献者‘亲口发声’,用声音与面容的精准还原唤醒情感共鸣。该技术基于轻量级模型实现音画同步,已在医院宣教中提升家属签署率,探索数字生命在公益场景中的温暖延续。

weixin_35749786的博客 923

42、多媒体与虚拟现实在艺术和影视领域的创新应用

本文探讨了多媒体与虚拟现实在艺术和影视领域的创新应用,涵盖三个典型案例:影视与人类学融合项目通过协作模式模糊作者与观众界限,推动文化文献的发展;交互式数字短片《分手》利用基于对象的广播技术探索个性化影视体验;威尼斯双年展瑞士馆4D项目则通过虚拟现实技术实现文化遗产的数字化展示。这些案例展示了技术在叙事、用户体验及文化保护中的深度应用,并展望了未来技术融合、个性化深化与文化遗产传承的发展趋势。

kappa的博客 114

RDKit | 基于Murcko骨架聚类化合物库

化合物多样性评估 一种方法是使用合适的指纹技术将化合物矢量化并评估他们之间的距离。这种方法经常被使用,但是对于人类很难直观地理解化合物之间的距离。 基于Murcko骨架,分子大致聚集在化合物骨架中,并且每个簇中的顶部化合物都作为候选化合物。此方法非常符合人类的直觉,因此可以预期人将通过查看候选化合物列表来自动缩小化合物的范围。 Murcko骨架 Mur...

DrugOne 3766

深入Sonic工作流:解析音频驱动、唇形同步背后的简易操作

本文介绍了如何在星图GPU平台上自动化部署“语音+图片合成数字人视频工作流”镜像,快速实现数字人视频制作。该平台简化了部署流程,用户只需提供人物图片和音频,即可生成唇形同步的说话视频,广泛应用于虚拟主播、在线教育课件等场景,大幅降低创作门槛。

weixin_36001279的博客 29

实现真正的「人机」对战:引入三方 AI 引擎

引入三方 AI 引擎 前边,我们实现了与云库对战的象棋游戏。这一节中,我们将开始实现真正的「人机」对战 — 人与手机 AI 之间对弈; 实现一套象棋 AI 工程浩大,这个工作我们后续文章会做一番介绍。现代软件工程并不主张每个人都「造轮子」,因此我们要有「站在巨人肩膀上」的小智慧。 本节概要 从 github 寻找开源中象引擎 梳理引擎接入的思路 寻找适合的开源中国象棋引擎 github 上有大...

tosmart的博客 983

分享五个适合新手的Sonic入门级学习资源

Sonic是一款由腾讯AI Lab与浙大联合研发的轻量级语音驱动数字人模型,仅需一张照片和一段音频即可生成自然流畅的说话视频。通过ComfyUI可视化操作,无需编程也能快速上手,适合短视频、虚拟主播等场景应用,消费级显卡即可本地运行。

weixin_35390379的博客 345

模型实战(16)之StrongSort (OSNET)配合YOLOv5、v7、v8 实现多目标跟踪详解

StrongSort (OSNET)配合YOLOv5、v7、v8 实现多目标跟踪详解

yohnyang的博客 1770

Python爬虫实战:使用最新技术爬取新浪新闻首页数据

本文详细介绍了三种爬取新浪新闻首页的技术方案,从简单的requests-html到强大的Playwright,再到分布式Scrapy架构。小规模爬取:requests-html或aiohttp方案需要JavaScript渲染:Playwright方案大规模分布式爬取:Scrapy-Redis方案。

2201_76125261的博客 1243

7个秘诀掌握Sonic Visualiser:音乐音高分析新手入门终极指南

你是否在音乐制作中难以精确捕捉音高变化?是否尝试过多种音频可视化工具却得不到理想结果?作为一名音乐分析爱好者,我将带你通过Sonic Visualiser这款强大的音频可视化工具,掌握音乐音高分析的核心技巧。本文将用探索式学习的方式,从实际问题出发,带你一步步成为音高分析高手。 ## 🎯 问题:为什么你的音高分析总是不准确? 让我们先来看一个常见场景:当你导入一段小提琴独奏音频,尝试用基础音

gitblog_00309的博客 389

银河麒麟编译libjpeg库并配置qt环境

银河麒麟下编译libjpeg库并配置qt环境验证

小米的修行之路 1014

Sonic数字人expand_ratio取值多少合适?动作裁切问题详解

本文介绍了在星图GPU平台上自动化部署“语音+图片合成数字人视频工作流”镜像的方法。该平台简化了Sonic数字人视频的生成流程,用户通过上传图片和音频,即可快速制作出适用于虚拟主播、在线教育等场景的口型同步视频,有效提升内容创作效率。

weixin_36238982的博客 807

135、高通 ChromaTix 调优工具入门:参数含义、调优流程与效果对比

本文介绍了高通ChromaTix色彩调优工具的核心使用要点:1. ChromaTix是位于ISP管线中的色彩处理系统,核心任务是将原始色彩映射为符合人眼感知的"舒适"效果;2. 重点解析了饱和度、色调、亮度相关饱和度等关键参数的实际含义和调试陷阱;3. 分享了四步调优流程,强调需要基于多场景数据验证;4. 通过案例展示了参数调整带来的色彩改善效果;5. 总结了实用建议,包括保持单一变量调试、量化评估色差、关注极端场景表现等。文章指出ChromaTix调优是平衡不同场景需求的"妥协艺术",需要结合客观数据和主

sundong_81的博客 107

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Sonic数字人如何集成ComfyUI?可视化工作流导入步骤详解

本文介绍了如何在星图GPU平台上自动化部署“语音+图片合成数字人视频工作流”镜像,快速搭建Sonic数字人视频生成环境。用户通过该工作流,仅需上传一张人物照片和一段音频,即可自动化生成口型精准、表情自然的数字人视频,轻松应用于虚拟主播、在线教育等短视频内容制作。

weixin_35749796的博客 182

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

sonic-ios-bridge(sib)命令行工具在iOS自动化测试中的实战应用

本文详细介绍了sonic-ios-bridge(sib)命令行工具在iOS自动化测试中的实战应用。作为一款跨平台的iOS调试工具,sib通过简洁的命令行操作大幅提升测试效率,涵盖设备管理、WDA服务启停、模拟定位等核心功能。文章还提供了安装指南、常见问题排查及高级应用场景,帮助测试工程师快速掌握这一利器。

weixin_30919429的博客 361

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Sonic数字人expand_ratio参数设置技巧:避免面部动作裁切实战指南

本文介绍了在星图GPU平台上自动化部署“语音+图片合成数字人视频工作流”镜像,实现数字人视频的快速生成。该工作流通过调整expand_ratio等核心参数,可有效避免面部动作裁切,广泛应用于虚拟主播、在线课程讲解等场景,显著提升数字内容创作效率。

weixin_34268462的博客 670

初识Go语言23-常用标准库【编码】

初识Go语言23-常用标准库【编码】

m0_52896752的博客 367
上一篇: 国内主要的ubuntu 源
下一篇: SONiC System Architecture
废言Pro
博客等级 码龄16年 1093粉丝 142原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值