参考文献:

张登科, 王兴伟, 贾杰, 等. 智能网卡研究新进展[J]. 小型微型计算机系统, 2022, 43(2): 399-405.

随着后摩尔时代的到来和 Dennard\text {Dennard} 缩放规律的终结,CPU\text {CPU} 处理能力增速变缓,但超大规模数据中心网络中的流量却呈现持续的指数增长态势,并且这一差距预期会继续增大,将网络功能卸载到可编程硬件的需求越来越急迫。数据传输所用的复杂协议,被迫卸载到网卡中运行。并且是通过硬件而不是软件来实现的。网络堆栈正在向硬件转移。

网卡 VS 智能网卡

网卡(Network Interface Card,NIC):是计算机用于连接到网络的硬件设备,通常安装在计算机的主板上或插入到扩展插槽中。网卡充当计算机和网络之间的桥梁,负责将数据包从计算机传输到网络,并从网络接收数据包。它可以是有线的(如以太网网卡)或无线的(如Wi-Fi网卡),取决于连接类型。网卡通常具有MAC地址(Media Access Control地址),用于在局域网中唯一标识设备。

智能网卡(Smart Network Interface Card,SNIC):一种进阶型网卡,集成了更多的处理能力和功能,以提供更高级的网络处理和管理能力。智能网卡通常包括专用的处理器、内存和网络加速器,它们可以卸载主机 CPU\text {CPU} 的一些网络处理工作,从而提高网络性能和降低主机 CPU\text {CPU} 的负载。智能网卡还可以执行诸如包过滤、流量监控、负载均衡、安全性检查等高级网络任务。智能网卡的应用范围广泛,特别是在数据中心和云计算环境中,可以提供更高的网络吞吐量和更低的延迟。它们对于需要高度可伸缩性和性能的应用程序非常有用,如大规模数据处理、虚拟化、容器化等。

