DOCA 文档 v2.10.0

本页内容

DOCA SNAP Virtio-fs 服务指南

本指南提供关于在 NVIDIA® BlueField®-3 DPU 之上使用 DOCA SNAP Virtio-fs 服务的说明。

注意

DOCA SNAP Virtio-fs 服务目前处于 Beta 级别支持。

NVIDIA® BlueField® 实现了硬件加速的软件定义 virtio-fs PCIe 设备模拟。这利用了 BlueField 网络平台(DPU 或 SuperNIC)的强大功能,在裸机和虚拟化环境中提供高性能文件系统访问。使用 BlueField,用户可以将网络文件系统操作从主机/访客卸载并加速,从而释放资源用于其他任务并提高整体系统效率。在此解决方案中,主机/访客使用其自己的标准 virtio-fs 驱动程序,该驱动程序与 BlueField 中挂载的网络文件系统完全隔离。

virtio-fs 设备在 BlueField 设备上的模拟构建于 DOCA 和 SPDK 框架之上,为基于 BlueField 的解决方案和存储解决方案提供了一整套库。此架构由几个关键组件组成

  • DOCA DevEmu 子系统和 DOCA Virtio-fs 库 – 这些核心库负责底层硬件管理以及将携带 FUSE(用户空间文件系统)请求的 virtio 描述符转换为抽象的 virtio-fs 请求,然后由 SPDK virtio-fs DOCA 传输组件处理。

  • SPDK virtio-fs 传输 – 此组件负责与底层 DOCA 组件交互,并将传入的抽象 DOCA SNAP Virtio-fs 请求转换为通用的 virtio-fs 请求,然后由 virtio-fs 目标核心处理。

  • SPDK virtio-fs 目标 – 此组件实现和管理 virtio-fs 设备、传输以及与后端文件系统的接口。当来自传输的新通用 virtio-fs 请求到达时,它会根据 virtio-fs 和 FUSE 规范处理和转换请求,将基于 FUSE 的命令转换为通用文件系统协议。

  • SPDK FSdev – 此组件提供通用文件系统抽象,并与实现特定后端文件系统协议的底层文件系统模块接口。

snap-arch-version-1-modificationdate-1733806060160-api-v2.png

DOCA SNAP Virtio-fs 作为容器

DOCA SNAP Virtio-fs 容器镜像可以从 NVIDIA NGC 下载,并使用 YAML 文件轻松部署在 BlueField 上。YAML 文件指向 Docker 镜像,该镜像包含与最新 spdk.nvda 版本对齐的 DOCA SNAP Virtio-fs 二进制文件。

DOCA SNAP Virtio-fs 未预装在 BFB 上,但可以根据需要手动下载。有关如何安装 DOCA SNAP Virtio-fs 容器的说明,请参阅“DOCA SNAP Virtio-fs 容器部署”部分。

本节介绍如何将 DOCA SNAP Virtio-fs 部署为容器。

注意

DOCA SNAP Virtio-fs 不会预装在 BFB 捆绑包中。

注意

默认的 virtio-blk 模拟提供程序设置为 DPU。在此模式下,SNAP Virtio-fs 和 SNAP Virtio-blk 只有在分配给不同的 DPA 执行单元 (EU) 时才能同时运行。

这种分离是通过设置环境变量 dpu_helper_core_mask=0x1fffe 来实现的,该变量在 SNAP Virtio-fs 包中包含的 set_environment_variables.sh 脚本中配置。

在 BlueField 上安装完整 DOCA 镜像

要在 BlueField 上安装 BFB

复制
已复制!
            

[host] sudo bfb-install --rshim <rshimN> --bfb <image_path.bfb>

有关更多信息,请参阅NVIDIA DOCA Linux 安装指南中的“在 DPU 上安装完整 DOCA 镜像”部分。

固件安装

复制
已复制!
            

[dpu] sudo /opt/mellanox/mlnx-fw-updater/mlnx_fw_updater.pl --force-fw-update

有关更多信息,请参阅NVIDIA DOCA Linux 安装指南中的“升级固件”部分。

固件配置

注意

固件配置可能会公开新的模拟 PCIe 功能,这些功能稍后可供主机的操作系统使用。因此,用户必须确保所有公开的 PCIe 功能(静态/热插拔)都由支持的 virtio-fs 软件配置支持。否则,这些功能将发生故障,并且主机行为将异常。

  1. 在实施所需的配置之前清除固件配置

    复制
    已复制!
                

    [dpu] mst start [dpu] mlxconfig -d /dev/mst/mt41692_pciconf0 reset

  2. 验证固件配置

    复制
    已复制!
                

    [dpu] mlxconfig -d /dev/mst/mt41692_pciconf0 query

    输出示例

    复制
    已复制!
                

    mlxconfig -d /dev/mst/mt41692_pciconf0 -e query | grep VIRTIO_FS Configurations: Default Current Next Boot * VIRTIO_FS_EMULATION_ENABLE False(0)             True(1) True(1) VIRTIO_FS_EMULATION_NUM_VF 0 0 0 * VIRTIO_FS_EMULATION_NUM_PF 0                    2 2 VIRTIO_FS_EMU_SUBSYSTEM_VENDOR_ID 6900 6900 6900 VIRTIO_FS_EMULATION_SUBSYSTEM_ID 4186 4186 4186 * VIRTIO_FS_EMULATION_NUM_MSIX 2 3 3

    输出提供 5 列(从左到右列出)

    • 非默认配置标记 (*)

    • 固件配置名称

    • 默认固件值

    • 当前固件值

    • 重启后的固件值 – 显示配置更新正在等待系统重启

  3. 要启用存储模拟选项,必须将 BlueField 设置为在内部 CPU 模型中工作

    复制
    已复制!
                

    [dpu] mlxconfig -d /dev/mst/mt41692_pciconf0 s INTERNAL_CPU_MODEL=1

  4. 要使用 virtio-fs 模拟 PF 启用固件配置

    复制
    已复制!
                

    [dpu] mlxconfig -d /dev/mst/mt41692_pciconf0 s VIRTIO_FS_EMULATION_ENABLE=1 VIRTIO_FS_EMULATION_NUM_PF=1 VIRTIO_FS_EMULATION_NUM_MSIX=3

注意

有关 DOCA SNAP Virtio-fs 固件配置选项的完整列表,请参阅“附录 – BlueField 固件配置”。

注意

应用固件配置更改需要断电重启。

RDMA/RoCE 固件配置

BlueField 操作系统的默认接口(命名为 ECPF),通常为 mlx5_0mlx5_1,RoCE 通信被阻止。如果需要 RoCE 流量,则必须添加可扩展功能 (SF),这些功能是支持 RoCE 传输的网络功能。

要启用 RDMA/RoCE

复制
已复制!
            

[dpu] mlxconfig -d /dev/mst/mt41692_pciconf0 s PER_PF_NUM_SF=1 [dpu] mlxconfig -d /dev/mst/mt41692_pciconf0 s PF_SF_BAR_SIZE=8 PF_TOTAL_SF=2 [dpu] mlxconfig -d /dev/mst/mt41692_pciconf0.1 s PF_SF_BAR_SIZE=8 PF_TOTAL_SF=2

注意

通过 TCP 或 InfiniBand 上的 RDMA 工作时,不需要这样做。


热插拔固件配置

