DOCA 文档 v2.10.0

DOCA 虚拟功能用户指南

本指南概述并配置了 NVIDIA® BlueField® 的虚拟功能,并演示了在 x86 主机上运行 DOCA 应用程序的用例。

单根 I/O 虚拟化 (SR-IOV) 是一种技术,允许物理 PCIe 设备通过 PCIe 总线多次呈现自身。此技术支持具有独立资源的设备的多个虚拟实例。 NVIDIA 适配器能够为每个端口单独公开虚拟实例或功能 (VF)。然后可以单独配置这些虚拟功能。

每个 VF 都可以看作是连接到物理接口或功能 (PF) 的附加设备。它与 PF 共享相同的资源,并且其端口数与 PF 的端口数相等。

SR-IOV 通常与启用 SR-IOV 的虚拟机监控程序结合使用,以向虚拟机提供对网络资源的直接硬件访问,从而提高其性能。

在主机上运行应用程序有几个好处。例如,可能有人希望利用强大的高资源主机,或者在将 DOCA 集成卸载到 BlueField DPU 之前,先在主机上启动 DOCA 集成。

本文档中的配置允许整个应用程序在主机的内存中运行,同时利用 BlueField 上的硬件加速器。

当在主机上启用 VF 时,VF 表示器在 Arm 端可见,可以桥接到相应的 PF 表示器(例如,上行链路表示器和主机表示器)。这允许应用程序仅扫描转发到用户配置的 VF 的流量,并表现得像一个简单的“线路搭接”。安装在主机上的 DOCA 允许访问 BlueField DPU 的硬件功能,而不会影响使用嵌入在 eSwitch 内部的硬件卸载/steering 元素的功能。

要在主机上运行所有参考应用程序,您必须安装主机 DOCA 软件包。有关主机安装的更多信息,请参阅 DOCA Linux 安装指南

VF 必须配置为受信任,硬件跳转操作才能按预期工作。以下步骤配置 VF 的“受信任”模式

  1. 删除所有现有 VF

    1. 要删除 PF 上的所有 VF,请在主机上运行以下命令

      复制
      已复制!
                  

      host $ echo 0 > /sys/class/net/<physical_function>/device/sriov_numvfs

      例如

      复制
      已复制!
                  

      host $ echo 0 > /sys/class/net/ens1f0/device/sriov_numvfs

  2. 删除所有现有 SF。

    信息

    有关删除 SF 的说明,请参阅 BlueField 可扩展功能用户指南

  3. 停止主机上的主驱动程序

    复制
    已复制!
                

    host $ /etc/init.d/openibd stop

  4. 在创建 VF 之前,通过在 DPU 端运行以下命令将它们设置为设备上的“受信任”模式。

    1. 在端口 0 上设置 VF

      复制
      已复制!
                  

      host $ mlxreg -d /dev/mst/mt41686_pciconf0 --reg_id 0xc007 --reg_len 0x40 --indexes "0x0.0:32=0x80000000" --yes --set "0x4.0:32=0x1"

    2. 在端口 1 上设置 VF

      复制
      已复制!
                  

      host $ mlxreg -d /dev/mst/mt41686_pciconf0.1 --reg_id 0xc007 --reg_len 0x40 --indexes "0x0.0:32=0x80000000" --yes --set "0x4.0:32=0x1"

    注意

    这些命令在 DPU 上执行后,为所有创建的 VF/SF 设置受信任模式。

    注意

    每次重启应执行一次设置受信任模式。

  5. 通过运行以下命令重启主机上的主驱动程序

    复制
    已复制!
                

    host $ /etc/init.d/openibd restart

  1. 确保 mst 驱动程序正在运行

    复制
    已复制!
                

    host $ sudo mst status

    如果未加载,请运行

    复制
    已复制!
                

    host $ sudo mst start

  2. 启用 SR-IOV。运行

    复制
    已复制!
                

    host $ sudo mlxconfig -y -d /dev/mst/mt41686_pciconf0 s SRIOV_EN=1

  3. 设置 VF 数量。运行

    复制
    已复制!
                

    host $ sudo mlxconfig -y -d /dev/mst/mt41686_pciconf0 s NUM_OF_VFS=X

    注意

    执行 BlueField 系统重启 以使 mlxconfig 设置生效。

    复制
    已复制!
                

    host $ echo X > /sys/class/net/<physical_function>/device/sriov_numvfs

    例如

    复制
    已复制!
                

    host $ sudo mlxconfig -y -d /dev/mst/mt41686_pciconf0 s NUM_OF_VFS=2 host $ reboot host $ echo 2 > /sys/class/net/ens1f0/device/sriov_numvfs

    启用 VF 后,表示器将出现在 DPU 上。该功能本身在 x86 端可见。

  4. 验证 VF 是否已创建。运行

    复制
    已复制!
                

    host $ lspci | grep Virtual b1:00.3 Ethernet controller: Mellanox Technologies ConnectX Family mlx5Gen Virtual Function (rev 01) b1:00.4 Ethernet controller: Mellanox Technologies ConnectX Family mlx5Gen Virtual Function (rev 01) b1:01.3 Ethernet controller: Mellanox Technologies ConnectX Family mlx5Gen Virtual Function (rev 01)

    注意

    在此示例中,创建了 2 个新的虚拟以太网设备。

