DOCA 文档 v2.10.0

BlueField 可扩展功能用户指南

本文档概述了 NVIDIA® BlueField® DPU 的可扩展功能(子功能或 SF)及其配置。

可扩展功能 (SF) 或子功能与虚拟功能 (VF) 非常相似,后者是单根 I/O 虚拟化 (SR-IOV) 解决方案的一部分。I/O 虚拟化是当今数据中心使用的关键功能之一。它通过使虚拟机可以直接访问硬件 I/O 设备来提高企业服务器的性能。SR-IOV 规范允许一个 PCI Express (PCIe) 设备向主机呈现为多个不同的“虚拟”设备。这是通过添加到传统 PCIe 功能(即,物理功能或 PF)的新 PCIe 功能结构来完成的。

PF 提供对新 VF 的创建和分配的控制。VF 共享设备的基础硬件和 PCIe。SR-IOV 规范的一个关键特性是 VF 非常轻量级,因此可以在单个设备中实现许多 VF。

为了利用 BlueField 中 VF 的功能,使用了 SF。与 VF 相比,SF 允许支持更多数量的功能,更重要的是,它们允许在 DPU 上同时运行多个服务。

SF 是一种轻量级功能,它具有部署它的父 PCIe 功能。因此,SF 可以访问其父 PCIe 功能的功能和资源,并具有其自身的功能和资源。这意味着 SF 也将拥有自己的专用队列(即,txq、rxq)。

SF 与 PCIe SR-IOV 虚拟功能(在主机上)共存,但也不需要启用 PCIe SR-IOV。

SF 支持像现有 PF 和 VF representor 一样的 E-Switch representor 卸载。SF 与其他 SF 和/或其父 PCIe 功能共享 PCIe 级别的资源。

scalable-functions-illustration-version-1-modificationdate-1734474386633-api-v2.png

有关如何安装 BlueField 相关软件的详细信息,请参阅Linux 版 DOCA 安装指南

  • 确保您的固件版本为 20.30.1004 或更高版本

  • 通过设置以下 Kconfig 标志来启用对 Linux 内核 mlx5 SF 的支持

    • MLX5_ESWITCH

    • MLX5_SF

  • 要在设备上启用 SF 支持,请更改每个端口的 PCIe 地址

    复制
    已复制!
                

    $ mlxconfig -d 0000:03:00.0 s PF_BAR2_ENABLE=0 PER_PF_NUM_SF=1 PF_TOTAL_SF=236 PF_SF_BAR_SIZE=10   PF_BAR2_ENABLE: if this config is set, then all PFs and ECPFs have the same number of SFs. This should be off (deprecated). If set. PF_TOTAL_SF and PF_SF_BAR_SIZE won’t work. PER_PF_NUM_SF: If this config is set, each PF and ECPF configure/control its own number of SFs. THE ABOVE TWO CONFIGS AFFECS BOTH BF AND HOST, TREAT WITH CARE! Also, only one of them can be set. It is INVALID to set them both   PF_TOTAL_SF: maximum number of SFs we wish to configure for the given PF/ECPF. PF_SF_BAR_SIZE: size of each SF at the BAR2. The size is in powers of 2 in KB. For example: PF_SF_BAR_SIZE=10 means each SF is taking 1MB of the BAR. PF_TOTAL_SF=14 means this PCI function can create up to 14 SFs. In total: FW will allocate 14MB of BAR2.

    注意

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

要使用 SF,必须首先遵循 3 步设置顺序

  1. 创建。

  2. 配置。

  3. 部署。

sf-steps-version-1-modificationdate-1734474387210-api-v2.png

可以使用 mlxdevm 工具执行这些步骤。

信息

当在上游内核之上工作时,mlxdevm 工具在该内核上不可用,请参阅可扩展功能的上游指南,以获取有关使用 devlink 工具的说明,该工具应替代使用。