启用 PCIe 交换机模拟后,BlueField 可以支持 PCI_SWITCH_EMULATION_NUM_PORT-1 个热插拔 virtio-fs 功能。这些 PCIe 功能在所有 BlueField 用户和应用程序之间共享,并且可以容纳 NVMe、virtio-blk、virtio-fs 和更多类型(例如,virtio-net)的热插拔设备。

要启用 PCIe 交换机模拟并配置 31 个要使用的热插拔端口,请运行

复制
已复制!
            

[dpu] mlxconfig -d /dev/mst/mt41692_pciconf0 s PCI_SWITCH_EMULATION_ENABLE=1 PCI_SWITCH_EMULATION_NUM_PORT=32

PCI_SWITCH_EMULATION_NUM_PORT 等于 1 加上热插拔 PCIe 功能的数量。

注意

在 AMD 机器上,不保证热插拔能够工作,并且启用PCI_SWITCH_EMULATION_ENABLE可能会影响 SR-IOV 功能。

DOCA SNAP Virtio-fs 容器部署

DOCA SNAP Virtio-fs 容器在 DOCA SNAP Virtio-fs NVIDIA™ NGC 页面上可用。

要在 BlueField 之上部署 DOCA SNAP Virtio-fs 容器,需要执行以下步骤

  1. 容器部署的设置准备和 DOCA SNAP Virtio-fs 资源下载。有关详细信息,请参阅“准备步骤”部分。

  2. 如果需要高级配置,请根据“调整 YAML 配置”部分调整 doca_vfs.yaml

  3. 部署容器。镜像会自动从 NGC 拉取。有关详细信息,请参阅“生成 DOCA SNAP Virtio-fs 容器”部分。

准备步骤

步骤 1:分配 Hugepage

根据 DPU 操作系统的 Hugepagesize 值,为 DOCA SNAP Virtio-fs 容器分配 4GiB hugepage

  1. 查询 Hugepagesize

    复制
    已复制!
                

    [dpu] grep Hugepagesize /proc/meminfo

    在 Ubuntu 中,该值应为 2048KB。

  2. 将以下行附加到 /etc/sysctl.conf 文件的末尾

    复制
    已复制!
                

    vm.nr_hugepages = 2048

  3. 运行以下命令

    复制
    已复制!
                

    [dpu] sysctl --system

注意

如果在此部署中使用了实时升级,则需要为升级后的容器分配两倍于上面列出的资源量。

警告

如果设置中同时运行其他应用程序并正在消耗 hugepage,请确保分配适当数量的 hugepage 以容纳所有应用程序。


步骤 2:创建 /etc/virtiofs 文件夹

容器使用文件夹 /etc/virtiofs 在部署后进行自动配置。

注意

默认 YAML 配置仅挂载 /etc/virtiofs 文件夹,以便在容器和 BlueField 之间公开和共享。此文件夹用于将配置文件或本地文件后端(例如,AIO FSdev)从 DPU 公开到容器。

从 NGC 下载 YAML

DOCA SNAP Virtio-fs 容器的 .yaml 配置文件 doca_vfs.yaml 已上传到 DOCA NGC。

注意

下载 DOCA SNAP Virtio-fs 资源需要互联网连接。


调整 YAML 配置

可以轻松编辑 .yaml 文件以进行高级配置。

  • 默认情况下,DOCA SNAP Virtio-fs .yaml 文件配置为支持 Ubuntu 设置(即,Hugepagesize = 2048 kB),方法是使用 hugepages-2Mi。

    要支持其他设置,请根据 BlueField 操作系统的相关 Hugepagesize 值编辑 hugepage 部分。例如,要支持 CentOS 8.x,请将 Hugepagesize 配置为 512MB

    复制
    已复制!
                

    limits: hugepages-512Mi: "<number-of-hugepages>Gi"

  • 以下示例编辑 .yaml 文件以请求 8 个 CPU 核心用于 DOCA SNAP Virtio-fs 容器

    复制
    已复制!
                

    resources: cpu: "8" limits: cpu: "8" env: - name: APP_ARGS value: "-m 0xff"

    注意

    如果请求所有 BlueField-3 核心,则用户必须验证是否没有其他容器在 CPU 资源上发生冲突。

  • 要在部署时自动配置 DOCA SNAP Virtio-fs 容器

    1. /etc/virtiofs/ 下添加 spdk_rpc_init.conf 文件。文件示例

      复制
      已复制!
                  

      fsdev_aio_create aio0 /etc/virtiofs/test virtio_fs_transport_create -t DOCA virtio_fs_transport_start -t DOCA virtio_fs_device_create --transport-name DOCA --dev-name vfsdev0 --tag docatag --fsdev aio0 --num-request-queues 1 --queue-size 32 --driver-platform x86_64 virtio_fs_doca_device_modify --dev-name vfsdev0 --manager mlx5_0 --vuid "MT2251XZ02WZVFSS0D0F3" virtio_fs_device_start --dev-name vfsdev0

    2. 相应地编辑 .yaml 文件(取消注释)

      复制
      已复制!
                  

      env: - name: SPDK_RPC_INIT_CONF value: "/etc/virtiofs/spdk_rpc_init.conf"

      注意

      用户有责任确保 DOCA SNAP Virtio-fs 配置与固件配置匹配。也就是说,必须在所有现有(静态/热插拔)模拟 PCIe 功能上打开模拟控制器(通过自动或手动配置)。没有支持控制器的 PCIe 功能被认为是故障的,并且主机使用它的行为是异常的。

生成 DOCA SNAP Virtio-fs 容器

运行 Kubernetes 工具

复制
已复制!
            

[dpu] systemctl restart containerd [dpu] systemctl restart kubelet [dpu] systemctl enable kubelet [dpu] systemctl enable containerd

将更新后的 doca_vfs.yaml 文件复制到 /etc/kubelet.d 目录。

Kubelet 会自动从 YAML 文件中描述的 NGC 拉取容器镜像,并生成一个执行该容器的 pod。

复制
已复制!
            

cp doca_vfs.yaml /etc/kubelet.d/

DOCA SNAP Virtio-fs 服务立即开始初始化,这可能需要几秒钟。

要验证 DOCA SNAP Virtio-fs 是否正在运行,请发送 spdk_rpc.py spdk_get_version 以确认 DOCA SNAP Virtio-fs 是否正在运行或仍在初始化。

调试和日志

查看当前活动的 pod 及其 ID(pod 可能需要长达 20 秒才能启动)

复制
已复制!
            

crictl pods

输出示例

复制
已复制!
            

POD ID CREATED STATE NAME 0379ac2c4f34c About a minute ago Ready virtiofs

查看当前活动的容器及其 ID

复制
已复制!
            

crictl ps

查看现有容器及其 ID

复制
已复制!
            

crictl ps -a

检查给定容器(virtio-fs 日志)的日志

复制
已复制!
            

crictl logs <container_id>

如果某些内容未按预期工作,请检查 kubelet 日志

复制
已复制!
            

journalctl -u kubelet

容器日志文件由 Kubelet 自动保存在 /var/log/containers 下。

停止、启动、重启 DOCA SNAP Virtio-fs 容器

  • 要停止容器,请从 /etc/kubelet.d/ 中删除 .yaml 文件。

  • 要启动容器,请将 .yaml 文件复制到同一路径

    复制
    已复制!
                

    cp doca_vfs.yaml /etc/kubelet.d

  • 要重启容器(使用 sig-term),请使用 -t (超时) 选项

    复制
    已复制!
                

    crictl stop -t 10 <container-id>

    注意

    在 pod 中的容器退出后,kubelet 会使用指数退避延迟(10 秒、20 秒、40 秒等)重启它们,该延迟上限为五分钟。一旦容器在没有问题的情况下运行了 10 分钟,kubelet 就会重置该容器的重启退避计时器。

