3、DPU硬件架构:芯片内部组成与通信机制

大家好,我是你们的DPU架构课讲师。今天我们来聊聊DPU的硬件架构。说实话,很多初学者一上来就被各种硬件术语吓住了。其实没那么复杂。你想想看,DPU本质上就是一个专门处理数据的计算机。它有自己的CPU、加速器、内存,还有跟主机通信的接口。

我个人习惯把DPU的硬件架构分成三个层面来理解:计算层、互联层、存储层。咱们一个一个来看。

3.1 ARM核:DPU的“大脑”

DPU为什么用ARM核,而不是x86?原因很简单:功耗和面积。我在项目中遇到过客户要求DPU的功耗必须控制在25W以内,如果用x86,光CPU就得吃掉15W以上,留给加速器的功耗就很少了。ARM核在同等性能下,功耗只有x86的1/3左右。

典型的DPU芯片内部会集成多个ARM Cortex-A系列核心,比如Cortex-A72或A76。数量上,少则4核,多则16核甚至更多。这些ARM核主要负责:

  • 控制面处理:比如路由协议、连接管理、异常处理
  • 慢路径处理:那些硬件加速器处理不了的复杂报文
  • 管理面功能:设备配置、监控、日志上报

关键点:ARM核在DPU中不负责数据面的快速转发。数据面的工作,交给硬件加速器。ARM核更像是一个“管家”,而不是“搬运工”。

3.2 硬件加速器:真正的“数据搬运工”

DPU之所以能处理100G甚至400G的网络流量,靠的不是ARM核,而是各种硬件加速器。这些加速器是专门为特定任务设计的硬件模块,处理速度比软件快几个数量级。

常见的硬件加速器包括:

加速器类型 功能 典型性能
包处理引擎 报文解析、分类、转发 100Gbps+
加密加速器 IPSec、TLS加解密 50Gbps+
正则匹配引擎 深度包检测(DPI) 10M条规则
存储加速器 NVMe over Fabric卸载 百万级IOPS
虚拟化加速器 SR-IOV、virtio卸载 1024个VF

嗯,这里要注意:不是所有加速器都在同一时刻工作。DPU内部有一个可编程的流水线,你可以根据业务需求,动态配置哪些加速器参与处理。我曾经在调优一个5G UPF场景时,发现加密加速器占用了太多流水线资源,导致包处理引擎的吞吐下降。后来调整了流水线优先级,问题才解决。

3.3 网络接口:DPU的“眼睛和耳朵”

DPU的网络接口通常支持10G/25G/50G/100G/200G/400G以太网。接口数量从2个到16个不等。我个人建议,初学者先关注25G和100G这两个主流速率。

网络接口内部包含:

  • MAC层:处理以太网帧的收发
  • PCS层:物理编码子层,负责编解码
  • SerDes:串行器/解串器,把并行数据转成高速串行信号

为什么DPU需要这么多网络接口?因为DPU通常部署在东西向流量密集的场景,比如数据中心内部。多个接口可以实现流量隔离、负载均衡、高可用。

避坑指南:我曾经在项目里遇到一个坑——DPU的网口协商速率跟交换机不匹配。原因是DPU的PHY芯片固件版本太旧,不支持某些自动协商模式。后来升级固件才解决。所以,网口兼容性测试一定要做全

3.4 PCIe接口:DPU与主机的“桥梁”

DPU通过PCIe接口连接到主机CPU。这个接口是DPU存在的意义——没有PCIe,DPU就只是一个普通的智能网卡。

PCIe接口的关键参数:

  • 通道数:x8或x16,x16带宽更大
  • 版本:Gen4或Gen5,Gen5单通道带宽约32Gbps
  • DMA能力:直接内存访问,不经过主机CPU

PCIe通信的核心机制是DMA。DPU可以直接读写主机内存,不需要主机CPU参与。你想想看,如果每个数据包都要主机CPU来搬运,那CPU早就累趴下了。

实际项目中,PCIe的带宽往往成为瓶颈。我记得有一次做性能测试,DPU内部处理能力已经达到200Gbps,但PCIe Gen4 x16的理论带宽只有256Gbps,实际可用带宽还要打7折。所以,PCIe带宽规划一定要留余量

3.5 内存与缓存架构:DPU的“记忆系统”

DPU的内存架构跟普通服务器不太一样。它需要同时满足低延迟高带宽两个要求。

典型的内存层次:

  • L1/L2缓存:每个ARM核私有,容量小但速度极快
  • L3缓存:所有ARM核共享,通常几MB到十几MB
  • 片上SRAM:硬件加速器专用,延迟极低(几个时钟周期)
  • 片外DDR:主内存,容量大(几GB到几十GB),但延迟较高
  • HBM:高带宽内存,用于高性能场景,带宽可达1TB/s+

关键点:DPU的缓存一致性是个大问题。ARM核和硬件加速器可能同时访问同一块内存,如果没有一致性协议,数据就会出错。大多数DPU使用ACE或CHI协议来保证一致性。

我建议你在设计数据平面程序时,尽量把热数据放在片上SRAM或L3缓存中。片外DDR的访问延迟大约是片上缓存的10倍以上。我曾经优化过一个流表查询程序,把流表从DDR搬到SRAM后,查询延迟从200ns降到了20ns,吞吐提升了3倍。

3.6 整体架构图

下面这张图展示了DPU芯片的内部组成和关键数据流。你可以看到ARM核、硬件加速器、网络接口、PCIe接口、内存子系统是如何协同工作的。

DPU芯片内部架构图 ARM核集群 Cortex-A72 x4 L1/L2缓存 控制面处理 慢路径处理 硬件加速器 包处理引擎 加密加速器 正则匹配引擎 存储加速器 网络接口 100G以太网 x4 MAC/PCS/SerDes 流量隔离 负载均衡 PCIe Gen5 x16 DMA 主机通信 内存与缓存子系统 L3缓存 16MB 片上SRAM 4MB 片外DDR 16GB HBM 8GB 1TB/s 一致性协议 ACE/CHI 控制 数据 转发 数据流方向:网络接口 → 加速器 → 内存 → PCIe → 主机 图例 控制流 数据流 转发流 内存访问

从图中可以看出,数据从网络接口进入后,经过硬件加速器处理,再通过内存子系统缓存,最后通过PCIe接口送到主机。ARM核在整个过程中扮演控制角色,不直接参与数据搬运。

3.7 小结

DPU的硬件架构可以总结为:ARM核做控制,加速器做数据,PCIe做桥梁,内存做缓存。这四个部分缺一不可。

在实际项目中,我建议你重点关注两个地方:

  • PCIe带宽:这是最容易成为瓶颈的地方
  • 缓存一致性:这是最容易出bug的地方

好了,这一章的内容就到这里。下一章我们会深入数据平面编程的软件栈,看看如何用代码来驾驭这些硬件资源。


专注资料整理