使用 OVN 的 Off-path SmartNIC DPU

本页的目的是描述如何在 OVN 机制驱动程序使用时将 Off-path SmartNIC DPU 硬件与 Neutron 集成。为了深入讨论底层机制,建议熟悉以下规范

概述

一类统称为 Off-path SmartNIC DPU 的设备为早期架构引入了重要的变化,在早期架构中,计算和网络代理通常共存于超visor 主机上:网络控制平面组件现在移动到 SmartNIC DPU 的 CPU 端,其中包括 ovs-vswitchdovn-controller。下图提供了所涉及组件的概述

                       ┌────────────────────────────────────┐
                       │  Hypervisor                        │    LoM Ports
                       │  ┌───────────┐       ┌───────────┐ │   (on-board,
                       │  │ Instance  │       │  Nova     │ ├──┐ optional)
                       │  │(e.g. QEMU)│       │ Compute   │ │  ├─────────┐
                       │  │           │       │           │ ├──┘         │
                       │  └───────────┘       └───────────┘ │            │
                       │                                    │            │
                       └────────────────┬─┬───────┬─┬──┬────┘            │
                                        │ │       │ │  │                 │
                                        │ │       │ │  │ Control Traffic │
                           Instance VF  │ │       │ │  │ PF associated   │
                                        │ │       │ │  │ with an uplink  │
                                        │ │       │ │  │ port or a VF.   │
                                        │ │       │ │  │ (used to replace│
                                        │ │       │ │  │  LoM)           │
   ┌────────────────────────────────────┼─┼───────┼─┼──┼─┐               │
   │   SmartNIC DPU Board               │ │       │ │  │ │               │
   │                                    │ │       │ │  │ │               │
   │  ┌──────────────┐ Control traffic  │ │       │ │  │ │               │
   │  │   App. CPU   │ via PFs or VFs  ┌┴─┴───────┴─┴┐ │ │               │
   │  ├──────────────┤  (DC Fabric)    │             │ │ │               │
   │  │ovn-controller├─────────────────┼─┐           │ │ │               │
   │  ├──────────────┤                 │ │           │ │ │               │
   │  │ovs-vswitchd  │                 │ │NIC Switch │ │ │               │
   │  ├──────────────┤                 │ │ASIC/FPGA  │ │ │               │
   │  │ Neutron OVN  │                 │ │           │ │ │               │
   │  │metadata agent│                 │ │           │ │ │               │
   │  ├──────────────┤Port representors│ │           │ │ │               │
   │  │    br-int    ├═════════════════┤ │           │ │ │               │
   │  └──────────────┘                 └─┼───┬─┬─────┘ │ │               │
 ┌ ┴─ ─ ─ ┐Optional port for             │   │ │       │ │               │
─┤OOB Port initial NIC switch config     │   │ │uplink │ │               │
 └ ┬─ ─ ─ ┘                              │   │ │       │ │               │
   │                                     │   │ │       │ │               │
   └─────────────────────────────────────┼───┼─┼───────┼─┘               │
                                         │   │ │       │                 │
                                      ┌──┼───┴─┴───────┼────────┐        │
                                      │  │             │        │        │
                                      │  │   DC Fabric ├────────┼────────┘
                                      │  │             │        │
                                      └──┼─────────────┼────────┘
                                         │             │
                                         │         ┌───┴──────┐
                                         │         │          │
                                     ┌───▼──┐  ┌───▼───┐ ┌────▼────┐
                                     │OVN SB│  │Neutron│ │Placement│
                                     └──────┘  │Server │ │         │
                                               └───────┘ └─────────┘

先决条件

  • OpenStack Yoga 或更高版本;

  • Open vSwitch >= 2.17;

  • 开放虚拟网络 >= 21.12.0;

  • OVN VIF >= 21.12.0;

  • 具有以下特征的 SmartNIC DPU

    • 一个 NIC,它通过其物理或虚拟功能 PCIe 端点上的 PCIe VPD 功能向超visor 主机和 DPU 主机暴露卡序列号;

    • 以一种受以下 OVN VIF 插件提供程序 支持的方式,向在 SmartNIC DPU 的 CPU 上运行的应用程序暴露有关 representor 端口的信息。

Nova 配置

需要配置超visor 主机以启用

  • Nova PCI 直通 用于 Nova Compute;

    重要提示

    有关其他版本要求和限制的更多信息,请查看 Nova 网络指南的 SR-IOV 部分

  • 由 DPU 提供的选定的物理功能上的 SR-IOV 虚拟功能,提供给超visor 主机。

除了常规 PCI 设备允许列表配置外,PCI 设备规范必须包含 remote_managed 标签,如以下示例所示

  • 没有物理段的虚拟网络;

    [pci]
    passthrough_whitelist = {"vendor_id": "15b3", "product_id": "101e", "physical_network": null, "remote_managed": "true"}
    
  • 带有标签的物理网络(flat、VLAN)

      [pci]
      passthrough_whitelist = {"vendor_id": "15b3", "product_id": "101e", "physical_network": "dcfabric", "remote_managed": "true"}
    
    .. note::
    
    "dcfabric" is an arbitrary physnet name. In order for this to work it must
    be specified consistenly in Nova config, during OVN configuraton when
    specifying ``external_ids:ovn-bridge-mappings`` and during Neutron provider
    network segment creation.
    

自动发现

当具有 remote-managed 端口的实例被调度到具有空闲 remote-managed 设备的计算主机时,它会声明该设备并从该设备提供有关 NIC 的其他信息给 Neutron,以便 Neutron 知道哪个 OVN chassis 需要处理 representor 接口的插入和流编程。对于 PCI VFs,这些附加信息包括

  • 来自 NIC 的 VPD 的卡序列号;

  • PF mac 地址;

  • VF 逻辑编号。

Neutron 使用卡序列号查找 chassis 主机名,这对于端口绑定成功是必需的,其余信息由 ovn-vif 用于设置匹配的 representor 端口。

因此,为了处理计算主机与 SmartNIC DPU 的匹配,SmartNIC DPU 主机和计算主机之间不需要直接通信或配置。

注意

可以使用多个 DPU 每超visor 主机,但是,在撰写本文时,没有办法通过 Neutron 端口对象属性指示 Nova 选择哪些 VFs。

通过在 SmartNIC DPU 本地 *Open_vSwitch* 表的 *external_ids* 列中提供序列号,来实现 OVN 控制器暴露 SmartNIC DPU 序列号

$ ovs-vsctl set Open_vSwitch . external-ids:ovn-cms-options="card-serial-number=AB0123XX0042"

启动具有 remote managed 端口的实例

$ openstack port create \
    --network network \
    --vnic-type remote-managed \
    port1
$ openstack server create \
    --flavor 1 \
    --nic port-id=port1