支持 SNAP 的 DOCA SNAP Virtio-fs

DOCA SNAP Virtio-fs 容器及其关联的软件包原生支持 DOCA SNAP-4,它被实现为 SPDK 子系统模块。此设计使 virtio-fsvirtio-blk 能够作为统一服务并发运行。此外,DOCA SNAP 已集成到 DOCA SNAP Virtio-fs 部署中。

DOCA SNAP 部署将 snapsnap_nvmesnap_vblk 设置为 SPDK 子系统,可以根据需要禁用它们。

信息

有关更多信息,请参阅DOCA SNAP-4 服务指南文档。

注意

DOCA SNAP RPC 可以用作 SPDK 插件,这是使用 SPDK RPC 脚本运行 RPC 的推荐方法。用户可能需要设置 PYTHONPATH 环境变量以包含 snap_rpc.py 的路径。

此命令使用 DOCA SNAP RPC 插件创建 Virtio 块控制器,指定 --pf_id 0 并使用 Null0 作为块设备

复制
已复制!
            

spdk_rpc.py --plugin snap_rpc virtio_blk_controller_create --pf_id 0 --bdev Null0

有关使用 RPC 插件的更多详细信息,请参阅 SPDK 官方文档。


与其他标准 SPDK 应用程序一样,远程过程调用 (RPC) 协议用于控制 DOCA SNAP Virtio-fs 服务,并支持基于 JSON 的 RPC 协议命令,以轻松地从 CLI 控制任何资源并创建、删除、查询或修改命令。

除了扩展的 DOCA SNAP Virtio-fs 特定命令集之外,DOCA SNAP Virtio-fs 还支持所有标准 SPDK RPC 命令。标准 SPDK 命令由 spdk_rpc.py 工具执行。

要调用扩展的 DOCA SNAP Virtio-fs 特定命令集,用户必须将 --plugin rpc_virtio_fs_tgt 标志添加到 SPDK 的 rpc.py 命令中。SPDK RPC 插件 rpc_virtio_fs_tgt.py 被实现为 RPC 插件。使用容器时不需要此标志。

以下是使用来自源的 DOCA SNAP Virtio-fs 时的 RPC 示例

复制
已复制!
            

/opt/nvidia/spdk-subsystem/src/spdk/install-$(hostname)/bin/spdk_rpc --plugin rpc_virtio_fs_tgt --help

注意

用户可能需要使用 PYTHONPATH 环境变量定义 virtio-fs -target 文件夹的路径。有关 RPC 插件的更多详细信息,请参阅 SPDK 官方文档

信息

完整的 spdk_rpc.py 命令集文档可以在 SPDK 官方文档站点中找到。

以下小节详细介绍了 DOCA SNAP Virtio-fs 扩展命令。

使用基于 JSON 的 RPC 协议

基于 JSON 的 RPC 协议可以与 DOCA SNAP Virtio-fs 容器内的 rpc.py 脚本和 crictl 工具一起使用。

信息

DOCA SNAP Virtio-fs 容器与 CRI 兼容。

  • 要查询活动的容器 ID

    复制
    已复制!
                

    crictl ps -s running -q --name virtiofs

  • 要使用 crictl 将 RPC 发布到容器

    复制
    已复制!
                

    crictl exec <container-id> spdk_rpc.py -v <RPC-method>

    标志 -v 控制详细程度。例如

    复制
    已复制!
                

    crictl exec 0379ac2c4f34c spdk_rpc.py -v virtio_fs_doca_get_functions

    或者,可以使用别名

    复制
    已复制!
                

    crictl exec -it $(crictl ps -s running -q --name virtiofs) spdk_rpc.py -v virtio_fs_doca_get_functions

  • 要打开容器的 bash shell,可用于发布 RPC

    复制
    已复制!
                

    crictl exec -it <container-id> bash

PCIe 功能管理

模拟 PCIe 功能通过称为模拟管理器的 DOCA 设备进行管理。模拟管理器具有控制、操作和向主机 PCIe 子系统公开模拟 PCIe 设备的特殊权限。

要通过 DOCA 传输操作 virtio-fs 设备/功能,必须找到其合适的模拟管理器。模拟管理器维护它控制的模拟 PCIe 功能列表。这些功能中的每一个都分配了一个全局唯一的序列号,称为供应商唯一标识符或 VUID(例如,MT2251XZ02WZVFSS0D0F2),它用作识别和跟踪目的的明确参考。

命令

描述

virtio_fs_doca_get_managers

列出 virtio-fs 的现有模拟管理器

virtio_fs_doca_get_functions

列出 virtio-fs 的功能

virtio_fs_doca_get_possible_managers

列出 virtio-fs 的可能模拟管理器

virtio_fs_doca_manager_create

为 virtio-fs 创建模拟管理器

virtio_fs_doca_manager_destroy

销毁 virtio-fs 的模拟管理器

virtio_fs_doca_get_managers

列出 virtio-fs 的现有模拟管理器。此方法没有输入参数。

响应示例

复制
已复制!
            

{ "jsonrpc": "2.0", "id": 1, "result": [    {      "name": "mlx5_0"    } ] }


virtio_fs_doca_get_functions

列出 virtio-fs 的功能及其特性。用户可以不指定参数以列出任何模拟管理器设备管理的所有模拟 virtio-fs 功能,或者指定模拟管理器设备名称以列出由该模拟管理器设备管理的 virtio-fs 功能。

响应示例

复制
已复制!
            

{ "jsonrpc": "2.0", "id": 1, "result": [ { "manager": "mlx5_0", "Function List": [ { "hot pluggable": "false", "pci_address": "0000:29:00.2", "vuid": "MT2251XZ02WZVFSS0D0F2", "function_type": "PF" } ] } ] }

参数名称

可选/必需

类型

描述

管理器

可选

字符串

模拟管理器设备名称,用于列出特定于它的模拟 virtio-fs 功能


virtio_fs_doca_get_possible_managers

列出 virtio-fs 的可能模拟管理器。此方法没有输入参数。

响应示例

复制
已复制!
            

{ "jsonrpc": "2.0", "id": 1, "result": [ { "name": "mlx5_0", } ] }


virtio_fs_doca_manager_create

创建 virtio-fs 模拟管理器。

参数名称

可选/必需

类型

描述

管理器

必需

字符串

模拟管理器设备名称


virtio_fs_doca_manager_destroy

销毁 virtio-fs 模拟管理器。

参数名称

可选/必需

类型

描述

管理器

必需

字符串

模拟管理器设备名称

热插拔 PCIe 功能管理

热插拔 PCIe 功能在运行时使用 RPC 动态配置。

以下小节中概述的命令将新的 PCIe 功能热插拔到系统中。

virtio_fs_doca_get_functions

列出 virtio-fs 的 DOCA 传输功能及其特性。

用户可以不指定参数以列出任何模拟管理器设备管理的所有模拟 virtio-fs 功能,或者指定模拟管理器设备名称以列出由特定模拟管理器设备管理的 virtio-fs 功能。

参数名称

可选/必需

类型

描述

管理器

必需

字符串

用于创建新的 Virtio FS 功能的模拟管理器设备名称


virtio_fs_doca_function_create

