DOCA 文档 v2.10.0

DOCA 安全通道应用指南

本指南提供了在 NVIDIA® BlueField® DPU 之上的安全通道实现。

DOCA 安全通道参考应用程序利用 DOCA Comch API,该 API 在主机和 NVIDIA BlueField DPU 之间创建了一个安全、网络独立的通信通道。

Comch 允许主机控制 DPU 上的服务、激活某些卸载或使用客户端-服务器/生产者-消费者框架交换消息。

客户端(主机)端一次只能与一个服务器通信,而服务器端能够与多个客户端通信。

API 允许主机上的任何 PF/VF/SF 与位于 DPU 上的服务器之间进行通信。

一旦建立客户端-服务器连接,就可以生成多个生产者-消费者实例,以先进先出 (FIFO) 样式队列传输大量数据。

安全通道允许用户选择要在客户端和服务器之间交换的消息大小和数量,以模拟通道上的重负载。

安全通道应用程序以客户端模式(主机)和服务器模式 (DPU) 运行。一旦通道打开,消息就可以从双方流动。

sys-design-version-1-modificationdate-1734469884827-api-v2.png

安全通道应用程序在 DOCA Comch API 之上运行。

应用程序首先在主机(客户端)和 DPU(服务器)之间建立客户端-服务器连接。一旦建立此连接,双方的应用程序都会生成两个新线程

  • 消费者 – 消费者线程向连接的另一端注册多个 post_recv 缓冲区

  • 生产者 – 生产者线程在检测到消费者后,会用数据填充这些 post_recv 缓冲区,然后消费者可以读取这些数据

一旦消费者处理了接收到的缓冲区,缓冲区就会被重新发布(通过任务提交)以再次由对面的生产者填充。

当生产者发送了请求的消息数量,并且消费者接收了相同的数量时,两个线程都会退出,并且主客户端-服务器连接被销毁。

流程如下图所示

image-2024-7-23_11-29-35-1-version-1-modificationdate-1734469884200-api-v2.png

此应用程序利用以下 DOCA 库

有关更多信息,请参阅其各自的编程指南。

信息

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

DOCA 参考应用程序的安装包包含应用程序的源代码以及匹配的编译说明。这允许“按原样”编译应用程序,并提供修改源代码,然后编译应用程序新版本的能力。

提示

有关应用程序以及开发和编译技巧的更多信息,请参阅 DOCA 参考应用程序页面。

应用程序的源代码可以在应用程序的目录下找到:/opt/mellanox/doca/applications/secure_channel/

编译所有应用程序

所有 DOCA 应用程序都在单个 meson 项目下定义。因此,默认情况下,编译包括所有应用程序。

要一起构建所有应用程序,请运行

复制
已复制!
            

cd /opt/mellanox/doca/applications/ meson /tmp/build ninja -C /tmp/build

信息

doca_secure_channel/tmp/build/secure_channel/ 下创建。


仅编译当前应用程序

要直接仅构建安全通道应用程序

复制
已复制!
            

cd /opt/mellanox/doca/applications/ meson /tmp/build -Denable_all_applications=false -Denable_secure_channel=true ninja -C /tmp/build

信息

doca_secure_channel/tmp/build/secure_channel/ 下创建。

或者,用户可以在 meson_options.txt 文件中设置所需的标志,而不是在编译命令行中提供它们

  1. 编辑 /opt/mellanox/doca/applications/meson_options.txt 中的以下标志

    • enable_all_applications 设置为 false

    • enable_secure_channel 设置为 true

  2. 运行以下编译命令

    复制
    已复制!
                

    cd /opt/mellanox/doca/applications/ meson /tmp/build ninja -C /tmp/build

    信息

    doca_secure_channel/tmp/build/secure_channel/ 下创建。

故障排除

有关应用程序编译遇到的任何问题,请参阅 DOCA 故障排除

应用程序执行

安全通道应用程序以源代码形式提供。因此,在执行应用程序之前需要进行编译。

  1. 应用程序使用说明

    复制
    已复制!
                

    Usage: doca_secure_channel [DOCA Flags] [Program Flags]   DOCA Flags: -h, --help Print a help synopsis -v, --version Print program version information -l, --log-level Set the (numeric) log level for the program <10=DISABLE, 20=CRITICAL, 30=ERROR, 40=WARNING, 50=INFO, 60=DEBUG, 70=TRACE> --sdk-log-level Set the SDK (numeric) log level for the program <10=DISABLE, 20=CRITICAL, 30=ERROR, 40=WARNING, 50=INFO, 60=DEBUG, 70=TRACE> -j, --json <path> Parse all command flags from an input json file   Program Flags: -s, --msg-size Message size to be sent -n, --num-msgs Number of messages to be sent -p, --pci-addr DOCA Comm Channel device PCI address -r, --rep-pci DOCA Comm Channel device representor PCI address (needed only on DPU)

    信息

    此用法打印输出可以使用 -h(或 --help)选项打印到命令行

    复制
    已复制!
                

    ./doca_secure_channel -h

    信息

    有关更多信息,请参阅“命令行标志”部分。

  2. 在 BlueField 上运行应用程序的 CLI 示例

    复制
    已复制!
                

    ./doca_secure_channel -s 256 -n 10 -p 03:00.0 -r 3b:00.0

    注意

    DOCA Comch 设备 PCIe 地址 (03:00.0) 和 DOCA Comch 设备表示器 PCIe 地址 (3b:00.0) 应与所需 PCIe 设备的地址匹配。用户可以使用 DOCA 功能打印工具 查找其设备和设备表示器的 PCIe 地址。

  3. 在主机上运行应用程序的 CLI 示例

    复制
    已复制!
                

    ./doca_secure_channel -s 256 -n 10 -p 3b:00.0

    注意

    DOCA Comch 设备 PCIe 地址 (3b:00.0) 应与所需 PCIe 设备的地址匹配。

  4. 该应用程序还支持基于 JSON 的部署模式,其中所有命令行参数都通过 JSON 文件提供

    复制
    已复制!
                

    ./doca_secure_channel --json [json_file]

    例如

    复制
    已复制!
                

    ./doca_secure_channel --json ./sc_params.json

    注意

    执行前,请确保使用的 JSON 文件包含正确的配置参数,尤其是部署所需的 PCIe 地址。

