18

为何P4“落户”智能网卡?

 4 years ago
source link: https://www.sdnlab.com/24074.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

作者简介:张渐修,任职于上海同悦信息科技有限公司从事P4交换机相关工作,Wechat: Tooyumzjx.

由前思科“MPLS”四人组新成立的Pensando Systems公司最近推出了一款基于全可编程处理器的分布式服务卡(DSC),支持P4语言的编程。DSC卡从物理规格看就是插入标准服务器的适配卡,鼎鼎大名的业内大拿们为何选择了PCIe卡作为突破口,并且选择P4语言作为主要的开发工具,本文基于公开资料介绍如何实现一款支持P4语言的接口卡以及P4语言发挥的关键作用。

DSC卡主要对标AWS推出的Nitro卡,因此DSC不是一款普通的智能网卡,它作为分布式服务平台的核心,目标在于提供高性能、可扩展的网络、存储和安全服务。

之所以采用分布式的插卡方式,目的在于消除集中设备的瓶颈,提供更加优异的流量可视性,尤其在私有云、公有云、混合云以及企业数据中心网络中可以体现出显著的优势。在这些场景中,东西向安全问题日益成为一个主要问题。DSC卡包括专门的硬件模块可以加速压缩和加密等计算密集型功能,而且通过P4可线速实现数据平面的可编程性。

101.jpg

图1: 分布式服务卡DSC

网络边缘的价值

网络交换机曾经是P4编程的最初重点,但把P4理念应用到网络外围的终端节点时,它可以呈现出更大的潜力,此时终端节点可以在scale-out模型中实现网络、安全和存储服务,类似于云计算所利用到的模型。因为随着主机和工作负载被添加到网络中,随之增加的DSC板卡在网络边缘通过P4实现的服务就可以天然地扩展。同时,考虑到(i)边缘设备通常处理报文的速率较低,以及(ii)服务越靠近流量的源和目的地,应用逻辑就可以提供越高的附加值。因此DSC可以对每个数据包进行更复杂的处理。

如果在网络边缘以分布式的方式实现服务,流量就近处理,这时就不需要通过复杂而低效的集中式应用来引导流量。这对于东西向流量(即工作载荷之间的流量)来说尤其如此,在现代云数据中心中,这类流量约占整体流量的90%。

当前云计算和企业级数据中心通常是采用成熟的Spine-leaf拓扑架构建立三层Clos网络。Leaf和spine交换机作为简单高性能的IP路由设备利用IP ECMP将流量分散在多个路径上,从而利用所有可用的传输资源实现高吞吐量。在这种情况下,集中式应用很难天然地处理数据包的每一条路径。

而且,如果必须通过应用来引导流量这就会导致“流量往返”现象:数据包必须多次穿越Clos网络,破坏了Clos网络中由Spine和leaf在整个Clos网络中实现的ECMP路由所具备的流量优化。此外,设备本身也容易成为流量瓶颈和单点故障。

102.png

图2 “流量往返”现象

云服务商很早就发现了这个问题,并将网络、存储和安全相关的服务从网络核心转移到了服务器附带的外围设备上。就像计算和存储系统正在采用 "scale out"的方式一样,数据中心的网络和安全设备也必须采用"scale out"的服务架构,这些功能需要在这种模式中找到新的落脚点。实现这些服务实例化的理想场所就是服务器边缘(服务器和网络之间的边界),在这里,防火墙、加密、隧道和VPN终端等服务都可以通过可扩展的方式交付。事实上,每个服务器边缘都与单一服务器紧密耦合,只需要知道与该服务器及其用户相关的策略即可。这种方法可以自然扩展,即随新服务器的增加而相应地带来更多的服务能力。

但是纯软件化的解决方案在云计算层面上无法扩展,而且主机中通常需要专用硬件。由于这些服务相对复杂,并且随着时间的推移需求也在变化,因此固定功能的硬件也不是一个行之有效的选择。所以P4可编程适配器(如分布式服务卡DSC)是有效支持网络边缘服务的一个选择。

分布式服务卡设计细节