智能网卡是软件定义的基于卡上计算单元的网卡,可减轻主机端 CPU\text {CPU} 的网络堆栈计算负载,包括:

  • 虚拟交换(OVS\text {OVS}
  • 存储
  • 数据和网络加密(IPSEC/SSL\text {IPSEC/SSL}
 

网卡智能化演进

传统网卡支持较低链路速度,网络堆栈算法和协议在主机端 CPU\text {CPU} 上运行,其主要执行链路层和物理层中的无状态算法和协议,负责基本的网络数据包的转发和接受,但不涉及复杂的状态管理或数据包处理。

使用专用集成电路的传统网卡在多核 CPU\text {CPU} 出现后出现可编程性的挑战,:

  • 11 代网卡智能,旨在解决网卡如何利用在多核 CPU\text {CPU} 环境下的并行处理能力。
    • 接收端拓展技术(Receive Side Scaling,RSS)
  • 22 代网卡智能,旨在解决虚拟化技术背景下,如何利用用户空间卸载本应由虚拟机处理的功能,使得网卡具备高速编程体系。
    • 数据平面开发套件(Data Plane Development Kit,DPDK)

多核 CPU\text {CPU} 时代的网卡智能化

多核 CPU\text {CPU} 时代,部分 TCP\text {TCP} 功能卸载到网卡上执行。

  • 节省了 CPU\text {CPU} 处理大消息的周期——不再进行数据包有效负载计算
  • 提供了系统 DMA\text {DMA} 吞吐量——减少了 CPU\text {CPU} 中断数量

局限:大消息的传递。

多核 CPU\text {CPU} ,网卡并行化提升效率需要将卸载功能同样进行并行化提速。

Inter\text {Inter} 公司研发 RSS\text {RSS}:使用多个接收通道,利用特殊以太网报头标签,将待处理数据包分配到不同 CPU\text {CPU} 核上进行并行处理,从而实现负载分散。

虚拟时代的网卡智能化

虚拟化技术允许将网络堆栈的功能实现为软件,而不是依赖硬件。这为网络功能提供了极大的灵活性,因为网络堆栈可以根据需要可以进行定制和修改。这还意味着可以轻松地开发和测试新的网络功能。虚拟化技术允许网络堆栈绕过硬件卸载,这意味着数据包的处理不再依赖于特定硬件,而可以通过软件来管理。这提供了更大的灵活性和可移植性。

带来的问题有两个:

  1. CPU资源消耗和传输效率:软件网络堆栈需要使用主机端 CPU\text {CPU} 资源来处理网络任务,因此需要权衡 CPU\text {CPU} 资源消耗和传输效率。较大的 CPU\text {CPU} 资源可能需要才能支持高速率的数据传输。
  2. 不支持精确传输控制:软件网络堆栈通常具有随机中断驱动的特性,这意味着网络堆栈的操作受到不确定的因素影响,无法提供精确的传输控制。这可能会对某些网络应用程序的开发造成困难,特别是对于需要高度可预测性和低延迟的应用程序。

Inter\text {Inter} 公司研发 DPDK\text {DPDK}:支持在用户空间处理所有数据包,从而绕过主机端内核。一般用作加速手段,处理过程依赖未针对数据传输进行优化的服务器,但由于单台服务器吞吐量性能低下唉,部署需要多台服务器,成本增加。

基于 PCIe\text {PCIe} 的单根 IO\text {IO} 虚拟化技术(Single Root I/O Vitualization,SR-IOV):物理端口映射为多个虚拟端口或虚拟功能,绑定至不同的 VM\text {VM},吞吐量性能和 CPU\text {CPU} 使用率得到改善,但灵活性降低,复杂性增加。

大多数网卡最多支持 88~6464 个虚拟端口:

  • 1GE1 \text {GE} 物理端口一般承载 88~1616 个虚拟端口
  • 10GE10 \text {GE} 物理端口一般承载 4040~6464 个虚拟端口

HDCs\text{HDCs} 时代的智能网卡

超大规模数据中心(Hyperscale Data Center,HDSs)

相关挑战:

  • 时间限制:为实现 100Gbps100 \text {Gbps} 的数据传输,数据包小于 200200 字节。SNIC\text {SNIC} 必须每隔 10ns10 \text {ns} 发送一个数据包,并在间隔时间内输出每个流的下一个数据段地址和传输时点决策。

  • 内存限制:并发流数量往往超过 10001000 ,每个数据流传输数据的量可能有数千字节,对于只有几兆字节高速内存的网卡,传输逻辑的状态存储空间有限,SNIC\text {SNIC} 需要研发低内存占用的高速硬件传输协议。

  • 传输状态维持SNIC\text {SNIC} 执行传输逻辑需要有状态处理,需要跟踪每个数据流的状态,并在数据段的生成和接收确认时更新这些状态。为了在处理复杂操作时争取更多时间,传输事件的流水线处理通常会生成与之紧密关联的数据段。这些紧密关联的数据段必须迅速更新流的状态,但类似的传输事件响应包含复杂操作,需要专门的数据传输和拥塞控制算法,因此在如此接近时间的传输事件上提供状态一致性是困难的。传统的长管道方法无法解决时序约束,因此 SNIC\text {SNIC} 需要研发新的方法来维护传输状态。

卡上计算单元

SNIC\text {SNIC} 采用的计算单元主要有 33 种:

  • 特定应用集成电路(Application-Specific Integrated Circuit,ASIC)
  • 现场可编程门阵列(Field Programmable Gate Array,FPGA)
  • 片上系统(System on Chip,SoC)

计算单元技术对比如下

指标 ASICbased\text {ASIC}-\text {based} FPGAbased\text {FPGA}-\text {based} SoCbased\text{SoC}-\text {based}
性能 高(200+cores200+ \text {cores} 较高($ 50+ \text {cores}$) 高低(10+cores10+ \text {cores}
可编程性
灵活性
开发成本

基于 ASIC\text {ASIC} 的智能网卡

基于 ASIC\text {ASIC} 的的智能网卡是一种专门设计用于高性能数据包处理和网络加速的硬件解决方案。这种类型的智能网卡通过专用硬件电路来实现网络任务,与通用计算硬件相比,能够提供更高的性能和效率。通过硬件加速功能实现了低延迟、高吞吐量和低 CPU\text {CPU} 负载,适用于要求高性能网络通信的应用领域。

基于 FPGA\text {FPGA} 的智能网卡

基于 FPGA\text {FPGA} 的智能网卡结合了基于 ASIC\text {ASIC} 的的智能网卡和软件网卡的特点,使用 FPGA\text {FPGA} 芯片作为其核心组件,以实现高度定制化的网络数据包处理和网络任务加速。存在价格昂贵耗电高,且进行编程需要硬件知识(Verilog\text {Verilog}VHDL\text {VHDL} 等硬件描述语言)。

基于 Soc\text {Soc} 的智能网卡

基于 Soc\text {Soc} 的智能网卡有三种设计方法:

  1. on-path\text {on-path}”:所有数据包在通往或离开网络的路径上必经过 NIC\text {NIC} 处理内核(或其子集)
  2. off-path\text {off-path}”:使用交换机路由 NIC\text {NIC} 和主机之间的流量
  3. 二种设计方法的混用机制

相关进展

智能网卡:传统网卡数据包接收和转发
+远程直接存储器访问(Remote Direct Memory Access,RDMA)

目前主要针对:

  • 网络加速
  • 数据传输
  • 新型调度器
  • 性能隔离机制

等方面的功能卸载。

智能网卡关键技术

SR-IOV\text {SR-IOV} 技术

将一个物理设备模拟成多个虚拟设备,其中每一个虚拟设备可以和一个虚拟机绑定,从而便于虚拟机访问同一个物理设备。

引入了两种新的 PCIe\text {PCIe} 的功能:

  1. 物理功能(Physical Functions,PF)PF\text {PF} 能像普通的 PCI\text {PCI} 设备那样被发现,管理和配置。
  2. 虚拟功能(Virtual,VF):每个 VF\text {VF} 都是从 PF\text {PF} 中分离出来的,一个 PF\text {PF} 能被虚拟成多个 VF\text {VF} 用于分配给多个虚拟机(每个物理硬件都有相关的数目限制)。

RDMA\text {RDMA} 技术

传统通信网络中:用户“A\text{A}”给用户“B\text{B}”传递消息,收发两端的 CPU\text {CPU} 都需要进行数据的处理,包括协议的封装解析。

细化步骤:

  1. 发送端应用程序通过 Socket\text {Socket} 接口陷入内核态
  2. 待发送数据经过 TCP/IP\text {TCP/IP} 协议栈的一层层封装,经由 CPU1\text {CPU}_1 复制到 Buffer1\text {Buffer}_1
  3. 网卡通过 DMA\text {DMA} 接收从 Buffer1\text {Buffer}_1 中复制封装好的数据包到内部缓存再发送到 Buffer2\text {Buffer}_2
  4. Buffer2\text {Buffer}_2 中取出数据包,由 CPU2\text {CPU}_2 通过 TCP/IP\text {TCP/IP} 协议栈的一层层解析
  5. 接收端应用程序通过 Socket\text {Socket} 接口陷入内核态
  6. CPU2\text {CPU}_2 将有效数据从内核空间复制到用户空间
  1. 发送端和接收端应用程序分别通过控制通路陷入内核态创建好通信所需的内存资源
  2. 在数据通路上,
    1. 接收端应用程序通知硬件准备接收数据,告诉硬件待接收到的数据放在哪片内存
    2. 发送端应用程序通知硬件准备发送数据,告诉硬件待发送的数据位于哪片内存
  3. 发送端 RDMA\text {RDMA} 网卡通过 DMA\text {DMA} 从内存中搬移有效载荷,组转报文发送给接收端
  4. 接收端 RDMA\text {RDMA} 网卡收到报文,对其进行解析并通过 DMA\text {DMA} 将有效载荷写入内存
  • 零拷贝:智能网卡可以直接与应用内存相互传输,消除了在应用内存与操作系统之间数据复制的需要。
  • 内核旁路:应用程序无需执行操作系统内核调用命令而直接向智能网卡发送命令。在不需要任何内核内存参与的条件下,RDMA\text {RDMA} 请求从用户空间到本地智能网卡并通过网络发送给远程智能网卡。
  • CPU\text {CPU} 卸载:应用程序无需任何干预的远程进程(或处理器)。

流卸载技术

据测算,传统的千兆网卡最高会消耗 CPU\text {CPU}70%70 \% 的处理能力,可以将原本软件协议栈中的操作转移到网卡硬件中进行,降低系统 CPU\text {CPU} 的消耗,提高处理性能。

LSO(Large Segment Offload)技术LRO(Large Receive Offload)技术主要面向 TCP\text {TCP} 报文,分别对应发送和接收两个方向。网络应用程序发送较大的数据包,经过内核协议栈时,大包分片为多个不超过最大传输单元 MTU\text {MTU} 长度的包,该过程消耗较多 CPU\text {CPU} 资源。

TSO(TCP Segment Offload)技术UFO(UDP Segment Offload)技术分别对应 TCP\text {TCP}UDP\text {UDP} 报文。TSP\text {TSP}TCP\text {TCP} 报文分段工作交由网卡驱动执行,UFO\text {UFO}UDP\text {UDP} 报文分段工作交由网卡驱动执行。

GSO(Generic Segmentation Offload)技术GRO(Generic Receive Offload)技术分别是延缓分片技术和通用接受卸载,二者比 LSO\text {LSO}LRO\text {LRO} 更通用。首先查询网卡是否支持 TSO\text {TSO} 功能,如果网卡支持 TSO\text {TSO} 功能,则使用网卡的硬件分片功能执行分片;如果网卡不支持 TSO\text {TSO} 功能,则将分片的执行,延缓到数据推送到网卡的前一刻执行。