参考: docs.nvidia.com/doca/sdk/op…
英伟达的文档确实写的很好,为了加深记忆决定直接翻译下。
1. 大纲
-
OVS Hardware Offloads Configuration
-
- Switchdev Configuration
- Switchdev Performance Tuning
- Open vSwitch Configuration
- OVS Performance Tuning
- Basic TC Rules Configuration
- SR-IOV VF LAG
- Classification Fields (Matches)
- Supported Actions
- Port Mirroring: Flow-based VF Traffic Mirroring for ASAP²
- Forward to Multiple Destinations
- sFlow
- Rate Limit
- Kernel Requirements
- VF Metering
- Representor Metering
- OVS Metering
- Multiport eSwitch Mode
-
- OVS-DPDK Hardware Offloads Configuration
- Offloading VXLAN Encapsulation/Decapsulation Actions
- CT Offload
- SR-IOV VF LAG
- VirtIO Acceleration Through VF Relay: Software and Hardware vDPA
- Large MTU/Jumbo Frame Configuration
- E2E Cache
- Geneve Encapsulation/Decapsulation
- Parallel Offloads
- sFlow
- CT CT NAT
- OpenFlow Meters (OpenFlow13+)
-
- Configuring OVS-DOCA
- Notable Differences Between OVS-DPDK and OVS-DOCA
- OVS-DOCA Specific vSwitch Configuration
- Offloading VXLAN Encapsulation/Decapsulation Actions
- Offloading Connection Tracking
- SR-IOV VF LAG
- Multiport eSwitch Mode
- Offloading Geneve Encapsulation/Decapsulation
- GRE Tunnel Offloads
- DP-HASH Offloads
- OVS-DOCA Known Limitations
- OVS-DOCA Debugging
-
Open vSwitch(OVS)是一种基于软件的网络技术,可增强虚拟机(VM)在内部和外部网络中的通信。OVS 通常部署在管理程序中,采用基于软件的方法进行数据包交换,这会占用 CPU 资源,影响系统性能和网络带宽利用率。针对这一问题,英伟达™(NVIDIA®)的加速交换和数据包处理(ASAP2)技术将 OVS 数据平面任务卸载到专用硬件上,如网卡子系统中的嵌入式交换机(eSwitch),同时保持未修改的 OVS 控制平面。这样,OVS 性能显著提高,而 CPU 负担却没有增加。
英伟达™(NVIDIA®)的 OVS 架构扩展了传统的 OVS-DPDK 和 OVS-Kernel 数据路径卸载接口,并引入 OVS-DOCA 作为额外的实现方式。OVS-DOCA 基于英伟达™(NVIDIA®)网络 API 构建,保留了与 OVS-DPDK 和 OVS-Kernel 相同的接口,同时使用 DOCA Flow 库。与其他模式不同,OVS-DOCA 利用独特的硬件卸载机制和应用技术,最大限度地提高了 NVIDA 网卡和 DPU 的性能和功能。该模式因其架构和 DOCA 库集成而特别高效,可增强电子开关配置并加速硬件卸载,超越其他模式所能达到的效果。
英伟达™ OVS 安装文档覆盖了所有三种 OVS 版本。以下各小节将介绍这三种 OVS 版本(默认为 OVS-Kernel)以及如何配置每种版本。
OVS and Virtualized Devices
当 OVS 与网卡和 DPU(如 NVIDIA® ConnectX®-6 Lx/Dx 和 NVIDIA® BlueField®-2 及更高版本)结合使用时,它将利用 ASAP2 的硬件数据平面。该数据平面可使用 SR-IOV 虚拟功能 (VF) 或 virtio 虚拟主机数据路径加速 (vDPA) 与虚拟机建立连接。
在这两种情况下,网卡内的加速器引擎都会加速转发并卸载 OVS 规则。这种集成解决方案可同时加速基础架构(通过 SR-IOV 或 virtio 虚拟机)和数据平面。对于 DPU(包括网卡子系统),另一种虚拟化技术可在 DPU 内实现完全的 virtio 仿真,使主机服务器能够作为软件 virtio 设备与 DPU 通信。
- 在 SR-IOV 虚拟函数 (VF) 上使用 ASAP2 数据平面时,VF 直接传递到虚拟机,NVIDIA 驱动程序在虚拟机内运行。
- 使用 vDPA 时,vDPA 驱动程序允许虚拟机通过 VirtIO 建立连接。因此,数据平面是在虚拟机内的 SR-IOV VF 和标准 virtio 驱动程序之间建立的,而控制平面则由 vDPA 应用程序在主机上管理。
OVS Hardware Offloads Configuration
OVS-Kernel Hardware Offloads
NVIDIA 设备上默认启用 OVS-Kernel。
Switchdev Configuration
-
Unbind the VFs:
echo 0000:04:00.2 > /sys/bus/pci/drivers/mlx5_core/unbind echo 0000:04:00.3 > /sys/bus/pci/drivers/mlx5_core/unbind
警告: 绑定 VFs 的 VMs 必须关机才能卸载 VFs.
-
Change the eSwitch mode from legacy to switchdev on the PF device:
# devlink dev eswitch set pci/0000:3b:00.0 mode switchdevThis also creates the VF representor netdevices in the host OS. 该命令执行后也会在宿主机上创建出 VF 网络设备文件表示符。
警告: PF 切换模式之前需要保证所有 VFs 处于 unbound 状态.
可以通过如下方式切换为 SR-IOV 传统模式,执行:
# devlink dev eswitch set pci/0000:3b:00.0 mode legacy
This also removes the VF representor netdevices. 该命令执行后也会在宿主机上移除 VF 网络设备文件表示符。
在不支持 devlink 的操作系统或内核上,可以使用 sysfs 转到 switchdev 模式:
# echo switchdev > /sys/class/net/enp4s0f0/compat/devlink/mode
- 在此阶段,VF 表示符已经创建。要将表示符映射到其 VF,请务必运行以下命令获取表示符的 switchid 和端口名称:
# ip -d link show eth4
41: enp0s8f0_1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether ba:e6:21:37:bc:d4 brd ff:ff:ff:ff:ff:ff promiscuity 0 addrgenmode eui64 numtxqueues 10 numrxqueues 10 gso_max_size 65536 gso_max_segs 65535 portname pf0vf1 switchid f4ab580003a1420c
可以看到:
switchid– 用于将表示符映射到设备,两个设备 PF 具有相同的 switchidportname– 用于将表示符映射到 PF 和 VF。返回值为 pfvf,其中 X 是 PF 编号,Y 是 VF 编号
- Bind the VFs:
echo 0000:04:00.2 > /sys/bus/pci/drivers/mlx5_core/bind
echo 0000:04:00.3 > /sys/bus/pci/drivers/mlx5_core/bind
Switchdev Performance Tuning
Switchdev 模式性能调优.
Steering Mode
OVS-kernel 支持两种将(流表)规则插入硬件(网卡)的“转向模式”:
- SMFS(软件管理流量转向)--默认模式;规则由软件(驱动程序)直接插入硬件。该模式对规则插入进行了优化。
- DMFS(设备管理流量转向)--使用固件命令插入规则。该模式针对系统中少量规则的吞吐量进行了优化。
在支持“转向模式”的内核中,可通过 sysfs 或 devlink API 进行配置:
-
For sysfs:
echo <smfs|dmfs> > /sys/class/net/<pf-netdev>/compat/devlink/steering_mode -
For devlink:
devlink dev param set pci/0000:00:08.0 name flow_steering_mode value "<smfs|dmfs>" cmode runtime
注意:
-
上述配置在切换到 switchdev 之前设置,应通过 echo sysfs 或调用 devlink 命令来设置模式。
-
只有在切换到 switchdev 时,驱动程序才会使用上述配置的模式。
-
切换到 switchdev 后无法更改上述配置的模式。
-
“转向模式” 仅适用于 switchdev 模式(即不影响传统 SR-IOV 或其他配置)。
Troubleshooting SMFS
mlx5 debugfs supports presenting Software Steering resources. dr_domain including its tables, matchers and rules. The interface is read-only.
警告:New steering rules cannot be inserted/deleted while the dump is being created,
The steering information is dumped in the CSV form in the following format: <object_type>,<object_ID>, <object_info>,...,<object_info> .
This data can be read at the following path: /sys/kernel/debug/mlx5/<BDF>/steering/fdb/<domain_handle> .
Example:
# cat /sys/kernel/debug/mlx5/0000:82:00.0/steering/fdb/dmn_000018644
3100,0x55caa4621c50,0xee802,4,65533
3101,0x55caa4621c50,0xe0100008
You can then use the steering dump parser to make the output more human-readable.
可以使用一个解析器让数据更易读
The parser can be found in this GitHub repository.
vPort Match Mode
OVS-kernel support two modes that define how the rules match on vport.
OVS-kernel 支持两种模式,可定义规则在 vport 上的匹配方式。
| Mode | Description |
|---|---|
| Metadata | 规则根据元数据而不是 vport 编号进行匹配(默认模式)。需要使用这种模式来支持 SR-IOV 实时迁移和双端口 RoCE。 |
| Legacy | 规则根据 vport 编号匹配。在这种模式下,性能可能比元数据高。只有在启用/使用 SR-IOV 实时迁移或双端口 RoCE 时才能使用。 |
vPort 匹配模式可通过 sysfs 控制:
- Set legacy:
```bash
echo legacy > /sys/class/net/<PF netdev>/compat/devlink/vport_match_mode
```
-
Set metadata:
echo metadata > /sys/class/net/<PF netdev>/compat/devlink/vport_match_mode
警告: 必须在切换到 switchdev 之前设置该模式。
Flow Table Large Group Number
卸载流量(包括连接跟踪 (CT))被添加到虚拟交换机转发数据库 (FDB) 流量表中。FDB 表有一组流表组,每个流表组保存相同流量模式的流表。例如,对于 CT 负载流,TCP 和 UDP 是不同的流量模式,最终会被归入两个不同的流表组。