物联网
CPU作为计算机的“大脑”扮演着重要的作用,网络、存储、计算……各种处理都需要CPU“亲历亲为”,导致其负荷过重,极大地影响了效率。为了解决这个问题,人们先后尝试了多种方法:扩充计算机容量、采用分布式处理、或提高其性能……
十多年前,软件定义网络提出将控制平面与数据平面分离开来。如今,规模日益增大的数据对CPU提出了越来越大的挑战,对于数据,是否有更创新性的处理方法呢?本文将系统介绍SDN中的硬件卸载,包括硬件卸载概念、背景、方式、实践模拟等。
什么是硬件卸载?
硬件卸载是指将某些任务或计算从计算机的主处理器 (CPU) 转移到专用硬件组件(例如网络接口卡 (NIC) 或图形处理单元 (GPU))的过程,以提高系统性能和效率。这可以通过不同的方式、使用不同的技术和设备来完成。本文重点讨论软件定义网络中的硬件卸载情况。
什么是软件定义网络?
随着网络中设备数量和数据包处理量的不断增加,需要一种新的方法来管理网络。主流的解决方案是从传统的包含专用硬件与控制平面相结合并提供选定的功能的交换机等单个设备,转移到软件定义网络抽象出的控制平面、数据平面、管理平面三个不同的层。如下图所示:
| 软件定义网络的演进
第一层是管理层或管理平面。这就像OpenStack这类应用所在的位置,可以将一些配置应用于网络并将其用于虚拟化等领域。下一层是控制平面。最下面是数据平面。它由硬件(例如白盒交换机)和软件(软件数据平面)组成,数据平面就是硬件卸载所在的地方。
软件数据平面是一个常用的术语,用来描述处理网络数据包中用户数据的应用程序。它包括了各种功能,例如转发应用程序(就像虚拟交换机一样)或是更专门的应用程序(比如作为虚拟网络防火墙)。最常用的情况下软件数据平面可以实现SDN的网络虚拟化功能,并将数据包传递给在虚拟化主机上运行的虚拟机。简而言之,软件数据平面让网络应用程序能够高效地处理和转发数据,以满足各种网络需求。
软件定义网络的挑战
软件数据平面在虚拟化主机上使用通用的CPU来运行数据包的转发和处理。尽管它可以将数据包分发给不同的虚拟机,但也存在一定的成本。
然而,使用软件进行数据包转发可能不够高效,无论是延迟还是数据包吞吐量方面。此外,为了实际运行数据转发平面,需要从主机操作系统中分配资源。这包括CPU资源(如时间和内存),而且性能的可靠性可能会受到挑战。特定的数据包流量特征或高负载工作可能会对软件数据平面的性能产生影响。
在接下来的部分,我们将展示如何利用硬件卸载来避免这些问题。通过硬件卸载,可以将一些数据包处理任务转移到专门的硬件中,从而提高性能和效率。这样可以减轻主机CPU的负担,并减少延迟,同时提高数据包的吞吐量。硬件卸载提供了一种更可靠和高效的方式来处理数据包转发,尤其是对于具有特定需求或高负载的情况。
硬件卸载如何提供帮助?
有一些纯粹的软件技术或方法可以缓解这些问题。与其依赖中断来获取数据包,我们可以在网络设备上使用硬件轮询。与在用户空间和内核空间之间复制内存或数据包不同,我们可以使用直接内存访问技术。然而,这往往会导致需要更多的资源。
运行软件数据平面往往伴随着高成本,这也表明了,也许使用硬件才是更好的选择。
SDN 中的硬件卸载
硬件卸载分为部分卸载和完全卸载两种方式。在部分卸载中,处理简单的网络任务(如匹配数据包头中的字段或替换某些头部)被委托给硬件,但数据包仍然必须进入软件中通过某个虚拟交换机进行处理,并转发到适当的目的地。
在完全硬件卸载中,数据包转发的责任被委托给硬件。硬件不仅匹配字段或替换头部,还将数据包转发到适当的端口,通常是卡的虚拟功能。
这两种解决方案都有利弊。部分硬件卸载具有软件交换的所有优点,因为数据包仍然进入软件进行处理,但性能较低。完全卸载中,网络性能更好,因为硬件完全处理数据包,但失去了灵活性。例如,由于虚拟机直接连接到硬件,迁移虚拟机更加困难。
使用网卡进行硬件卸载
在硬件卸载中,最好的解决方案是使用传统的网卡,也称为网络接口卡或网络接口控制器。这是一种流行的设备,您可能已经在您的软件定义网络中部署过。市场上大多数网卡都支持硬件卸载,并提供诸如VLAN或VXLAN封装和解封装、按数据包头进行匹配等功能。这种设备被认为成本和功耗较低,并且相对快速。另一个优点还包括供应商提供可靠的资源,例如设备的整个生命周期内的文档和支持。
然而,传统网卡也有一些缺点。供应商不仅选择功能,还选择使用这些功能的API 。因此,如果网卡不具备您正在寻找的功能,可能就需要换另一个设备。
下一步 - SmartNIC
SmartNIC 是可以绕过传统网卡限制的一种方法。SmartNIC 与网卡类似,但添加了可编程部分,通常是 FPGA 或 ASIC。用户可以自行对 FPGA 进行编程,从而实现所需的功能。
由于 FPGA 是完全可编程的硬件,我们甚至可以用它来实现更复杂的程序,例如一个 L3 路由器。这样,你就可以在硬件中完成所有路由。但即使在这种情况下,软件和硬件之间仍然存在连接。在这个 L3 路由器的例子中,仍然需要将路由表和路由条目插到卡中,软件仍然负责这部分工作。
DPU/IPU - 下一代智能网卡
要完全从软件过渡到硬件,还需要另一个设备,也就是SmartNIC的下一个演进阶段,称为DPU、IPU 或下一代 SmartNIC。这相当于是一个添加了CPU的智能网卡。
| 下一代 SmartNIC
当你使用 DPU/IPU时,硬件拥有自己的 CPU。你甚至可以在卡上运行一个独立的操作系统,并运行负责在路由器中插入规则的软件应用程序,以实现与软件的完全隔离,这样一来,主机上的所有资源都可用于工作负载。
硬件卸载 - 现实生活中的例子
在了解了硬件卸载的基本概念之后,我们来具体看一下软件定义网络中的用例。下面通过一个现实生活中的例子来展示硬件卸载的可能性。该解决方案旨在通过OpenvSwitch进行VXLAN隧道卸载。
| SDN环境
首先,让我们了解SDN环境的概况。在这个复杂的软件定义网络环境中,我们有OpenStack作为虚拟化编排器,并且有OpenDaylight作为控制平面,管理着Open vSwitch实例和硬件路由器。对于Open vSwitch实例,我们使用OpenFlow和OVSDB协议,在硬件路由器方面我们使用NETCONF协议。通过这个基础架构,我们能够为虚拟机提供从一个独立位置的数据中心到另一个独立位置的数据中心的VXLAN隧道。
| 问题隔离
这个例子其实不需要这么复杂的环境。由于采用了 SDN 的方法,我们只需要一个 Open vSwitch 实例。需要进行一些配置来创建VXLAN端口,这将通过 OVSDB 协议完成。在实际的数据包处理和转发中,我们需要将数据包分发到适当的隧道和虚拟机。
| 解决方案架构
在这张图中可以看到解决方案的高级架构以及所有重要部分。有一个由 OvS 实例管理的虚拟机。它通过 VXLAN 隧道与其余的overlay网络连接。在此设置中,我们使用 OvS 的 DPDK 版本,并使用了Netronome Agilio 作为一个SmartNIC,使用 P4 语言编写的固件进行编程。值得注意的是,我们使用的是OVS的默认版本,没有进行任何定制。唯一需要的定制是在 DPDK 中进行的。
数据包可以采用两条路径。我们称之为慢路径和快路径。慢路径由黑色箭头表示。数据包从虚拟机经过Netronome Agilio到达OvS实例,并封装在 VXLAN 隧道中,随后通过物理端口发送到网络。返回的数据包沿着相同的路径并由 OvS 解封装。
由于SmartNIC可以完全独立地处理数据包。因此快路径就是数据包从虚拟机发送出去,然后由 Netronome Agilio 处理和封装,并直接发送到物理端口。返回的数据包也可以由网卡解封装并直接转发到虚拟机。这条路径要短得多,所以数据包传输得更快。这个案例是完全卸载的一个例子。
最后,有人可能会问,为什么我们需要慢路径呢?这是因为OvS使用了一种反应式流插入机制。OvS需要看到一个数据包来创建相应的流。因此,第一个数据包必须进入OvS,创建相应的流规则,然后再将其卸载到Netronome Agilio。后续的数据包可以由Agilio处理,并采用快路径进行处理。
部署流程
首先,我们需要了解 OvS 隧道和卸载机制。然后在P4固件中实现慢路径部分,并在DPDK中实现慢路径驱动程序。完成这一步操作后,我们在 P4 固件中实现快路径部分,并实现了将流规则插入到Netronome Agilio的机制。
硬件卸载演示的结果
为了测试解决方案,我们使用了TRex流量生成器和分析器。由于我们的设置限制,我们运行了L2转发而不是VXLAN,并使用了一个具有内核桥接的Open vSwitch作为参考。如图所示,延迟显著改善。
| 延迟对比
不仅延迟更好。通过快路径的数据包几乎没有任何抖动。这意味着所有数据包都通过硬件在相同的时间内进行处理。
| 抖动对比
另一方面,在参考案例中存在明显的抖动。这展示了来自网卡处理中断以及内核中运行的其他软件的中断处理相关的问题。
结 论
硬件卸载对控制平面软件的影响较小。在SDN的架构下,控制平面软件通常不需要参与其中,因此对于该软件来说,实际上没有提供输入的必要性。然而,在数据平面软件方面,硬件卸载得到了广泛的支持。Open vSwitch和其他项目都提供了对硬件卸载的支持,Tungsten Fabric或VPP只是其中的两个例子。这种支持意味着数据平面软件能够与硬件配合,从而提高性能和效率。
在软件层面,有不同的策略可供选择。各种软件方案可以与硬件配套使用,以实现数据平面的优化。同时,在硬件方面,存在着成熟的解决方案,如传统的网络接口卡(NIC)或者是新一代SmartNIC/DPU 等,这些网卡提供了与软件配套使用的硬件功能,以提供更高的吞吐量和更低的延迟。
此外,对于特定领域的应用,还可以自行开发定制的硬件解决方案。这种情况下,可以根据特定需求和应用场景设计和构建专用硬件,以满足个性化的要求。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !