DOCA 安全通道应用指南
本指南提供了在 NVIDIA® BlueField® DPU 之上的安全通道实现。
DOCA 安全通道参考应用程序利用 DOCA Comch API,该 API 在主机和 NVIDIA BlueField DPU 之间创建了一个安全、网络独立的通信通道。
Comch 允许主机控制 DPU 上的服务、激活某些卸载或使用客户端-服务器/生产者-消费者框架交换消息。
客户端(主机)端一次只能与一个服务器通信,而服务器端能够与多个客户端通信。
API 允许主机上的任何 PF/VF/SF 与位于 DPU 上的服务器之间进行通信。
一旦建立客户端-服务器连接,就可以生成多个生产者-消费者实例,以先进先出 (FIFO) 样式队列传输大量数据。
安全通道允许用户选择要在客户端和服务器之间交换的消息大小和数量,以模拟通道上的重负载。
安全通道应用程序以客户端模式(主机)和服务器模式 (DPU) 运行。一旦通道打开,消息就可以从双方流动。

安全通道应用程序在 DOCA Comch API 之上运行。
应用程序首先在主机(客户端)和 DPU(服务器)之间建立客户端-服务器连接。一旦建立此连接,双方的应用程序都会生成两个新线程
消费者 – 消费者线程向连接的另一端注册多个
post_recv
缓冲区生产者 – 生产者线程在检测到消费者后,会用数据填充这些
post_recv
缓冲区,然后消费者可以读取这些数据
一旦消费者处理了接收到的缓冲区,缓冲区就会被重新发布(通过任务提交)以再次由对面的生产者填充。
当生产者发送了请求的消息数量,并且消费者接收了相同的数量时,两个线程都会退出,并且主客户端-服务器连接被销毁。
流程如下图所示

有关如何安装 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
文件中设置所需的标志,而不是在编译命令行中提供它们
编辑
/opt/mellanox/doca/applications/meson_options.txt
中的以下标志将
enable_all_applications
设置为false
将
enable_secure_channel
设置为true
运行以下编译命令
cd /opt/mellanox/doca/applications/ meson /tmp/build ninja -C /tmp/build
信息doca_secure_channel
在/tmp/build/secure_channel/
下创建。
故障排除
有关应用程序编译遇到的任何问题,请参阅 DOCA 故障排除。
应用程序执行
安全通道应用程序以源代码形式提供。因此,在执行应用程序之前需要进行编译。
应用程序使用说明
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 levelfor
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
信息有关更多信息,请参阅“命令行标志”部分。
在 BlueField 上运行应用程序的 CLI 示例
./doca_secure_channel -s
256
-n10
-p03
:00.0
-r 3b:00.0
注意DOCA Comch 设备 PCIe 地址 (
03:00.0
) 和 DOCA Comch 设备表示器 PCIe 地址 (3b:00.0
) 应与所需 PCIe 设备的地址匹配。用户可以使用 DOCA 功能打印工具 查找其设备和设备表示器的 PCIe 地址。在主机上运行应用程序的 CLI 示例
./doca_secure_channel -s
256
-n10
-p 3b:00.0
注意DOCA Comch 设备 PCIe 地址 (
3b:00.0
) 应与所需 PCIe 设备的地址匹配。该应用程序还支持基于 JSON 的部署模式,其中所有命令行参数都通过 JSON 文件提供
./doca_secure_channel --json [json_file]
例如
./doca_secure_channel --json ./sc_params.json
注意执行前,请确保使用的 JSON 文件包含正确的配置参数,尤其是部署所需的 PCIe 地址。
命令行标志
标志类型 | 短标志 | 长标志/JSON 键 | 描述 | JSON 内容 |
通用标志 |
|
| 打印帮助概要 | N/A |
|
| 打印程序版本信息 | N/A | |
|
| 设置应用程序的日志级别
|
| |
N/A |
| 设置程序的日志级别
|
| |
|
| 从输入 JSON 文件解析所有命令标志 | N/A | |
程序标志 |
|
| 消息大小,以字节为单位 注意
这是一个强制性标志。 |
|
|
| 在双方发送的消息数量 注意
这是一个强制性标志。 |
| |
|
| DOCA Comch 设备 PCIe 地址 注意
这是一个强制性标志。 |
| |
|
| DOCA Comch 设备表示器 PCIe 地址 注意
这仅在 DPU 上是强制性标志。 |
|
有关支持的标志和执行模式的更多信息,请参阅 DOCA 参数解析器。
故障排除
有关 DOCA 应用程序的安装或执行遇到的任何问题,请参阅 DOCA 故障排除。
解析应用程序参数。
初始化参数解析器资源并注册 DOCA 通用参数。
doca_argp_init();
注册安全通道应用程序参数。
register_secure_channel_params();
解析应用程序参数
doca_argp_start();
建立客户端-服务器控制路径连接
comch_utils_fast_path_init();
根据应用程序的运行位置(x86 主机或 DPU Arm 核心),创建
doca_comch_client
或doca_comch_server
。注册一个回调,该回调在新消费者在另一端创建时触发。
推进连接,直到连接建立。
运行主逻辑。
sc_start();
在控制通道上发送一条消息,告诉另一端它打算发送多少条快速通道消息及其长度。
等待接收来自另一端的类似消息。
启动生产者线程
创建并启动
doca_comch_producer
。等待直到从控制通道连接的另一端注册了消费者。
创建输入消息长度的
doca_buf
以重复发送。提交最大数量的
doca_comch_producer_task_send
任务,每个任务都包含doca_buf
。从每个任务的完成回调重新提交该任务,直到发送了请求的任务数量。
销毁生产者并结束线程。
启动消费者线程
创建并启动
doca_comch_consumer
。推进直到消费者已完全注册到控制通道连接。
创建协商大小的
doca_buf
以接收数据。提交最大数量的
doca_comch_consumer_task_post_recv
任务,每个任务都带有已分配的doca_buf
。当每个
post_recv
缓冲区被生产者填充后,从其回调中重新提交该缓冲区。当消费者收到已通信的快速通道消息数量时,销毁消费者和线程。
发送 (DPU) 或等待 (主机) 消息,以指示所有快速通道消息已完成,并且可以销毁 Comch 控制连接。
/opt/mellanox/doca/applications/secure_channel/
/opt/mellanox/doca/applications/secure_channel/sc_params.json