DOCA 文档 v2.10.0

DOCA 开发者指南

本指南详细介绍了设置 NVIDIA DOCA 开发环境的推荐步骤。

本指南适用于旨在修改现有 NVIDIA DOCA 应用程序或开发自己的基于 DOCA 的软件的软件开发人员。

有关在 NVIDIA® BlueField® 网络平台(即 DPU 或 SuperNIC)上安装 DOCA 的说明,请参阅DOCA Linux 安装指南

本指南侧重于开发基于 DOCA 的软件的推荐流程,并将解决以下场景

建议遵循第一个场景的说明,在开发和测试过程中利用 BlueField。

本指南建议在 BlueField 平台或主机上的开发过程中使用 DOCA 的开发容器。部署开发容器允许多个开发人员以隔离的方式在同一设备(主机或 BlueField 平台)上同时工作,甚至跨多个不同的 DOCA SDK 版本。这可以允许多个开发人员在 BlueField 平台本身上工作,例如,无需每个开发人员都拥有专用的 BlueField。

这种基于容器的方法的另一个好处是,开发容器允许开发人员在用户友好的环境中创建和测试其基于 DOCA 的软件,该环境预装了一组方便的开发工具。开发容器专注于改善开发体验,并且为此目的而设计,而 BlueField 软件旨在成为 DOCA 产品的高效运行时环境。

信息

如有问题、意见和反馈,请通过 DOCA-Feedback@exchange.nvidia.com 联系我们。

设置

DOCA 的基础镜像容器包括 BlueField 的 DOCA 开发容器 (doca:devel),可以在 NGC 上找到。建议在准备开发设置时在 BlueField 之上部署此容器。

developing-using-bluefield-setup-version-1-modificationdate-1734469364447-api-v2.png

在 BlueField 之上使用 DOCA 开发容器的推荐方法是使用 docker,它已包含在提供的 BFB 镜像中。

  1. 确保 docker 服务已启动。运行

    复制
    已复制!
                

    sudo systemctl daemon-reload sudo systemctl start docker

  2. 拉取容器镜像

    1. 访问 DOCA 基础镜像的 NGC 页面

    2. 在“Tags”菜单下,选择所需的 BlueField 开发标签。

    3. docker pull 命令的容器标签在选择后会复制到您的剪贴板。使用所选标签的 docker pull 命令示例

      复制
      已复制!
                  

      sudo docker pull nvcr.io/nvidia/doca/doca:1.5.1-devel

  3. 本地加载后,您可以使用以下命令找到镜像的 ID

    复制
    已复制!
                

    sudo docker images

    输出示例

    复制
    已复制!
                

    REPOSITORY TAG IMAGE ID CREATED SIZE nvcr.io/nvidia/doca/doca 1.5.1-devel 931bd576eb49 10 months ago 1.49GB

  4. 运行 docker 镜像

    复制
    已复制!
                

    sudo docker run -v <source-code-folder>:/doca_devel -v /dev/hugepages:/dev/hugepages --privileged --net=host -it <image-name/ID>

    例如,要将名为 my_sources 的源文件夹映射到上面示例中的同一容器标签,命令应如下所示

    复制
    已复制!
                

    sudo docker run -v my_sources:/doca_devel -v /dev/hugepages:/dev/hugepages --privileged --net=host -it nvcr.io/nvidia/doca/doca:1.5.1-devel

    运行命令后,您将在容器内获得一个 shell,您可以在其中使用常规构建命令构建项目

    • 从容器的角度来看,挂载的文件夹将命名为 /doca_devel

      注意

      确保将具有写入权限的文件夹映射到 everyone。否则,docker 将无法将输出文件写入其中。

    • --net=host 确保容器具有网络访问权限,包括对在 BlueField 上分配的 SF 和 VF 的可见性

    • -v /dev/hugepages:/dev/hugepages 确保分配的巨页可供容器访问

开发

建议在 doca:devel 容器内进行开发。也就是说,一些开发人员更喜欢不同的集成开发环境 (IDE) 或开发工具,有时更喜欢使用图形 IDE 工作,直到需要编译代码时。因此,建议将网络共享挂载到 BlueField(有关更多信息,请参阅 DOCA DPU CLI)和容器。

注意

从 IDE 和容器访问相同的代码文件夹有助于防止由于代码中的拼写错误而导致编译失败的边缘情况,但拼写错误仅在容器本地修复,而未传播到主源文件夹。


