In the optional Proxmox VE section, it will be further divided into PVE and VM.
In the remaining sections, the host refers to the server's operating system, regardless of whether it's running directly on hardware or within the VM of Proxmox VE.
DPU: The system running on the DPU.
BMC: The system on the board management controller of the DPU. This is an independent system that provides out-of-band management capabilities, separate from the DPU's main operating system.
Require a supplementary 8-pin ATX power supply connectivity available through the external power supply connector .
Do not link the CPU power cable to the BlueField-3 DPU PCIe ATX power connector, as their pin configurations differ. Using the CPU power cable in this manner is strictly prohibited and can potentially damage the BlueField-3 DPU. Please refer to External PCIe Power Supply Connector Pins for the external PCIe power supply pins.
Ensure that IOMMU (VT-d or AMD-Vi) is enabled in the BIOS/UEFI.
lscpu|grepVirtualization
AMD enables it by default, check it using the following command:
fordin/sys/kernel/iommu_groups/*/devices/*;don=${d#*/iommu_groups/*};n=${n%%/*};printf'IOMMU group %s '"$n";lspci-nns"${d##*/}";done
It works when you see multiple groups and you can check which devices are properly isolated (no other devices in the same group except for PCI bridges) for PCI passthrough.
If it cannot be enabled, modify the GRUB configuration. Locate GRUB_CMDLINE_LINUX_DEFAULT, and for AMD, set it to:
bashGRUB_CMDLINE_LINUX_DEFAULT="quiet iommu=pt"# for IntelGRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
Verify whether IOMMU is enabled (though it's uncertain if this method works) by using:
Configure VFIO: The BlueField card must be managed by vfio-pci to prevent the default driver from automatically loading.
nano/etc/modprobe.d/vfio.conf
# vendor deviceoptionsvfio-pciids=15b3:a2d2
# updateupdate-initramfs-u
# Not sure if this is neededsoftdepmlx5_corepre:vfio-pci
# Blacklist default driver (edit `/etc/modprobe.d/pve-blacklist.conf`)`blacklistmlx5_core`
Reboot the system and verify that the PCI device is bound to vfio-pci:
lspci-nnk-d1b4b:xxxx
VM Setup
Create or stop the target VM, add the following line in Proxmox Web UI or directly edit the VM configuration file (e.g. /etc/pve/qemu-server/<VMID>.conf), replace 0000:03:00.0 with the PCI address of your BlueField card.
hostpci0:0000:03:00.0,pcie=1
If the card has multiple functions (multi-function device), you can add hostpci1, hostpci2, etc. or add multifunction=on (adjust as needed).
Check the VM
lspci -nn | grep -i nvidia
Appendix
V100 Passthrough in Proxmox VE GUI: Datacenter > Resource Mappings > Add
DPU Passthrough in Proxmox VE GUI: VM > Hardware > Add > PCI Device
Strangely, Ubuntu 24.04's kernel binary package doesn't seem to include the macsec driver, causing mlx5_ib not being able to load. This may be observed by running sudo mst status -v, sudo dmesg | grep mlx5, and ibstatus.
2025/06/29 Update:
A easier solution seems to be:
sudoapt-getinstalllinux-modules-extra-$(uname-r)
Then we don't need to build the macsec driver ourselves.
To fix this issue, we build the macsec driver ourselves:
# Download macsec from kernel sourcewgethttps://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/drivers/net/macsec.c?h=v6.8-Omacsec.c
# Create Makefilecat<< 'EOF' > Makefileobj-m += macsec.oall: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modulesEOFmake
sudocpmacsec.ko/lib/modules/$(uname-r)/kernel/drivers/net
sudodepmod-a
# macsec module should be availablemodinfomacsec
sudomodprobemacsec
lsmod|grepmacsec
# Reload mlx5_core modulesudormmodmlx5_core
sudomodprobemlx5_core
Make sure to re-compile the macsec module if you encounter the following error when running sudo modprobe macsec:
modprobe: ERROR: could not insert 'macsec': Exec format error
# Note that this can also be done on DPUsudomlxconfig-d/dev/mst/mt41692_pciconf0setLINK_TYPE_P1=1sudomlxconfig-d/dev/mst/mt41692_pciconf0setLINK_TYPE_P2=1# Cold reboot the machine
Deploying DPU OS Using BFB from Host: [download] [ref]
# update DOCA-BlueField to 2.9.2wgethttps://content.mellanox.com/BlueField/BFBs/Ubuntu22.04/bf-bundle-2.9.2-31_25.02_ubuntu-22.04_prod.bfb
sudobfb-install--bfbbf-bundle-2.9.2-31_25.02_ubuntu-22.04_prod.bfb--rshim/dev/rshim0
# check firmwaresudomlxfwmanager--query
sudoflint-d/dev/mst/mt41692_pciconf0q
# update firmwaresudo/opt/mellanox/mlnx-fw-updater/mlnx_fw_updater.pl
# force update# sudo /opt/mellanox/mlnx-fw-updater/mlnx_fw_updater.pl --force-fw-update# Need to cold reboot the machine
Launch OpenSM on DPU for using InfiniBand on host side. Before this step, running ibstat on host will show State: Down and Physical state: LinkUp. Running ibstat on host will show State: Up after this step.
# Get the `Node GUID` from the corresponding CAibstat
# Run OpenSM with the Node GUID to recognize virtual ports on the host.sudoopensm-g<DPU_IB_NODE_GUID>-p10# If there's another OpenSM running on other hosts, make sure to set the priority higher than those.# In our case, we have another OpenSM with priority 0 in the subnet, so we set our priority to 10.
InfiniBand in DPU Mode
In DPU Mode, when operating with an InfiniBand network, OpenSM must be executed from the BlueField Arm side rather than the host side. Similarly, InfiniBand management tools such as sminfo, ibdev2netdev, and ibnetdiscover can only be used from the BlueField Arm side and are not accessible from the host side.
# Query for reset level required to load new firmwaresudomlxfwreset-d/dev/mst/mt*pciconf0q
Output of the query command:
Reset-levels:
0: Driver, PCI link, network link will remain up ("live-Patch") -Supported (default)
1: Only ARM side will not remain up ("Immediate reset"). -Not Supported
3: Driver restart and PCI reset -Supported
4: Warm Reboot -Supported
Reset-types (relevant only for reset-levels 1,3,4):
0: Full chip reset -Supported (default)
1: Phy-less reset (keep network port active during reset) -Not Supported
2: NIC only reset (for SoC devices) -Not Supported
3: ARM only reset -Not Supported
4: ARM OS shut down -Not Supported
Reset-sync (relevant only for reset-level 3):
0: Tool is the owner -Not supported
1: Driver is the owner -Supported (default)
Debugging:
# collect all debug message in hostsudo/usr/sbin/sysinfo-snapshot.py
# Check sensorsipmitoolsdr
# Power controlipmitoolchassispower
# chassis power Commands: status, on, off, cycle, reset, diag, soft# Check power statusipmitoolchassisstatus
# Control the BMC itselfipmitoolmc
Given another host connected with InfiniBand, you can ping it from the DPU:
On the other host host2:
ibstat# check `Base lid`sudoibping-S
On the DPU:
sudoibnetdiscover# You should see the same lidibstat# check `CA` and `Port`sudoibping-C<CA>-P<PORT>-L<LID>
# For an example:# sudo ibping -C mlx5_0 -P 1 -L 13
You can also switch the server and client roles by running ibping -S on the DPU and ibping -C <CA> -P <PORT> -L <LID> on the other host.