2. Marvell DPU硬件架构与网络虚拟化卸载引擎
Marvell 的 OCTEON TX2 与 CN10K 系列 DPU 是面向云数据中心、5G 与边缘场景的高性能网络处理器。理解其硬件架构,是掌握网络虚拟化卸载能力的前提。与通用 CPU 加网卡的组合不同,这类 DPU 把数据面处理拆解为一组专用硬件块,通过流水线式的协作完成报文接收、解析、分类、转发、加密与统计,从而在保持线速的同时释放主机 CPU。
一、整体架构:从接口到工作负载域
OCTEON TX2/CN10K 的架构可以按“接口层—网络处理层—加速层—计算层”来理解。接口层包含以太网 MAC/PCS、PCIe 控制器以及用于芯片间互联的 CCPI/CCPI-2 一致性接口;网络处理层由 NIX(Network Interface Controller)、NPA(Network Pool Allocator)、SSO(Schedule/Synchronization Unit)等硬件块构成;加速层包括 CPT(Crypto Acceleration Unit)、DMA、压缩/解压等单元;计算层则是多核 ARM 集群(CN10K 采用 Arm Neoverse N2 核),运行 Linux、DPDK、OVS 或自研数据面程序。
这种分层的关键在于:报文路径上的大部分工作由硬件块完成,ARM 核只在需要策略判断或控制面处理时介入。因此,DPU 的“卸载”不是把软件搬到另一颗 CPU 上,而是把原本由主机 CPU 执行的转发、封装、加解密、限速等动作下沉到专用硬件流水线。
二、NIX、NPA、SSO:数据面的三大支柱
NIX 是网络接口控制器,负责报文的收发与队列管理。它把物理端口或虚拟端口映射为可配置的队列集合,支持多队列、RSS 散列和 VLAN/隧道解析。在 SR-IOV 场景下,每个 VF 可以绑定到独立的 NIX 队列组,从而实现虚拟机流量的硬件隔离。
NPA 是网络池分配器,管理报文缓冲区的分配与回收。它维护多个“池”(pool),每个池有固定大小的缓冲块。NIX 收到报文后向 NPA 申请缓冲,处理完成后归还。池的大小、数量与 NUMA 位置直接影响吞吐和延迟,是资源分配模型中的关键参数。
SSO 是调度与同步单元,负责把工作项(work item)分发给 ARM 核,并保证同一流的工作项按序处理。SSO 支持“组”(group)和“标签”(tag)机制,可以按流、按队列或按优先级调度。它让多核并行处理报文时仍能维持流内顺序,是数据面加速的核心调度器。
三、网络虚拟化卸载单元
网络虚拟化卸载主要围绕隧道封装/解封装、流表匹配、安全加密和流量管理展开。在 CN10K 上,这些能力由硬件块协同完成:NIX 解析外层以太网、VLAN、VXLAN/Geneve 头部;解析与分类单元提取内层五元组;流表匹配单元根据匹配结果决定转发、丢弃或上送;CPT 对需要 IPsec 保护的流量执行加解密;流量管理单元执行限速和整形。
以 VXLAN 卸载为例,当虚拟机发出一个内层以太网帧,NIX 根据端口配置识别出需要封装 VXLAN。硬件自动添加外层 UDP/IP/Ethernet 头部,填充 VNI,并计算校验和。解封装方向则相反:NIX 识别 VXLAN 头部,剥离外层,把内层帧交给后续流水线。整个过程不需要 ARM 核逐包处理,只有在流表未命中或需要策略变更时才上送控制面。
四、数据面加速原理与资源分配模型
数据面加速的核心是“硬件流水线 + 多核并行 + 无锁队列”。报文进入 NIX 后,NPA 分配缓冲,SSO 把工作项分发给空闲的 ARM 核。每个核从 SSO 取出工作项,执行必要的流表查找和动作,然后通过 NIX 发送或交给 CPT 加密。处理完成后,缓冲归还 NPA。整个过程中,硬件块之间通过队列和描述符通信,ARM 核只做轻量级策略判断。
资源分配模型需要关注几个维度:NIX 队列数与 VF 数量的映射、NPA 池的大小与缓冲块尺寸、SSO 组与标签的划分、CPT 队列的并发度、以及 ARM 核的亲和性绑定。一个常见的教学示例配置如下:
# 示例:为 4 个 VF 分配 NIX 队列与 SSO 组(参数为教学假设值)
VF0 -> NIX queue 0-3 -> SSO group 0, tag 0x10
VF1 -> NIX queue 4-7 -> SSO group 1, tag 0x11
VF2 -> NIX queue 8-11 -> SSO group 2, tag 0x12
VF3 -> NIX queue 12-15 -> SSO group 3, tag 0x13
NPA pool: block_size = 2048 B, num_blocks = 65536
CPT queue: 每核绑定 1 个 CPT 队列,并发深度 256
ARM 核绑定: core0-3 处理 VF0/VF1,core4-7 处理 VF2/VF3
在这个示例中,每个 VF 获得 4 个 NIX 队列,对应一个 SSO 组,保证流内顺序;NPA 池按 2048 字节块分配,适合标准以太网帧加隧道头;CPT 队列按核绑定,避免跨核竞争。实际部署时,这些参数需要根据流量模型、核数和内存带宽调整。
五、从架构到工程实践
理解硬件块的分工后,工程上要做的第一件事是确认数据路径。以 OVS-DPDK 为例,需要把 PMD 线程绑定到 ARM 核,把 NIX 队列映射到 PMD,把 NPA 池配置为足够大,把 SSO 组与流表匹配关联。第二件事是验证卸载:用 ethtool -S 或 Marvell 提供的计数器查看 NIX 队列的 drop、tx、rx 统计;用 ovs-appctl dpif-netdev/pmd-stats-show 查看 PMD 处理速率。第三件事是调优:根据丢包位置调整 NPA 池大小、SSO 组数量或 CPT 队列深度。
需要注意的是,硬件卸载并非“一劳永逸”。当流表规模超过硬件表项容量时,部分流量会回退到软件路径;当隧道类型或封装格式不在硬件支持列表内时,也需要软件兜底。因此,资源分配模型必须为软件路径预留核和内存,避免硬件表项溢出导致整体性能骤降。
总结来看,OCTEON TX2/CN10K 的网络虚拟化卸载能力,建立在 NIX、NPA、SSO、CPT 等硬件块的明确分工之上。掌握每个块的角色、它们之间的数据流方向,以及队列、池、组、标签等资源的分配方式,才能在实际工程中把“卸载”从概念变成可观测、可调优的线速转发能力。