创建 DOCA virtio FS 功能。此方法的返回值是 VUID。静态功能不需要此操作,因为可以从 virtio_fs_doca_get_functions 检索 VUID。

参数名称

可选/必需

类型

描述

管理器

必需

字符串

用于创建新的 virtio-fs 功能的模拟管理器设备名称


virtio_fs_doca_function_destroy

销毁 DOCA SNAP Virtio-fs 功能。

注意

此功能不应与任何 virtio-fs 设备关联。

参数名称

可选/必需

类型

描述

管理器

必需

字符串

用于销毁 virtio-fs 功能的模拟管理器设备名称

vuid

必需

字符串

要销毁的功能的 VUID


virtio_fs_doca_device_hotplug

热插拔 DOCA SNAP Virtio-fs 设备。必须启动 virtio-fs 设备。

参数名称

可选/必需

类型

描述

dev_name

必需

字符串

要热插拔的 Virtio-fs 设备名称

wait-for-done

可选

标志

如果使用,该方法将等待直到主机 PCIe 子系统可见该设备。否则,仅发出热插拔操作并退出。


virtio_fs_doca_device_hotunplug

热拔出 DOCA virtio FS 设备。必须启动 virtio FS 设备。

参数名称

可选/必需

类型

描述

dev_name

必需

字符串

要热拔出的 Virtio-fs 设备名称

wait-for-done

可选

标志

如果存在,该方法将等待直到主机 PCIe 子系统不可见该设备。否则,仅发出热拔出操作并退出。

SPDK FSdev 模块配置

fsdev_set_opts

设置 SPDK FSdev 模块选项。

参数名称

可选/必需

类型

描述

fsdev_io_pool_size

必需

int

SPDK FSdev IO 对象池大小

fsdev_io_cache_size

必需

int

SPDK FSdev IO 每个线程的对象缓存大小


fsdev_get_opts

获取 SPDK FSdev 模块选项。

SPDK FSDEV 管理

DOCA SNAP Virtio-fs 使用 SPDK 文件系统 (FSdev) 设备框架作为其 virtio-fs 控制器的后端。因此,必须提前创建和配置 SPDK FSdev。

尽管 SPDK FSdev 框架是通用的,并且允许实现不同类型的后端文件系统设备。目前,唯一可用的后端设备是 AIO。这是一种文件系统设备,它使用 Linux 原生异步 I/OPOSIX 异步 I/O 提供对本地文件夹的直通访问。

fsdev_get_fsdevs

获取有关 SPDK 文件系统设备 (fsdev) 的信息。用户可以不指定参数以列出所有文件系统设备,也可以按名称指定文件系统设备。

参数名称

可选/必需

类型

描述

名称

可选

字符串

感兴趣的 fsdev 的名称


fsdev_aio_create

创建 SPDK AIO FSdev ,

参数名称

可选/必需

类型

描述

名称

必需

字符串

要创建的 AIO FSdev 的名称

root_path

必需

字符串

系统目录上要作为 SPDK 文件系统公开的路径

enable_xattr

可选

布尔值

如果设置为 true,则启用扩展属性;默认为 false

enable_writeback_cache

可选

布尔值

如果设置为 true,则启用回写缓存;默认为 false

max_write

可选

int

最大写入大小(以字节为单位);默认为 0x00020000

enable_skip_rw

可选

布尔值

如果设置为 true,则启用跳过读取/写入 IO;默认为 false

注意

仅用于调试目的。


fsdev_aio_delete

删除 AIO FSdev 。

参数名称

可选/必需

类型

描述

名称

必需

字符串

要删除的 AIO FSdev 的名称

Virtio-fs 模拟管理

Virtio-fs 模拟是属于 virtio 设备系列的协议。这些挂载点在虚拟环境中找到,但在设计上看起来像虚拟机内用户的物理挂载点。暴露给主机的每个 virtio-fs 挂载点(例如,virtio-fs PCIe 条目),无论是 PF 还是 VF,都必须由 virtio-fs 控制器支持。

注意

在主机上探测 virtio-fs 驱动程序,而没有已经运行的 virtio-fs 控制器,可能会导致主机挂起,直到成功打开此类控制器(不存在超时机制)。

命令

描述

virtio_fs_transport_create

创建 virtio-fs 传输

virtio_fs_transport_destroy

销毁 virtio-fs 传输

virtio_fs_transport_start

启动 virtio-fs 传输

virtio_fs_transport_stop

停止 virtio-fs 传输

virtio_fs_get_transports

显示 virtio-fs 传输或请求的传输

virtio_fs_device_create

创建 virtio-fs 设备

virtio_fs_device_start

启动 virtio-fs 设备

virtio_fs_device_stop

停止 virtio-fs 设备

virtio_fs_device_destroy

销毁 virtio-fs 设备

virtio_fs_get_devices

显示 virtio-fs 设备及其特性

virtio_fs_doca_device_modify

修改从 DOCA 传输创建的 virtio-fs 设备

virtio_fs_transport_create

创建 virtio-fs 传输。此 RPC 包括所有传输的通用参数/选项。传输在启动后变为可操作状态。

参数名称

可选/必需

类型

描述

transport_name

必需

字符串

传输类型名称。对于 DOCA SNAP Virtio-fs,transport_name 应为 DOCA。


virtio_fs_transport_destroy

销毁 virtio-fs 传输。

注意

必须停止传输才能销毁。

参数名称

可选/必需

类型

描述

transport_name

必需

字符串

传输类型名称。对于 DOCA SNAP Virtio-fs,transport_name 应为 DOCA。


virtio_fs_transport_start

启动 virtio-fs 传输。此 RPC 完成传输配置。从此时起,传输完全可操作,可用于创建新设备。

参数名称

可选/必需

类型

描述

transport_name

必需

字符串

传输类型名称。对于 DOCA SNAP Virtio-fs,transport_name 应为 DOCA。


virtio_fs_transport_stop

停止 virtio-fs 传输。此 RPC 使传输再次可配置。

注意

如果任何设备与传输关联,则无法停止传输。

参数名称

可选/必需

类型

描述

transport_name

必需

字符串

传输类型名称。对于 DOCA SNAP Virtio-fs,transport_name 应为 DOCA。


virtio_fs_get_transports

显示 virtio-fs 传输或请求的传输。

参数名称

可选/必需

类型

描述

transport_name

可选

字符串

传输类型名称。对于 DOCA SNAP Virtio-fs,transport_name 应为 DOCA。


virtio_fs_device_create

创建 virtio-fs 设备。此 RPC 创建具有通用参数的设备,这些参数对于所有传输类型都是可接受的。要配置特定于传输的参数,用户应使用 virtio_fs_doca_device_modify 命令。设备在启动后变为可操作状态。

参数名称

可选/必需

类型

描述

transport_name

必需

字符串

传输类型名称。对于 DOCA SNAP Virtio-fs,transport_name 应为 DOCA。

dev_name

必需

字符串

要使用的 Virtio-fs 设备名称

tag

可选

字符串

根据 virtio 规范的 Virtio-fs 标签。

注意

必须在 virtio_fs_device_start RPC 之前的 virtio_fs_device_create RPC 期间提供。

num_request_queues

可选

数字

根据 virtio 规范的 Virtio-fs num_request_queues(默认值 31,范围 1-254)

queue_size

可选

数字

所有 virtio 队列的最大队列大小(默认值 64,范围 8-256)

fsdev

可选

字符串

SPDK 文件系统后端设备的名称

注意

