使用 OVN 的 Off-path SmartNIC DPU¶
本页的目的是描述如何在 OVN 机制驱动程序使用时将 Off-path SmartNIC DPU 硬件与 Neutron 集成。为了深入讨论底层机制,建议熟悉以下规范
概述¶
一类统称为 Off-path SmartNIC DPU 的设备为早期架构引入了重要的变化,在早期架构中,计算和网络代理通常共存于超visor 主机上:网络控制平面组件现在移动到 SmartNIC DPU 的 CPU 端,其中包括 ovs-vswitchd 和 ovn-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