网卡(Network Interface Card,简称NIC)是将电脑接入局域网的设备,网卡插在计算机主板的总 线插槽中,负责将用户要传递的数据转换为网络设备能够识别的格式,通过网络介质传输。
传统网卡仅实现了 L1-L2 层的逻辑,而由 Host CPU 负责处理网络协议栈中更高层的逻辑。即:CPU 按照 L3-L7 的逻辑,负责数据包的封装与解封装;网卡则负责更底层的 L2 层数据帧的封装和解封装,以及 L1 层电气信号的相应处理。
为适应高速网络,现代网卡中普遍卸载了部分 L3-L4 层的处理逻辑(e.g. 校验和计算、传输层分片重组等),来减轻 Host CPU 的处理负担。甚至有些网卡(e.g. RDMA 网卡)还将整个 L4 层的处理都卸载到硬件上,以完全解放 Host CPU。得益于这些硬件卸载技术,Host OS 的网络协议栈处理才能与现有的高速网络相匹配。
然而,由于 SDN、NFV 驱动的云计算/数据中心网络通信的快速增长,例如:随着 100G 浪潮的到来,Host CPU 将面临更大的压力,异构计算 Offload(异构加速技术)已是大势所趋。市场上需要一种具有更强卸载能力的新型 Smart NIC。
智能网卡(Smart NIC),也称智能网络适配器,除了能完成标准网卡所具有的网络传输功能之外, 还提供内置的可编程、可配置的硬件加速引擎,提升应用的性能和大幅降低CPU在通信中的消耗,为应用 提供更多的CPU资源。例如,在高度虚拟化的环境中,主机CPU需要运行OVS(Open Virtual Switch) 相关任务,同时CPU还要处理存储、数据包的在线加解密或离线加解密、数据包深度检查、防火墙、复杂 路由等操作,这些操作不仅消耗大量的CPU资源,同时由于不同业务之间的CPU资源争夺,导致业务的性 能不能发挥到最佳。网卡作为连接各种业务的枢纽,在网卡上对于上述业务进行加速,成为了最理想的场所。智能网卡的出现,为解决这个问题提供了新的思路,我们可以通过智能网卡来将OVS操作从CPU卸载下来,并完成存储加速、数据加密、深度包检测和复杂路由等各种功能,将花费在处理这些工作负载上的 大量的CPU周期返回给主机CPU,同时解决了不同业务之间的冲突问题,大幅提升了各项业务的性能,也确保了服务器CPU能为应用提供最大的处理能力或者提供更多的虚拟机(VM)服务,创造更大的价值。
智能网卡是具有独立的计算单元,能完成特定的基础设施功能操作的网卡,如智能网卡可完成特定的重组加速、安全加速等操作,相对于普通网卡可以带来较大的性能提升。智能网卡上的可编程ASIC或FPGA单元有可以运行自定义软件的计算层,计算层可以为网络流量提供服务,并可以执行特定网络及数据中心基础设施功能,还为外部网络和服务器OS之间提供了额外的安全层(也就是将安全保障由ToR交换机 转移向了该设备)。
具体来说,传统网卡面向的用户痛点包括:
在 SmartNIC 出现之前,解决这些问题的方法大概有:
而 SmartNIC 的存在能够:
白盒交换机作为最受欢迎的 COTS 硬件,可以加入 Plugin 轻松实现 SDN 和 NFV 的各种计算及网络功能。
传统数据中心基于冯诺依曼架构,所有的数据都需要送到CPU进行处理。随着数据中心的高速发展,摩尔定律逐渐失效,CPU的增长速度无法满足数据的爆发式增长,CPU的处理速率已经不能满足数据处理的要求。计算架构从以CPU为中心的Onload模式,向以数据为中心的Offload模式转变,而给CPU减负的重任就落在了网卡(网络适配器)上,这也推动了网卡的高速发展;从服务器网卡的功能上看,可以分为三个阶段:
基础功能网卡(即普通网卡)提供2x10G或2x25G带宽吞吐,具有较少的硬件卸载能力,主要是Checksum,LRO/LSO等,支持SR-IOV,以及有限的多队列能力。在云平台虚拟化网络中,基础功能网卡向虚拟机(VM)提供网络接入的方式主要是有三种:由操作系统内核驱动接管网卡并向虚拟机(VM)分发网络流量;由OVS-DPDK接管网卡并向虚拟机(VM)分发网络流量;以及高性能场景下通过SR-IOV的方式向虚拟机(VM)提供网络接入能力。
硬件卸载网卡可以认为是第一代智能网卡,具有丰富的硬件卸载能力,比较典型的有 OVS Fastpath硬件卸载,基于RoCEv1和RoCEv2的RDMA网络硬件卸载,融合网络中无损网络能力(PFC,ECN,ETS等)的硬件卸载,存储领域NVMe-oF的硬件卸载,以及安全传输的数据面卸载等。这个时期的智能网卡以数据平面的卸载为主。
以纳多德 NVIDIA(英伟达)产品为例,纳多德的ConnectX-6 DX(NDD-MCX623106AN-CDAT)网卡即为SmartNIC。该网卡主要用于加速关键任务数据中心应用程序,例如安全性,虚拟化,SDN / NFV,大数据,机器学习和存储。具有强大的RDMA功能,允许网络流量绕过CPU,避免使用TCP,并消除额外的数据副本,以提高性能并释放CPU内核。ConnectX-6 DX是目前市场上最先进的NIC可在NIC硬件中实现多个卸载,包括VXLAN,NVMEoF等,以节省服务器的CPU资源,更专注于计算,并降低HPC、AI、计算、存储和网络领域的TCO。
DPU的出现是为了解决数据中心中存在三个方面共五大问题:节点间:服务器数据交换效率低、数据传输可靠性低,节点内:数据中心模型执行效率低,I/O切换效率低、服务器架构不灵活,网络系统:不安全。
DPU区别于SmartNIC最显著的特点,DPU本身构建了一个新的网络拓扑,而不是简单的数据处理卸载计算;DPU可以脱离host CPU存在,而SmartNIC不行。这个本质的区别就是DPU可以构建自己的总线系统,从而控制和管理其他设备,也就是一个真正意义上的中心芯片。
DPU是新近发展起来的一种专用处理器,定位为数据中心继CPU和GPU之后的“第三颗主力芯片”,这也是DPU和我们前面谈到的SmartNIC最本质的区别,DPU可以脱离host CPU存在,而SmartNIC不行。这个本质的区别就是DPU可以构建自己的总线系统,从而控制和管理其他设备,也就是一个真正意义上的中心芯片;但DPU通常是被集成到SmartNIC;NVIDIA对DPU智能网卡有这样的定义:一种基于 DPU 的网络接口卡(网络适配器),用于卸载系统 CPU 通常会处理的处理任务。使用自己的板载处理器,基于 DPU 的 SmartNIC 可以执行加密/解密、防火墙、 TCP / IP 和HTTP 处理的任意组合。这个定义有两点很不错,首先,它关注的是DPU智能网卡所需具有的功能而不是形式。其次,它用语句提示这种形式,“…使用自己的板载处理器…执行任何组合的…”网络处理任务。因此,嵌入式处理器是实现灵活执行几乎任何网络功能的关键。
传统智能网卡上没有CPU,需要Host CPU进行管理。传统智能网卡除了具备标准网卡的功能外,主要实现网络业务加速。随着网络速度的提高,传统智能网卡将消耗大量宝贵的CPU内核来进行流量的分类、跟踪和控制。
DPU拥有高性能“CPU+可编程硬件”转发IO数据面加速的PCIe网卡设备,在实现标准网卡功能(NIC/TSO)的同时,还提供灵活的软件定义能力,为云厂商自定义的云基础设施赋能。DPU智能网卡提升云主机性能,最大限度释放CPU资源。同时,通过统一架构、统一管控实现内外一张网提升网络性能,节省网关/专线,减少Buffer,进而收敛机型、降低成本。从功能性的角度来看,DPU除SmartNIC功能之外还包括易于扩展,可用C语言编程的Linux环境。
以纳多德ConnectX-6 Dx 和 NVIDIA (英伟达)BlueField-2为例:ConnectX-6 Dx 创新的硬件卸载引擎,可支持IPsec 和在线TLS 动态数据加密、先进的网络虚拟化、RDMA over ConvergedEthernet (RoCE) 和 NVMe over Fabrics (NVMe-oF) 存储加速等;BlueField-2 集成了 ConnectX-6 Dx 的所有高级功能,BlueField-2 SmartNIC 可充当协处理器,在计算机前连接另一台计算机,运用先进的软件定义网络技术、NVMe SNAP 存储解聚技术和增强型安全功能可实现裸金属环境和虚拟化环境的转换。
1、实现方式差别
SmartNIC实现了部分卸载,即只卸载数据面,控制面仍然在HostCPU处理。从总体上来说SmartNIC的卸载操作是一个系统内的协作。
DPU实现了完全的卸载,服务器的数据面和控制面都卸载运行在DPU内部的嵌入式CPU中。DPU实现包括软件卸载和硬件加速两个方面,即将负载从Host CPU卸载到DPU的嵌入式CPU中,同时将负载数据面通过DPU内部的其他类型硬件加速引擎,如协处理器、GPU、FPGA、DSA等来处理。从总体上来说,DPU是两个系统间的协作,把一个系统卸载到另一个运行实体,然后通过特定的接口交互。
2、功能差别
传统智能网卡(SmartNIC)为可卸载网卡, DPU为可编程的智能网卡。网卡从可卸载网卡发展到可编程智能网卡具备越来越强大的功能,越来越高的灵活度。可编程网卡支持eBPF卸载和P4/C语言混合编程,实现包括网络、存储、安全、虚拟化等所有底层IO的卸载加速。
3、适用场景差别
“可卸载网卡”适用于主流的OVS/VROUTER卸载和主机Overlay场景、网关安全等场景。“可编程网卡”适用于各种通用任务的卸载和加速以及业务的弹性加速场景,如容器场景、负载均衡、网络安全和高级定制化网络。
结语
传统智能网卡和DPU是智能网卡在演进路径上不同阶段的产物。两者在架构、功能、实现方式等方面的差异,有着不同的适用场景。作为光网络解决方案的领先供应商,纳多德认为,在数据量级呈指数增长的今天,DPU概念一出,立马吸引了众多国际巨头、创企进入。如何降低虚拟化资源损耗,提升网络带宽和时延成为了智能网卡、芯片厂商的终极谜题。不同业务场景需要不同类型的智能网卡,单一智能网卡难以满足复杂多样的加速场景。随着市场热度以及技术能力的提升,智能网卡市场也会迎来越来越多的解耦场景。后续如何实现互联互通、软硬件协同,是未来智能网卡落地的重点问题。
智能网卡为数据中心网络提供了几项重要优势,包括:
1) 对于运营大型数据中心的公共云服务提供商而言,智能网卡可以释放CPU核来为最终用户运行业务应用程序,从而可能实现更高的服务器利用率。
2) 各种基础设施操作卸载。例如RDMA融合以太网(RoCE)、传输控制协议(TCP)、NVMe
oF(NVMe-over-Fabrics)、互联网安全协议(IPSec)、安全传输层协议(TLS)、深度报文检测(DPI)、OVS(Open Virtual Switch)等。
3) 某些类别的智能网卡是可编程的,可以针对广泛的应用程序进行定制,并且可以重新组装以满足新的要求。
当然,智能网卡并非没有缺点,在智能网卡被更广泛的采用之前,需要解决以下问题:
1) 与标准网卡相比,智能网卡的价格显着溢价。考虑到相同的端口速度,溢价可能会影响智能网卡的普及,尤其是在批量生产时需要降低价格。
2) 智能网卡的功耗较普通网卡高,一般20W~80W,随着更多功能的集成,功耗也会越来越高。
3) 鉴于智能网卡上支持的功能越来越多,其可编程性和复杂性也越来越高,它们可能会消耗大量工程资源来进行开发和调试,从而导致实施时间长且成本高。
基于以上考虑,主要的云服务提供商和网卡供应商已经基于不同的解决方案开发了智能网卡:基于ARM的SoC、FPGA和定制ASIC。这些解决方案中的每一个都提供不同程度的卸载和可编程性, 本文中将会对于不同的实现进行对比。
在智能网卡发展的过程中,NVIDIA将智能网卡升级为DPU(Data Processing Unit)。DPU延续了智能网卡的基本功能,并将通用工作任务做了加速处理。如图4所示,相比智能网卡在数据层面上实现加速,DPU的最大的区别是能在实现智能网卡的功能的基础之上实现控制面的加速。
赛灵思发布了其首款一体化 SmartNIC 平台 Alveo U25,在单张卡上上实现了网络、存储和计算加速功能的融合。
随着网络端口速度不断攀升,2 级和 3 级云服务提供商、电信和私有云数据中心运营商正面临日益严峻的联网问题和联网成本挑战。与此同时,开发和部署 SmartNIC 所需的大量研发投资,也成为其被广泛采用的障碍。
依托于赛灵思业界领先的 FPGA 技术,Alveo U25 SmartNIC 平台相比基于 SoC 的 NIC,可以提供更高的吞吐量和更强大的灵活应变引擎,支持云架构师快速为多种类型的功能与应用提速。
2015 年 6 月,Intel 宣布以 167 亿美元的价格收购全球第二大 FPGA 厂商 Altera,成为该公司有史以来最贵的一笔收购,随后 Intel 也在 Altera 的基础上成立了 Intel 可编程事业部,且一直在推进 FPGA 与至强处理器的软硬件结合,但却并没有能够进入大规模商用阶段。
三年后,Intel 终于踏出了历史性的一步。2019 年 4 月 19 日,Intel 宣布旗下的 FGPA 已经被正式应用于主流的数据中心 OEM 厂商中。具体来说,戴尔 EMC PowerEdge R640、R740 和 R740XD 服务器集成了 Intel FPGA ,并且已经可以进行大规模部署;而富士通即将发布的 PRIMERGY RX2540 M4 也采用了 Intel FGPA 的加成,这款产品即将发布,并已经支持重点客户提前使用。
上述 FGPA 主要指的是 Intel Arria 10 GX PAC(Programmable Acceleration Card,可编程加速卡),同时 Intel 还为 OME 厂商提供一个面向包含 FPGA 的 Intel 至强可扩展处理器的 Intel 加速堆栈。二者结合起来,就形成了一个完整的硬软件结合 FPGA 解决方案。
近期推出的 FPGA SmartNIC C5000X 云平台就是基于 Intel Xeon-D 处理器和 Intel Stratix 10 FPGA 实现的。
Intel X800 系列
在 CPU 单核时代,数据包经由网卡接收后均被送往唯一的 CPU 进行处理。随着多核时代到来,就出现了负载均衡问题,例如:某些 Core 过载,而另一些 Core 空载的情况。
为解决该问题,RSS(Receive Side Scaling)技术先通过 HASH 操作将数据包发送到不同的 Core 上进行中断处理,然后再经由 Core 间转发将数据包发送到运行目的应用所在的 Core 上。虽然负载看似在多 Core 上均衡了,但由于 HASH 的抗碰撞特性,大量数据包会被送到了不匹配的 Core上,因而数据包的 Core 间转发成为性能瓶颈。
FDIR(Intel Ethernet Flow Director)通过将数据包定向发送到对应应用所在 Core 上,从而弥补了 RSS 的不足,可用来加速数据包到目的应用处理的过程。在新一代 Intel X800 系列 Smart NIC 中,FDIR 有了更多的 Rules 空间硬件资源和更灵活的配置机制。
如同 Linux 提供了纯软件实现的 RSS 版本一样,Linux 也提供了纯软件实现的 ATR(Application Targeting Routing)模式的 Flow Director,称为 RFS(Receive Flow Steering)。尽管功能上等效,但是 RFS 无法达到 FDIR 对网络性能的提升效果,因为它必须通过某个 Core 来执行调度数据包,而且该 Core 大概率不是目的应用所在的 Core。因此,ATR 模式的 FDIR 可被看作 RFS 的智能卸载硬件加速方案。
4.3 迈络思
2019 年英伟达收购以色列著名网络设备制造商 Mellanox。Mellanox 是端到端以太网和 InfiniBand 智能互联技术的绝对领导者。在收购之前 Mellanox 就已推出了多款智能网卡。
NVIDIA Mellanox ConnectX-6 Lx SmartNIC
NVIDIA Mellanox ConnectX-6 Lx SmartNIC,是一款高效且高度安全的 25、50Gb/s 以太智能网卡。这款产品专为满足现代化数据中心的需求而设计,在这个市场,25Gb/s 已成为各种主流应用的标准,例如:企业级应用、AI 和实时分析等。这款全新的 SmartNIC 充分利用了软件定义、硬件加速的引擎来扩展加速计算,将更多的安全和网络处理工作从 CPU 卸载到网卡上来。
Mellanox ConnectX-6 Lx 提供:
博通的 Stingray SmartNIC SoC 系列具有集成的全功能 100G NIC,强大的 8 核 CPU,运行在 3GHz 下,支持数据包处理、加密、RAID 和重复数据删除等硬件引擎,是用于主机卸载、裸机服务和网络功能虚拟化的理想 SmartNIC 解决方案。
今年 4 月,百度云宣布正在与博通紧密合作,利用 Stingray SmartNIC 的可编程性,提供高级的云原生应用、网络功能虚拟化和分布式安全。博通的 Stingray 适配器提供 8 个 ARM A72 CPU 内核,运行在 3GHz、300G 内存带宽和 100G NetXtreme Ethernet 网卡上。
2015 年,AWS 收购以色列芯片制造商 Annapurna Labs。在 2017 re: Invernt 大会上,AWS 宣布了 EC2 架构的新演进:Nitro System 架构。Nitro System 重新定义了虚拟化基础架构,将虚拟化功能被卸载到专用的 Nitro Card 上。而 Nitro Card 就是使用 Annapurna Labs 定制的 ASIC 芯片。
2015 年,微软 Azure 服务器上部署了其 FPGA 加速网络 AccelNet。自 2015 年底以来,微软已在超过 100 万台主机的新 Azure 服务器上部署了实施 AccelNet 的 Azure SmartNIC。自 2016 年以来,AccelNet 服务已向 Azure 客户提供了一致的。
2017 年,阿里云也在数据中心中部署了神龙。
与传统的智能网卡厂家比,云计算巨头完全是为了满足自身云计算需求。在他们看来,SmartNIC 就是一个完整的计算、存储、网络一体化处理单元,只视乎于想把如何具体的业务卸载下来,而具体业务只有使用云厂商自己最清楚了。
因此,对云厂商来说,自研 SmartNIC 似乎是一条正确的道路,其 “智能网卡” 的概念已经很薄弱了,它不仅仅是个 NIC 这么简单,它已经深深的融入他们的血液里了。
从网络虚拟化,看智能网卡发展史 - 腾讯云开发者社区-腾讯云
传统智能网卡 vs DPU智能网卡_光通信老兵的博客-CSDN博客_dpdk 智能网卡
NVIDIA ASAP² 技术保护并加速现代数据中心应用 - 知乎
FPGA智能网卡综述(5): FPGA inline - 知乎
《重识云原生系列》专题索引: