软硬件融合 · 2021年08月10日

Pensando DSC:网卡侧的数据面可编程架构

编者按:

Nick McKeown在ONF Connect 2019演讲中定义了SDN发展的三个阶段:

  • 第一阶段(2010–2020年):通过Openflow将控制面和数据面分离,用户可以通过集中的控制端去控制每个交换机的行为;
  • 第二阶段(2015–2025年):通过P4编程语言以及可编程FPGA或ASIC实现数据面可编程,这样,在包处理流水线加入一个新协议的支持,开发周期从数年降低到数周;
  • 第三阶段(2020–2030年):展望未来,网卡、交换机以及协议栈均可编程,整个网络成为一个可编程平台。

这预示着,未来不管是交换机侧还是网卡侧,均需要实现类似CPU与通用程序设计的完全可编程的网络处理引擎,并且要基于此平台实现一整套的软件堆栈。把一个完全可编程的网络交给用户,支撑用户更快速的网络创新。

站在业务的角度,在网卡侧实现P4的可编程平台的意义比交换机侧更加重大。在网卡侧可以实现非常多的更高层的协议甚至自定义协议支持,不仅仅是网络2-3层的协议支持。

Pensando的DSC芯片,是已知的全球第一家商用的网卡/边缘侧的P4数据面编程DSA引擎。本文将对Pensando的可编程数据面架构做一个基本的介绍。

参考文献:

https://opennetworking.org/wp...

网络边缘侧的可编程数据面架构

1.jpg

Mario Baldi,Pensando公司Distinguished技术专家。

他是一个非常活跃的P4社区成员,工作在可编程数据平面。

他的主题演讲是网络边缘侧的可编程数据面架构。

2.jpg

演讲的大纲主要如下:

  • 第一个是,在网络边缘侧如何实现分布式服务,也即对Pensando平台的介绍。
  • 第二个,要介绍的是关键的DSC卡的架构,它是整个问题的核心。
  • 接下来是几个代表性的案例,来看看整个架构如何支持我们描述的这些功能。
  • 最后,看看这张卡实现上述这些案例的性能数据。

3.jpg

DSC卡的主要功能是可编程处理器。我们设想,数据中心的每台服务器都可能部署这样一张卡,这样我们提供服务的范围就越广。

在卡上,我们可以实现网络服务如网络负载均衡,安全服务如状态防火墙、解密卸载、TLS卸载或微分割,或者存储服务如分布式存储。

最后是遥测和可视化服务。

我们可以从卡中收集生成的或接收的流量的有限信息,可以监控,也可以捕获需要的流量。

这些卡是分布式的,但是是通过集中式的管理程序进行管理的。我们称之为策略和服务管理器(Policy and Services Manager)。

4.jpg

这是DSC(Distributed Services Card)的架构图,首先这是一个Host适配器。一端通过PCIe连接Host,一端通过Ethernet连接到网络。网络一般连接到TOR交换机。

有两个Ethernet端口,DSC卡有两个版本,1个是25Gx2,另一个是100Gx2。

从网络进来的数据存储在Packet Buffer中,这是一个排队系统,通过一个交通管理器(Traffic Manager)管理。TM具有各种QoS、调度算法等。

然后数据进到一个支持P4数据面可编程的包处理器引擎。在包处理引擎进行处理之后,发送的数据会转发到Packet Buffer用于发送;接收的数据则转发到主机。

此外,集成的高性能ARM Core也可以在必要的时候进行数据处理。例如,有些复杂的处理用ARM Core要更合适一些。

其他一些卸载功能,如加解密等安全类这些数据处理密集型任务的加速,则是在Service处理卸载模块里进行处理。

最后,内存支持2/4/8GB等规格,在一些大数据量的处理中,内存的作用非常关键。

5.jpg

接下来,讲一讲基于Pensando创新的DSC架构加速卡,有哪些典型的应用场景。

6.jpg

首先是TLS卸载。这个是SmartNIC的典型场景。但DSC和SmartNIC不完全相同。

需要在DSC中完成TCP连接打开/关闭、连接状态、流量控制、拥塞控制等。

并且需要对传输的数据进行加解密,这些都是非常消耗CPU资源的任务。

7.jpg

所以,最终是在DSC中实现TLS代理,最终各种网络的HTTP访问在DSC中的TLS代理终止,DSC创建一个HTTPS访问到网络中。

8.jpg

如何在DSC架构上满足这些功能?

接收的Host侧的网络包之后,首先送到包处理引擎。通常的包直接在P4包处理流水线进行处理,如果是TCP连接和TLS会话的包则转发到ARM Core,由软件进行处理。主要进行的工作有连接建立,把状态更新到P4包处理流水线的Table中。

之后的数据包继续在P4包处理器流水线进行处理,如果需要加解密,则需要调用服务处理卸载部分的加解密引擎。

9.jpg

另一个案例是基于TCP的NVMeoF。

这里给裸机暴露的是NVMeoF的设备接口;而虚拟机则是通过NVMe emulation暴露的是NVMe的设备接口,但最终还是通过Host侧的NVMeoF接口连接到后端NVMeoF Target设备。

10.jpg

如果想要卸载这些功能,则在DSC卡上要实现NVMe Emulation,然后通过NVMeoF接口连接到后端设备。

来自Host侧的消息命令,通过基于RDMA或TCP的NVMeoF转发到后端设备。

11.jpg

NVMeoF卸载在DSC中的映射:

PCIe接口接收到上面的NVMe命令,然后这些命令会在P4包处理引擎中被转换成NVMeOF格式。存储数据是敏感数据,如果不希望在网络中明文传输,则可以通过服务处理卸载部分的加速引擎进行数据加解密、数据摘要的生产和验证。

DSC卡是附属到Host的,DSC是专门的集中管理工具进行管理,Host不需要安装任何其他软件。

12.jpg

再一个例子是东西向的防火墙。用来保护服务器之间的网络数据传输。

东西向的流量比南北向的流量大的多。

南北向的流量通常指的是流出数据中心的流量,而东西向流量则指的是数据中心内部服务器之间的流量。因此,东西向的流量对延迟也要更加敏感。

在交换机侧解决traffic tromboning不是一个很合适的地方,而应该是在Edge侧。

13.jpg

DSC是解决Traffic tromboning的最合适的位置。首先呢,所有的网络包都要经过这里。

在DSC侧实现防火墙,不需要网络包在网络中传输两次。

实现Flow Caching来降低延迟,首包的时候来评估规则,知乎把规则下放到flow cache里,之后的网络包则由硬件进行处理。

14.jpg

在DSC中,对有状态防火墙的支持。

当网络包属于已知的流时,即这个规则在Flow cache table中,这个包直接转发;当一个新的流的包时,则需要经过整个包处理的流水线进行详细的处理,来决定到底是该确认还是该拒绝。然后数据包会被送到ARM Core,由软件来创建转发和撤销Flow Cache表中的流表项。

数据包被重新送到包处理引擎,基于新的已安装的Flow Cache项进行处理。

15.jpg

新的流下载到流表中,有几种方式:

  • 第一种,网络包和行动都送到CPU,CPU软件解析数据包并更新转发和撤销流表项。这种方案比较依赖CPU软件,大约一秒处理100万条新的流。
  • 第二种,包处理引擎流水线已经解析了相关的元数据,并把他们送到CPU,CPU软件创建转发和撤销流表项。这种方式性能提升3倍,达到每秒300万新流的处理能力。
  • 第三种,包处理引擎流水线解析相关的元数据,并送到CPU,然后流水线创建转发和撤销流表项。这种实现当前还在进行中,没有具体的性能数据。

在DSC中提供了可编程的流水线处理,实现了很多独一无二的feature;并且,流水线和其他组件紧密集成,可以实现非常复杂的应用支持以及非常高的性能。

16.jpg

17.jpg

第一个性能测试,是通过交换机相连的两个网卡进行iperf点对点测试,并且在DSC运行分布式的有状态防火墙。

性能如图所示。小包下大概有33Mpps以上的包处理能力,然后在2K及以上大小的包,基本能实现接近线速的带宽。

18.jpg

我们采用上图左边的连接,称之为Bump-in-the Wire模式,DSC是从一个网络口进从另一个网络口出,DSC用来做防火墙。这种方式适合于原有的系统因为各种原因不适合做改动的情况。

我们实验环境采用的是通过Server连接两个DSC的方案,如上图右上角所示。

性能数据如图所示,主要是由于数据包主要是在经过高度优化的DSA实现的P4可编程包处理引擎上进行的。

19.jpg

最后,总结一下。

我们给出了DSC的架构概述,也介绍了如何使用DSC卡实现各种服务和应用,实现Host侧Workload的卸载。同时,也可以把一些集中的交换机侧的任务分散到DSC去实现,降低交换机侧的复杂度。

并且,DSC卡能够实现高吞吐量、低延迟和低抖动,并且完全独立于Host工作。

(正文完)

作者:黄朝波
来源:https://mp.weixin.qq.com/s/Uesh59ita6MYGiWWSw6TOQ
微信公众号:
软硬件.jpg

相关文章推荐

更多软硬件技术干货请关注软硬件融合专栏。
推荐阅读
关注数
2807
内容数
108
软硬件融合
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息