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调度与核阵列,右侧是内存层次,底部标注典型数据面路径。它帮助你在后续章节中快速定位"我改的是哪一段"。

OCTEON DPU 系统全景:核 · 加速单元 · 内存 · 数据面 I/O 与硬件加速 以太网 MAC / PHY 100G / 25G 端口 NIX / PIP 包输入输出与入队 CPT 加解密 IPsec / SSL 卸载 DPI / 正则引擎 深度包检测 Timer / RNG / 压缩 辅助功能卸载 NPA 缓冲区管理 报文缓冲分配/回收 SSO 调度 + 通用核阵列 SSO 工作调度单元 Work Queue 分发 · 顺序保持 · 负载均衡 Cluster 0 Core 0 Core 1 Core 2 Core 3 Cluster 1 Core 4 Core 5 Core 6 Core 7 一致性互连(Coherent Mesh / CCN) 核间通信 · 缓存一致性 · 跨簇访问 共享 L2 / LLC 缓存 簇内共享 · 降低 DDR 访问 DDR 控制器 → 外部 DDR4/DDR5 内存层次(近→远) L1 / 寄存器 最低延迟 · 核私有 簇内共享 L2 低延迟 · 簇内共享 LLC / 互连缓存 中等延迟 · 全局共享 DDR 控制器 高带宽 · 高延迟 外部 DDR4/DDR5 最大容量 · 最高延迟 优化目标:热数据尽量留在上层 典型数据面路径: 物理口收包 → NIX/PIP 入队 → SSO 调度 → 通用核处理(解析/查表/加解密) → 出队发送

五、建立优化视角:三个必须回答的问题

有了这张地图,后续每一章优化都可以回到三个问题:

  1. 这段处理该由谁执行?——通用核还是CPT/DPI等加速单元。若某功能已有硬件卸载,却仍在核上软件实现,就是首要优化点。
  2. 数据在哪一层内存?——报文缓冲是否跨节点、热表是否常驻L2、是否存在频繁的DDR往返。
  3. 调度是否匹配?——SSO队列数量、核绑定、工作粒度是否与核数和业务特征匹配,是否存在核空转或队列争抢。
建议在动手优化前,先用OCTEON的SDK工具(如octeon_ep驱动、sso统计接口)采集一份基线:各核利用率、SSO队列深度、DDR带宽、CPT吞吐。没有基线的优化容易变成"凭感觉调参"。