图3所示为DSC架构。P4报文处理数据平面通过一组可编程的流水线提供了高性能的数据包处理能力,这些流水线为协议处理进行了优化:每个阶段包括表查找逻辑,以及专门的处理器来执行头字段操作。多个并行的流水线提供了高度的并行性,确保了在吞吐量、有限延迟和延时差异方面的优异性能。P4程序的流水线式执行可以最大限度地减少数据缓存未命中的概率(因为每级都是在一个单表内操作并且元数据的特定子集更容易落入本地缓存),从而避免从外部缓存中获取指令(由于表项的匹配,每级只执行由一小部分操作集定义的简单操作)。

103.png

图3: 分布式服务网卡架构

各种流水线的不同级数和组织方式是保证执行复杂处理时的能力以及通用性的关键。如果流水线级数不足以实现给定的功能,则需要对数据包进行再循环,从而影响到设备的吞吐量。在DSC中,流水线各级被并行放置于多个独立模块。由于每条流水线每秒可以处理的报文数量有上限,因此模块的并行程度确保了线速运行的能力。不同的模块可以专门用于特定的任务(比如输入处理、输出处理等),也可以将不同的块相互串联起来,形成较长的流水线。同时,模块也可以与其他处理模块(比如ARM内核和服务处理卸载模块)进行串联,以实现更复杂或高效的处理。以线速执行各种复杂应用,比如SSL/TLS卸载、NVMe-oF/TCP、有状态的防火墙等实现来看,这种设计具备扩展能力和良好的粒度,使流水线中执行的处理与其他处理模块执行的处理交替进行。此外,流水线模块可以从DSC内存、主机和报文缓存中获取和传递数据包。为了充分利用流水线中设计的专用处理器并与卡的其他组件紧密集成,系统编程依赖于对P4语言的扩展。

报文缓存作为片上的主数据包交换器,将数据报文从网络接口传送到P4可编程报文处理数据平面,反之亦然。

服务处理卸载是专门的硬件模块用于线速处理特定任务,比如加密功能和压缩/解压等。

在P4报文处理数据平面提供快速路径处理功能的同时,一组ARM内核还能进行更复杂的数据平面处理。此外,运行于ARM处理器上的Linux环境为控制和管理平面功能提供计算能力。

三个处理模块(P4报文处理数据平面、ARM内核和服务处理卸载)都可以通过一致性互连来访问板卡内存。存储器也可以映射到PCIe空间上供主机软件进行I/O访问。由于所有的处理模块都可以访问板卡内存,因此对于例如TCP卸载,内存可以用来保存有状态数据包的状态信息。此外,它还可以在需要处理报文的有效载荷时用来存储完整的数据包,这在应用层处理中非常关键。

为了在网络接口上(比如200Gbps)以线速访问完整的数据包,在处理报文时除了执行一些表查询和状态更新外,内存带宽被设计成至少可读取和存储每个报文一次。

通过PCIe接口(例如主机)或网络接口(例如远程控制器,比如Pensando的策略和服务管理器PSM)可以配置和管理运行在DSC上的应用程序。DSC为集中控制器或者管理系统提供了REST和gRPC API接口。

104.png

图4:DSC分布式部署

P4社区的未来

DSC只是分布式服务平台的一部分,Pensando已经在该平台上开发了许多应用(包括控制和数据平面组件),同时一些客户正基于早期版本的DSC开发工具在卡上实现自己的应用。然而,要向更多的用户开放平台,让更多的用户进行编程,需要有一个架构模型和一整套强大的开发工具。

为了实现这些目标,Pensando于今年2月份加入P4社区,致力于围绕便携式网卡架构(PNA)的规范积极推动架构工作组的工作,并可能在语言设计工作组内提出P4语言的扩展,以实现网卡和主机之间通过PCI总线的交互。作为一个长期目标,Pensando正在考虑开放一些在DSC上运行的应用程序,以便社区成员和客户可以通过添加P4代码来实现自己的功能,从而对其进行定制。有鉴于此,Pensando将与P4社区合作,增加对增量编程的支持,并可能增加新的架构模型。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK