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 模式”部分所述。

BlueField DPU 模式
当 BlueField 在 DPU 模式下运行时,默认情况下为 Arm 上的所有 PF 配置了 switchdev 模式。不得更改该配置。在此模式下,主机无法配置 PF 以在 switchdev 模式下运行。相反,主机 PF 仅在传统模式下运行。
下图显示了主机端公开的 PCIe 功能与 representor 之间的映射。为了简单起见,该图显示了单端口模型(为第二个端口复制)。

红色箭头演示了数据包通过 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 模式。
取消绑定所有 VF
# echo
0000
:3d:00.2
> /sys/bus/pci/drivers/mlx5_core/unbind # echo0000
:3d:00.3
> /sys/bus/pci/drivers/mlx5_core/unbind注意带有附加 VF 的 VM 必须关闭电源才能取消绑定 VF。
将 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在此阶段,已创建 VF representor。要将 representor 映射到其 VF,请务必通过运行以下命令获取 representor 的
switchid
和portname
# ip -d link show eth0
41
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu1500
qdisc mq state UP mode DEFAULT groupdefault
qlen1000
link/ether ba:e6:21
:37
:bc:d4 brd ff:ff:ff:ff:ff:ff promiscuity0
addrgenmode eui64 numtxqueues10
numrxqueues10
gso_max_size65536
gso_max_segs65535
portname pf0vf0 switchid f4ab580003a1420c其中
switchid
– 用于将 representor 映射到设备,两个设备 PF 具有相同的switchid
portname
– 用于将 representor 映射到 PF 和 VF。返回的值为pf<X>vf<Y>
,其中X
是 PF 编号,Y
是 VF 的编号。
绑定 VF
echo
0000
:3d:00.2
> /sys/bus/pci/drivers/mlx5_core/bind echo0000
:3d:00.3
> /sys/bus/pci/drivers/mlx5_core/bind