NVIDIA BlueField Modes of Operation
Introduction
The NVIDIA® BlueField® networking platform (DPU or SuperNIC) supports several modes of operation:
- DPU mode: Also known as embedded function (ECPF) ownership, where the embedded Arm system controls the NIC resources and data path. This is the default mode for the BlueField DPU.
- Zero-trust mode: An extension of ECPF ownership with additional restrictions on the host side, enhancing security by preventing host system administrator access to BlueField.
- NIC mode: BlueField behaves like a standard adapter card from the perspective of the external host.
Note: The default mode of operation for the BlueField DPU is DPU mode. The default mode of operation for the BlueField SuperNIC is NIC mode.
DPU Mode
DPU mode, also known as embedded CPU function ownership (ECPF) mode, is the default mode for the BlueField DPU. In this mode, the NIC resources and functionality are owned and controlled by the embedded Arm subsystem. All network communication to the host flows through a virtual switch control plane hosted on the Arm cores before proceeding to the host. The BlueField acts as a trusted function managed by the data center and host administrator for tasks such as loading network drivers, resetting interfaces, bringing interfaces up and down, updating firmware, and changing the mode of operation.
A network function is still exposed to the host, but with limited privileges. Specifically:
- The driver on the host side can only be loaded after the driver on the BlueField has loaded and completed NIC configuration.
- All ICM (Interface Configuration Memory) is allocated by the ECPF and resides in the BlueField's memory.
- The ECPF controls and configures the NIC embedded switch, ensuring that traffic to and from the host (BlueField) interface always lands on the Arm side.
A diagram illustrates the HOST and ARM sides with interfaces PFO, PF1, ECPFO, ECPF1, and an eSwitch, showing the traffic offload and slow path.
When the server and BlueField are initiated, networking to the host is blocked until the virtual switch on the BlueField is loaded. Once loaded, traffic to the host is allowed by default. Traffic can be passed to the host interface either by using representors to forward traffic or by pushing rules to the embedded switch for offload.
In DPU mode, OpenSM and management tools (e.g., sminfo, ibdev2netdev, ibnetdiscover) must be run from the BlueField side.
Zero-trust Mode
Zero-trust mode is a specialization of DPU mode that implements an additional layer of security. It prevents the host system administrator from accessing BlueField from the host. Data center administrators should control BlueField entirely through the Arm cores and/or BMC connection instead of the host. This mode can restrict host operations that might compromise BlueField, such as:
- Port ownership: The host cannot assign itself as port owner.
- Hardware counters: The host does not have access to hardware counters.
- Tracer functionality is blocked.
- RShim interface is blocked.
- Firmware flash is restricted.
Enabling Zero-trust Mode
To enable host restriction:
- Start the MST service.
- Set zero-trust mode from the Arm side by running:
$ sudo mlxprivhost -d /dev/mst/
r --disable_rshim --disable_tracer --disable_counter_rd --disable_port_owner - If no
--disable_*
flags are used, perform a BlueField system reboot. - If any
--disable_*
flags are used, perform a BlueField system-level reset.
Disabling Zero-trust Mode
To disable host restriction:
- Set the mode to privileged by running:
$ sudo mlxprivhost -d /dev/mst/
p - Apply configuration.
- If host restriction was not applied using any
--disable_*
flags, perform a BlueField system reboot. - If host restriction was applied using any
--disable_*
flags, perform a BlueField system-level reset.
NIC Mode
In NIC mode, BlueField behaves exactly like an adapter card from the perspective of the external host.
Note: The following instructions presume BlueField is operating in DPU mode. If BlueField is operating in zero-trust mode, please return to DPU mode before proceeding.
Note: The following notes are relevant for updating the BFB bundle in NIC mode:
- During BFB Bundle installation, Linux is expected to boot to upgrade NIC firmware and BMC software.
- During BFB Bundle installation, the mlx5 driver may show error messages on the x86 host. These can be ignored as they are resolved by a post-installation power cycle.
- It is mandatory to power cycle the host after installation for changes to take effect.
- As Linux boots during BFB Bundle installation, the mlx5 core driver may timeout on the BlueField Arm.
NIC Mode for BlueField-3
Note: When BlueField-3 is configured to operate in NIC mode, Arm OS will not boot.
NIC mode for BlueField-3 saves power, improves device performance, and reduces the host memory footprint.
Configuring NIC Mode on BlueField-3 from Linux
Enabling NIC Mode on BlueField-3 from Linux
Before moving to NIC mode, ensure you are in DPU mode by running:
host/bf> sudo mlxconfig -d /dev/mst/mt41692_pciconf0 -e q
The output should show INTERNAL_CPU_MODEL=EMBEDDED_CPU(1)
and EXP_ROM_UEFI_ARM_ENABLE = True (1)
.
To enable NIC mode from DPU mode:
- Run the following on the host or Arm:
host/bf> sudo mlxconfig -d /dev/mst/mt41692_pciconf0 s INTERNAL_CPU_OFFLOAD_ENGINE=1
- Perform a BlueField system-level reset for the mlxconfig settings to take effect.
Disabling NIC Mode on BlueField-3 from Linux
To return to DPU mode from NIC mode:
- Run the following on the host:
host> sudo mlxconfig -d /dev/mst/mt41692_pciconf0 s INTERNAL_CPU_OFFLOAD_ENGINE=0
- Perform a BlueField system-level reset for the mlxconfig settings to take effect.
Configuring NIC Mode on BlueField-3 from Host BIOS HII UEFI Menu
Info: The screenshots in this section are examples only and may vary depending on the vendor of your specific host.
- Select the network device that presents the uplink (i.e., select the device with the uplink MAC address).
- Select "BlueField Internal Cpu Configuration".
A screenshot shows the "Main Configuration Page" with options like "Firmware Image Properties", "NIC Configuration", "iSCSI Configuration", "Power Configuration", and "Device Level Configuration". Under "Device Level Configuration", "BlueField Internal Cpu Configuration" is selected.
Details shown include "Device Name: Nvidia Network Adapter", "Chip Type: BlueField-3", "PCI Device ID: A2DC", "Link Status:
- To enable NIC mode, set "InternalCpu Offload Engine" to "Disabled".
- To switch back to DPU mode, set "InternalCpu Offload Engine" to "Enabled".
Another screenshot shows the "BlueField InternalCpu Configuration" screen with fields like "InternalCpu Model", "InternalCpu Page Supplier", "InternalCpu Eswitch Manager", "InternalCpu IB Uporto", and "InternalCpu Offload Engine".
The "InternalCpu Model" is set to <EMBEDDED CPU>
, and "InternalCpu Offload Engine" is set to <Disabled>
. A description states: "Defines whether the Internal CPU is used as an offload engine".
Configuring NIC Mode on BlueField-3 from Arm UEFI
- Access the Arm UEFI menu by pressing the Esc button twice.
- Select "Device Manager".
- Select "System Configuration".
- Select "BlueField Modes".
- Set the "NIC Mode" field to
NicMode
to enable NIC mode.
A table shows "Internal CPU Model:
Info: Configuring Unavailable is inapplicable.
- Exit "BlueField Modes" and "System Configuration", ensuring settings are saved. Exit the UEFI setup using the 'reset' option. The configuration is not yet applied, and BlueField is expected to boot normally in DPU mode.
- Perform a BlueField system-level reset to change to NIC mode.
Configuring NIC Mode on BlueField-3 Using Redfish
Run the following from the BlueField BMC:
- Get the current BIOS attributes:
sudo curl -k -u root:'<password>' -H 'content-type: application/json' -X GET https://<bmc_ip>/redfish/v1/Systems/Bluefield/Bios/
- Change BlueField mode from DpuMode to NicMode:
curl -k -u root:'<password>' -H 'content-type: application/json' -d '{ "Attributes": { "NicMode": "NicMode" } }' -X PATCH https://<bmc_ip>/redfish/v1/Systems/Bluefield/Bios/Settings
Info: To revert back to DPU mode, run:
curl -k -u root:'<password>' -H 'content-type: application/json' -d '{ "Attributes": { "NicMode": "DpuMode" } }' -X PATCH https://<bmc_ip>/redfish/v1/Systems/Bluefield/Bios/Settings
- Verify that the BMC has registered the new settings:
curl -k -u root:'<password>' -H 'content-type: application/json' -X GET https://<bmc_ip>/redfish/v1/Systems/Bluefield/Bios/Settings
- Issue a software reset and then power cycle the host for the change to take effect.
- Verify the mode is changed:
curl -k -u root:'<password>' -H 'content-type: application/json' -X GET https://<bmc_ip>/redfish/v1/Systems/Bluefield/Oem/Nvidia
Note: To retrieve the mode via BIOS attributes, another BlueField software reset is required before running the command:
curl -k -u root:'<password>' -H 'content-type: application/json' -X GET https://<bmc_ip>/redfish/v1/Systems/Bluefield/Bios
Updating Firmware Components in BlueField-3 NIC Mode
Once in NIC mode, updating ATF and UFEI can be done using the standard *.bfb image:
#bfb-install --bfb <BlueField-BSP>.bfb --rshim rshim0
NIC Mode for BlueField-2
In this mode, the ECPFs on the Arm side are not functional, but the user can still access the Arm system and update mlxconfig options.
Note: When NIC mode is enabled, the drivers and services on the Arm are no longer functional.
Configuring NIC Mode on BlueField-2 from Linux
Enabling NIC Mode on BlueField-2 from Linux
To enable NIC mode from DPU mode:
- Run the following from the x86 host side:
$ 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
Note: To restrict RShim PF (optional), make sure to configure
INTERNAL_CPU_RSHIM=1
as part of the mlxconfig command.- Perform a BlueField system-level reset to load the new configuration.
Info: Refer to the troubleshooting section of the guide for a step-by-step procedure.
Note: Multi-host is not supported when BlueField is operating in NIC mode.
Disabling NIC Mode on BlueField-2 from Linux
To change from NIC mode back to DPU mode:
- Install and start the RShim driver on the host.
- Disable NIC mode by running:
$ 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
Note: If
INTERNAL_CPU_RSHIM=1
, then make sure to configureINTERNAL_CPU_RSHIM=0
as part of the mlxconfig command.- Perform a BlueField system reboot for the mlxconfig settings to take effect.
Configuring NIC Mode on BlueField-2 from Arm UEFI
Follow the same instructions in section "Configuring NIC Mode on BlueField-3 from Arm UEFI".
Configuring NIC Mode on BlueField-2 Using Redfish
Follow the same instructions in section "Configuring NIC Mode on BlueField-3 Using Redfish".
Separated Host Mode (Obsolete)
Warning: This BlueField mode of operation is obsolete. Please do not use it!
In separated host mode, a network function is assigned to both the Arm cores and the host cores. The ports/functions are symmetric, with traffic sent to both physical functions simultaneously. Each function has its own MAC address, allowing communication between them and enabling Ethernet and RDMA over Converged Ethernet (RoCE) traffic. There is an equal bandwidth share between the two functions.
The two functions have no dependency and can operate simultaneously or separately. The host can communicate with the embedded function as two separate hosts, each with its own MAC and IP addresses.
In separated host mode, the host administrator is a trusted actor who can perform all configuration and management actions related to either network function.
A diagram illustrates the HOST and ARM sides with interfaces PFO, PF1, ECPFO, ECPF1, and an eSwitch.
This mode enables the operational model of a SmartNIC without a separated control plane. The Arm control plane can be used for different functions but has no control over host steering functions.
Limitations of this mode:
- Switchdev (virtual switch offload) mode is not supported on either function.
- SR-IOV is only supported on the host side.
To configure separated host mode from DPU mode:
- Enable separated host mode by running:
$ mst start $ mlxconfig -d /dev/mst/<device> s INTERNAL_CPU_MODEL=0
- Power cycle.
- Verify configuration by running:
$ mst start $ mlxconfig -d /dev/mst/<device> q | grep -i model
- Remove OVS bridges configuration from the Arm-side by running:
$ ovs-vsctl list-br | xargs -r -l ovs-vsctl del-br