DPUFlavor
DPUFlavor is a Kubernetes Custom Resource Definition (CRD) that defines configuration templates for DPU system-level settings. It serves as a blueprint that specifies how DPUs should be configured during provisioning, including kernel parameters, firmware settings, OVS configuration, network interfaces, and resource allocation.
API Group:
provisioning.dpu.nvidia.comAPI Version:
v1alpha1Kind:
DPUFlavor
Immutable Configuration: Once created, the DPUFlavor spec cannot be modified to ensure consistency across DPU deployments
Comprehensive System Configuration: Covers all aspects of DPU system configuration from boot parameters to runtime settings
Resource Management: Defines resource requirements and allocation policies
Multiple DPU Modes: Supports both standard DPU mode and zero-trust mode
Template Reusability: Can be applied to multiple DPUs for consistent configuration
DPUFlavorSpec
Field | Type | Description |
| All the parameters will be set in | |
| Kernel sysctl parameters which will be stored in | |
| []NVConfig | The device configuration which will be applied by |
| Open vSwitch configuration which will be executed via systemd service | |
| []string | Parameters for bf.cfg file |
| Custom configuration files. Users can use this configuration to overwrite files in the DPU file system or add content to existing files | |
| ContainerdConfig contains the configuration for containerd | |
| ResourceList | Minimum resources needed for BFB installation |
| ResourceList | Resources reserved for system use |
| DPU operation mode (default: | |
| Host-side network interface configuration |
DPUFlavorGrub
Field | Type | Description |
| []string | Kernel boot parameters to be set in grub configuration |
DPUFlavorSysctl
Field | Type | Description |
| []string | Sysctl parameters to be applied |
NVConfig
Field | Type | Description |
| *string | Target device (use |
| []string | Firmware parameters to set |
| *bool | Whether host power cycle is needed after applying config(Deprecated) |
IB Mode to Ethernet Mode Configuration
Example for single port DPU:
nvconfig:
- device: '*'
parameters:
- LINK_TYPE_P1=ETH
Example for dual port DPU:
nvconfig:
- device: '*'
parameters:
- LINK_TYPE_P1=ETH
- LINK_TYPE_P2=ETH
DPUFlavorOVS
Field | Type | Description |
| string | Raw OVS configuration script |
ConfigFile
Field | Type | Description |
| string | File path on the DPU |
| File operation type ( | |
| string | File content |
| string | File permissions (e.g., |
ContainerdConfig
Field | Type | Description |
| string | Container registry endpoint |
NetworkInterfaceConfig
Field | Type | Description |
| *int32 | MTU value (1280-9216) |
| *bool | Enable DHCP configuration |
| int32 | Port identifier (0 or 1) |
| Port-specific NVConfig settings |
DpuModeType
dpu: Standard DPU modezero-trust: Zero-trust security mode
DPUFlavorFileOp
override: Replace file content entirelyappend: Append to existing file content
DPU Resources
The dpuResources field specifies the minimum resources required for a BFB with this flavor to be installed on a DPU. Using this field, the controller can understand if that flavor can be installed on a particular DPU. It should be set to the total amount of resources the system needs + the resources that should be made available for DPUServices to consume:
dpuResources:
cpu: 16
memory: 16Gi
nvidia.com/sf: 20
System Reserved Resources
The systemReservedResources field indicates resources consumed by the system (OS, OVS, DPF system etc) and are not made available for DPUServices to consume. DPUServices can consume the difference between dpuResources and systemReservedResources. This field must not be specified if dpuResources are not specified.:
systemReservedResources:
cpu: 4
memory: 4Gi
nvidia.com/sf: 4
The difference between dpuResources and systemReservedResources is available for DPUServices.
HBN-OVN DPUFlavor
apiVersion: provisioning.dpu.nvidia.com/v1alpha1
kind: DPUFlavor
metadata:
name: hbn-ovn
namespace: dpf-operator-system
spec:
bfcfgParameters:
- UPDATE_ATF_UEFI=yes
- UPDATE_DPU_OS=yes
- WITH_NIC_FW_UPDATE=yes
configFiles:
- operation: override
path: /etc/mellanox/mlnx-bf.conf
permissions: "0644"
raw: |
ALLOW_SHARED_RQ="no"
IPSEC_FULL_OFFLOAD="no"
ENABLE_ESWITCH_MULTIPORT="yes"
- operation: override
path: /etc/mellanox/mlnx-ovs.conf
permissions: "0644"
raw: |
CREATE_OVS_BRIDGES="no"
OVS_DOCA="yes"
- operation: override
path: /etc/mellanox/mlnx-sf.conf
permissions: "0644"
raw: ""
dpuMode: dpu
grub:
kernelParameters:
- console=hvc0
- console=ttyAMA0
- earlycon=pl011,0x13010000
- fixrttc
- net.ifnames=0
- biosdevname=0
- iommu.passthrough=1
- cgroup_no_v1=net_prio,net_cls
- hugepagesz=2048kB
- hugepages=3072
hostNetworkInterfaceConfigs:
- dhcp: true
mtu: 1500
portNumber: 0
nvconfig:
- device: '*'
parameters:
- PF_BAR2_ENABLE=0
- PER_PF_NUM_SF=1
- PF_TOTAL_SF=20
- PF_SF_BAR_SIZE=10
- NUM_PF_MSIX_VALID=0
- PF_NUM_PF_MSIX_VALID=1
- PF_NUM_PF_MSIX=228
- INTERNAL_CPU_MODEL=1
- INTERNAL_CPU_OFFLOAD_ENGINE=0
- SRIOV_EN=1
- NUM_OF_VFS=46
- LAG_RESOURCE_ALLOCATION=1
ovs:
rawConfigScript: |
_ovs-vsctl() {
ovs-vsctl --no-wait --timeout 15 "$@"
}
_ovs-vsctl set Open_vSwitch . other_config:doca-init=true
_ovs-vsctl set Open_vSwitch . other_config:dpdk-max-memzones=50000
_ovs-vsctl set Open_vSwitch . other_config:hw-offload=true
_ovs-vsctl set Open_vSwitch . other_config:pmd-quiet-idle=true
_ovs-vsctl set Open_vSwitch . other_config:max-idle=20000
_ovs-vsctl set Open_vSwitch . other_config:max-revalidator=5000
_ovs-vsctl set Open_vSwitch . other_config:ctl-pipe-size=1024
_ovs-vsctl --if-exists del-br ovsbr1
_ovs-vsctl --if-exists del-br ovsbr2
_ovs-vsctl --may-exist add-br br-sfc
_ovs-vsctl set bridge br-sfc datapath_type=netdev
_ovs-vsctl set bridge br-sfc fail_mode=secure
_ovs-vsctl --may-exist add-br br-hbn
_ovs-vsctl set bridge br-hbn datapath_type=netdev
_ovs-vsctl set bridge br-hbn fail_mode=secure
_ovs-vsctl --may-exist add-port br-sfc p0
_ovs-vsctl set Interface p0 type=dpdk
_ovs-vsctl set Interface p0 mtu_request=9216
_ovs-vsctl set Port p0 external_ids:dpf-type=physical
_ovs-vsctl set Open_vSwitch . external-ids:ovn-bridge-datapath-type=netdev
_ovs-vsctl --may-exist add-br br-ovn
_ovs-vsctl set bridge br-ovn datapath_type=netdev
_ovs-vsctl br-set-external-id br-ovn bridge-id br-ovn
_ovs-vsctl br-set-external-id br-ovn bridge-uplink puplinkbrovntobrsfc
_ovs-vsctl --may-exist add-port br-ovn pf0hpf
_ovs-vsctl set Interface pf0hpf type=dpdk
_ovs-vsctl set Interface pf0hpf mtu_request=9216
Resource Planning: Always specify
dpuResourcesandsystemReservedResourcesto ensure proper resource allocationImmutability: Plan your configuration carefully as DPUFlavor specs cannot be modified after creation
Testing: Test DPUFlavor configurations in development environments before production deployment
Documentation: Document custom configurations and their purposes for team understanding
IB Mode Conversion: For DPUs initially in InfiniBand (IB) mode, always include
LINK_TYPE_P1=2in nvconfig parameters to convert to Ethernet mode. For dual port DPUs, also addLINK_TYPE_P2=2