使用 mlxdevm 工具进行配置

  1. 创建 SF。

    SF 使用 iproute2 软件包提供的 mlxdevm 工具进行管理。该工具位于 /opt/mellanox/iproute2/sbin/mlxdevm

    SF 是使用 mlxdevm 工具创建的。通过添加 pcisf flavor 的端口来创建 SF。

    要创建 SF 端口 representor,请运行

    复制
    已复制!
                

    /opt/mellanox/iproute2/sbin/mlxdevm port add pci/<pci_address> flavour pcisf pfnum <corresponding pfnum> sfnum <sfnum>

    注意

    每个 SF 必须具有唯一的编号 (<sfnum>)。

    例如

    复制
    已复制!
                

    /opt/mellanox/iproute2/sbin/mlxdevm port add pci/0000:03:00.0 flavour pcisf pfnum 0 sfnum 4

    输出示例

    复制
    已复制!
                

    pci/0000:30:00.0/229409: type eth netdev eth0 flavour pcisf controller 0 pfnum 0 sfnum 4 function: hw_addr 00:00:00:00:00:00 state inactive opstate detached roce true max_uc_macs 128 trust off

    需要编号 229409 才能完成以下两个步骤(即,配置和部署)。

    pci/0000:03:00.0/229409 称为 SF 索引。

    pci/<pci_address>/<sf_index> 可以替换为 <representor_name>。例如

    复制
    已复制!
                

    pci/0000:03:00.0/229409 = en3f0pf0sf4

    要查看有关已创建 SF 的信息,例如其 MAC 地址、信任模式或状态(活动/非活动),请运行以下命令

    复制
    已复制!
                

    /opt/mellanox/iproute2/sbin/mlxdevm port show

    输出示例

    复制
    已复制!
                

    pci/0000:30:00.0/229409: type eth netdev en3f0pf0sf4 eth0 flavor pcisf controller 0 pfnum 0 sfnum 4 function: hw_addr 00:00:00:00:00:00 state inactive opstate detached roce true max_uc_macs 128 trust off

    注意

    SF 编号 ≥1000 保留用于virtio-net 控制器

    注意

    当在外部控制器(例如,BlueField)上添加 SF 时,用户必须提供控制器编号。在单主机 BlueField 情况下,只有一个控制器,控制器编号从 1 开始。以下是在外部控制器 1 的 PF0 上添加 SF 的示例

    复制
    已复制!
                

    $ mlxdevm port add pci/0000:03:00.0 flavour pcisf pfnum 0 sfnum 88 controller 1 pci/0000:03:00.0/32768: type eth netdev eth6 flavour pcisf controller 1 pfnum 0 sfnum 88 splittable false function: hw_addr 00:00:00:00:00:00 state inactive opstate detached

  2. 配置 SF。

    子功能 representor(SF 端口 representor)已创建,但尚未部署。用户应配置硬件地址(例如,MAC 地址),将信任模式设置为 on,并在部署 SF 之前激活 SF。

    以下步骤可以作为单独的命令(以任何顺序)执行,也可以组合为一个命令

    • 要配置硬件地址,请运行

      复制
      已复制!
                  

      /opt/mellanox/iproute2/sbin/mlxdevm port function set pci/<pci_address>/<sf_index> hw_addr <MAC address>

    • 要将信任模式设置为 on,请运行

      复制
      已复制!
                  

      /opt/mellanox/iproute2/sbin/mlxdevm port function set pci/<pci_address>/<sf_index> trust on

      信息

      受信任的功能具有额外的权限(例如,更新转向数据库的能力)。

    • 要激活已创建的 SF,请运行

      复制
      已复制!
                  

      /opt/mellanox/iproute2/sbin/mlxdevm port function set pci/<pci_address>/<sf_index> state active

    或者,要配置 MAC 地址,将信任模式设置为 on,并将状态设置为 active,请运行

    复制
    已复制!
                

    /opt/mellanox/iproute2/sbin/mlxdevm port function set pci/<pci_address>/<sf_index> hw_addr <mac_address> trust on state active

    例如

    复制
    已复制!
                

    /opt/mellanox/iproute2/sbin/mlxdevm port function set pci/0000:03:00.0/229409 hw_addr 00:00:00:00:04:0 trust on state active

    注意

    必须在部署 SF 之前设置上述 SF 功能。

  3. 部署 SF。

    要从默认配置驱动程序取消绑定 SF 并绑定实际的 SF 驱动程序,请运行

    复制
    已复制!
                

    echo mlx5_core.sf.<next_serial> > /sys/bus/auxiliary/drivers/mlx5_core.sf_cfg/unbind echo mlx5_core.sf.<next_serial> > /sys/bus/auxiliary/drivers/mlx5_core.sf/bind

    例如

    复制
    已复制!
                

    echo mlx5_core.sf.4 > /sys/bus/auxiliary/drivers/mlx5_core.sf_cfg/unbind echo mlx5_core.sf.4 > /sys/bus/auxiliary/drivers/mlx5_core.sf/bind

    注意

    <next_serial> 是固件在创建 SF 时生成的编号(这是 SF 的 gvmi 编号)。mlxdevm 工具在创建 SF 时生成此编号。要获取它,请参阅下面提供的有用的命令

    注意

    有兴趣使用 SF netdevice 和 RDMA 设备的应用程序必须通过 udev 监视器监视 RDMA 和 netdevice,或者轮询 SF 辅助设备的 sysfs 层级结构。

    有用的命令

    • 要查看可用的子功能,请运行

      复制
      已复制!
                  

      $ devlink dev show

      例如,如果您在创建、配置和部署 SF(使用前面详细介绍的步骤)之前运行该命令,则输出将如下所示

      复制
      已复制!
                  

      pci/0000:03:00.0 pci/0000:03:00.1 auxiliary/mlx5_core.sf.2 auxiliary/mlx5_core.sf.3

      在创建、配置和部署 SF 之后,输出将是

      复制
      已复制!
                  

      pci/0000:03:00.0 pci/0000:03:00.1 auxiliary/mlx5_core.sf.2 auxiliary/mlx5_core.sf.3 auxiliary/mlx5_core.sf.4

      请注意,<next_serial> 编号对于创建的 SF 为 4。

    • 要查看每个子功能的 sfnum,请运行

      复制
      已复制!
                  

      cat /sys/bus/auxiliary/devices/mlx5_core.sf.<next_serial>/sfnum

      例如

      复制
      已复制!
                  

      cat /sys/bus/auxiliary/devices/mlx5_core.sf.4/sfnum

      示例输出

      复制
      已复制!
                  

      cat /sys/bus/auxiliary/devices/mlx5_core.sf.4/sfnum 4

    • 要删除 SF,您必须首先使其状态变为非活动状态,然后才能删除 SF representor。

      要使 SF 的状态变为非活动状态,请运行

      复制
      已复制!
                  

      /opt/mellanox/iproute2/sbin/mlxdevm port function set pci/<pci_address>/<sf_index> state inactive

      要删除 SF 端口 representor,请运行

      复制
      已复制!
                  

      /opt/mellanox/iproute2/sbin/mlxdevm port del pci/<pci_address>/<sf_index>

      例如

      复制
      已复制!
                  

      /opt/mellanox/iproute2/sbin/mlxdevm port function set pci/0000:03:00.0/229409 state inactive /opt/mellanox/iproute2/sbin/mlxdevm port del pci/0000:03:00.0/229409

  4. 使用 SF。

    running-application-over-sf-version-1-modificationdate-1734474387883-api-v2.png

    在 DPU 上运行应用程序需要 OVS 配置。通过创建 SF,还会为 OVS 创建 SF representor,并命名为 en3f0pf*sf*。因此,每个 representor 都需要连接到正确的 OVS 网桥。

    注意

    插图中的配置需要两个与同一 PCIe 相关的 SF。

    以下示例配置 2 个 SF,并将其 representor 添加到 OVS。

    1. 创建、配置和部署 SF。运行

      复制
      已复制!
                  

      /opt/mellanox/iproute2/sbin/mlxdevm port add pci/0000:03:00.0 flavour pcisf pfnum 0 sfnum 4 /opt/mellanox/iproute2/sbin/mlxdevm port add pci/0000:03:00.0 flavour pcisf pfnum 0 sfnum 5

      使用命令 mlxdevm port show,您可以查看已创建 SF 的 SF 索引。

      复制
      已复制!
                  

      /opt/mellanox/iproute2/sbin/mlxdevm port show

      输出示例

      复制
      已复制!
                  

      pci/0000:30:00.0/229409: type eth netdev en3f0pf0sf4 flavour pcisf controller 0 pfnum 0 sfnum 4 function: hw_addr 00:00:00:00:00:00 state inactive opstate detached roce true max_uc_macs 128 trust off pci/0000:30:00.0/229410: type eth netdev en3f0pf0sf5 flavour pcisf controller 0 pfnum 0 sfnum 5 function: hw_addr 00:00:00:00:00:00 state inactive opstate detached roce true max_uc_macs 128 trust off

    2. 配置 MAC 地址,将信任模式设置为 on,并激活已创建的 SF

      复制
      已复制!
                  

      /opt/mellanox/iproute2/sbin/mlxdevm port function set pci/0000:03:00.0/229409 hw_addr 02:25:f2:8d:a2:4c trust on state active /opt/mellanox/iproute2/sbin/mlxdevm port function set pci/0000:03:00.0/229410 hw_addr 02:25:f2:8d:a2:5c trust on state active

      使用 ifconfig,您可能会看到添加了 2 个网络接口:en3f0pf0sf4en3f0pf0sf5,分别用于两个 SF 端口 representor。

    3. 删除现有的 OVS 网桥(可选)。

      例如,运行以下命令以删除名为 ovsbr1 的 OVS 网桥

      复制
      已复制!
                  

      ovs-vsctl del-br ovsbr1

    4. 创建两个网桥 sf_bridge1sf_bridge2,并将它们配置如下

      复制
      已复制!
                  

      ovs-vsctl add-br sf_bridge1 ovs-vsctl add-br sf_bridge2 ovs-vsctl add-port sf_bridge1 p0 ovs-vsctl add-port sf_bridge2 pf0hpf

    5. 将端口 representor 添加到 OVS 网桥

      复制
      已复制!
                  

      ovs-vsctl add-port sf_bridge1 en3f0pf0sf4 ovs-vsctl add-port sf_bridge2 en3f0pf0sf5

      添加 SF representor 后的 OVS 网桥

      复制
      已复制!
                  

      Bridge sf_bridge1 Port p0 Interface p0 Port sf_bridge1 Interface sf_bridge1 type: internal Port en3f0pf0sf4 Interface en3f0pf0sf4 Bridge sf_bridge2 Port sf_bridge2 Interface sf_bridge2 type: internal Port en3f0pf0sf5 Interface en3f0pf0sf5 Port pf0hpf Interface pf0hpf ovs_version: "2.14.1"

    注意

    接口可能默认处于关闭状态。请记住使用 ifconfing 将接口设置为“up”状态。

    注意

    删除 SF 端口 representor 时,您还必须使用命令 ovs-vsctl port-del en3f0pf0sf* 将其从连接到的网桥上分离。否则,端口 representor 仍将连接到网桥,但无法识别。

    要运行应用程序,请使用以下命令在运行时初始化 SF

    复制
    已复制!
                

    *Executable_binary* -a auxiliary:mlx5_core.sf.* -a auxiliary:mlx5_core.sf.*

    例如

    复制
    已复制!
                

    doca_<app_name> -a auxiliary:mlx5_core.sf.4 -a auxiliary:mlx5_core.sf.5 -- [application_flags]

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