2. Marvell DPU硬件架构解析
Marvell OCTEON系列DPU(如OCTEON 10 DPU、OCTEON TX2等)是面向数据中心基础设施卸载的SoC级芯片,其硬件架构并非简单的"CPU+网卡"组合,而是围绕通用算力、网络数据面、PCIe主机接口、片上内存层次、专用加速引擎五条主线协同设计。理解这套架构,是后续做NVMe-oF目标端卸载、存储虚拟化与线速加解密的前提。本节从硬件模块出发,逐层拆解各单元的职责与相互关系。
一、算力单元:Arm核与专用数据面核的分工
OCTEON 10 DPU采用Arm Neoverse N2核心作为通用算力单元,典型配置为8~24核,主频约2.0~2.5GHz,负责控制面任务:NVMe-oF会话管理、命名空间映射、配置下发、异常处理与日志。与之并列的是Marvell自研的可编程数据面处理流水线(在OCTEON TX2中体现为NITROX与可编程包处理器,在OCTEON 10中进一步整合为DPU数据面引擎),它不执行通用指令流,而是以流水线方式处理报文解析、流表匹配、转发与卸载动作。
这种"通用核管控制、数据面核管线速转发"的分工,决定了编程模型:控制面用C/Linux用户态程序,数据面通过Marvell提供的SDK(如DPDK、DOCA风格API或厂商专用配置接口)下发流规则。实际工程中,一个NVMe-oF目标端通常把TCP/ RoCEv2连接建立、队列管理放在Arm核,把NVMe命令解析、数据搬移、加解密卸载到数据面与加速引擎。
二、网络接口与PCIe拓扑
网络侧,OCTEON 10 DPU集成多端口以太网MAC,支持25G/50G/100G甚至200G速率,可配置为独立端口或链路聚合,并支持RoCEv2、PFC、ECN等无损以太网特性——这是NVMe-oF over RoCEv2的关键。主机侧,DPU通过PCIe Gen4/Gen5 x16上行接口连接服务器CPU,对主机呈现为一块多功能PCIe设备:既提供网络功能(如virtio-net或SR-IOV VF),也提供存储功能(NVMe控制器或NVMe-oF发起端/目标端接口)。
PCIe拓扑上,DPU内部通常包含PCIe Switch或Root Complex逻辑,把上行主机链路与内部各功能块(网络MAC、加速引擎、DMA引擎)连接起来。主机看到的可能是多个PF/VF,通过SR-IOV把队列直接映射给虚拟机或容器,从而绕过主机内核网络栈,降低NVMe-oF数据路径延迟。
三、内存层次:从Cache到DDR的缓冲设计
DPU的内存层次直接决定NVMe-oF数据路径的吞吐与延迟。最靠近计算单元的是L1/L2 Cache,用于指令与热数据;再往下是片上SRAM或末级缓存(LLC),常被用作数据缓冲队列与描述符环的存放区——网络报文到达后先写入片上缓冲,由DMA引擎搬运,避免频繁访问外部DDR。最外层是DDR4/DDR5控制器,容量可达数十GB,用于存放NVMe命名空间元数据、会话状态、大块数据暂存。
工程上需要关注的是:NVMe-oF目标端的数据缓冲若全部落在DDR,会引入额外访问延迟;合理做法是把小IO的描述符与命令队列放在片上SRAM,大块数据传输才走DDR。OCTEON DPU的硬件队列管理机制允许把队列基址配置到不同内存区域,这需要在驱动初始化时通过寄存器或SDK接口设定。
四、存储加速相关硬件模块
存储加速是OCTEON DPU的核心价值所在,主要包含四类硬件模块:
- DMA引擎:在主机内存、DPU片上缓冲、网络接口之间搬运数据,支持分散-聚集(Scatter-Gather),是NVMe-oF数据路径的搬运主力。
- 加解密引擎:支持AES-XTS、AES-GCM等模式,用于NVMe-oF的inline加密或自加密盘场景,吞吐可达线速,避免占用Arm核。
- 压缩/解压引擎:支持Deflate、LZ4等算法,用于存储压缩卸载,降低后端存储容量与网络带宽压力。
- NVMe-oF卸载逻辑:在数据面流水线中实现NVMe命令的解析、队列配对、PDU封装/解封装,把原本由主机CPU处理的协议栈下沉到DPU。
五、模块协同与工程关注点
把上述模块串起来看,OCTEON DPU的数据路径可以概括为:网络接口接收RoCEv2报文 → 数据面流水线解析NVMe-oF PDU → DMA引擎搬运数据 → 加解密/压缩引擎处理 → 内存层次缓冲 → PCIe接口交付主机或写入后端存储。控制路径则由Arm核通过PCIe与主机驱动交互,完成队列建立、命名空间发现与错误恢复。
工程实践中需要重点验证三件事:一是PCIe链路是否协商到预期速率与宽度(可通过lspci -vv查看LnkSta);二是RoCEv2的PFC/ECN配置是否与交换机一致,否则NVMe-oF会出现重传与性能抖动;三是加速引擎的队列深度与DMA描述符是否匹配,避免出现引擎空转或缓冲溢出。这些检查点直接决定后续章节中NVMe-oF卸载能否达到线速。