【网络】TOE、RDMA、smartNIC 是什么和区别|DPU
目录
作者:bandaoyu,本文原始连接:https://blog.csdn.net/bandaoyu/article/details/122868925
TOE、RDMA、smartNIC 简介
TOE(TCP/IP Offload Engine 处理器的工作转移到网卡上)
简介:
在主机通过网络进行通信的过程中,
1、CPU 需要耗费大量资源进行多层网络协议的数据包处理工作,包括数据复制、协议处理和中断处理。
2、当主机收到网络数据包时,会引发大量的网络 I/O 中断,CPU 需要对 I/O 中断信号进行响应和确认。
为了将 CPU 从这些操作中解放出来,人们发明了TOE(TCP/IP Offloading Engine)技术(即将上述主机处理器的工作转移到网卡上:https://blog.csdn.net/bandaoyu/article/details/125234243)TOE 技术需要特定支持 Offloading 的网卡,这种特定网卡能够支持封装多层网络协议的数据包。
- TOE 技术将原来在协议栈中进行的IP分片、TCP分段、重组、checksum校验等操作网络数据流量的处理工作,转移到网卡硬件中进行,服务器只承担TCP/IP控制信息的处理任务。这降低系统CPU的消耗,提高服务器处理性能。
- 普通网卡处理每个数据包都要触发一次中断,TOE 网卡则让每个应用程序完成一次完整的数据处理进程后才触发一次中断,显著减轻服务器对中断的响应负担。
- TOE 网卡在接收数据时,在网卡内进行协议处理,因此,它不必将数据复制到内核空间缓冲区,而是直接复制到用户空间的缓冲区,这种“零拷贝”方式避免了网卡和服务器间的不必要的数据往复拷贝。
RDMA 架构与实践 | https://houmin.cc/posts/454a90d3/
RDMA
RDMA是一种概念,在两个或者多个计算机进行通讯的时候使用DMA, (DMA硬件将数据)从一个主机的内存直接读写到另一个主机的内存。
RDMA是一种host-offload(硬件处理), host-bypass(绕过内核)技术,允许应用程序(包括存储)在它们的内存空间之间直接做数据传输。
详情见:https://blog.csdn.net/bandaoyu/article/details/112859853
SmartNIC
TOE网卡和RDMA网卡,都属于SmartNIC。
上面二者的简介都可以总结为:
传统网卡仅实现了 L1-L2 层的逻辑,而由 Host CPU 负责处理网络协议栈中更高层的逻辑。即:CPU 按照 L3-L7 的逻辑,负责数据包的封装与解封装;网卡则负责更底层的 L2 层数据帧的封装和解封装,以及 L1 层电气信号的相应处理。
为适应高速网络,现代网卡中普遍卸载了部分 L3-L4 层的处理逻辑(e.g. 校验和计算、传输层分片重组等),来减轻 Host CPU 的处理负担。甚至有些网卡(e.g. RDMA 网卡)还将整个 L4 层的处理都卸载到硬件上,以完全解放 Host CPU。得益于这些硬件卸载技术,Host OS 的网络协议栈处理才能与现有的高速网络相匹配。
区别
最近DPU概念异常火爆,从Mellanox、Fungible、NVIDIA到Intel,各路诸侯纷纷加入战场,各种概念Smart NIC、DPU、IPU层出不穷,各种SDK,FunOS、DOCA、IPDK令人眼花缭乱,比当年AI还要火爆。
相同点:
都具有给cpu减负的功能
不同点:
1、工作原理不同,见上面的简介。
2、RDMA的网卡使用需要两端都支持RDMA技术的网卡才能发挥,TOE只需要单端即可。
3、TOE网卡和RDMA网卡,都属于SmartNIC。
TOE、RDMA、smartNIC详细说明
TOE(TCP/IP Offload Engine)
TOE引擎需要做的一件事情就是将IP头、TCP头、UDP头的checksun计算由网卡来计算,CPU不需要计算IP头、TCP头、UDP头的检验和, 这些工作由网卡来进行。这样可以减轻CPU的负担,如下图所示,但是这样会带来一个问题,就是在user application抓的发送出去的报文的检验和是不对的,如果直接对报文进行回放,会被设备丢弃,导致报文回放失败。普通网卡用软件方式进行一系列TCP/IP相关操作,因此,会在三个方面增加服务器的负担,这三个方面是:数据复制、协议处理和中断处理。
网络上每个应用程序在收发大量数据包时,要引发大量的网络I/O中断,对这些I/O中断信号进行响应,成了服务器的沉重负担。比如,一个典型的 64Kbps的应用程序在向网络发送数据时,为了将这些数据装配成以太网的数据包,并对网络接收确认信号进行响应,要在服务器和网卡间触发60多个中断事 件,这么高的中断率和协议分析工作量已经是相当可观的了。虽然某些网络操作系统具有中断捆绑功能,能够有效减少中断信号的产生,但却无法减少服务器和网卡 间响应事件的处理总量。
TCP减负引擎网卡的工作原理与普通网卡不同。普通网卡处理每个数据包都要触发一次中断,TCP 减负引擎网卡则让每个应用程序完成一次完整的数据处理进程后才触发一次中断,显著减轻服务器对中断的响应负担。还是以64Kbps的应用程序为例,应用程 序向网络发送数据全部完成后,才向服务器发送一个数据通道减负事件中断,数据包的处理工作由TCP减负引擎网卡来做,而不是由服务器来做,从而消除了过于 频繁的中断事件对服务器的过度干扰。网络应用程序在收发数据时,经常是同一数据要复制多份,在这种情形下,TCP减负引擎网卡发挥的效益最明显。
普通网卡通过采用支持校验功能的硬件和某些软件,能够在一定程度上减少发送数据的复制量,但却无法减少接收数据的复制量。对大量接收数据进行复制通 常要占用大量的机器工作周期。普通网卡先将接收到的数据在服务器的缓冲区中复制一份,经系统处理后分配给其中一个TCP连接,然后,系统再将这些数据与使 用它的应用程序相关联,并将这些数据由系统缓冲区复制到应用程序的缓冲区。TCP减负引擎网卡在接收数据时,在网卡内进行协议处理,因此,它不必将数据复 制到服务器缓冲区,而是直接复制到应用程序的缓冲区,这种“零拷贝”方式避免了网卡和服务器间的不必要的数据往复拷贝。
TCP减负引擎网卡能显著减轻由数据大量移动造成的服务器过载负担。实测证明,对于文件服务器和以内容服务为主的服务器应用环境来说,如果用TCP减负引擎网卡代替普通网卡,相当于为服务器增加了一个CPU
RDMA
详细说明见:https://blog.csdn.net/bandaoyu/article/details/112859853
SmartNIC
传统网卡仅实现了 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。
0.0 代。具体来说,传统网卡面向的用户痛点包括:
-
随着 VXLAN 等 Overlay 网络协议,以及 OpenFlow、Open vSwitch 等虚拟交换技术的引入,使得基于服务器的网络数据平面的复杂性急剧增加。
-
网络接口带宽的增加,意味着在软件中执行这些功能会给 CPU 资源造成难以承受的负载,留给应用程序运行的 CPU 资源很少或根本没有。
-
传统网卡固定功能的流量处理功能无法适应 SDN 和 NFV。
1.0 代。在 SmartNIC 出现之前,解决这些问题的方法大概有:
-
使用 DPDK 作为加速手段,但处理过程仍然依赖标配(未针对数据传输进行优化)的服务器及网卡,这始终是一个瓶颈,吞吐量性能低下,并且需要大量的 CPU 资源,还是没能节省昂贵的 CPU 资源。
-
使用 SR-IOV 技术,将 PF 映射为多个 VFs,使得每个 VF 都可以绑定到 VM。如此,吞吐量性能和 CPU 使用效率确实得到了改善,但灵活性却降低了,复杂性也增加了。并且,大多数 SR-IOV 网卡最多有效支持 1Gb 以太网端口的 8-16 个 VFs,和 10Gb 以太网端口的 40-64 个 VFs。
2.0 代。而 SmartNIC 的存在能够:
-
将 vSwitch 完全 Offload 到 SmartNIC,释放昂贵的 Host CPU 资源,将计算能力还给应用程序。
-
可以实现基于服务器的复杂网络数据平面功能,例如:多匹配操作处理、计量整形、流统计等。
-
支持网络的可编程性(通过更新的固件或客户编程),即便 SmartNIC 已经被插入到服务器使用。
-
与现有的开源生态系统无缝协作,以最大程度地提高软件功能的速度和影响力。
3.0 代。白盒交换机作为最受欢迎的 COTS 硬件,可以加入 Plugin 轻松实现 SDN 和 NFV 的各种计算及网络功能。
Smart NIC
简而言之,SmartNIC 就是通过从 Host CPU 上 Offload(卸载)工作负载到网卡硬件,以此提高 Host CPU 的处理性能。其中的 “工作负载” 不仅仅是 Networking,还可以是 Storage、Security 等。
Smart NIC 的实现方式
1、多核智能网卡,基于包含多个 CPU 内核的 ASIC(特殊应用集成电路)芯片:ASIC 具有价格优势,但灵活性有限,尽管基于 ASIC 的 NIC 相对容易配置,但最终功能将受到基于 ASIC 中定义的功能的限制,这可能会导致某些工作负载无法得到支持。
2、基于 FPGA(可编程门阵列)的智能网卡:FPGA 是高度可编程的,并且可以相对有效地支持几乎任何功能,不过众所周知的是,FPGA 最大的问题是编程难度大且价格昂贵。
3、FPGA 增强型智能网卡,将 FPGA 与 ASIC 网络控制器相结合。
多核智能网卡
多核智能网卡设计可能包括一个集成了许多 ASIC。这些 ASIC 内核通常是性能更高的 ARM 处理器,它们处理数据包并从主服务器 CPU(昂贵)上卸载任务。多核智能网卡 ASIC 还可以集成固定功能硬件引擎,它们可以卸载定义明确的任务,如标准化的安全和存储协议。
多核智能网卡至少受到两个制约因素的限制:
1、这些智能网卡基于软件可编程处理器,由于缺乏处理器并行性,它们在被用于网络处理时速度较慢。
2、这些多核 ASIC 中的固定功能硬件引擎缺乏智能网卡卸载功能越来越需要的数据平面可编程性和灵活性。
基于处理器的多核智能网卡设计在 10G 这一代网卡中得到了广泛的应用。然而,随着数据中心中的以太网数据速率从 10G 上升到 25G、40G、50G、100G 甚至更高,这些以软件为中心的多核智能网卡就已经难以跟上了。
这些多核智能网卡在这些较高的数据速率下无法达到所需的峰值带宽。同时,多核智能网卡 ASIC 中的固定功能引擎无法扩展去处理新的加密或安全算法,这是因为它们缺乏足够的可编程性,只能适应算法的细微改变。
基于 FPGA 的智能网卡
基于 FPGA 的智能网卡利用 FPGA 更大硬件可编程性来构建卸载到智能网卡上的任务所需的任何数据平面功能。由于 FPGA 是可重编程的,利用 FPGA 实现的数据平面功能可以任意并且实时地去除和重新配置。所有这些卸载功能都以硬件而非软件速度运行。
与单纯基于软件的实现相比,基于 FPGA 的智能网卡设计可以将网络功能提速几个数量级。在智能网卡设计中使用 FPGA 可提供定制硬件的线速性能和功率效率,并能够创建支持复杂卸载任务和提高单数据流网络性能的深度数据包/网络处理流水线。
通过利用 FPGA 中固有的大量硬件并行性来复制这些流水线,可以提高巨大数据性能,足以满足基于更快的以太网网络的下一代数据中心架构的高性能、高带宽、高吞吐量需求。
FPGA 增强型智能网卡
对向后兼容性的需求催生了 FPGA 增强型智能网卡,它为多核智能网卡网卡增加了 FPGA 功能。基于这种设计,网卡可以是现有的多核智能网卡,也可以只是一个简单的网卡专用集成电路(NIC ASIC)。
集成到这些设计中的网卡提供了向后兼容性,特别是对于超级管理程序的兼容性。因此,基于现有网卡的 FPGA 增强型智能网卡设计,加上用于扩展功能的 FPGA,可以立即实现其投资收益,因为它自动与现有网络 API 和接口协议兼容,因此可以使用现有的 API 和驱动程序。一个 FPGA 增强型智能网卡设计中的板载 FPGA 能够显著提高性能和扩展功能。
Smart NIC 的应用场景
面向网络加速的 Smart NIC
以 FPGA 来实现 Smart NIC 举例,了解到底有什么网络功能任务是可以 Offload 到 Smart NIC 上进行处理的。并且,使用 FPGA 可以根据需要轻松添加、或删除这些功能。
示例 1 到 13 说明了可以添加到 base NIC 的处理元素,以创建功能更加强大的 Smart NIC。
1、base NIC。采用多个 Ethernet MAC 和一个用于 Host CPU 接口的 PCIe Block。Host CPU 必须处理所有的 Ethernet 通信,包括主动的从 NIC 的存储器读取 pkts。
2、添加 DMA Engine 功能。NIC 的存储器 Mapping 到 Memory,CPU 可以直接从 Memory 读取 pkts,而不需要从 NIC 存储器中 Copy,从而减少了 Host CPU 的工作负载。
3、添加 Filter Engine 功能。过滤器会阻止无需 Host CPU 处理的 pkts,进一步减少了 Host CPU 的任务负载。
4、添加外部 DRAM 到 Filter Engine。外部 DRAM 用于存储 Filter Engine 的 Rules,有了足够的外部 DRAM,NIC 可以管理数百万条规则。
5、添加 L2/L3 Offload Engine 功能。用于处理 NIC 的 Ethernet Ports 之间的低层 L2 交换和 L3 路由,进一步减少 Host CPU 的工作负载。同样的,可以为 L2/L3 Offload Engine 共用外部 DRAM 来缓冲网络数据包。
6、添加 Tunnel Offload Engine 功能。用于卸载各种隧道协议封包(e.g. VxLAN、GRE),并进一步减轻 Host CPU 的周期密集型隧道性需求。
7、添加 Deep Buffering(深度缓冲)外部存储。用于对输入的 pkts 进行深度缓冲,从而实现了线速数据包交换和具有多个队列的分层 QoS 调度。
8、添加一个具有自己的外部 DRAM 存储的 Flows Engine 功能。使 Smart NIC 的 Routing Engine 能够处理数百万个路由表条目,同时还有助于卸载 NAT/PAT 网络能力。
9、添加 TCP Offload Engine 功能。用于处理 TCP 协议的全部或部分工作,这样可以在不消耗更多 CPU 周期的情况下提高 Smart NIC 性能。
10、添加 Security Offload Engine 功能。将部分/全部安全引擎添加到 Smart NIC 中,以每个 Flows 为基础从 Host CPU 卸载加密/解密任务。
11、添加 QoS Engine 功能。Smart NIC 以此提供 SLA(服务等级协议)功能,而无需 Host CPU 的干预。
12、添加一个可编程的数据包解码器。该解码器将类似 P4 的可编程功能集成到 Smart NIC 中。P4 是一种标准的网络编程语言,专门用于描述和编程分组数据包转发面的操作。
13、添加一个或多个 ASIC 板载处理器。它们为 Smart NIC 提供了完整的软件可编程性(用于诸如 OAM 等任务),进一步实现了 Host CPU 的任务卸载。
可见,Smart NIC 为面向 SDN、NFV 的云计算/数据中心带来的优势主要有:
-
CPU(昂贵)资源的节约。
-
NIC 数据处理性能(网络带宽、吞吐量)的提升。
面向存储加速的 Smart NIC
在虚拟化爆发之前,大多数服务器只是运行本地存储,这虽然不是很高效,但是很容易使用。然后是网络存储的兴起:SAN、NAS、NVMe-oF(NVMe over Fabrics)。
但是,并非每个应用程序都可识别 SAN,并且某些操作系统和虚拟机管理程序(e.g. Windows 和 VMware)尚不支持 NVMe-oF。SmartNIC 可以虚拟化网络存储,效率更高、更易于管理,且应用程序更易于使用。
面向超融合基础设施的 Smart NIC
超融合基础设施使用了 VMM 来虚拟化本地存储和网络,以使其可用到群集中的其他服务器或客户端,能够实现快速部署,有利于共享存储资源。但是 VMM 占用了本应用于运行应用程序的 CPU 周期。与标准服务器一样,网络运行的速度越快,存储设备的速度越快,则必须投入更多的 CPU 来虚拟化这些资源。
SmartNIC 一方面可以卸载并帮助虚拟化网络,用于加速私有云和公共云,这就是为什么它们有时被称为 CloudNIC 的原因;另一方面可以卸载网络和大部分的存储虚拟化,可以减轻 SDS 和 HCI 的功能负担,例如:压缩、加密、重复数据删除、RAID、报告等。SmartNIC 甚至可以虚拟化 GPU 或其他神经网络处理器,这样任何服务器都可以在需要的时候通过网络访问任意数量的 GPU。
超融合架构数据中心中,Smart NIC 为 SDN 和虚拟化应用程序提供硬件加速与网络接口紧密结合,并可分布在大型服务器网络中,减小 CPU 负载,提供额外的边缘计算能力,加速特定应用和虚拟化功能,并且通过正确的语言和工具链支持,为用户提供应用加速即服务的附加价值。
DPU
DPU是什么?DPU现状:
《DPU究竟是一个什么U?和CPU、GPU有什么关系?》https://xw.qq.com/cmsid/20211108A045FK00?pgv_ref=baidutw&ivk_sa=1024320u
为什么需要DPU
1、给CPU减负
DPU将作为CPU的减负引擎,释放CPU的算力给上层应用。
以网络协议处理为例,要迅速处理10G的网络需要的大约4个Xeon CPU的核,也就是说,单是做网络数据包处理,就可以占去一个8核高端CPU的一半的算力。如果考虑40G、100G的高速网络,性能的开销就更加难以承受了。Amazon把这些开销都称之为“Datacenter Tax”——还未运行业务程序,先接入网络数据就要占去的计算资源。
AWS Nitro产品家族旨在将数据中心开销(为虚机提供远程资源,加密解密(加密、解密的算法开销都很大),故障跟踪,安全策略等服务程序)全部从CPU卸载到Nitro加速卡上,将给上层应用释放30%的原本用于支付“Tax” 的算力。
给CPU减负的形式
DPU将成为存储的入口,将分布式的存储和远程访问本地化。随着SSD性价比逐渐变得可接受,部分存储迁移到SSD器件上已经成为可能,传统的面向机械硬盘的SATA协议并不适用于SSD存储,所以,将SSD通过本地PCIE或高速网络接入系统就成为必选的技术路线。NVMe(Non Volatile Memory Express)就是用于接入SSD存储的高速接口标准协议,可以通过PCIe作为底层传输协议,将SSD的带宽优势充分发挥出来。同时,在分布式系统中,还可通过NVMe over Fabric协议扩展到InfiniBand、或TCP互连的节点中,实现存储的共享和远程访问。这些新的协议处理都可以集成在DPU中来实现对CPU的透明处理。进而,DPU将可能承接各种互连协议控制器的角色,在灵活性和性能方面达到一个更优的平衡点。
2、硬件加速
DPU将成为算法加速的沙盒,成为最灵活的加速器载体。DPU不完全是一颗固化的ASIC,在CXL, CCIX等标准组织所倡导CPU、GPU与DPU等数据一致性访问协议的铺垫下,将更进一步扫清DPU编程障碍,结合FPGA等可编程器件,可定制硬件将有更大的发挥空间,“软件硬件化”将成为常态,异构计算的潜能将因各种DPU的普及而彻底发挥出来。在出现“Killer Application”的领域都有可能出现与之相对应的DPU,诸如传统数据库应用如OLAP、OLTP, 或新兴应用如智能驾驶等。
DPU的发展分为三个阶段
摘自《从DPU开始到RDMA到CUDA》从DPU开始到RDMA到CUDA - https://zhuanlan.zhihu.com/p/517176491
第一阶段:Smart NIC(智能设备)
这个可以称为DPU的史前时代。解决节点间流量问题的最简单的方式是增加网卡的处理能力,通过在网卡上面引入SoC或者FPGA的方式加速某些特定流量应用,从而加强网络的可靠性,降低网络延迟,提升网络性能。其中Xilinx和Mellanox在这个领域进行的比较早,可惜由于战略能力不足,错失了进一步发展的机会,逐渐被DPU取代,最终被淘汰。其中Mellanox被Nvidia收购,Xilinx被AMD拿下。智能网卡成为DPU的应用产品而存在。(Marvell会如何选择我们拭目以待)
第二阶段:DPU(数据处理芯片)
这个阶段是数据芯片真正开始被重视的阶段。最开始由Fungible在2019年提出,但没有引起太多反响。Nvidia将收购来的Mellanox重新包装之后,2020年10月重新定义了DPU这个概念,DPU这个概念一炮而红。有意思的是Nvidia对DPU的定义完全不同于Fungible,在Nvidia的博客上有一段非常有意思的评价。
虽然Fungible号称DPU是要解决很多网络问题。但回归本质,一个性能强大的x86都没有解决的问题,为什么一个嵌入式SoC可以干得更加好呢?这个是一个非常严肃也是一个需要正面回答的问题。显然Fungible回避了这个本质问题,而是用了一个120瓦的SoC来处理流量问题。然而Nvidia却从另一个纬度回答了这个问题,那就是DPU只应该处理网络路径(network data path initialization)和异常(exception processing),而不是其他的(nothing more)。
Nvidai的做法非常简单同时也非常容易理解,毕竟卖GPU比卖DPU更加赚钱,而Nvidia不会放过一切增加GPU销量的机会。但仔细看一下这句话,其实暗含了一个Nvidia的技术路线exception processing!
第三阶段:IPU(基础设施芯片)
对于“第三颗”芯片这么重要的战场,自然少不了Intel的加入。Intel的解决方案非常简单粗暴。DPU的存在不就是为了解决流量卸载问题么,我用FPGA就好了!DPU不就是想管理云平台么?那好,我再送一个CPU就好了。于是乎Intel的方案变成了FPGA+Xeon-D的模式,通过PCB版的方式放在一个智能网卡上(估计功耗要超过200瓦)。
同时Intel给这个方案取了一个非常有意思的名字“基础设施处理器”。显然Intel将IPU定位成host CPU上面一个“外挂”的小CPU,而且未来这个“外挂”CPU和FPGA会封装到一个芯片中,形成一个奇怪的通过PCIe总线互联的两个CPU系统。这种一个总线多个CPU的架构,Intel在GPU Phi中已经用过。
从系统上来看,这个架构非常简洁,我们觉得应该也是DPU应该发展的方向。但同时IPU引发了一个架构性的问题,“这个架构中到底IPU是中心,还是host CPU是中心?”。目前Intel只给出了一个非常模棱两可的介绍,回避了这个问题。我们认为真正解决了这个问题的芯片才能成为未来真正的“第三颗”大芯片,甚至是主要芯片。
显然Intel和Nvidia都看到了这个机会,DPU/IPU真正有价值而且极具价值的在于,谁处理exception?到底是host CPU还是DPU?如果是DPU?那么其他设备比如GPU的exception谁处理呢?
经过几年的发展,数据芯片(DPU/IPU)的地位一直在提升,正在成为“第三颗”大芯片。
对比一下当前Fungible、Nvidia和Intel的技术路线我们总结如下:
DPU/IPU的重要性已经达成了共识。但围绕DPU的定位存在一些争论,不同的公司根据自己技术特点选择不同技术路线。
摘抄和参考列表
关于TOE(TCP/IP Offload Engine) --https://www.shuzhiduo.com/A/ZOJPXa8xJv/
TOE(TCP/IP Offload Engine)网卡与一般网卡的区别https://blog.csdn.net/do2jiang/article/details/5134459
一文读懂SmartNIC https://blog.csdn.net/weixin_38889300/article/details/118773995