1. 课程导入与全景认知
在 Kubernetes 集群里,一个看似普通的 Pod 到 Pod 请求,背后往往要经过 veth 对、网桥、iptables/ipset 规则链、Overlay 隧道封装、物理网卡队列、驱动中断与协议栈处理等一长串环节。当节点上运行着成百上千个容器、业务又以小包高频通信为主时,CPU 会被大量消耗在“搬运数据”而不是“处理业务”上。本课程要解决的核心问题就是:如何借助 Marvell 的网络卸载能力,把容器网络的数据面从主机 CPU 卸载到网卡与可编程硬件上,从而降低时延、提升吞吐、释放算力。
需要先明确本课程讨论的“Marvell 云原生网络卸载”具体指什么。Marvell 在数据中心网络领域的产品线覆盖广泛,与本课程强相关的主要包括三类能力:其一是基于 DPU/智能网卡(如 OCTEON 系列)的通用可编程数据面,可在硬件上执行网络转发、隧道封装解封装、连接跟踪等任务;其二是 高速以太网控制器(如 FastLinQ/QL 系列)提供的 SR-IOV、VF 直通、硬件队列与卸载特性;其三是围绕 DOCA/DPDK/OVS 硬件卸载 等软件框架形成的云原生集成路径。课程不会停留在“某块卡支持某功能”的罗列,而是沿着“容器流量如何被识别、被卸载、被加速、被观测”的主线展开。
为了建立全景认知,下面这张图给出了从容器工作负载到 Marvell 硬件卸载的完整技术栈分层关系。它同时说明了本课程后续章节的展开顺序:自下而上理解硬件与驱动能力,自上而下理解容器网络与编排需求,中间由卸载框架与数据面加速技术衔接。
理解这张图的关键在于“双向驱动”关系。自下而上看,Marvell 硬件提供的可编程流水线、SR-IOV 虚拟化、流表卸载与隧道处理能力,是上层 OVS 卸载、DPDK 转发、eBPF 加速得以成立的物理基础;自上而下看,Kubernetes 的 Pod 网络模型、Service 负载均衡、NetworkPolicy 隔离需求,又决定了硬件卸载必须支持哪些匹配域、哪些封装格式、哪些可编程接口。课程后续每一章,基本都落在这四层中的某一层或层间衔接处。
从“是什么”到“怎么做”:一个可观察的卸载示例
为了不让全景停留在概念层面,这里给出一个后续会反复引用的教学示例场景(参数为合理假设,用于说明方法而非实测结果)。假设一个 2 节点 Kubernetes 集群,节点各配一块支持 SR-IOV 与 OVS 硬件卸载的 Marvell 网卡,Pod 之间通过 VXLAN Overlay 通信。未卸载时,一个 1500 字节以下的 TCP 小包路径大致是:Pod veth → Linux bridge → OVS 内核 datapath → VXLAN 封装 → 物理网卡驱动 → 硬件队列。此时可用 mpstat -P ALL 1 观察 %soft 与 %sys,用 ethtool -S <dev> 观察队列丢包,用 ovs-dpctl dump-flows 观察流是否停留在内核 datapath。
启用硬件卸载后,期望看到的变化是:首包仍由慢路径处理并下发流表,后续同五元组流量被标记为 offloaded:yes,数据包在网卡硬件中完成匹配、封装与转发,不再经过主机协议栈。判断卸载是否真正生效,不能只看配置命令返回成功,而应同时核对三处证据:ovs-appctl dpctl/dump-flows -m 中是否出现 offload 标记、ethtool -S 中硬件流表计数是否增长、以及 top/mpstat 中对应 CPU 的软中断占比是否下降。这三条证据构成了本课程贯穿始终的“配置—观察—判断”方法。
课程目标与能力地图
完成本课程后,学习者应具备以下能力:能够说清 Marvell DPU/智能网卡在容器网络中的角色边界;能够根据业务特征(大包吞吐型、小包高频型、加密密集型)选择合适的卸载路径;能够独立完成 SR-IOV VF 创建、OVS 硬件卸载开启、CNI 与卸载模式匹配等关键配置;能够使用流表、队列计数、CPU 软中断、时延分布等指标判断卸载效果与回退条件;能够在卸载异常时按“硬件识别—驱动绑定—VF 状态—流表下发—CNI 协同”的顺序排查。
本课程不假设读者已经精通 DPDK 或内核网络,但要求具备基本的 Linux 网络操作能力,例如理解网卡、网桥、路由、命名空间与 iptables 的基本作用。对于 DPU 编程、DOCA 服务等较深内容,课程会给出必要的背景铺垫,并明确哪些属于生产可用能力、哪些属于实验性探索,避免把演示环境结论直接套用到生产集群。