OVS 三种模式

0 阅读2分钟

image.png

NVIDIA OVS-DOCA 的核心逻辑确实是利用 OVS 作为控制面,通过 DOCA Flow 库将数据面转发逻辑完全卸载(Offload)到 DPU 的硬件 eSwitch 上。

你可以将 OVS-DOCA 理解为 OVS 的一个新型 DPIF(Datapath Interface)实现,它专门针对 NVIDIA BlueField 系列 DPU 进行了底层优化。

以下是基于第一性原理的深度分析:

1. 结论先行:OVS-DOCA 的本质

OVS-DOCA 并不是重写了一个 Open vSwitch,而是通过 OVS-DOCA DPIF 层,将原本下发给内核(TC Flower)或 DPDK(rte_flow)的流表规则,改用 DOCA Flow API 进行封装,最终下发到 DPU 内部的 硬件 eSwitch(也称为数据平面硬件加速引擎 ASAP²)。


2. 架构层级分析

在 DPU 环境中,OVS-DOCA 的工作模式如下:

  • 控制面(Unmodified OVS Control Plane): 运行在 DPU 的 ARM 核上。它保留了标准的 ovs-vswitchdovsdb-server 以及对外的 OpenFlow 接口。这意味着上层(如 OVN 或 OpenStack)无需感知底层变化。
  • 转换层(DPIF-DOCA): 这是 NVIDIA 引入的关键组件。它监听 OVS 的流表变化,并将 OpenFlow/OVS 规则翻译成 DOCA Flow 指令。
  • 硬件转发面(Hardware eSwitch): DPU 硬件中的嵌入式交换机(eSwitch)。规则下发后,流量在网关(Uplink)和虚机/容器(VF/SF)之间直接通过硬件线速转发,完全绕过 ARM CPU

3. 三种 Offload 模式的对比

为了让你更清晰地定位 OVS-DOCA,我们可以对比 NVIDIA 支持的三种 OVS 加速路径:

特性OVS-Kernel (TC)OVS-DPDK (rte_flow)OVS-DOCA
下发接口Linux TC FlowerDPDK rte_flow APIDOCA Flow API
性能瓶颈内核态/用户态切换损耗轮询(Polling)消耗 CPU最高(硬件原生优化)
连接跟踪 (CT)依赖 Netfilter软件处理为主硬件原生 CT 卸载
可扩展性受限于内核版本迭代依赖 DPDK 社区更新NVIDIA 深度定制,迭代最快

4. 关键实现机制:Switchdev Mode

无论是哪种加速方式,实现硬件卸载的前提是网卡必须工作在 switchdev 模式

  1. VF Representors: 在 ARM 侧的 Linux 中为每个硬件接口(PF/VF/SF)创建一个“代表接口”。
  2. 逻辑绑定: OVS 将这些 Representors 添加到 Bridge 中。
  3. 首包上送: 当一个流的首包到达 eSwitch 发现没命中硬件流表时,会送往 ARM 核上的 OVS。
  4. 流表下发: OVS 决策后,通过 DOCA DPIF 将对应的 Flow 注入硬件。后续包直接在硬件层面转发。