Nvidia DOCA 编程入门
DOCA 编程入门
本文档旨在为开发者提供一份全面的 NVIDIA DOCA 编程入门指南。内容涵盖了 DOCA 软件框架的核心组件、安装配置流程,并结合 LMCache 项目的实际需求,详细解析了零拷贝传输、控制平面卸载、计算卸载等典型应用场景的编程实践,帮助开发者快速掌握利用 BlueField DPU 加速数据中心工作负载的关键技术。
1. BlueField 与 DOCA 简介
1.1 BlueField DPU 概述
NVIDIA BlueField 网络平台(DPU 和 SuperNIC)是适用于现代数据中心基础设施的先进计算平台。它将基础设施服务域与工作负载域隔离开来,从而显著提高应用程序和服务器的性能、安全性和效率。
• 核心价值: • 卸载 (Offload):将网络、存储和安全任务从 CPU 转移到 DPU,释放 CPU 算力。 • 加速 (Accelerate):利用 DPU 内置的硬件加速引擎(如数据压缩、加密、正则匹配)处理特定工作负载。 • 隔离 (Isolate):实现基础设施服务与业务应用的物理隔离,提供零信任安全环境。
1.2 DOCA 软件框架
NVIDIA DOCA (Data Center on a Chip Architecture) 是解锁 BlueField DPU 潜力的关键软件框架。它为开发者提供了一套行业标准的开放 API、驱动程序、库、工具和示例应用程序。
• DOCA SDK:包含用于开发加速应用程序的库和驱动程序。支持 RDMA 加速、网络流处理 (Flow)、存储虚拟化 (Emulation)、正则表达式匹配 (RegEx) 等功能。 • DOCA Runtime:包含用于在数据中心大规模部署、配置和编排容器化服务的工具。 • DOCA-Host:安装在主机服务器上的软件包,提供与 BlueField DPU 通信所需的驱动和接口。
通过 DOCA,开发者可以构建软件定义、云原生的加速服务,满足高性能计算和 AI 云的需求。
2. DOCA 软件组件
DOCA 软件栈由一系列分层的库和驱动程序组成,旨在为 DPU 开发提供统一且高效的接口。其核心组件可以分为以下三类:
2.1 基础库 (Base Libraries)
基础库为所有 DOCA 应用程序提供了底层的支撑功能,确保开发的一致性和便捷性。
• doca_common: DOCA 生态系统的基石。• 日志记录 ( DOCA_LOG): 提供分级日志系统,支持将日志输出到控制台或文件,方便调试和运维。• 错误处理 ( doca_error_t): 定义了统一的错误码规范,简化了跨模块的错误传播和处理。• 基础数据结构: 提供了链表、哈希表等经过优化的高性能数据结构。 • doca_argp: 命令行参数解析库。• 允许开发者轻松定义和解析应用程序的启动参数(如 PCI 地址、配置文件路径等),减少样板代码。 • doca_buf: 高性能内存缓冲区管理。• 支持复杂的内存布局(如 Scatter-Gather Lists, SGL),是数据平面处理的核心数据结构。 • 提供引用计数机制,确保零拷贝场景下的内存安全。
2.2 核心运行时库 (Core Runtime Libraries)
运行时库是 DOCA 的核心,封装了 BlueField DPU 的硬件加速能力,涵盖网络、存储、计算和控制平面。
• 数据传输与存储 • DOCA DMA ( doca_dma):• 提供主机 (Host) 与 DPU 之间、以及 DPU 内部内存的高效直接内存访问。 • 支持异步操作模式,允许 CPU 在数据搬运期间处理其他任务,显著降低 CPU 占用。 • DOCA Compress ( doca_compress):• 利用 DPU 内置的硬件压缩引擎(支持 Deflate, LZ4 等算法)。 • 相比 CPU 软压缩,提供数倍的吞吐量提升,同时释放 CPU 算力。 • 网络与流处理 • DOCA Flow ( doca_flow):• 提供基于硬件流表的数据包处理管道。 • 支持复杂的动作链(Match-Action),如修改包头、封装/解封装 (Tunneling)、转发、丢弃等。 • 是构建软件定义网络 (SDN) 和防火墙应用的基础。 • 控制平面与通信 • DOCA Comch ( doca_comch):• 建立主机与 DPU 之间可靠的控制平面通信通道。 • 屏蔽了底层的 PCIe/Socket 细节,提供类似于 Socket 的消息收发接口。 • 适用于配置下发、状态同步和心跳检测等场景。 • 异构计算 • DOCA DPA ( doca_dpa):• 数据路径加速器 (Data Path Accelerator) 接口。 • 允许开发者编写自定义的内核代码 (Kernel),运行在 DPU 的轻量级 RISC-V 核心上。 • 适用于极低延迟的数据包处理或计算密集型的近数据处理任务。
2.3 服务与应用 (Services & Applications)
DOCA 还提供了一系列预构建的服务和参考应用,帮助开发者快速落地。
• DOCA App Shield ( doca_apsh): 利用 DPU 对主机内存进行带外 (Out-of-Band) 监控,实现入侵检测和恶意软件分析。• DOCA Firefly: 提供高精度的时间同步服务 (PTP),适用于金融交易和电信网络。 • DOCA Telemetry: 收集 DPU 的运行指标和性能数据,集成到 Prometheus/Grafana 等监控系统。
3. 示例代码构建指南
本章节主要介绍如何获取和编译 doca-samples 示例代码。在此之前,请确保您已经拥有 NVIDIA BlueField DPU 硬件,并且已经按照官方文档安装了 DOCA SDK(这是编译和运行示例的前提条件)。
安装资源:
• NVIDIA DOCA Installation Guide for Linux: 详细的安装指南,包含 Host 和 DPU 端的配置。 • NVIDIA DOCA Developer Guide: 开发环境搭建与 SDK 使用说明。
3.1 获取示例代码
DOCA 提供了丰富的示例代码,托管在 GitHub 上。首先,克隆 doca-samples 仓库:
git clone https://github.com/NVIDIA-DOCA/doca-samples.git
cd doca-samples3.2 编译环境准备
DOCA 使用 meson 和 ninja 作为构建系统。请确保您的开发环境中已安装这些工具。
3.3 编译应用程序
参考应用程序位于 applications 目录下。编译步骤如下:
1. 进入应用程序目录: cd applications2. 配置构建目录(默认使用 Debug 模式): meson /tmp/build注意:默认编译为 Debug 模式,包含调试符号且未优化。如果需要 Release 模式,请查阅 Meson 文档配置优化选项。
3. 开始编译: ninja -C /tmp/build4. 编译完成后,二进制文件将位于 /tmp/build/<application_name>/目录下。
3.4 开发者配置
如果需要开启 DOCA 的追踪日志 (Trace Log) 以进行深度调试,可以在配置 Meson 时添加参数:
meson /tmp/build -Denable_trace_log=true4. 开发环境与调试指南
4.1 编程语言支持
DOCA 提供了多语言的开发支持,以适应不同的应用场景。
4.1.1 C 语言 (Core)
DOCA SDK 的核心库(如 doca_dma, doca_flow, doca_comch)均提供标准的 C API。这是开发高性能数据平面应用(如 LMCache 存储引擎)的首选语言,能提供对硬件最细粒度的控制和最低的延迟。
4.1.2 Python (Management & Scripts)
虽然核心数据路径通常使用 C 开发,但 DOCA 提供了部分 Python 绑定和工具,适用于管理平面、自动化脚本和快速原型验证。
• PyDOCA: 部分 DOCA 库提供 Python 绑定。 • 辅助工具: 如 doca_devemu示例中包含rpc_nvmf_doca.py脚本,用于通过 RPC 配置 SPDK 后端。
4.1.3 DOCA DPL (P4)
DPL (DOCA Pipeline Language) 是一种基于 P4-16 的领域特定语言,专用于编写 BlueField DPU 的数据平面流水线。
• 适用场景: 软件定义网络 (SDN)、自定义包处理逻辑。 • 编译器 ( dplp4c): 将 P4 代码编译为 DPU 硬件可执行的配置。dplp4c.sh --target doca my_program.p4• 开发流程: 编写 P4 代码 -> 使用 dplp4c编译 -> 通过 DPL Runtime Service 加载到 DPU。
4.2 性能评测工具 (doca_bench)
doca_bench 是一个通用的性能基准测试工具,用于评估 DOCA API 在不同配置下的吞吐量和延迟。
• 基本用法: doca_bench --csv-output-file /tmp/results.csv --latency-bucket-range 0,100 ...• 关键参数: • --csv-output-file <path>: 将测试结果输出为 CSV 文件,便于后续分析。• --csv-append-mode: 追加模式,适合批量运行测试并汇总结果。• --latency-bucket-range <start,width>: 自定义延迟直方图的桶范围,用于精细化分析长尾延迟。
4.3 Flow 调优工具 (doca_flow_tune)
doca_flow_tune 用于分析和优化 doca_flow 应用程序的规则下发和匹配性能。它包含 DPU 端的 Server 和 Host 端的 CLI 工具。
• 主要模式:
1. Monitor ( monitor): 实时监控软件 KPI 和硬件计数器。doca_flow_tune monitor background2. Analyze ( analyze): 分析 Flow 管道结构,检测潜在瓶颈。doca_flow_tune analyze export --file-name pipeline_dump.json3. Visualize ( visualize): 将导出的 JSON 描述转换为 Mermaid 图表,直观展示流表层级。doca_flow_tune visualize --pipeline-desc pipeline_dump.json --file-name flow_graph.mmd生成的
.mmd文件可以使用 Mermaid Live Editor 渲染为流程图。
4.4 DPA 调试 (doca-dpa-gdb)
针对运行在 RISC-V 核心上的 DPA 程序,DOCA 提供了专用的 GDB Server 工具。
• 功能: 支持断点、单步执行、查看寄存器和内存。 • 限制: • 不支持捕获 Fatal Errors。 • 不支持访问 Window 内存区域。 • 需配合 Host 端的 GDB 客户端使用。 • 使用方式:
在 DPU 上启动 Server,然后使用 GDB 远程连接进行调试。