SONiC-DASH:网络可编程的进化之路

SONiC(Software for Open Networking in the Cloud,云中开放网络软件)是一个基于 Linux 的开源网络操作系统 (NOS),旨在为现代网络环境带来灵活性和效率。与传统的专有网络操作系统相比,SONiC的核心思想是引入开放网络原则,即将硬件与软件解耦,使得网络设备的操作系统可以在各种硬件平台上运行,从而促进了互操作性。SONiC是最受欢迎的网络开源项目之一。

SONiC-DASH是SONiC NOS的扩展,全称为Disaggregated API for SONiC Hosts,简称DASH。它是一款开源软件,旨在利用各种智能网卡(SmartNIC)、智能交换机(SmartSwitch)、数据处理单元(DPU)、IPU、加速器和其他网络设备,为云应用提供企业级网络性能。DASH的设计目标是将SONiC扩展到标准功能之外,允许在边缘或者定制网络路径上使用。通过DASH,管理员能够利用外部处理元件来卸载CPU并加速各种任务,例如人工智能/机器学习、数据分析、深度数据包检测、媒体和信号处理、虚拟现实以及科学和军事应用等。DASH还提供了一个框架,用于编写这些服务的行为模型,以及测试用例。

DASH 的主要目标是让可编程技术足够具体,以优化网络性能并充分利用商用硬件技术,从而实现10倍甚至100倍的状态连接性能。

SONiC 和 DASH 架构

SONiC 是一款专为交换机(包括TOR交换机、spine交换机和边界leaf交换机)量身定制的网络操作系统,为网络设备管理提供了强大的框架,实现了网络操作的可编程性和自动化。

另一方面,DASH主要运行在智能设备上,专注于从CPU上卸载处理任务以提升任务加速。 DASH 利用 SONiC 提供的现有 API 扩展其功能来与基于 SONiC 的网络环境集成。

DASH 建立在 SONiC 的基础系统架构之上。它仍然依赖于 redis-db 作为数据和模块的中心点,这些数据和模块打包到容器中,发布/订阅数据并与外部环境进行交互。 DASH 由 SONiC 模块组成,并进行了一些扩展,可以与现有 SONiC 生态系统无缝集成。

下图展示了 DASH 扩展或添加的模块以及它们之间的交互:


图 1:SONiC 和 DASH 架构

如果我们将 DASH 视为与外部环境交互的黑盒软件,则会涉及两个主要组件用于通信。第一个是北向API,称为DASH API,它方便SDN控制器对DASH的管理。第二个是南向 API,它是一种扩展的 SAI API(交换机抽象接口 API),提供独立于供应商的机制来控制转发元件。

DASH扩展的组件:

  • gNMI容器:负责实现gNMI协议的组件,基于gRPC和Protocol Buffers。它支持使用基于 gNMI 的网络管理工具和平台远程管理和配置 SONiC-DASH 设备。
  • Redis DB:主要用于存储实时操作数据以及SONiC生态系统内各个组件之间的通信。
  • orchagent:负责将高级配置转换为低级操作的关键组件。 Orchagent 抽象了网络设备配置,使 SONiC 能够通过与 SAI API 接口在各种硬件平台上无缝工作,SAI API 提供了用于访问特定于硬件的功能的标准化接口。
  • 交换机抽象接口(SAI)API:提供标准化编程接口,抽象不同底层交换ASIC和硬件平台的功能。

DASH 配置由 SDN 控制器编排,管理基础设施物理层(underlay)之上建立的overlay层。 SDN 控制器和 DASH 设备之间的通信通过托管在新 SONiC-DASH 容器内的基于 gRPC 的 gNMI 端点进行。在 DASH 容器中,在 gNMI 中建模的 SDN 配置被转换为 Redis DB 中的 DASH_APP_DB 对象。

随后,交换机状态服务 (SWSS) 容器内的 SONiC orchagent得到增强,可将这些对象转换和解释为 ASIC_DB 对象,包括新引入的 DASH 特定 SAI 对象。然后,改进的syncd利用供应商特定的SAI 库来配置数据平面。

DASH管道

