DOCA 管理服务指南
本指南介绍如何在 NVIDIA® BlueField® 网络平台或 NVIDIA® ConnectX® SmartNIC 之上使用 DOCA 管理服务。
DOCA DMS 服务目前在 alpha 级别提供支持。
DOCA 管理服务 (DMS) 是用户配置和操作 NVIDIA BlueField 和 ConnectX 设备的一站式服务。DMS 通过 OpenConfig 社区创建的简单且行业标准的 API 来管理 NVIDIA 的所有脚本/工具。用户可以本地 (ssh
) 或远程 (grpc
) 配置 BlueField 或 ConnectX 以用于任何模式。它可以轻松地为任何 NVIDIA 网络设备迁移和引导任何客户。
DMS 通过外部接口公开可配置的 BlueField/ConnectX 参数,以支持管理站自动配置 NVIDIA 网络适配器。公开的接口为 BF/CX 设备配置提供了一种统一的方法,并隐藏了用于配置 BlueField 或 ConnectX 功能的内部工具的详细信息。
DMS 是客户端-服务器架构。服务使用守护程序处理资源发现,并准备好接收来自客户端的命令,用户可以使用 DMSc(DMS 客户端),它是 DMS 的一部分,或者使用/创建任何其他客户端。
请参阅 OpenConfig 网站以了解 OpenConfig 协议的说明。
Yang 模型描述了一个配置树,该配置树易于导航,并且可以使用 XPath 功能查找任何“配置叶”。大多数 gNMI/gNOI 协议都与 OpenConfig 社区通用,利用 gRPC 协议来传输命令。
DOCA Yang 模型是实验性的。
目前尚不支持用于流式遥测的 gNMI 订阅机制。
DMS 可以在安装了 BlueField 或 ConnectX 设备的宿主机上运行,也可以在 BlueField Arm 本身运行(当 BlueField 在 DPU 模式下运行 时)。
DMS 需要在将要运行 DMS 服务的目标系统上安装 DOCA
主机 DMS - 需要在主机系统上安装 DOCA for Host 软件包(带有 doca-networking 或 doca-all 配置文件)。
DPU (BlueField Arm) DMS - 需要在 BlueField Arm 上安装 DOCA 镜像。
请按照以下说明安装 DOCA:DOCA Linux 安装指南。
DMS 今天仅支持基于 Linux 的环境。
DMS 有 3 个主要组件
DMSD – 服务器 – BlueField 内部或带有 NVIDIA PCIe 设备的宿主机上的 DMS 服务器
DMSC – 客户端 – DOCA 提供 OpenConfig 客户端。客户可以选择使用此客户端、任何其他开源客户端或开发自己的(基于 gRPC)客户端。
Yang 文件 – Yang 模型文件包含用于配置 BlueField 设备的数据模型,以及 通用 OpenConfig YANG 模型 的 NVIDIA 特定扩展。
OpenConfig 由 2 个主要协议组成
gNMI – gRPC 网络管理接口,用于配置网络设备的协议。
gNOI – gRPC 网络操作接口,用于在网络设备上执行操作命令(即,配置、升级、重启)的协议。
以下是 DMS 的架构图

下图展示了 DMS 的运行模式,因为 DMS 客户端可以从任何地方运行
DMS 客户端和服务器组件都部署在主机上
DMS 客户端和服务器组件都部署在 DPU (BlueField Arm) 上
DMS 服务器组件部署在主机上,而 DMS 客户端远程部署(通过管理网络连接到 DMS 服务器)
DMS 服务器组件部署在 DPU (BlueField Arm) 上,而 DMS 客户端远程部署(通过管理网络连接到 DMS 服务器)

