3. SmartNIC硬件与软件架构剖析
要理解P4程序为什么能跑在SmartNIC上,必须先看清SmartNIC内部到底由哪些硬件资源组成、数据包从网口进来后经过哪些处理单元、P4编译产物最终被映射到哪一类执行引擎上。本节以三类典型SmartNIC——Netronome NFP系列、FPGA SmartNIC、DPU(以NVIDIA BlueField为代表)——为对象,剖析其包处理流水线、内存层次、主机接口与P4映射方式。
一、三类典型SmartNIC的硬件骨架
Netronome NFP系列采用多核网络流处理器架构:芯片内部集成数十个可编程微引擎(MicroEngine,ME),按簇(Cluster)组织,每个ME可运行多线程,配合专用的包修改引擎、CRC/校验和卸载单元以及硬件流量管理器。它的包处理流水线是"并行多核+专用加速器"模式,P4程序经编译器映射为多个ME上的匹配-动作微码,报文在ME之间通过芯片内的队列与描述符传递。
FPGA SmartNIC(如Xilinx Alveo系列、Intel FPGA网卡)的骨架是查找表、DSP、Block RAM与高速收发器。它的包处理流水线由用户逻辑决定,P4程序通常先编译为VHDL/Verilog或直接映射到P4→FPGA的专用后端,形成一条深度流水线:解析→匹配→动作→重组,各级之间用寄存器打拍,吞吐由流水线级数和时钟频率共同决定。
DPU(BlueField-2/3)则把ARM多核CPU子系统、ConnectX网卡逻辑与可编程加速器集成在一颗芯片上。它的包处理路径分为快路径(网卡硬件卸载)与慢路径(ARM核上运行的软件数据面,如DPDK/OVS),P4程序既可编译到网卡硬件流水线,也可在ARM核上以软件方式执行。
二、包处理流水线与内存层次
三类芯片的共同点是"解析—匹配—动作—转发"四段式流水线,但内存层次差异显著。NFP的ME拥有本地寄存器与近端SRAM,访问片外DDR需经过共享总线,延迟明显上升;因此P4中的寄存器数组、计数器应尽量落在片内。FPGA的Block RAM容量有限但访问确定,适合存放精确匹配表与状态;大表则需外挂DDR/HBM。DPU的ARM核有完整Cache层次,可运行复杂控制逻辑,但单包处理延迟高于硬件流水线。
主机接口方面,三者都通过PCIe与主机相连。NFP与FPGA SmartNIC通常以PCIe Endpoint身份出现,主机通过BAR空间映射寄存器、通过DMA队列收发报文;DPU则同时具备PCIe Endpoint与PCIe Root Complex能力,可让主机直接访问其内部ARM子系统,甚至把DPU当作独立服务器使用。网络端口侧,NFP与FPGA SmartNIC一般提供2×100G或2×25G以太网MAC,DPU常见2×100G/200G。
三、P4程序如何映射到硬件
P4程序的核心抽象是"表(table)+ 动作(action)+ 解析器(parser)+ 逆解析器(deparser)"。在NFP上,编译器把每个table映射为ME上的匹配微码,把action映射为微码中的修改指令,parser/deparser映射为专用的解析状态机;表项由控制面通过PCIe写入片内SRAM。在FPGA上,table通常映射为CAM/TCAM或哈希表逻辑,action映射为组合/时序逻辑,parser映射为状态机,整条流水线在时钟驱动下逐级推进。在DPU上,若走硬件卸载路径,映射方式与网卡ASIC类似;若走软件路径,P4程序被编译为C代码,在ARM核上以DPDK/OVS方式执行,表项存于主机或DPU内存。
一个关键约束是:P4中的寄存器数组、计数器、计量器(meter)在硬件上都有容量上限。例如NFP的ME本地SRAM通常只有几十KB量级,FPGA的Block RAM按块计,DPU的ARM核虽有GB级内存但访问延迟远高于片内。因此编写P4程序时,应把高频访问的小表放在片内,把低频大表下沉到DDR或主机内存,并通过控制面异步更新。
四、主机接口与PCIe交互
主机与SmartNIC的交互主要靠PCIe BAR空间与DMA队列。BAR空间用于映射控制寄存器、门铃(doorbell)和状态寄存器;DMA队列用于批量收发报文。以NFP为例,主机驱动在BAR中写入队列基址,SmartNIC通过DMA读取描述符、搬运报文,处理完成后再写回完成队列。DPU则更进一步:它可作为PCIe Root Complex,让主机直接枚举其内部设备,甚至把DPU上的ARM核当作独立主机使用。
网络端口侧,SmartNIC通常提供多个100G/25G MAC,支持SR-IOV虚拟化,每个VF可独立绑定到虚拟机或容器。P4程序在端口侧完成VLAN处理、隧道封装/解封装、ACL匹配等,再决定报文是上送主机、转发到另一端口还是丢弃。
五、一个可参考的映射检查清单
| 检查项 | NFP | FPGA SmartNIC | DPU |
|---|---|---|---|
| 表容量 | 片内SRAM几十KB | Block RAM按块计 | 片内+主机内存 |
| 匹配类型 | 精确/三元/LPM | CAM/TCAM/哈希 | 硬件或软件 |
| 执行模型 | 多核ME并行 | 深度流水线 | 快/慢路径混合 |
| 主机接口 | PCIe Endpoint | PCIe Endpoint | Endpoint + Root Complex |
| P4后端 | ME微码 | RTL/专用后端 | 硬件或C/DPDK |