DASH 在传统 SONiC 管理的底层基础设施之上建立了overlay服务。这种overlay服务或应用利用管道作为自适应处理单元,允许创建自定义处理逻辑,每个阶段都描述了一系列表,表项根据指定的标准匹配数据包并执行相应的操作。这些管道位于数据平面(例如SmartNIC, DPU),支持动态配置。

此外,还可以对管道进行编程,以动态适应不断变化的网络需求。这种灵活性支持定义针对特定数据包行为的操作,如丢弃、转发、修改或保存。例如,入站数据包处理管道可以管理发往虚拟网络 (VNET) 内的虚拟机 (VM) 的流量。


图2:入站数据包处理管道

DASH 是一个相对较新的项目,目前已经为云提供了一些初始服务。

以下是支持的应用程序:

  • VNET 到 VNET - 允许 VNET 中的 VM 到 VM 通信、路由支持、LPM 支持、ACL 支持;
  • VNET 对等互连 - 连接两个或多个虚拟网络;
  • 高可用性 (HA) - 在故障转移的情况下提高可用性;
  • 负载均衡 - 使用虚拟机之间的直接路径在端点之间分配传入网络流量以确保高效利用;
  • 服务隧道和专用链路 - 在允许访问的 VNET 的专用链路之间建立连接;
  • 加密网关 - 管理网络内数据流量的加密和解密的服务;
  • 快速路由网关 - 允许客户建立云服务的私有和专用连接。

P4和 DASH

P4是一种特定于领域的编程语言,旨在定义交换机和路由器等转发设备如何处理网络数据包。与传统的网络语言不同,P4 专注于提供高水平的抽象来对数据平面进行编程,让网工能够自定义和优化数据包处理,无需依赖于特定的硬件或协议。

P4 是协议无关的,这意味着它允许用户定义数据包处理的行为,无需绑定到特定的网络协议。在快速发展的网络环境中,新的协议和技术不断涌现,P4 的灵活性显得尤其有价值。借助 P4,网络运营商可以调整其基础设施来支持这些变化,无需进行大量硬件升级或更换。

P4 的主要用例之一是SDN环境。SDN将控制平面与数据平面分离,允许网络管理员动态地控制和管理网络行为。P4 支持在数据平面中对自定义数据包处理逻辑进行编程,从而促进高度灵活和可编程的网络架构的创建。

DASH 定义了数据平面设备处理数据包的方法,主要通过管道来实现。 而P4 用于建模和描述 DASH 管道。通过P4,网工可以定义在硬件中执行的自定义数据包处理逻辑,从而减轻通用 CPU 的工作负担并加快数据包处理速度。

P4代码是数据平面行为的最终规范。具体来说,通过使用P4代码或由P4编译器生成的P4Info,可以自动生成DASH SAI头文件,从而建立P4代码与相应的DASH-SAI API之间的连接。此外,用于测试overlay服务的SAIThrift代码也是自动生成的。这种集成突显了P4作为数据平面行为的单一来源的重要性。

需要注意的是,P4用于描述数据平面的行为,用于生成头文件,但数据平面本身的实现并不一定要在P4中进行。如何实现数据平面取决于硬件供应商,但必须符合P4中描述的模型。


图 3:带有 P4 的 DASH 管道

如前所述,DASH是SONiC的扩展,其代码库和API有单独的存储库。尽管有这些单独的存储库,但构建过程通过其指定的构建环境(称为SONiC-buildimage)与SONiC无缝集成。在启动SONiC构建时,DASH代码会自动包含并编译,以确保其集成到SONiC生态系统中。为了确保操作功能的完整性,某些组件必须与DASH一起构建。

DASH旨在通过增强硬件编程来实现广泛的网络功能,它借助SONiC的架构和关键组件,并遵循SDN方法来实现数据平面。尽管DASH仍处于开发阶段,但已经与SONiC的主流基线集成。当前,硬件供应商还需要更多时间来发布符合DASH标准的设备。我们看到了这项技术的巨大潜力,它将成为未来网络实施的一个重要组成部分。


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/26491.html
分享到:
相关文章
条评论

登录后才可以评论

SDNLAB君 发表于24-04-24
0