注意

如前所述,分配所需数量的 VF。

注意

分配应用程序指定的任何其他资源(例如,巨页)。

以下是在主机上使用 VF 运行参考应用程序的 CLI 示例

复制
已复制!
            

doca_<app_name> -a "pci address VF0" -a "pci address VF1" -c 0xff -- [application flags]

以下是具有 VF 特定 PCIe 地址的示例

复制
已复制!
            

doca_<app_name> -a b1:00.3 -a b1:00.4 -c 0xff -- -l 60

注意

默认情况下,DPDK 应用程序初始化设备的所有内核。这通常是不必要的,甚至可能导致无法预见的问题。建议限制内核数量,尤其是在使用基于 AMD 的系统时,使用 -c 标志将内核限制为 16 个。

以下是在主机上运行应用程序的拓扑示例。

eswitch-topology-version-1-modificationdate-1734474487957-api-v2.png

在 BlueField 上配置 OVS,如下所示

复制
已复制!
            

Bridge vf_br: Port vf_br Interface vf_br type: internal Port pf0hpf Interface pf0hpf Port pf0vf1 Interface pf0vf1 Bridge ovsbr1 Port ovsbr1 Interface ovsbr1 type: internal Port p0 Interface p0 Port pf0vf0 Interface pf0vf0

当在主机上启用新的 VF 时,VF 表示器将在 Arm 端创建。第一个 OVS 网桥将上行链路连接 (p0) 连接到新的 VF 表示器 (pf0vf0),第二个网桥将第二个 VF 表示器 (pf0vf1) 连接到主机表示器 (pf0phf)。在主机上,运行应用程序时必须初始化新创建的功能的 2 个 PCIe 地址。

当接收到流量时(例如,来自上行链路),会发生以下情况

  1. 通过 p0 接收流量。

  2. 流量转发到 pf0vf0

  3. 应用程序“监听”pf0vf0pf0vf1,因此可以从 pf0vf0 获取流量,检查它,并转发到 pf0vf1

  4. 流量从 pf0vf1 转发到 pf0hpf

注意

仅支持基于 NVIDIA® ConnectX®-6 Dx 的适配器卡及更高版本。

以下步骤仅在适配器卡上运行 DOCA 应用程序时才需要。

  1. 设置所有 VF 的信任级别。运行

    复制
    已复制!
                

    host $ mlxreg -d /dev/mst/mt4125_pciconf0 --reg_name VHCA_TRUST_LEVEL --yes --set "all_vhca=0x1,trust_level=0x1" --indexes "vhca_id=0x0,all_vhca=0x0"

  2. 创建 X 个 VF(X 是所需的 VF 数量),并运行以下命令以打开已创建 VF 的受信任模式

    复制
    已复制!
                

    echo ON | tee /sys/class/net/enp1s0f0np0/device/sriov/X/trust

    例如,如果要创建 2 个 VF,则应使用以下命令

    复制
    已复制!
                

    echo ON | tee /sys/class/net/enp1s0f0np0/device/sriov/0/trust echo ON | tee /sys/class/net/enp1s0f0np0/device/sriov/1/trust

  3. 使用以下命令创建 VF 表示器,将 PCIe 地址替换为已创建 VF 的 PCIe 地址

    复制
    已复制!
                

    echo 0000:17:00.2 > /sys/bus/pci/drivers/mlx5_core/unbind echo 0000:17:00.2 > /sys/bus/pci/drivers/mlx5_core/bind

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