命令行标志

标志类型

短标志

长标志/JSON 键

描述

JSON 内容

通用标志

h

help

打印帮助概要

N/A

v

version

打印程序版本信息

N/A

l

log-level

设置应用程序的日志级别

  • DISABLE=10

  • CRITICAL=20

  • ERROR=30

  • WARNING=40

  • INFO=50

  • DEBUG=60

  • TRACE=70(需要使用 TRACE 日志级别支持进行编译)

复制
已复制!
            

"log-level": 60

N/A

sdk-log-level

设置程序的日志级别

  • DISABLE=10

  • CRITICAL=20

  • ERROR=30

  • WARNING=40

  • INFO=50

  • DEBUG=60

  • TRACE=70

复制
已复制!
            

"sdk-log-level": 40

j

json

从输入 JSON 文件解析所有命令标志

N/A

程序标志

s

msg-size

消息大小,以字节为单位

注意

这是一个强制性标志。

复制
已复制!
            

"msg-size": 128

n

num-msgs

在双方发送的消息数量

注意

这是一个强制性标志。

复制
已复制!
            

"num-msgs": 256

p

pci-addr

DOCA Comch 设备 PCIe 地址

注意

这是一个强制性标志。

复制
已复制!
            

"pci-addr": 03:00.1

r

rep-pci

DOCA Comch 设备表示器 PCIe 地址

注意

这仅在 DPU 上是强制性标志。

复制
已复制!
            

"rep-pci": b1:00.1

信息

有关支持的标志和执行模式的更多信息,请参阅 DOCA 参数解析器


故障排除

有关 DOCA 应用程序的安装或执行遇到的任何问题,请参阅 DOCA 故障排除

  1. 解析应用程序参数。

    1. 初始化参数解析器资源并注册 DOCA 通用参数。

      复制
      已复制!
                  

      doca_argp_init();

    2. 注册安全通道应用程序参数。

      复制
      已复制!
                  

      register_secure_channel_params();

    3. 解析应用程序参数

      复制
      已复制!
                  

      doca_argp_start();

    4. 建立客户端-服务器控制路径连接

      复制
      已复制!
                  

      comch_utils_fast_path_init();

      1. 根据应用程序的运行位置(x86 主机或 DPU Arm 核心),创建 doca_comch_clientdoca_comch_server

      2. 注册一个回调,该回调在新消费者在另一端创建时触发。

      3. 推进连接,直到连接建立。

  2. 运行主逻辑。

    复制
    已复制!
                

    sc_start();

    1. 在控制通道上发送一条消息,告诉另一端它打算发送多少条快速通道消息及其长度。

    2. 等待接收来自另一端的类似消息。

    3. 启动生产者线程

      1. 创建并启动 doca_comch_producer

      2. 等待直到从控制通道连接的另一端注册了消费者。

      3. 创建输入消息长度的 doca_buf 以重复发送。

      4. 提交最大数量的 doca_comch_producer_task_send 任务,每个任务都包含 doca_buf

      5. 从每个任务的完成回调重新提交该任务,直到发送了请求的任务数量。

      6. 销毁生产者并结束线程。

    4. 启动消费者线程

      1. 创建并启动 doca_comch_consumer

      2. 推进直到消费者已完全注册到控制通道连接。

      3. 创建协商大小的 doca_buf 以接收数据。

      4. 提交最大数量的 doca_comch_consumer_task_post_recv 任务,每个任务都带有已分配的 doca_buf

      5. 当每个 post_recv 缓冲区被生产者填充后,从其回调中重新提交该缓冲区。

      6. 当消费者收到已通信的快速通道消息数量时,销毁消费者和线程。

    5. 发送 (DPU) 或等待 (主机) 消息,以指示所有快速通道消息已完成,并且可以销毁 Comch 控制连接。

  • /opt/mellanox/doca/applications/secure_channel/

  • /opt/mellanox/doca/applications/secure_channel/sc_params.json

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