必须在 virtio_fs_device_start RPC 之前的 virtio_fs_device_create RPC 期间提供。

注意

RPC 不会验证 FSdev 是否有效。如果错误的 FSdev 连接到设备,则用户在主机上挂载 FS 时会遇到故障。

packed_vq

可选

布尔值

向驱动程序公开打包 virtqueue 功能以进行协商。

driver_platform

可选

字符串

设置驱动程序的平台架构。可能的值:nativex86x86_64aarch32aarch64

使用 native 平台选项将驱动程序平台设置为与设备平台相同。

notification_vq

可选

布尔值

向驱动程序公开通知 virtqueue 功能以进行协商


virtio_fs_device_start

启动 virtio-fs 设备。此 RPC 完成设备配置。从此时起,传输完全可操作。

参数名称

可选/必需

类型

描述

dev_name

必需

字符串

Virtio-fs 设备名称


virtio_fs_device_stop

停止 virtio-fs 设备。

参数名称

可选/必需

类型

描述

dev_name

必需

字符串

Virtio-fs 设备名称

注意

流量期间支持 RPC virtio_fs_device_stopvirtio_fs_device_start。用户可以使用 virtio_fs_device_stop 在流量正在进行时停止设备,然后使用 virtio_fs_device_start 重新启动它,并且设备将继续处理 I/O 而不会出现任何错误。


virtio_fs_device_destroy

销毁 virtio-fs 设备。

注意

必须先停止设备,然后才能销毁。

参数名称

可选/必需

类型

描述

dev_name

必需

字符串

Virtio-fs 设备名称


virtio_fs_device_modify

修改 virtio-fs 设备。此 RPC 用于修改/设置设备的所有传输都可接受的通用属性。

参数名称

可选/必需

类型

描述

dev_name

必需

字符串

要使用的 Virtio-fs 设备名称

tag

可选

字符串

根据 virtio 规范的 Virtio-fs 标签

注意

必须在 virtio_fs_device_start RPC 之前的 virtio_fs_device_createvirtio_fs_device_modify RPC 期间提供。

num_request_queues

可选

数字

根据 virtio 规范的 Virtio-fs num_request_queues(默认值 31;范围 1-254)

queue_size

可选

数字

所有 virtio 队列的最大队列大小(默认值 64;范围 8-256)

fsdev

可选

字符串

SPDK 文件系统后端设备的名称

注意

必须在 virtio_fs_device_start RPC 之前的 virtio_fs_device_createvirtio_fs_device_modify RPC 期间提供。

注意

RPC 不会验证 FSdev 是否有效。如果错误的 FSdev 连接到设备,则用户在主机上挂载 FS 时会遇到故障。

packed_vq

可选

布尔值

向驱动程序公开打包 virtqueue 功能以进行协商

driver_platform

可选

字符串

设置驱动程序的平台架构。可能的值:nativex86x86_64aarch32aarch64

使用 native 平台选项将驱动程序平台设置为与设备平台相同。


virtio_fs_get_devices

显示 virtio-fs 设备及其特性。

  • 用户可以不指定参数以列出与所有传输关联的 virtio-fs 设备

  • 用户可以指定传输的名称以列出与其关联的 virtio-fs 设备

  • 用户可以指定 virtio-fs 设备的名称以显示其特性

传输名称和设备名称参数应互斥。

响应示例

复制
已复制!
            

{    "jsonrpc": "2.0",    "id": 1,    "result": [        {           "name": "vfsdev0",           "transport_name": "DOCA",           "state": "idle",          "fsdev": "aio0",          "tag": "docatag",          "queue_size": 256,          "num_request_queues": 1,          "packed_ring": true         }    ] }

参数名称

可选/必需

类型

描述

transport_name

可选

字符串

要列出其关联的 virtio-fs 设备的传输名称

dev_name

可选

字符串

Virtio-fs 设备名称


virtio_fs_doca_device_modify

修改从 DOCA 传输创建的 virtio-fs 设备。

信息

此 RPC 用于配置 DOCA 目标特定参数。

参数名称

可选/必需

类型

描述

dev_name

必需

字符串

Virtio-fs 设备名称

管理器

可选(必须在启动前提供)

字符串

模拟管理器

vuid

可选(必须在启动前提供)

字符串

供应商唯一标识符

注意

不进行 VUID 验证。如果设置了无效的 VUID,则 virtio_fs_device_start RPC 将失败。

配置示例

静态功能 – 启动

以下是使用静态物理功能创建 virtio-fs DOCA 传输并将其与 virtio-fs 设备关联的示例。

  • 在 BlueField 中

    1. 创建 AIO FSdev 后端

      复制
      已复制!
                  

      rpc.py fsdev_aio_create aio0 /etc/virtiofs

    2. 列出可能的模拟管理器

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_doca_get_possible_managers

    3. 创建 DOCA 传输、模拟管理器并启动传输

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_transport_create -t DOCA rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_doca_manager_create -m mlx5_0 rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_transport_start -t DOCA

    4. 获取传输信息

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_get_transports

    5. 获取管理器信息

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_doca_get_managers

    6. 获取功能信息,包括其 VUID

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_doca_get_functions

    7. 创建与 DOCA 传输关联的 virtio-fs 设备

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_device_create --transport-name DOCA --dev-name vfsdev0 --tag doca_test --fsdev aio0 --num-request-queues 8 --queue-size 256 --driver-platform x86_64

    8. 设置和修改 virtio-fs 参数(必须在调用 virtio_fs_device_start RPC 之前提供 VUID)

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_doca_device_modify --dev-name vfsdev0 --manager mlx5_0 --vuid MT2333XZ0VJQVFSS0D0F2

    9. 启动 virtio-fs 设备

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_device_start --dev-name vfsdev0

    10. 获取设备信息

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_get_devices

  • 在 VM/主机中

    • 要挂载带有标签 docatag 的设备并在未加载时加载 virtio_pci 驱动程序

      复制
      已复制!
                  

      mkdir "/tmp/test" modprobe -v virtioFS mount -t virtiofs docatag /tmp/test

静态功能 – 关闭

  • 在 BlueField 中

    1. 获取设备信息

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_get_devices

    2. 停止并销毁 virtio-fs 设备

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_device_stop --dev-name vfsdev0 rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_device_destroy --dev-name vfsdev0

    3. 停止 DOCA 传输并销毁模拟管理器和传输

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_transport_stop -t DOCA rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_doca_manager_destroy -m mlx5_0 rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_transport_destroy -t DOCA

  • 在 VM/主机中

    • 要卸载设备

      复制
      已复制!
                  

      umount /tmp/test modprobe -rv virtiofs

热插拔功能

