DOCA 文档 v2.10.0

DOCA 交换

NVIDIA® BlueField® 和 NVIDIA® ConnectX® 平台通过基于硬件的卸载为各种应用提供强大的支持,从而提供无与伦比的可扩展性、性能和效率。

本节列出了 DOCA 库和服务在这些平台上启用的广泛的交换功能。它包括 Open Virtual Switch (OVS) 的详细配置,例如 representor 的设置、虚拟化选项和可选的桥接配置。各小节指导用户完成有效实施这些软件组件的步骤。

Switchdev 模式允许物理功能 (PF) 作为虚拟交换机运行,从而使软件能够控制相关的虚拟功能 (VF) 和可扩展功能 (SF) 流量。在此模式下,软件可以拦截传入/传出的 VF/SF 流量,并配置转向规则以卸载流量。

一旦配置了此模式,PF 将被视为 E-Switch,并为每个关联的 VF 和 SF 分配额外的端口。额外的端口称为端口 representor。

ConnectX 和 BlueField NIC 模式

可以为每个 PF 配置 Switchdev 模式,如“配置 Switchdev 模式”部分所述。

Kernel_Representors_Model_Host-version-2-modificationdate-1728894372387-api-v2.png

BlueField DPU 模式

当 BlueField 在 DPU 模式下运行时,默认情况下为 Arm 上的所有 PF 配置了 switchdev 模式。不得更改该配置。在此模式下,主机无法配置 PF 以在 switchdev 模式下运行。相反,主机 PF 仅在传统模式下运行。

下图显示了主机端公开的 PCIe 功能与 representor 之间的映射。为了简单起见,该图显示了单端口模型(为第二个端口复制)。

Kernel_Representors_Model_DPU-version-1-modificationdate-1728340051240-api-v2.png

红色箭头演示了数据包通过 representor 的流向,而绿色箭头演示了转向规则卸载到嵌入式交换机时的数据包流向。

配置 switchdev 模式后,PF 充当 e-switch 并管理所有交换机端口。e-switch 可用于控制 VF 和 SF 流量。然后,软件可以通过 netdev 和 RDMA core 接口使用 e-switch。

Netdev 接口

e-switch 具有 netdev 接口(例如,pf0),允许将其与常见的 Linux 网络工具(例如,ifconfig)和 OVS 一起使用。虽然该接口看起来像一个常规的网络端口,但实际上它被认为是上游 representor,并且不能托管 IP 服务器。也就是说,为此接口配置 IP 地址是没有用的(例如,无法 ping 通)。

netdev 接口主要可供 OVS 和 Linux 桥接器使用。

为了克服此限制,可以创建 SF。有关更多详细信息,请参阅 BlueField 可扩展功能用户指南

RDMA Core 接口

e-switch 具有 RDMA 设备实例(例如,mlx5_0),它授予软件访问 e-switch 功能的权限,以卸载转向规则和访问各种 RDMA 功能。

该实例的行为类似于具有以下限制的 RDMA core 设备

  • 它不能托管 RDMA 连接,也不能用于连接到远程 RDMA 目标(例如,不能执行 RDMA 发送)

  • 它不能具有 RDMA GID

RDMA 设备主要可用于配置 e-switch。

为了克服此限制,可以创建 SF。有关更多详细信息,请参阅 BlueField 可扩展功能用户指南

对于每个网络功能(即 VF/SF),都会创建一个相应的 representor 端口。Representor 端口代表实际端口。然后,网络功能可供 VM/容器访问网络,而 representor 可供虚拟交换机软件(例如,裸机主机)管理交换。

Netdev 接口

每个 representor 端口都将具有一个 netdev 接口(例如,pf0vf0),允许将其与常见的 Linux 网络工具(例如,ifconfig)以及 OVS 一起使用。

虽然该接口看起来像一个常规的网络端口,但实际上它是 VF/SF representor,并且不能托管 IP 服务器。也就是说,为此接口配置 IP 地址是没有用的(例如,无法 ping 通)。

当使用 OVS 或 Linux 桥接器配置转向规则时,representor netdev 可用于引用特定的网络功能。

RDMA Core 接口

representor 没有对应的 RDMA core 实例(例如,mlx5_0)。相反,它由 e-switch 管理器的 RDMA core 实例管理。每个 representor 都是 e-switch RDMA 设备的 RDMA 端口。

注意

对于 DPU 模式下的 BlueField,无需执行这些步骤,因为 PF 默认已配置为 switchdev 模式。

  1. 取消绑定所有 VF

    复制
    已复制!
                

    # echo 0000:3d:00.2 > /sys/bus/pci/drivers/mlx5_core/unbind # echo 0000:3d:00.3 > /sys/bus/pci/drivers/mlx5_core/unbind

    注意

    带有附加 VF 的 VM 必须关闭电源才能取消绑定 VF。

  2. 将 PF 设备上的 e-switch 模式从传统模式更改为 switchdev 模式

    复制
    已复制!
                

    # devlink dev eswitch set pci/0000:3d:00.0 mode switchdev

    这将在主机操作系统中创建 VF/SF representor 端口。

    注意

    在更改模式之前,请确保所有 VF 都已取消绑定。

    信息

    要返回传统模式,请运行

    复制
    已复制!
                

    # devlink dev eswitch set pci/0000:3d:00.0 mode legacy

    这将删除 VF/SF representor 端口。

    在不支持 devlink 的操作系统或内核上,可以使用 sysfs 完成移动到 switchdev 模式的操作

    复制
    已复制!
                

    # echo switchdev > /sys/class/net/pf0/compat/devlink/mode

  3. 在此阶段,已创建 VF representor。要将 representor 映射到其 VF,请务必通过运行以下命令获取 representor 的 switchidportname

    复制
    已复制!
                

    # ip -d link show eth0 41: eth0: <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 pf0vf0 switchid f4ab580003a1420c

    其中

    • switchid – 用于将 representor 映射到设备,两个设备 PF 具有相同的 switchid

    • portname – 用于将 representor 映射到 PF 和 VF。返回的值为 pf<X>vf<Y>,其中 X 是 PF 编号,Y 是 VF 的编号。

  4. 绑定 VF

    复制
    已复制!
                

    echo 0000:3d:00.2 > /sys/bus/pci/drivers/mlx5_core/bind echo 0000:3d:00.3 > /sys/bus/pci/drivers/mlx5_core/bind

© 版权所有 2025 NVIDIA。 上次更新时间:2025 年 2 月 12 日。