测试

容器标记为“privileged”,因此它可以直接访问 BlueField 平台的硬件功能。这意味着一旦测试的程序成功编译,就可以直接从容器内对其进行测试,而无需将其复制到 BlueField 并在那里运行。

发布

一旦程序通过测试阶段,就应该为部署做好准备。虽然一些概念验证 (POC) 程序只是以二进制形式“按原样”复制,但大多数部署可能会以包 (.deb/.rpm) 或容器的形式出现。

二进制包的构建可以在当前的 doca:devel 容器内部完成,也可以作为 CI 管道的一部分完成,该管道将利用相同的开发容器作为其一部分。

为了构建容器以交付开发的软件,建议使用 多阶段构建,该构建将软件交付在面向运行时的 DOCA 基础镜像之上

  • doca:base-rt – 精简的 DOCA 运行时环境

  • doca:full-rt – 类似于 BlueField 镜像的完整 DOCA 运行时环境

运行时 DOCA 基础镜像以及有关其结构的更多详细信息,可以在托管 doca:devel 镜像的同一 NGC 页面 下找到。

对于多阶段构建,建议在 doca:devel 容器内编译软件,然后将其复制到运行时容器镜像之一。所有相关镜像都必须直接从 NGC(使用 docker pull)拉取到 BlueField 的容器注册表。

如果开发过程需要在无法访问 BlueField 平台的情况下完成,则建议在常规 x86 服务器之上使用基于 QEMU 的容器部署。主机的开发容器将与我们之前提到的 doca:devel 镜像相同。

developing-without-bluefield-setup-version-1-modificationdate-1734469363817-api-v2.png

设置

  1. 确保 Docker 已安装在您的主机上。运行

    复制
    已复制!
                

    docker version

    如果未安装,请访问官方 安装 Docker Engine 网页以获取安装说明。

  2. 在主机上安装 QEMU。

    注意

    此步骤仅适用于 x86 主机。如果您在 aarch64 主机上工作,请转到下一步。

    主机操作系统

    命令

    Ubuntu

    复制
    已复制!
                

    sudo apt-get install qemu binfmt-support qemu-user-static sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

    CentOS/RHEL 7.x

    复制
    已复制!
                

    sudo yum install epel-release sudo yum install qemu-system-arm

    CentOS 8.0/8.2

    复制
    已复制!
                

    sudo yum install epel-release sudo yum install qemu-kvm

    Fedora

    复制
    已复制!
                

    sudo yum install qemu-system-aarch64

  3. 如果您在主机上使用 CentOS 或 Fedora,请验证是否 qemu-aarch64.conf 运行

    复制
    已复制!
                

    cat /etc/binfmt.d/qemu-aarch64.conf

    如果缺少,请运行

    复制
    已复制!
                

    echo ":qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7:\xff\xff\xff\xff\xff\xff\xff\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-aarch64-static:" > /etc/binfmt.d/qemu-aarch64.conf

  4. 如果您在主机上使用 CentOS 或 Fedora,请重新启动系统 binfmt。运行

    复制
    已复制!
                

    $ sudo systemctl restart systemd-binfmt

  5. 要加载和执行开发容器,请参阅讨论 BlueField 端基于 docker 的相同部署的“设置”部分。

注意

doca:devel 容器支持多种架构。因此,Docker 默认尝试拉取与当前机器架构匹配的容器(即,主机的 amd64 和 BlueField 的 arm64)。从 x86 主机拉取 arm64 容器可以通过添加标志 --platform=linux/arm64 来完成

复制
已复制!
            

sudo docker pull --platform=linux/arm64 nvcr.io/nvidia/doca/doca:1.5.1-devel


开发

使用 BlueField 的开发阶段非常相似,建议在 QEMU 之上运行的容器内进行开发。

测试

虽然编译可以在容器之上执行,但必须在 BlueField 平台上测试编译后的软件。这是因为 QEMU 环境模拟 aarch64 架构,但不模拟 BlueField 平台上存在的硬件设备。因此,测试的程序将无法访问成功执行所需的设备,因此必须在物理 BlueField 之上进行测试。

注意

确保用于编译的 DOCA 版本与用于测试的 BlueField 上安装的版本相同。


发布

发布过程与 使用 BlueField 时的发布过程相同。

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