以下是创建 virtio-fs DOCA 传输、创建 virtio-fs 功能、将其与 virtio-fs 设备关联并热插拔它的示例

  • 在 BlueField 中

    1. 创建 AIO FSdev 后端

      复制
      已复制!
                  

      rpc.py fsdev_aio_create aio0 /etc/virtiofs

    2. 列出可能的模拟管理器

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_doca_get_possible_managers

    3. 创建 DOCA 传输和模拟管理器并启动传输

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_transport_create -t DOCA rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_doca_manager_create -m mlx5_0 rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_transport_start -t DOCA

    4. 获取传输信息

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_get_transports

    5. 获取管理器信息

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_doca_get_managers

      一些管理器会显示热插拔功能。

    6. 获取功能信息

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_doca_get_functions

    7. 创建 virtio-fs 功能

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_doca_function_create --manager mlx5_0

      返回 VUID MT2333XZ0VJQVFSS0D0F2

    8. 获取功能信息

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_doca_get_functions

      返回已使用相应 VUID 创建的功能。

    9. 创建与 DOCA 传输关联的 virtio-fs 设备

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_device_create --transport-name DOCA --dev-name vfsdev0 --tag doca_test --fsdev aio0 --num-request-queues 8 --queue-size 256 --driver-platform x86_64

    10. 设置和修改 virtio-fs 参数

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_device_create --transport-name DOCA --dev-name vfsdev0 --tag doca_test --fsdev aio0 --num-request-queues 8 --queue-size 256 --driver-platform x86_64

      在调用 virtio_fs_device_start RPC 之前,必须提供 VUID。

    11. 启动 virtio FS 设备

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_device_start --dev-name vfsdev0

    12. 获取设备信息

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_get_devices

      vfsdev0 的输出将显示它尚未插入。

    13. 将 DOCA 设备热插拔到主机,并等待直到主机可见

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_doca_device_hotplug --dev-name vfsdev0 --wait-for-done

  • 在 VM/主机中

    • 要挂载带有标签 docatag 的设备并在未加载时加载 virtio_pci 驱动程序

      复制
      已复制!
                  

      mkdir "/tmp/test" modprobe -v virtiofs mount -t virtiofs docatag /tmp/test

热拔出功能

以下是清理和销毁“热插拔功能”章节中描述的流程的示例

  • 在 VM/主机中

    • 要卸载设备

      复制
      已复制!
                  

      umount /tmp/test modprobe -rv virtiofs

  • 在 BlueField 中

    1. 获取设备信息

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_get_devices

    2. 从主机热拔出 DOCA 设备,并等待直到主机不可见

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_doca_device_hotunplug --dev-name vfsdev0 --wait-for-done

    3. 获取设备信息

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_get_devices

    4. 停止并销毁 virtio-fs DOCA 设备

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_device_stop --dev-name vfsdev0 rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_device_destroy --dev-name vfsdev0

    5. 销毁 virtio-fs 功能

      复制
      已复制!
                  

      rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_doca_function_destroy --manager mlx5_0 --vuid MT2333XZ0VJQVFSS0D0F2

停止 DOCA 传输并销毁仿真管理器和传输

复制
已复制!
            

rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_transport_stop -t DOCA rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_doca_manager_destroy -m mlx5_0 rpc.py --plugin rpc_virtio_fs_tgt -v virtio_fs_transport_destroy -t DOCA


保存和加载配置

要恢复和重用 virtio-fs 的配置,您可以保存所需的配置,并在以后使用已保存的配置文件加载它。此过程允许快速恢复并确保设备/应用程序设置的一致性。

保存 virtio-fs 设备的配置

  1. 使用 RPC 根据需要配置您的 virtio-fs 设备/应用程序。

  2. 在每个配置周期后使用 save_config RPC 保存配置。这将创建一个 JSON 配置文件以供将来使用

    复制
    已复制!
                

    spdk_rpc.py save_config -o <json_config>.json

要启动配置周期,请使用与 spdk_rpc_init.conf 文件相同的格式创建一个新的配置文件

复制
已复制!
            

cat <new_config>.conf | spdk_rpc.py

信息

<new_config>.conf 文件的最后一行必须包含对保存 RPC 配置的调用。示例

复制
已复制!
            

--plugin rpc_virtio_fs_tgt -v fsdev_aio_create aio0 /tmp/fsdev-test --plugin rpc_virtio_fs_tgt -v virtio_fs_transport_create -t DOCA --plugin rpc_virtio_fs_tgt -v virtio_fs_transport_start -t DOCA --plugin rpc_virtio_fs_tgt -v virtio_fs_device_create --transport-name DOCA --dev-name vfsdev0 --tag docatest --fsdev aio0 --num-request-queues 1 --queue-size 256 --driver-platform x86_64 --plugin rpc_virtio_fs_tgt -v virtio_fs_doca_device_modify --dev-name vfsdev0 --manager mlx5_0 --vuid MT2306XZ00HKVFSS0D0F4 --plugin rpc_virtio_fs_tgt -v virtio_fs_device_start --dev-name vfsdev0 save_config -o <json_config>.json

提示

在脚本末尾保存配置可确保仅在成功应用所有脚本更改后才保存配置。

要加载 virtio-fs 的已保存配置,请根据您的环境使用以下方法

  • 当从容器中使用 virtio-fs 时,在 YAML 配置文件中设置以下内容

    复制
    已复制!
                

    SPDK_RPC_INIT_CONF_JSON: <json_config>.json APP_ARGS: --json-ignore-init-errors

  • 当从源代码中使用 virtio-fs 时,重新运行 DOCA SNAP Virtio-fs 应用程序,从已保存的文件中恢复配置

    复制
    已复制!
                

    /opt/nvidia/spdk-subsystem/src/virtio-fs-target/app/virtio_fs_tgt -c <json_config>.json --json-ignore-init-errors

警告

当修改控制器/功能配置时,请确保在配置更改完全应用之前,主机驱动程序保持卸载状态。否则,如果更改不完整或中断,配置恢复可能会失败。


禁用/启用 SPDK 子系统

Virtio-fs 被定义为 SPDK 子系统,可以根据需要禁用或启用。

Virtio-fs 子系统默认启用。要禁用它

  1. 在等待 RPC 命令的状态下启动 Virtio-fs 应用程序

    复制
    已复制!
                

    /opt/nvidia/spdk-subsystem/src/virtio-fs-target/app/virtio_fs_tgt --wait-for-rpc

  2. 使用以下 RPC 命令禁用 virtio_fs 子系统

    复制
    已复制!
                

    spdk_rpc.py framework_disable_subsystem  virtio_fs

  3. 重新启动 SPDK 框架初始化

    复制
    已复制!
                

    spdk_rpc.py framework_start_init

要查看所有子系统的状态

复制
已复制!
            

spdk_rpc.py framework_get_subsystems

此子系统配置可以保存在 SPDK 配置中,以便将来使用命令 spdk_rpc.py save_config。这确保了配置在应用程序重启后仍然存在。

在配置 DOCA SNAP Virtio-fs 之前,用户必须确保满足所有固件配置要求。默认情况下,virtio-fs 处于禁用状态,必须通过运行通用的 DOCA SNAP Virtio-fs 配置和额外的协议特定配置来启用,具体取决于应用程序的预期用途(例如,热插拔、SR-IOV、UEFI 启动等)。

配置完成后,必须对主机进行电源循环,以使更改生效。

注意

要验证是否满足所有配置要求,用户可以运行以下命令查询当前/下一个配置

复制
已复制!
            

mlxconfig -d /dev/mst/mt41692_pciconf0 -e query

系统配置参数

参数

描述

可能的值

INTERNAL_CPU_MODEL

启用 BlueField 在内部 CPU 模型中工作

注意

对于存储仿真,必须设置为 1

0/1

PCI_SWITCH_EMULATION_ENABLE

为仿真的 PF 启用 PCIe 交换机

0/1

PCI_SWITCH_EMULATION_NUM_PORT

热插拔仿真 PF 的最大数量,等于 PCI_SWITCH_EMULATION_NUM_PORT 减 1。例如,如果 PCI_SWITCH_EMULATION_NUM_PORT=32,则热插拔仿真 PF 的最大数量将为 31。

注意

