第三章 DPU的硬件架构:解析DPU内部的关键组件
好,咱们今天来聊聊DPU肚子里到底装了些什么。说白了,DPU就是一张专门处理数据的网卡,但它比普通网卡复杂得多。我刚开始接触DPU时,第一反应是:这不就是个带CPU的网卡吗?后来才发现,事情远没那么简单。
核心观点:DPU的硬件架构,本质上是“CPU通用计算能力 + 网络专用处理能力 + 硬件加速能力”的三合一。这三者缺一不可。
3.1 整体架构概览
先看一张我画的架构图,这样你心里有个底。
这张图里,PCIe接口是DPU和主机CPU沟通的桥梁。ARM核负责跑控制逻辑,网络引擎处理数据包,加速器干脏活累活。嗯,这里要注意,内存控制器我特意画进去了——很多人会忽略它,但实际项目中,内存带宽往往是瓶颈。
3.2 ARM核心集群:DPU的大脑
为什么DPU里要放ARM核?直接上x86不行吗?
我个人的理解是:ARM在功耗和性能之间找到了一个很好的平衡点。DPU不需要像CPU那样跑复杂的应用,它只需要高效地处理网络控制面。ARM核在这里的角色,说白了就是“管家”——它不亲自搬砖,但指挥谁该干什么。
ARM核在DPU里主要干三件事:
- 控制平面处理:运行OVS、路由协议、防火墙规则等控制逻辑
- 管理平面:处理配置下发、健康检查、固件升级等
- 异常处理:当硬件加速器处理不了的特殊包,由ARM核兜底
避坑指南:我曾经在一个项目中,把所有的网络处理逻辑都扔给了ARM核,结果发现延迟根本压不下去。后来才意识到,ARM核适合做控制面,数据面必须走硬件流水线。这个教训让我多花了两周改架构。
目前主流的DPU产品,ARM核数量从4核到16核不等。我个人建议,如果做轻量级场景(比如智能网卡),4-8核就够了;如果是数据中心级的DPU,至少得12核起步。
3.3 网络引擎:数据面的心脏
网络引擎是DPU最核心的部分。你想想看,DPU之所以叫DPU,就是因为它能处理数据。网络引擎负责的就是“线速处理”——不管来多少数据包,都得在硬件层面搞定,不能丢包。
网络引擎的关键能力包括:
- 包解析与分类:识别L2/L3/L4头部,判断包的类型
- 流表匹配:基于五元组或更复杂的规则,决定包的去向
- 封装/解封装:支持VXLAN、Geneve等隧道协议
- QoS与调度:保证关键业务的带宽和延迟
我记得有一次调试一个400G的DPU项目,网络引擎的流表深度不够,导致大量包被踢到ARM核处理,性能直接腰斩。后来我们调整了流表的哈希算法,才把问题解决。所以,选型时一定要关注网络引擎的流表容量和查表延迟。
关键指标:网络引擎的“包处理速率”通常用Mpps(百万包每秒)衡量。一个合格的DPU,至少要做到线速处理64字节小包。比如100Gbps的DPU,小包速率应该在148.8 Mpps左右。
3.4 硬件加速器:DPU的“瑞士军刀”
硬件加速器是DPU区别于普通网卡的关键。普通网卡只能做简单的包转发,而DPU能做的远不止这些。
常见的硬件加速器包括:
| 加速器类型 | 典型功能 | 为什么需要硬件加速 |
|---|---|---|
| 加解密引擎 | IPSec、TLS、SSL卸载 | 软件加解密太慢,硬件能快10-100倍 |
| 压缩/解压缩引擎 | 数据压缩、存储卸载 | 减少网络带宽占用,提升存储效率 |
| 正则匹配引擎 | 深度包检测(DPI) | 安全场景下,逐包软件匹配太耗CPU |
| 虚拟化卸载引擎 | SR-IOV、virtio-net卸载 | 减少虚拟机切换开销 |
说白了,硬件加速器就是帮CPU干脏活的。我见过一个客户,他们的防火墙设备用CPU做DPI,结果100Gbps的线速只能跑到20Gbps。后来换了带正则匹配引擎的DPU,直接跑满线速。这就是硬件加速的价值。
注意:硬件加速器不是万能的。它擅长处理固定模式的任务,但遇到不规则的数据流,反而可能成为瓶颈。我曾经遇到过一个场景,客户的自定义协议格式太奇葩,硬件加速器根本匹配不了,最后还是得靠ARM核兜底。所以,设计时一定要留好“回退路径”。
3.5 PCIe接口:连接主机CPU的桥梁
PCIe接口是DPU和主机CPU通信的唯一通道。这个接口的性能,直接决定了DPU能发挥多大作用。
目前主流的DPU使用PCIe 4.0或5.0。PCIe 4.0 x16的理论带宽是64GB/s(双向),PCIe 5.0 x16能到128GB/s。但实际项目中,能跑到理论值的70%就算不错了。
PCIe接口在DPU中的关键作用:
- 数据搬运:主机CPU通过PCIe把网络数据交给DPU处理
- 控制面通信:主机驱动通过PCIe配置DPU的ARM核
- 内存映射:DPU可以通过PCIe访问主机内存,实现零拷贝
我个人习惯在项目初期就做PCIe的带宽测试。因为很多问题都是PCIe链路不稳定导致的。我记得有一次,DPU在实验室跑得好好的,一到客户机房就频繁断连。查了两天才发现,是PCIe的链路协商出了问题——客户的主板PCIe时钟抖动太大。后来我们在DPU侧加了时钟恢复电路才解决。
小技巧:PCIe的链路宽度和速率是可以动态协商的。如果发现DPU性能不达标,先用lspci -vvv检查一下链路状态,看看是不是降速了。我见过太多案例,都是因为PCIe降速到x1或Gen2导致性能暴跌。
3.6 内存子系统:容易被忽视的瓶颈
最后聊聊内存。很多人觉得DPU的内存不重要,反正数据都是过路而已。但实际项目中,内存带宽往往是最大的瓶颈。
DPU的内存架构通常分两层:
- HBM(高带宽内存):靠近网络引擎和加速器,带宽高、延迟低,但容量小(通常几百MB到几GB)
- DDR内存:靠近ARM核,容量大(可达几十GB),但带宽不如HBM
为什么需要HBM?因为网络引擎处理数据包时,需要频繁查流表、更新计数器。这些操作如果走DDR,延迟太高,根本跑不满线速。HBM的带宽能到1TB/s以上,正好满足需求。
我曾经在一个项目中,为了省钱选了不带HBM的DPU方案。结果网络引擎的流表查表延迟高了3倍,整体性能只能跑到设计值的60%。后来不得不换方案,多花了不少钱。所以,我的建议是:内存子系统这块,千万别省。
公众号:蓝海资料掘金营,微信deep3321