1. Marvell DPU架构与多核数据处理全景
Marvell OCTEON系列DPU(Data Processing Unit)是面向网络数据面、安全卸载与存储加速的高集成度多核SoC。要在这类芯片上做优化,第一步不是急着改代码,而是建立一张"系统地图":算力从哪来、数据从哪走、瓶颈可能卡在哪一层。本章围绕OCTEON的核布局、硬件加速单元、内存层次与典型数据面场景,给出后续所有优化工作的坐标系。
一、核布局:从通用核到专用核的分工
OCTEON(如CN9K、CN10K系列)采用多簇(cluster)结构,每个簇内包含若干通用ARM核(CN10K为Arm Neoverse N2,CN9K为自研cnMIPS/OCTEON TX2核),并共享L2缓存。核与核之间通过一致性互连(如CN10K的Coherent Mesh Network)连接,形成可扩展的核阵列。典型配置从8核到数十核不等,例如CN106xx为8核,CN109xx可达36核以上。
关键认知是:通用核负责控制面、协议栈、复杂业务逻辑;专用硬件单元负责高吞吐、低延迟的固定功能。优化时若把本可卸载到硬件的工作压在通用核上,就会浪费宝贵的通用算力。因此,理解"哪些活该谁干"是性能设计的第一原则。
二、硬件加速单元:数据面的"专用引擎"
OCTEON的加速单元主要包括:
- Packet Input/Output(PIP/SSO):包输入与工作调度单元,负责把报文分发到各核的工作队列(Work Queue),实现负载均衡与顺序保持。
- NIX/NPA:新一代网络接口与包分配单元,管理报文缓冲区的分配与回收。
- CPT(Crypto Acceleration Unit):加解密与IPsec/SSL卸载,支持对称与非对称算法。
- DPI/正则引擎:深度包检测与模式匹配。
- Timers、RNG、压缩/解压单元:定时、随机数与数据压缩卸载。
这些单元通过SSO(Schedule/Synchronize/Order)机制与通用核协作:报文到达后由硬件写入队列,核通过"获取工作(get_work)"拉取任务,处理完再归还缓冲区。优化的核心之一,就是让SSO的调度粒度、队列数量与核数匹配,避免核空转或队列争抢。
三、内存层次:延迟与带宽的阶梯
OCTEON的内存层次自近及远为:核内寄存器与L1 → 簇内共享L2 → 片上LLC/互连缓存 → DDR控制器 → 外部DDR。CN10K还支持DDR5与更高的内存带宽。数据面优化的常见手法——报文缓冲区复用、避免跨NUMA节点访问、把热数据留在L2——都源于对这一层次的利用。
需要特别注意的是缓冲区管理:NPA负责分配/释放报文缓冲,若分配策略不当(如频繁申请释放、跨节点访问),会显著抬高每包处理成本。因此内存优化往往与加速单元配置联动。
四、典型数据面场景与系统地图
一个典型的OCTEON数据面处理链路可以概括为:物理口收包 → NIX/PIP入队 → SSO调度 → 通用核取包处理(解析、查表、转发/加解密) → 出队发送。安全网关场景还会插入CPT加解密;5G UPF场景则涉及GTP-U解封装与QoS调度。
下面这张图给出OCTEON DPU的系统全景:左侧是输入输出与加速单元,中间是SSO调度与核阵列,右侧是内存层次,底部标注典型数据面路径。它帮助你在后续章节中快速定位"我改的是哪一段"。
五、建立优化视角:三个必须回答的问题
有了这张地图,后续每一章优化都可以回到三个问题:
- 这段处理该由谁执行?——通用核还是CPT/DPI等加速单元。若某功能已有硬件卸载,却仍在核上软件实现,就是首要优化点。
- 数据在哪一层内存?——报文缓冲是否跨节点、热表是否常驻L2、是否存在频繁的DDR往返。
- 调度是否匹配?——SSO队列数量、核绑定、工作粒度是否与核数和业务特征匹配,是否存在核空转或队列争抢。
octeon_ep驱动、sso统计接口)采集一份基线:各核利用率、SSO队列深度、DDR带宽、CPT吞吐。没有基线的优化容易变成"凭感觉调参"。