一个交换机端口为所有静态 PF 保留。

[0-32]


RDMA/RoCE 配置

BlueField 的 RDMA/RoCE 通信对于 BlueField 的默认 OS 接口(命名为 ECPF,通常为 mlx5_0 和 mlx5_1)被阻止。如果需要 RoCE 流量,则必须添加支持 RDMA/RoCE 流量的额外网络功能(可扩展功能)。

注意

当通过 TCP 甚至 RDMA/IB 工作时,不需要以下内容。

要启用 RoCE 接口,请从 BlueField 设备内部运行以下命令

复制
已复制!
            

[dpu] mlxconfig -d /dev/mst/mt41692_pciconf0 s PER_PF_NUM_SF=1 [dpu] mlxconfig -d /dev/mst/mt41692_pciconf0 s PF_SF_BAR_SIZE=8 PF_TOTAL_SF=2 [dpu] mlxconfig -d /dev/mst/mt41692_pciconf0.1 s PF_SF_BAR_SIZE=8 PF_TOTAL_SF=2


Virtio-fs 配置

警告

由于 virtio-fs 协议的限制,在使用静态 virtio-fs PF 时使用错误的配置可能会导致主机服务器 OS 启动失败。

在继续之前,请确保您已配置

  • 即使主机关闭时也可以访问 Arm 的工作通道。设置此类通道不属于本文档的范围。有关更多详细信息,请参阅 NVIDIA BlueField DPU BSP 文档。

  • 使用初始配置文件在静态 virtio-fs PF 上创建控制器。

    信息

    有关更多信息,请参阅“Virtio-fs 仿真管理”章节

参数

描述

可能的值

VIRTIO_FS_EMULATION_ENABLE

启用 virtio-fs 设备仿真

0/1

VIRTIO_FS_EMULATION_NUM_PF

静态仿真的 virtio-fs PF 的数量

注意

请参阅上面的警告。

[0-2]

VIRTIO_FS_EMULATION_NUM_MSIX

分配给仿真的 virtio-fs PF/VF 的 MSIX 数量

[0-63]


在使用主机操作系统上的 Linux 环境时,可能需要额外的内核启动参数来支持 DOCA SNAP Virtio-fs 相关功能

  • 要使用 PCIe 热插拔,必须添加 pci=realloc

  • 对于非内置的 virtio-fs 驱动程序,modprobe.blacklist=virtio_pci,virtiofs

  • 对于非内置的 virtio_pci 驱动程序,modprobe.blacklist=virtio_pci

要查看启动参数值,请运行

复制
已复制!
            

cat /proc/cmdline

建议将以下命令与 virtio-fs 一起使用

复制
已复制!
            

[dpu] cat /proc/cmdline BOOT_IMAGE … pci=realloc modprobe.blacklist=virtio_pci,virtiofs

英特尔服务器性能优化

复制
已复制!
            

cat /proc/cmdline BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.15.0_mlnx root=UUID=91528e6a-b7d3-4e78-9d2e-9d5ad60e8273 ro crashkernel=auto resume=UUID=06ff0f35-0282-4812-894e-111ae8d76768 rhgb quiet pci=realloc modprobe.blacklist=virtio_pci,virtiofs


AMD 服务器性能优化

复制
已复制!
            

cat /proc/cmdline cat /proc/cmdline BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.15.0_mlnx root=UUID=91528e6a-b7d3-4e78-9d2e-9d5ad60e8273 ro crashkernel=auto resume=UUID=06ff0f35-0282-4812-894e-111ae8d76768 rhgb quiet pci=realloc modprobe.blacklist=virtio_pci,virtiofs


本节介绍如何使用自定义 fsdev 模块扩展 Virtio-fs 服务。提供了两种方法

  • 构建新的生产容器(推荐用于生产环境)

  • 在开发容器内手动构建和运行(非常适合开发和测试)

本章中提供的 Dockerfile 和命令仅作为示例,旨在与 SPDK 附带的外部 fsdev 模块示例一起使用,该示例位于 spdk/test/external_code/fsdev_passthru。这些示例演示了集成过程,应进行调整以适应实际用例,包括针对自定义 fsdev 模块、部署环境和特定应用程序要求的调整。

构建新的生产容器

此选项允许创建包含原始服务和自定义 fsdev 模块的新容器。生成的容器将运行内置自定义功能的 Virtio-fs 服务。

环境准备

复制
已复制!
            

# Current working directory contain spdk sources (repo - https://github.com/Mellanox/spdk; branch - v24.01.4.nvda) and Dockerfile git clone https://github.com/Mellanox/spdk --branch v24.01.4.nvda   root@bf:/opt/build# pwd /opt/build root@bf:/opt/build# ll total 16 drwxr-xr-x 3 root root 4096 Dec 2 14:16 ./ drwxr-xr-x 6 root root 4096 Dec 2 13:30 ../ -rw-r--r-- 1 root root 723 Dec 2 14:15 Dockerfile drwxr-xr-x 37 root root 4096 Dec 2 14:01 spdk/


Dockerfile 示例

复制
已复制!
            

FROM nvcr.io/nvstaging/doca/doca_vfs:1.2.0-2-doca2.10.0 as builder   RUN apt-get update && apt-get install -y autoconf libtool python3-pyelftools libaio-dev libncurses-dev libfuse3-dev patchelf libcmocka-dev make   COPY spdk/test/external_code /external_code   WORKDIR /external_code ENV SPDK_HEADER_DIR=/opt/nvidia/spdk-subsystem/virtiofs/include ENV SPDK_LIB_DIR=/opt/nvidia/spdk-subsystem/virtiofs/lib ENV DPDK_LIB_DIR=/opt/nvidia/spdk-subsystem/virtiofs/include RUN make fsdev_passthru_shared   FROM nvcr.io/nvstaging/doca/doca_vfs:1.2.0-2-doca2.10.0   COPY --from=builder /external_code/fsdev_passthru/libfsdev_passthru_external.so /opt/nvidia/spdk-subsystem/virtiofs/lib/ ENV VIRTIOFS_LD_PRELOAD=/opt/nvidia/spdk-subsystem/virtiofs/lib/libfsdev_passthru_external.so   COPY --from=builder /external_code/fsdev_passthru/fsdev_passthru.py /usr/lib/python3/dist-packages/spdk/rpc/ ENV SPDK_RPC_PLUGIN="spdk.rpc.rpc_virtio_fs_tgt:spdk.rpc.fsdev_passthru"


