文章目录
1. 要点
- BlueField DPU 有3种工作模式:DPU 模式、零信任模式、NIC模式(网卡模式)。
- DPU模式是指嵌入式 Arm 系统控制 NIC 资源和数据路径。整个DPU作为网卡+ARM系统整体对外服务。
- 零信任模式是DPU模式的一个加强版,主要是基于安全考虑,提高安全等级,不允许从主机侧访问和管理DPU,只允许从DPU上的ARM系统以及BMC来管理。
- NIC模式,就是ARM系统不直接管理DPU上的CX系列网卡,CX系列网卡作为一个独立的卡提供给HOST主机。
关键命令:
以下命令在DPU上执行:
mst start
#----- BF2 -----
mlxconfig -d /dev/mst/mt41686_pciconf0 -e q |grep -E "INTERNAL_CPU_MODEL|EXP_ROM_UEFI_ARM_ENABLE" #查询是否在dpu模式。
## DPU模式的配置信息:INTERNAL_CPU_MODEL= EMBBEDDED_CPU(1) and EXP_ROM_UEFI_ARM_ENABLE = True (1)
# nic模式
sudo mlxconfig -d /dev/mst/mt41692_pciconf0 s INTERNAL_CPU_OFFLOAD_ENGINE=1 # BF3启动DPU模式,BF2更加复杂参考官网
# BF2 zero truct模式
## 开启 (restrict)
sudo mlxprivhost -d /dev/mst/<device> r --disable_rshim --disable_tracer --disable_counter_rd --disable_port_owner
## 打开 (privilege)
sudo mlxprivhost -d /dev/mst/<device> p
## 查询
mlxprivhost -d /dev/mst/mt41686_pciconf0 q
#----- BF3 -----
## 配置为DPU模式(全0只有一个1,技巧:0表示DPU,1表示HOST)
mlxconfig -d 1b:00.0 INTERNAL_CPU_MODEL=1 INTERNAL_CPU_PAGE_SUPPLIER=0 INTERNAL_ESWITCH_MANAGER=0 INTERNAL_IB_VPORT0=0 INTERNAL_CPU_OFFLOAD_ENGINE=0 INTERNAL_CPU_RSHIM=0
#配置为NIC模式(全1只有一个0,技巧:0表示DPU,1表示HOST)
mlxconfig -d 1b:00.0 INTERNAL_CPU_MODEL=1 INTERNAL_CPU_PAGE_SUPPLIER=1 INTERNAL_ESWITCH_MANAGER=1 INTERNAL_IB_VPORT0=1 INTERNAL_CPU_OFFLOAD_ENGINE=1 INTERNAL_CPU_RSHIM=0
2. 三种模式
2.1 DPU模式(ECPF模式)
ECPF更多信息参考兄弟篇:【DPU系列之】DPU中的ECPF概念是什么?全称是什么?
- 为什么既然有DPU模式称呼还需要定义一个ECPF概念?主要是为了避免引起歧义。“DPU处于DPU模式”,这种说法相比于DPU处于ECPF模式,后者更加准确。也就是ECPF是特指一种模式。而DPU这个名词却不能特指一种模式。
- 本质是DPU上的CX系列网卡主要由ARM管理。或者说host上面无法直接挂在DPU上的网卡当做CX网卡使用。
在 DPU 模式下,NIC 资源和功能由嵌入式 Arm 子系统拥有和控制。与主机的所有网络通信都流经 Arm 内核上托管的虚拟交换机控制平面,然后才继续传输到主机。在此模式下工作时,DPU 是由数据中心和主机管理员管理的可信功能 — 加载网络驱动程序、重置接口、启动和关闭接口、更新固件以及更改 DPU 上的操作模式设备。
该种模式下网络功能仍然向主机公开,但其权限有限,主要包括:
- 只有DPU上的驱动加载并完成网卡配置后,才能加载主机侧的驱动。
- 所有ICM(接口配置内存)均由ECPF分配并驻留在DPU的内存中。
- ECPF 控制和配置 NIC 嵌入式交换机,进出主机接口的流量始终落在 Arm 侧。
效果图:
- 将流量传递到主机接口有两种方法:(这些方式都在DOCA框架中统一提供)
- 使用representors将流量转发到主机(进出主机的每个数据包也将由嵌入式 Arm 端的网络接口处理)
- 将规则推送到DPU中的eswtich,它允许并卸载此流量。
下图是一个关于数据流动的详细图:(通过DOCA框架提供操作函数,然后HOST和DPU转发,使用representors代理。并且在host上的设备叫做doca_dev,在host看到的物理设备,在DPU上对应一个representor,并且在DPU的DOCA App中对应一个doca_dev_rep的结构,最终对应到实际的doca_dev,以上是doca软件抽象框架里面。最后doca_dev对应到实际的DPU物理口)这个图非常清晰的表示了处于DPU模式下,是如何向主机提供网络服务而且必须经过DPU的ARM的。另外一种模式就是纯NIC模式。就是经典的CX系列网卡直接加载驱动。
参考:https://docs.nvidia.com/doca/sdk/doca+sdk+architecture/index.html
2.2 零信任模式
零信任模式是 DPU 模式的特殊化,它实现了额外的安全层,防止主机系统管理员从主机访问 DPU。一旦启用零信任模式,数据中心管理员应该完全通过Arm内核和/或BMC连接而不是通过主机来控制DPU。
比如Rshim、固件访问都受限。是DPU模式的一个加强版,主要是基于安全考虑,提高安全等级,不允许从主机侧访问和管理DPU,只允许从DPU上的ARM系统以及BMC来管理。
通过mlxprivhost -h
可以看到零信任模式下的一些限制:
--disable_rshim When TRUE, the host does not have an RSHIM function、to access the embedded CPU registers
--disable_tracer When TRUE, the host will not be allowed to own the Tracer
--disable_counter_rd When TRUE, the host will not be allowed to read Physical port counters
--disable_port_owner When TRUE, the host will not be allowed to be Port Owner
2.2.1 启动零信任模式的方式:
以下命令在DPU上执行:
mst start
sudo mlxprivhost -d /dev/mst/<device> r --disable_rshim --disable_tracer --disable_counter_rd --disable_port_owner
说明:
- r r表示restrict首先
- --disable_rshim 关闭rshim
- --disable_tracer 关闭追踪
- --disable_counter_rd 关闭硬件计数器
- –disable_port_owner 关闭端口所有权
注意点1:如果使用任何 --disable_* 标志,则需要正常关闭和电源循环。需要冷重启服务器(如果是机头机尾模式还需要重启网卡)
注意点2:如果Rshim被金融后重新启动或者任何–disable_* 标志被执行后再次重新启用,都需要冷重启服务器(如果是机头机尾模式还需要重启网卡)
2.2.2 关闭零信任模式的方式:
以下命令在DPU上执行:
mst start
sudo mlxprivhost -d /dev/mst/<device> p
将主机添加特权
mlxprivhost命令简介
可以看到设置为p之后,ARM和HOST都具有特权
2.3 NIC模式
NIC模式,就是ARM系统不直接管理DPU上的CX系列网卡,CX系列网卡作为一个独立的卡提供给HOST主机,从外部主机的角度来看,DPU 的行为与适配器卡完全相同。
注意:如果 DPU 在零信任模式下运行,需要请先返回 DPU 模式,然后再切换NIC模式
2.3.1 启动NIC模式
以下命令在DPU上执行:
-
- 配置
sudo mlxconfig -d /dev/mst/mt41692_pciconf0 -e q #查询是否在dpu模式。
## DPU模式的配置信息:INTERNAL_CPU_MODEL= EMBBEDDED_CPU(1) and EXP_ROM_UEFI_ARM_ENABLE = True (1)
# 开启NIC模式
sudo mlxconfig -d /dev/mst/mt41692_pciconf0 s INTERNAL_CPU_OFFLOAD_ENGINE=1
-
- 冷重启
冷重启设备(注意不要强制断电),如果是机头机尾模式还需要重启网卡
- 冷重启
2.3.1 关闭NIC模式
- 配置
以下命令在host上执行:因为nic模式下host是网卡拥有者。
sudo mlxconfig -d /dev/mst/mt41692_pciconf0 s INTERNAL_CPU_OFFLOAD_ENGINE=0
-
- 冷重启
冷重启设备(注意不要强制断电),如果是机头机尾模式还需要重启网卡
- 冷重启
另外还可以通过host的UEFI、ARM的UEFI、redfish详细参考官方教程。
另外BlueField2的设置NIC mode参数要复杂一些,详细参考 官方教程。
简要记录:
# BF2上开启NIC mode
$ mst start
$ mlxconfig -d /dev/mst/<device> s \
INTERNAL_CPU_PAGE_SUPPLIER=1 \
INTERNAL_CPU_ESWITCH_MANAGER=1 \
INTERNAL_CPU_IB_VPORT0=1 \
INTERNAL_CPU_OFFLOAD_ENGINE=1
重启
# BF2上关闭NIC mode
$ mst start
$ mlxconfig -d /dev/mst/<device> s \
INTERNAL_CPU_PAGE_SUPPLIER=0 \
INTERNAL_CPU_ESWITCH_MANAGER=0 \
INTERNAL_CPU_IB_VPORT0=0 \
INTERNAL_CPU_OFFLOAD_ENGINE=0
重启
3. 如何查看处于何种模式?
3.1 方法1:mlxconfig查看config参数
mst start
mlxconfig -d /dev/mst/mt41686_pciconf0 -e q |grep -E "INTERNAL_CPU_MODEL|EXP_ROM_UEFI_ARM_ENABLE"
参数说明:
- -e:显示默认和当前的配置(如果没有它只会显示next boot的配置)
-e|–enable_verbosity : Show default and current configurations.
- q:请求支持的配置(会将所有的配置都返回过来)
q[uery] : query supported configurations.
- INTERNAL_CPU_MODEL:值为EMBEDDED_CPU,表示1。表示启动启用内部CPU模式。
- EXP_ROM_UEFI_ARM_ENABLE: 导出 ROM_UEFI_ARM使能,表示把UEFI_ARM使能。 值为True表示启用。
实操:下图表示处于DPU模式,因为内部CPU启动,并且ARM的UEFI的ROM启用。
3.2 方法2:mlxprivhost的query命令
mlxprivhost -d /dev/mst/mt41686_pciconf0 q
q表示:query: Query current host configuration.
其他
BF3上设置模式
mlxconfig中INTERNAL的配置参数是用于配置DPU那边ARM服务器和相关软硬件单元的,总的有6个配置,详细参考兄弟篇
- INTERNAL_CPU_MODEL (1表示Embedded CPU模式,0表示separt分离主机模式详细参考),无论DPU模式还是NIC模式,
这个值都设置为1
,表示DPU中的芯片模式 - INTERNAL_CPU_PAGE_SUPPLIER 0表示在DPU端 1表示在host端也就是NIC模式
- INTERNAL_ESWITCH_MANAGER 0表示在DPU端 1表示在host端也就是NIC模式
- INTERNAL_IB_VPORT0 0表示在DPU端 1表示在host端也就是NIC模式
- INTERNAL_CPU_OFFLOAD_ENGINE 0表示在DPU端 1表示在host端也就是NIC模式
- INTERNAL_CPU_RSHIM 0表示关闭interl的cpu rshim,也就是使能主机上的rshmi;同理符合 0表示在DPU端 1表示在host端
如何查看处于某种模式
mlxconfig -d 1b:00.0 -e q | grep -i INTERNAL #注意修改busid
是否DPU模式主要看:INTERNAL_CPU_OFFLOAD_ENGINE是否为1,如果为1表示 内部cpu的卸载引擎在工作,也就是DPU模式
一般开启
NIC模式的时候,INTERNAL_CPU_MODEL是1,表示EMBEED_CPU模式,其他也全是1,其他的1表示使用主机端的,所以是NIC模式。
DPU模式的时候,INTERNAL_CPU_MODEL也是1表示内部CPU型号是EMBEED_CPU模式,其他也全是0,0表示用DPU上的,所以是DPU模式
另外为了方便以及升级INTERNAL_CPU_RSHIM建议常年设置为0,无论是否处于DPU模式,都开启rshim让HOST能够访问。所谓的HOST 开启rshim,实际是DPU里面的rshmin生效。前面提到过DPU模式下都用DPU这边的也就是0,NIC模式下都用host的也就是1。具体值是:
DPU模式:
- INTERNAL_CPU_MODEL 1 #固定为1 无论DPU HOST模式
- INTERNAL_CPU_PAGE_SUPPLIER 0 #0表示DPU端
- INTERNAL_ESWITCH_MANAGER 0 #0表示DPU端
- INTERNAL_IB_VPORT0 0 #0表示DPU端
- INTERNAL_CPU_OFFLOAD_ENGINE 0 #0表示DPU端
- INTERNAL_CPU_RSHIM 0 #0表示关闭interl的cpu rshim,也就是使能主机上的rshmi;同理符合 0表示在主机端 1表示在host端
NIC模式:
- INTERNAL_CPU_MODEL 1 #固定为1 无论DPU HOST模式
- INTERNAL_CPU_PAGE_SUPPLIER 1 #1表示HOST端
- INTERNAL_ESWITCH_MANAGER 1 #1表示HOST端
- INTERNAL_IB_VPORT0 1 #1表示HOST端
- INTERNAL_CPU_OFFLOAD_ENGINE 1 #1表示HOST端
- INTERNAL_CPU_RSHIM 0 #0表示关闭interl的cpu rshim,也就是使能主机上的rshmi;同理符合 0表示在主机端 1表示在host端
关于INTERNAL_CPU_RSHIM要特别注意下,NIC模式下也要打开rshim方便使用以及升级。
配置为DPU模式(全0只有一个1,技巧:0表示DPU,1表示HOST)
mlxconfig -d 1b:00.0 INTERNAL_CPU_MODEL=1 INTERNAL_CPU_PAGE_SUPPLIER=0 INTERNAL_ESWITCH_MANAGER=0 INTERNAL_IB_VPORT0=0 INTERNAL_CPU_OFFLOAD_ENGINE=0 INTERNAL_CPU_RSHIM=0
配置为NIC模式(全1只有一个0,技巧:0表示DPU,1表示HOST)
mlxconfig -d 1b:00.0 INTERNAL_CPU_MODEL=1 INTERNAL_CPU_PAGE_SUPPLIER=1 INTERNAL_ESWITCH_MANAGER=1 INTERNAL_IB_VPORT0=1 INTERNAL_CPU_OFFLOAD_ENGINE=1 INTERNAL_CPU_RSHIM=0
大部分都是1,表示用host的。 只有rshim为0表示nic那边也需要开启
4. 综述
本文根据官网教程详细分析了BlueField DPU 有3种工作模式特点,开关、查询方式,以及相关注意事项。通过本文熟悉后可以掌握如何灵活切换DPU的工作模式,以及相关的作用。另外以上相关配置本质都是影响了UEFI的参数,在DPU上,CX系列网卡、ARM、eswitch是独立的硬件单元。这些软件上纷繁复杂的命令配置,最终都是影响启动的时候加载的参数。启动后配置都需要下一次才生效。所以本质是配置这三个硬件的cmdline类似的方式。
另外不用担心修改配置后无法登录等问题,因为只要有BMC的网口能够通,都能通过这个进行操作。
参考链接:
https://docs.nvidia.com/networking/display/bluefielddpuosv460/modes+of+operation