DMSD 是一个 systemd 服务,默认情况下随 BFB-Bundle 安装在 DPU 上,可以使用 systemctl
启用/禁用。可以使用命令 dmscli
访问 DMSD,并提供 dmsd
用户密码(默认为 root OS 密码)。主机软件包上提供了 systemd 模板。
要查看完整的标志列表,请使用帮助标志(即,dmsd -help
,dmsd -h
)。
通用标志
-bind_address <string>
– 绑定到<address>:<port>
或仅绑定到:<port>
(默认为:9339
)。可以是本地主机用于本地用例,也可以是 IP 地址用于远程用例。-v <value>
– V 日志的日志级别-target_pci <string>
– 目标 PCIe 地址(即,03:00
)。如果仅存在一个 NVIDIA 网络设备,则自动选择;否则,必须指定 PCIe 地址。
配置标志
-target_pci <string>
– 目标 PCIe 地址(即,03:00
)。如果仅存在一个 NVIDIA 网络设备,则自动选择;否则,必须指定 PCIe 地址。-image_folder <string>
– 指定镜像安装文件夹。可以将镜像直接复制到文件夹以避免通过网络传输。默认创建文件夹:/tmp/dms
。-chunk_size_ack <uint>
– 镜像块大小,以字节为单位,用于响应传输响应(默认值:12000000)-exec_timeout <uint>
– 命令的最大执行超时时间(以秒为单位),如果未响应(未打印到stdout
);0(默认值)为无限制
配置标志
-init_config <string>
– 包含在 DMS 启动时运行的 gNMI 请求的文件。默认情况下,DMS 会将任何 gNMI 设置请求添加到文件中(文件格式为 req.json)。-image_folder <string>
– 运行时不记录 gNMI 设置请求,不更改初始配置文件。
安全标志
-auth string
– 此标志有 3 个选项
影子
零接触,管理员无需为 DMS 创建任何专用附加用户(重用 OS 用户)
在每个客户端请求上实时读取哈希密码
使用标志
-username -shadow
示例:
-username root -shadow /etc/shadow/
禁用:
-noauth flag
凭据
管理员必须设置强密码
使用标志
-username -password
示例:
-username root -password 123456
禁用:
-noauth flag
可以留空密码标志以在守护程序启动时调用密码提示
证书文件
最安全的选项,基于 (m)TLS
示例:
-ca /tmp/ca.crt -ca_key /tmp/ca.key
禁用:
-notls option
DMS 流量加密
默认情况下,连接通过传输层安全 (TLS) 进行保护。
TLS 是一种为网络通信提供加密和身份验证的协议。
DMS 支持 gNMI 和 gNOI 接口的 TLS,使用自签名或 CA 签名证书。
要运行安全通信,服务器/客户端需要提供以下内容
-ca
– CA 证书路径-tls_key_file
– TLS 私钥路径-tls_cert_file
– TLS 公钥路径
要实现 TLS 通信(仅服务器身份验证),请配置
服务器 –
dmsd -ca /tmp/ca.crt -tls_key_file /tmp/target.key -tls_cert_file /tmp/target.key
客户端 – 使用标志
--skip-verify
跳过客户端身份验证
要实现 mTLS 通信(服务器和客户端身份验证),请配置
服务器 –
dmsd -ca /tmp/ca.crt -tls_key_file /tmp/target.key -tls_cert_file /tmp/target.key
客户端 –
dmsc --tls-ca /tmp/ca.crt --tls-key /tmp/client.key --tls-cert /tmp/client.crt
要实现不安全通信(无加密),请配置
服务器 – 使用
-tls_enabled=false
参数客户端 – 使用
--insecure
标志
gNMI 命令
在 DMSC 中,gNMI 部分由 GNMIC 项目提供支持。
有关更多信息,请参阅 GNMIC 文档。
dmsc -a localhost:9339 -u root -p <password> --file
/opt/mellanox/doca/service/dms/yang <command
>
可以使用命令 prompt
调用带有自动完成选项的提示模式。可以使用命令 dmscli
访问它,并提供 dmsd
用户密码(默认为 root OS 密码)。
获取支持的路径
dmsc --file
/opt/mellanox/doca/service/dms/yang path --types --descr
/interfaces/interface[name=*]/config/enabled (type
=boolean)
This leaf contains the configured, desired state of the
interface.
Systems that implement the IF-MIB use the value of this
leaf in
the 'running'
datastore to set
IF-MIB.ifAdminStatus to 'up'
or 'down'
after an ifEntry
has been initialized, as described in
RFC 2863.
Changes in
this leaf in
the 'running'
datastore are
reflected in
ifAdminStatus, but if
ifAdminStatus is
changed over SNMP, this leaf is not affected.
/interfaces/interface[name=*]/config/mtu (type
=uint16)
Set the max transmission unit size in
octets
for
the physical interface. If this is not set
, the mtu is
set
to the operational default -- e.g., 1514 bytes on an
Ethernet interface.
/interfaces/interface[name=*]/config/type (type
=identityref)
The type
of the interface.
When an interface entry is created, a server MAY
initialize the type
leaf with a valid value, e.g., if
it
is possible to derive the type
from the name of the
interface.
If a client tries to set
the type
of an interface to a
value that can never be used by the system, e.g., if
the
type
is not supported or if
the type
does not match the
name of the interface, the server MUST reject the request.
A NETCONF server MUST reply with an rpc-error with the
error-tag 'invalid-value'
in
this case
.
/interfaces/interface[name=*]/ethernet/nvidia/config/inter-packet-gap (type
=uint8)
Inter packet gap configuration, in
4B unit
/interfaces/interface[name=*]/ethernet/nvidia/config/rate-limit (type
=uint16)
The percentage of bandwidth, in
permile units
, to be used on the port.
/interfaces/interface[name=*]/name (type
=leafref)
References the name of the interface
/interfaces/interface[name=*]/nvidia/cc/config/priority[id
=*]/id (type
=leafref)
/interfaces/interface[name=*]/nvidia/cc/config/priority[id
=*]/np_enabled (type
=boolean)
Enable CC NP for
a given priority on the interface
/interfaces/interface[name=*]/nvidia/cc/config/priority[id
=*]/rp_enabled (type
=boolean)
Enable CC RP for
a given priority on the interface
/interfaces/interface[name=*]/nvidia/cc/slot[id
=*]/config/enabled (type
=boolean)
Enable a CC algo slot execution.
/interfaces/interface[name=*]/nvidia/cc/slot[id
=*]/id (type
=leafref)
CC algo slot ID.
/interfaces/interface[name=*]/nvidia/cc/slot[id
=*]/param[id
=*]/config/value (type
=algo_param_value)
Parameter value within the CC algo slot.
/interfaces/interface[name=*]/nvidia/cc/slot[id
=*]/param[id
=*]/id (type
=leafref)
Parameter ID within the CC algo slot.
/interfaces/interface[name=*]/nvidia/qos/config/pfc (type
=boolean)
Enables PFC
/interfaces/interface[name=*]/nvidia/qos/config/priority[id
=*]/id (type
=prio)
Priority id
.
/interfaces/interface[name=*]/nvidia/qos/config/trust-mode (type
=identityref)
Trust mode for
the interface QoS.
/interfaces/interface[name=*]/nvidia/roce/config/adaptive-retransmission (type
=boolean)
Enable adaptive retransmission
/interfaces/interface[name=*]/nvidia/roce/config/adaptive-routing-force (type
=boolean)
Force adaptive routing even if
feature was not negotiated between a requestor and responder.
/interfaces/interface[name=*]/nvidia/roce/config/rtt-resp-dscp (type
=uint8)
Defines the DSCP fixed value used if
mode is set
to FIXED.
/interfaces/interface[name=*]/nvidia/roce/config/rtt-resp-dscp-mode (type
=identityref)
Defines the method for
setting DSCP in
RTT response packets.
/interfaces/interface[name=*]/nvidia/roce/config/slow-restart (type
=boolean)
Enable slow restart when congestion
/interfaces/interface[name=*]/nvidia/roce/config/slow-restart-idle (type
=boolean)
Enable slow restart when idle
/interfaces/interface[name=*]/nvidia/roce/config/tos (type
=tos)
ToS value for
RoCE traffic.
/interfaces/interface[name=*]/nvidia/roce/config/tx-window (type
=boolean)
Enable transmission window
/nvidia/cc/config/user-programmable (type
=boolean)
Enables user-programmable CC functionality.
/nvidia/mode/config/mode (type
=identityref)
Mode can take one one of several predefined
values representing operational modes of DPU.
/nvidia/roce/config/adaptive-routing (type
=boolean)
Enable adaptive routing between a requestor and responder.
/nvidia/roce/config/multipath-dscp (type
=identityref)
Multipath on transmit, set
the DSCP bit to hold the MP eligible info
/nvidia/roce/config/tx-sched-locality-mode (type
=identityref)
Transmission scheduler adaptation to locality
以下是 identityref
类型路径的值列表
/interfaces/interface[name=*]/config/type (type
=identityref)
"infiniband"
, "ethernetCsmacd"
/interfaces/interface[name=*]/nvidia/qos/config/trust-mode (type
=identityref)
"QOS_TRUST_MODE_PORT"
, "QOS_TRUST_MODE_PCP"
, "QOS_TRUST_MODE_DSCP"
/interfaces/interface[name=*]/nvidia/roce/config/rtt-resp-dscp-mode (type
=identityref)
"RTT_RESP_DSCP_DEFAULT"
, "RTT_RESP_DSCP_FIXED"
, "RTT_RESP_DSCP_RTT_REQUEST"
/nvidia/mode/config/mode (type
=identityref)
"SEPARATE"
, "DPU"
, "NIC"
/nvidia/roce/config/multipath-dscp (type
=identityref)
"MULTIPATH_DSCP_DISABLED"
, "MULTIPATH_DSCP_0"
, "MULTIPATH_DSCP_1"
, "MULTIPATH_DSCP_2"
/nvidia/roce/config/tx-sched-locality-mode (type
=identityref)
"TX_SCHED_LOCALITY_DEFAULT"
, "TX_SCHED_LOCALITY_STATIC"
, "TX_SCHED_LOCALITY_ACCUMULATIVE"
, "TX_SCHED_LOCALITY_DISABLED"
获取请求
获取请求实时发生,没有缓存。Get 命令需要提供 Yang Xpath,如下所述
dmsc <flags> get --path /interfaces/interface[name=p0]/config/mtu
[
{
"source"
: "localhost:9339"
,
"timestamp"
: 1712485149723248511,
"time"
: "2024-04-07T10:19:09.723248511Z"
,
"updates"
: [
{
"Path"
: "interfaces/interface[name=p0]/config/mtu"
,
"values"
: {
"interfaces/interface/config/mtu"
: "1500"
}
}
]
}
]
要在路径中插入参数,作为接口名称 (p0) 的指示。
Get 请求也适用于子树 (subPath),如下所示
dmsc <flags> get --path /nvidia/roce
[
{
"source"
: "127.0.0.1:9339"
,
"timestamp"
: 1728471432988295603,
"time"
: "2024-10-09T13:57:12.988295603+03:00"
,
"updates"
: [
{
"Path"
: "nvidia/roce"
,
"values"
: {
"nvidia/roce"
: {
"config"
: {
"adaptive-routing"
: "false"
,
"multipath-dscp"
: "MULTIPATH_DSCP_DEFAULT"
,
"tx-sched-locality-mode"
: "TX_SCHED_LOCALITY_ACCUMULATIVE"
}
}
}
}
]
}
]
未能为解码叶提供强制参数会导致跳过该叶。当第一个叶失败时,整个请求都会失败。
设置请求
设置请求立即发生,调用工具来配置操作系统。
设置命令需要提供 Yang Xpath,如下所述
dmsc <flags> set
--update /interfaces/interface[name=p0]/config/mtu:::int:::9216
{
"source"
: "localhost:9339"
,
"time"
: "1970-01-01T00:00:00Z"
,
"results"
: [
{
"operation"
: "UPDATE"
,
"path"
: "interfaces/interface[name=p0]/config/mtu"
}
]
}
要在路径中插入参数,作为接口名称 (p0) 的指示。
提供的值必须按值类型和字符分隔。
目前,set 中仅支持 --update
标志。
某些叶的更新仅在系统重启后生效。有关信息,请参阅 gNOI 系统重启。
也可以调用命令 JSON 列表
dmsc <flags> set
--request-file
req.json
req.json
示例
{
"updates"
:
[
{
"path"
: "/interfaces/interface[name=p0]/config/mtu"
,
"value"
: 9216
,
"encoding"
: "uint"
},
{
"path"
: "/interfaces/interface[name=p0]/config/enabled"
,
"value"
: true
,
"encoding"
: "bool"
}
]
}
gNOI 命令
在 DMSc 中,gNOI 部分由 GNOIC 项目提供支持,有关完整文档,请参阅 GNOIC 文档。
dmsc -a localhost --port 9339 --tls-cert client.crt --tls-key client.key <command
>
可以使用命令 prompt
调用带有自动完成选项的提示模式。
除非另有说明,否则所有命令都是阻塞的。
目前,gNOI 命令仅在主机上受支持(而不是 BlueField)。
操作系统
以下小节介绍用于在 BlueField 上配置新 DOCA 镜像 (BFB) 或固件的操作。
安装
此命令将文件从客户端传输到服务器并验证文件的有效性
dmsc <flags> os install
--version <free_text_version> --pkg <bfb|cfg|fw path>
dmsc <flags> os install
--version 2_9_0 --pkg DOCA_2.9.0_Ubuntu.bfb
dmsc <flags> os install
--version 2_9_0 --pkg config.cfg
dmsc <flags> os install
--version 1_3_5_custom.bfb --pkg custom.bfb
如果文件成功通过身份验证,则文件将保存到 -image_folder
标志(默认为 /tmp/dms
)中指定的文件夹。如果 --version
字段中提供了 none
,则自动检测文件的扩展名并自动写入。用户可以将文件手动复制到文件夹中,并使用文件扩展名调用命令以验证文件。如果文件已存在于文件夹中,并且版本已使用扩展名指定,则不会启动文件传输。
激活
激活命令将 BFB 捆绑包/固件部署到硬件
dmsc <flags> os activate --version 2_9_0 # Invoke all files under 2_9_0 name
dmsc <flags> os activate --version "2_9_0.bfb;0_0_1.cfg;24_29_0046.fw"
--version
标志提供了一个版本,用于在 -image_folder
标志(默认为 /tmp/dms
)指定的文件夹中搜索。如果未提供扩展名,则该命令将使用版本名称下的所有文件。
要激活单独的文件,请使用以分号分隔的 --version
标志。
运行激活固件的命令后,将自动调用固件重置。
验证
验证命令检索固件和 BFB 捆绑包版本
dmsc <flags> os verify
返回值由以分号分隔的两个版本组成。
目前,只有通过 DMS 安装的 BFB 捆绑包才能检索。
系统
以下小节提供了用于重启 BlueField 上的 BFB 捆绑包/固件的操作。
重启状态
验证 BFB 是否正在重启
dmsc <flags> system reboot-status
如果系统处于活动状态,则返回值为 false
。如果系统正在重启,则返回值为 true
。如果无法检索状态,则状态显示为失败,并且消息字段指示问题所在。
--reboot_status_check <string>
标志检查是否需要固件重启
如果设置为
fast
(默认值),则会进行快速测试,但不准确(任何配置都可能触发此标志)如果设置为
strict
,则会进行更准确的测试,但速度较慢如果设置为
none
,则跳过固件检查
重启
重启 BlueField Arm 和固件
dmsc <flags> system reboot --delay <uint>s --subcomponent <string> --method <string>
此命令是非阻塞的,并立即返回。
--delay
标志指定在调用重置之前等待的时间间隔。
子组件和方法是可选的。默认情况下,重启以最低的可用重置级别和类型执行。
目前,DMS 支持 --subcomponent ARM --method <WARM|POWERDOWN>
标志。
恢复出厂设置(别名:重置)
以下小节提供了一个在目标节点上执行恢复出厂设置的操作。
开始
在给定目标节点上的每个 PF 上执行重置操作。
此操作将设备配置重置为其默认值
dmsc <flags> factory-reset start
dmsc <flags> reset start
目前,尚不支持重置为黄金镜像