构建和运行容器

  1. 构建新的容器

    复制
    已复制!
                

    docker build -t doca_vfs_custom_fsdev:latest -f Dockerfile .

  2. 使用 Kubelet 服务运行新的容器

    复制
    已复制!
                

    docker save doca_vfs_custom_fsdev:latest > doca_vfs_custom_fsdev.tar ctr -n=k8s.io images import doca_vfs_custom_fsdev.tar   # Copy doca_vfs.yaml into /etc/kubelet.d/ # Open doca_vfs.yaml and change "image" section: image: doca_vfs_custom_fsdev:latest

  3. 配置运行自定义 fsdev 模块的容器

    复制
    已复制!
                

    # DPU mkdir /etc/virtiofs/AIO0 crictl exec $(crictl ps -s running -q --name virtiofs) spdk_rpc.py fsdev_aio_create AIO0 /etc/virtiofs/AIO0 crictl exec $(crictl ps -s running -q --name virtiofs) spdk_rpc.py fsdev_passthru_ext_create --name CUSTOM_FSDEV_PT0 --base-fsdev-name AIO0 crictl exec $(crictl ps -s running -q --name virtiofs) spdk_rpc.py virtio_fs_transport_create -t DOCA crictl exec $(crictl ps -s running -q --name virtiofs) spdk_rpc.py virtio_fs_doca_manager_create -m mlx5_0 crictl exec $(crictl ps -s running -q --name virtiofs) spdk_rpc.py virtio_fs_transport_start -t DOCA crictl exec $(crictl ps -s running -q --name virtiofs) spdk_rpc.py virtio_fs_device_create --transport-name DOCA --dev-name vfsdev0 --tag CUSTOM_FSDEV_PT0 --fsdev CUSTOM_FSDEV_PT0 --num-request-queues 62 --queue-size 64 --driver-platform x86_64 crictl exec $(crictl ps -s running -q --name virtiofs) spdk_rpc.py virtio_fs_doca_device_modify --dev-name vfsdev0 --manager mlx5_0 --vuid MT2334XZ0LEDVFSS0D0F3 crictl exec $(crictl ps -s running -q --name virtiofs) spdk_rpc.py virtio_fs_device_start --dev-name vfsdev0   # x86 modprobe -v virtio_pci modprobe -v virtiofs test -d /tmp/CUSTOM_FSDEV_PT0 || mkdir -p /tmp/CUSTOM_FSDEV_PT0 mount -t virtiofs CUSTOM_FSDEV_PT0 /tmp/CUSTOM_FSDEV_PT0

在开发容器中手动构建和运行

此方法适用于需要频繁更新、构建和测试的开发工作流程。它设置了一个开发容器,其中包含手动构建和运行带有自定义 fsdev 模块的 Virtio-fs 服务所需的环境。

环境准备

复制
已复制!
            

# Current working directory contain spdk sources (repo - https://github.com/Mellanox/spdk; branch - v24.01.4.nvda) and Dockerfile git clone https://github.com/Mellanox/spdk --branch v24.01.4.nvda   root@bf:/opt/build# pwd /opt/build root@bf:/opt/build# ll total 16 drwxr-xr-x 3 root root 4096 Dec 2 14:16 ./ drwxr-xr-x 6 root root 4096 Dec 2 13:30 ../ -rw-r--r-- 1 root root 723 Dec 2 14:15 Dockerfile drwxr-xr-x 37 root root 4096 Dec 2 14:01 spdk/


Dockerfile 示例

复制
已复制!
            

FROM nvcr.io/nvstaging/doca/doca_vfs:1.2.0-2-doca2.10.0 as builder   RUN apt-get update && apt-get install -y autoconf libtool python3-pyelftools libaio-dev libncurses-dev libfuse3-dev patchelf libcmocka-dev make   ENTRYPOINT /bin/bash


构建和运行开发容器

  1. 使用提供的 Dockerfile 构建容器

    复制
    已复制!
                

    docker build -t doca_vfs_custom_fsdev_dev:latest -f Dockerfile .

  2. 启动容器并进入 bash shell

    复制
    已复制!
                

    docker run -ti --privileged --net=host \ --volume /dev/hugepages:/dev/hugepages \ --volume /dev/shm:/dev/shm \ --volume /dev/infiniband:/dev/infiniband \ --volume /etc/virtiofs:/etc/virtiofs \ --volume ${PWD}/spdk/test/external_code:/external_code \ doca_vfs_custom_fsdev_dev:latest

  3. 进入容器后,可以手动构建和测试自定义模块

    复制
    已复制!
                

    cd /external_code/ export SPDK_HEADER_DIR=/opt/nvidia/spdk-subsystem/virtiofs/include export SPDK_LIB_DIR=/opt/nvidia/spdk-subsystem/virtiofs/lib export DPDK_LIB_DIR=/opt/nvidia/spdk-subsystem/virtiofs/include make fsdev_passthru_shared

  4. 启动带有自定义模块的 virtio-fs 服务进行测试

    复制
    已复制!
                

    cp /external_code/fsdev_passthru/fsdev_passthru.py /usr/bin/ /opt/nvidia/spdk-subsystem/doca_snap/bin/set_environment_variables.sh LD_PRELOAD=/external_code/fsdev_passthru/libfsdev_passthru_external.so \ /opt/nvidia/spdk-subsystem/virtiofs/bin/virtio_fs_tgt -m 0xff &

  5. 配置带有自定义 fsdev 模块的服务

    复制
    已复制!
                

    # DPU mkdir /etc/virtiofs/AIO0 spdk_rpc.py fsdev_aio_create AIO0 /etc/virtiofs/AIO0 spdk_rpc.py --plugin fsdev_passthru fsdev_passthru_ext_create --name CUSTOM_FSDEV_PT0 --base-fsdev-name AIO0 spdk_rpc.py virtio_fs_transport_create -t DOCA spdk_rpc.py virtio_fs_doca_manager_create -m mlx5_0 spdk_rpc.py virtio_fs_transport_start -t DOCA spdk_rpc.py virtio_fs_device_create --transport-name DOCA --dev-name vfsdev0 --tag CUSTOM_FSDEV_PT0 --fsdev CUSTOM_FSDEV_PT0 --num-request-queues 62 --queue-size 64 --driver-platform x86_64 spdk_rpc.py virtio_fs_doca_device_modify --dev-name vfsdev0 --manager mlx5_0 --vuid MT2334XZ0LEDVFSS0D0F2 spdk_rpc.py virtio_fs_device_start --dev-name vfsdev0   # x86 modprobe -v virtio_pci modprobe -v virtiofs test -d /tmp/CUSTOM_FSDEV_PT0 || mkdir -p /tmp/CUSTOM_FSDEV_PT0 mount -t virtiofs CUSTOM_FSDEV_PT0 /tmp/CUSTOM_FSDEV_PT0

标题

描述

NVIDIA DOCA

NVIDIA DOCA™ SDK 使开发人员能够基于 NVIDIA® BlueField® 网络平台快速创建应用程序和服务,从而利用行业标准 API

NVIDIA BlueField BSP

BlueField 板级支持包包括用于加载和设置软件组件的引导加载程序和其他基本组件

BlueField DPU 硬件用户手册

本文档详细介绍了

BlueField DPU 的接口、规格、操作设备所需的软件和固件,以及启动 DPU 的分步计划

NVIDIA BlueField BSP 文档

本文档提供了产品发行说明,以及有关 BlueField 软件发行版以及如何为 BlueField 平台开发和/或自定义应用程序、系统软件和文件系统映像的信息

DOCA 设备仿真

DOCA 设备仿真库文档。DOCA 设备仿真子系统为用户开发 PCIe 设备及其控制器提供了低级软件 API。

DOCA DevEmu Virtio-fs

DOCA 设备仿真 Virtio-fs 库文档。DOCA DevEmu Virtio-fs 库是 DOCA DevEmu Virtio 子系统的一部分。它提供了低级软件 API,这些 API 为使用 BlueField 平台的设备仿真功能开发和操作 virtio 文件系统设备提供了构建块。

DOCA DevEmu PCI

DOCA 设备仿真 PCI 库文档。DOCA DevEmu PCI 是 DOCA 设备仿真子系统的一部分。它提供了低级软件 API,允许使用 NVIDIA® BlueField® 网络平台的仿真功能管理仿真的 PCIe 设备。

© 版权所有 2025, NVIDIA。 上次更新于 2025 年 2 月 12 日。