Parallel System Firmware Update#
Starting with nvfwupd
version 2.0.5, several systems can be updated simultaneously in parallel.
Sample Configuration for Parallel System Update#
The nvfwupd
tool enables parallel update of multiple systems using either the same or different
packages via the configuration YAML file.
This requires defining the update PACKAGE
, TARGET_PLATFORM
(as DGX
), UPDATE_PARAMETERS_TARGETS
,
and system credentials for each system. You can optionally add a user-defined SYSTEM_NAME
string to each target system to identify it in update outputs
UPDATE_PARAMETERS_TARGETS
requires the same parameters as the -s
special update file for
selecting update targets from the nvfwupd
command line.
For reference, set UPDATE_PARAMETERS_TARGETS
for each of the following:
{}
: for updating the entire motherboard tray{"Targets": ["/redfish/v1/UpdateService/FirmwareInventory/HGX_0"]}
: for updating the entire GPU tray{"Targets": ["/redfish/v1/UpdateService/FirmwareInventory/HostBMC_0"]}
: for updating only the host BMCAdjust
HostBMC_0
to a single update target as desired.
The following example shows a configuration file:
# Disable Sanitize Log optionally
# Disabling SANITIZE_LOG prints system IPs and user credentials to the logs and screen
SANITIZE_LOG: False
# Set ParallelUpdate to True
ParallelUpdate: True
# Multi target input. Value is list of dicts.
# Update BMC_IP, RF_USERNAME, and RF_PASSWORD credentials for each system
# Set TARGET_PLATFORM for each system to DGX
# Set PACKAGE to desired update file path for each system
# UPDATE_PARAMETERS_TARGETS set to desired update targets
Targets:
- BMC_IP: "1.1.1.1"
RF_USERNAME: "user"
RF_PASSWORD: "password"
TARGET_PLATFORM: "DGX"
PACKAGE: "nvfw_DGX_0005_250415.1.1_dbg-signed.fwpkg"
UPDATE_PARAMETERS_TARGETS: {}
SYSTEM_NAME: "DGX_SYSTEM_LAB_1"
- BMC_IP: "2.2.2.2"
RF_USERNAME: "username2"
RF_PASSWORD: "my_secondary_password"
TARGET_PLATFORM: "DGX"
PACKAGE: "nvfw_DGX_0005_250415.1.1_dbg-signed.fwpkg"
UPDATE_PARAMETERS_TARGETS: {}
SYSTEM_NAME: "EXTERNAL_DGX_SYSTEM"
Running nvfwupd Using the Configuration File#
You can display the component version information for each target system in parallel with the firmware
update file component version information by specifying the configuration file with the -c
flag
or the --config
option and the show_version
command. Because a SYSTEM_NAME
was added for
each system in the configuration file, the output will also indicate which system information is
displayed.
$ nvfwupd -c config.yaml show_version
Displaying version info for DGX_SYSTEM_LAB_1
System Model: DGXB200
Part number: 965-24387-0017-000
Serial number: 1662224610084
Packages: ['DGX_0005_250415.1.1']
Connection Status: Successful
Firmware Devices:
AP Name Sys Version Pkg Version Up-To-Date
------- ----------- ----------- ----------
CPLDMB_0 0.2.1.8 0.2.1.9 No
CPLDMID_0 0.2.1.1 0.2.1.4 No
CX7NIC_0 28.42.1000 32.43.2024 No
CX7NIC_1 28.42.1000 32.43.2024 No
CX7_0 28.42.1000 N/A No
CX7_1 28.42.1000 N/A No
CX7_2 28.42.1000 N/A No
CX7_3 28.42.1000 N/A No
CX7_4 28.42.1000 N/A No
CX7_5 28.42.1000 N/A No
CX7_6 28.42.1000 N/A No
CX7_7 28.42.1000 N/A No
EROT_BIOS_0 00.04.0052.0000_n00 00.04.0058.0000_n00 No
EROT_BMC_0 00.04.0052.0000_n00 00.04.0058.0000_n00 No
HGX_FW_BMC_0 25.02-1-ga18 N/A No
HGX_FW_ERoT_BMC_0 01.04.0018.0000_n04 N/A No
HGX_FW_ERoT_FPGA_0 01.04.0018.0000_n04 N/A No
HGX_FW_ERoT_NVLinkManagementNIC_0 01.04.0018.0000_n04 N/A No
HGX_FW_ERoT_NVSwitch_0 01.04.0018.0000_n04 N/A No
HGX_FW_ERoT_NVSwitch_1 01.04.0018.0000_n04 N/A No
HGX_FW_FPGA_0 1.85 N/A No
HGX_FW_GPU_SXM_1 97.00.9A.00.14 N/A No
HGX_FW_GPU_SXM_2 97.00.9A.00.14 N/A No
HGX_FW_GPU_SXM_3 97.00.9A.00.14 N/A No
HGX_FW_GPU_SXM_4 97.00.9A.00.14 N/A No
HGX_FW_GPU_SXM_5 97.00.9A.00.14 N/A No
HGX_FW_GPU_SXM_6 97.00.9A.00.14 N/A No
HGX_FW_GPU_SXM_7 97.00.9A.00.14 N/A No
HGX_FW_GPU_SXM_8 97.00.9A.00.14 N/A No
HGX_FW_NVLinkManagementNIC_0 28.45.0350 N/A No
HGX_FW_NVSwitch_0 35_2014_1680 N/A No
HGX_FW_NVSwitch_1 35_2014_1680 N/A No
HGX_FW_PCIeRetimer_0 2.20.21 N/A No
HGX_FW_PCIeRetimer_1 2.20.21 N/A No
HGX_FW_PCIeRetimer_2 2.20.21 N/A No
HGX_FW_PCIeRetimer_3 2.20.21 N/A No
HGX_FW_PCIeRetimer_4 2.20.21 N/A No
HGX_FW_PCIeRetimer_5 2.20.21 N/A No
HGX_FW_PCIeRetimer_6 2.20.21 N/A No
HGX_FW_PCIeRetimer_7 2.20.21 N/A No
HGX_InfoROM_GPU_SXM_1 G525.0230.00.02 N/A No
HGX_InfoROM_GPU_SXM_2 G525.0230.00.02 N/A No
HGX_InfoROM_GPU_SXM_3 G525.0230.00.02 N/A No
HGX_InfoROM_GPU_SXM_4 G525.0230.00.02 N/A No
HGX_InfoROM_GPU_SXM_5 G525.0230.00.02 N/A No
HGX_InfoROM_GPU_SXM_6 G525.0230.00.02 N/A No
HGX_InfoROM_GPU_SXM_7 G525.0230.00.02 N/A No
HGX_InfoROM_GPU_SXM_8 G525.0230.00.02 N/A No
HostBIOS_0 01.05.03 01.05.05 No
HostBMC_0 25.02.12 25.02.12 Yes
PCIeRetimer_0 2.07.19 2.07.19 Yes
PCIeRetimer_1 2.07.19 2.07.19 Yes
PCIeSwitch_0 0.0.7 0.0.7 Yes
PCIeSwitch_1 1.0.7 1.0.7 Yes
PSU_0 0204.0201.0204 0204.0201.0204 Yes
PSU_1 0204.0201.0204 0204.0201.0204 Yes
PSU_2 0204.0201.0204 0204.0201.0204 Yes
PSU_3 0204.0201.0204 0204.0201.0204 Yes
PSU_4 0204.0201.0204 0204.0201.0204 Yes
PSU_5 0204.0201.0204 0204.0201.0204 Yes
------------------------------------------------------------------------------------------------------------------------
Displaying version info for EXTERNAL_DGX_SYSTEM
System Model: DGXB200
Part number: 965-24387-0017-000
Serial number: 1234567890123
Packages: ['DGX_0005_250415.1.1']
Connection Status: Successful
Firmware Devices:
AP Name Sys Version Pkg Version Up-To-Date
------- ----------- ----------- ----------
CPLDMB_0 0.2.1.9 0.2.1.9 Yes
CPLDMID_0 0.2.1.3 0.2.1.4 No
CX7NIC_0 32.43.2024 32.43.2024 Yes
CX7NIC_1 32.43.2024 32.43.2024 Yes
CX7_0 28.43.2026 N/A No
CX7_1 28.43.2026 N/A No
CX7_2 28.43.2026 N/A No
CX7_3 28.43.2026 N/A No
CX7_4 28.43.2026 N/A No
CX7_5 28.43.2026 N/A No
CX7_6 28.43.2026 N/A No
CX7_7 28.43.2026 N/A No
EROT_BIOS_0 00.04.0058.0000_n00 00.04.0058.0000_n00 Yes
EROT_BMC_0 00.04.0058.0000_n00 00.04.0058.0000_n00 Yes
HGX_FW_BMC_0 25.02-1-ga19 N/A No
HGX_FW_ERoT_BMC_0 01.04.0018.0000_n04 N/A No
HGX_FW_ERoT_FPGA_0 01.04.0018.0000_n04 N/A No
HGX_FW_ERoT_NVLinkManagementNIC_0 01.04.0018.0000_n04 N/A No
HGX_FW_ERoT_NVSwitch_0 01.04.0018.0000_n04 N/A No
HGX_FW_ERoT_NVSwitch_1 01.04.0018.0000_n04 N/A No
HGX_FW_FPGA_0 1.87 N/A No
HGX_FW_GPU_SXM_1 97.00.9A.00.0F N/A No
HGX_FW_GPU_SXM_2 97.00.9A.00.0F N/A No
HGX_FW_GPU_SXM_3 97.00.9A.00.0F N/A No
HGX_FW_GPU_SXM_4 97.00.9A.00.0F N/A No
HGX_FW_GPU_SXM_5 97.00.9A.00.0F N/A No
HGX_FW_GPU_SXM_6 97.00.9A.00.0F N/A No
HGX_FW_GPU_SXM_7 97.00.9A.00.0F N/A No
HGX_FW_GPU_SXM_8 97.00.9A.00.0F N/A No
HGX_FW_NVLinkManagementNIC_0 28.42.1282 N/A No
HGX_FW_NVSwitch_0 35_2014_1680 N/A No
HGX_FW_NVSwitch_1 35_2014_1680 N/A No
HGX_FW_PCIeRetimer_0 2.20.20 N/A No
HGX_FW_PCIeRetimer_1 2.20.20 N/A No
HGX_FW_PCIeRetimer_2 2.20.20 N/A No
HGX_FW_PCIeRetimer_3 2.20.20 N/A No
HGX_FW_PCIeRetimer_4 2.20.20 N/A No
HGX_FW_PCIeRetimer_5 2.20.20 N/A No
HGX_FW_PCIeRetimer_6 2.20.20 N/A No
HGX_FW_PCIeRetimer_7 2.20.20 N/A No
HGX_InfoROM_GPU_SXM_1 G525.0220.00.03 N/A No
HGX_InfoROM_GPU_SXM_2 G525.0220.00.03 N/A No
HGX_InfoROM_GPU_SXM_3 G525.0220.00.03 N/A No
HGX_InfoROM_GPU_SXM_4 G525.0220.00.03 N/A No
HGX_InfoROM_GPU_SXM_5 G525.0220.00.03 N/A No
HGX_InfoROM_GPU_SXM_6 G525.0220.00.03 N/A No
HGX_InfoROM_GPU_SXM_7 G525.0220.00.03 N/A No
HGX_InfoROM_GPU_SXM_8 G525.0220.00.03 N/A No
HostBIOS_0 01.06.07 01.05.05 Yes
HostBMC_0 25.04.22 25.02.12 Yes
PCIeRetimer_0 2.07.19 2.07.19 Yes
PCIeRetimer_1 2.07.19 2.07.19 Yes
PCIeSwitch_0 0.0.7 0.0.7 Yes
PCIeSwitch_1 1.0.7 1.0.7 Yes
PSU_0 0204.0201.0204 0204.0201.0204 Yes
PSU_1 0204.0201.0204 0204.0201.0204 Yes
PSU_2 0204.0201.0204 0204.0201.0204 Yes
PSU_3 0204.0201.0204 0204.0201.0204 Yes
PSU_4 0204.0201.0204 0204.0201.0204 Yes
PSU_5 0204.0201.0204 0204.0201.0204 Yes
------------------------------------------------------------------------------------------------------------------------
Error Code: 0
You can update several target systems in parallel by specifying the configuration file with the
-c
flag or --config
option and the update_fw
command. Because a SYSTEM_NAME
was added
for each system in the configuration file, the output will also indicate which system information is
displayed.
$ nvfwupd -c config.yaml update_fw
Updating ip address: ip=1.1.1.1
Updating ip address: ip=2.2.2.2
FW package: ['nvfw_DGX_0005_250415.1.1_dbg-signed.fwpkg']
FW package: ['nvfw_DGX_0005_250415.1.1_dbg-signed.fwpkg']
{"@odata.type": "#UpdateService.v1_11_0.UpdateService", "Messages": [{"@odata.type": "#Message.v1_0_8.Message", "Message": "A new task /redfish/v1/TaskService/Tasks/2 was created.", "MessageArgs": ["/redfish/v1/TaskService/Tasks/2"], "MessageId": "Task.1.0.New", "Resolution": "None", "Severity": "OK"}, {"@odata.type": "#Message.v1_0_8.Message", "Message": "The action UpdateService.MultipartPush was submitted to do firmware update.", "MessageArgs": ["UpdateService.MultipartPush"], "MessageId": "UpdateService.1.0.StartFirmwareUpdate", "Resolution": "None", "Severity": "OK"}]}
FW update started, Task Id: 2
------------------------------------------------------------------------------------------------------------------------
{"@odata.type": "#UpdateService.v1_11_0.UpdateService", "Messages": [{"@odata.type": "#Message.v1_0_8.Message", "Message": "A new task /redfish/v1/TaskService/Tasks/8 was created.", "MessageArgs": ["/redfish/v1/TaskService/Tasks/8"], "MessageId": "Task.1.0.New", "Resolution": "None", "Severity": "OK"}, {"@odata.type": "#Message.v1_0_8.Message", "Message": "The action UpdateService.MultipartPush was submitted to do firmware update.", "MessageArgs": ["UpdateService.MultipartPush"], "MessageId": "UpdateService.1.0.StartFirmwareUpdate", "Resolution": "None", "Severity": "OK"}]}
FW update started, Task Id: 8
------------------------------------------------------------------------------------------------------------------------
Printing Task status for IP: 1.1.1.1
Printing Task status for system: DGX_SYSTEM_LAB_1
------------------------------------------------------------------------------------------------------------------------
Task Info for Id: 8
StartTime: 2025-04-25T00:07:01+00:00
TaskState: Running
PercentComplete: 0
TaskStatus: OK
EndTime: 2025-04-25T00:06:58+00:00
Overall Task Status: {
"@odata.context": "/redfish/v1/$metadata#Task.Task",
"@odata.etag": "\"1745539617\"",
"@odata.id": "/redfish/v1/TaskService/Tasks/8",
"@odata.type": "#Task.v1_4_2.Task",
"Description": "Task for Update Service Task",
"EndTime": "2025-04-25T00:06:58+00:00",
"HidePayload": false,
"Id": "8",
"Messages": [
{
"@odata.type": "#Message.v1_0_8.Message",
"Message": "Image '/var/tmp/bundles/nvfw_DGX_0005_250415.1.1_dbg-signed.fwpkg' is being transferred to 'HostBMC_0'.",
"MessageArgs": [
"/var/tmp/bundles/nvfw_DGX_0005_250415.1.1_dbg-signed.fwpkg",
"HostBMC_0"
],
"MessageId": "Update.1.0.TransferringToComponent",
"Resolution": "None.",
"Severity": "OK"
},
{
"@odata.type": "#Message.v1_0_8.Message",
"Message": "Task /redfish/v1/UpdateService/upload is running normally.",
"MessageArgs": [
"/redfish/v1/UpdateService/upload"
],
"MessageId": "Task.1.0.Running",
"Resolution": "None",
"Severity": "OK"
}
],
"Name": "Update Service Task",
"PercentComplete": 0,
"StartTime": "2025-04-25T00:07:01+00:00",
"TaskState": "Running",
"TaskStatus": "OK"
}
Update is still running.
Printing Task status for IP: 2.2.2.2
Printing Task status for system: EXTERNAL_DGX_SYSTEM
------------------------------------------------------------------------------------------------------------------------
Task Info for Id: 2
StartTime: 2025-04-25T08:06:22+08:00
TaskState: Running
PercentComplete: 57
TaskStatus: Warning
EndTime: 1970-01-01T08:00:00+08:00
Overall Task Status: {
"@odata.context": "/redfish/v1/$metadata#Task.Task",
"@odata.etag": "\"1745539580\"",
"@odata.id": "/redfish/v1/TaskService/Tasks/2",
"@odata.type": "#Task.v1_4_2.Task",
"Description": "Task for Update Service Task",
"EndTime": "1970-01-01T08:00:00+08:00",
"HidePayload": false,
"Id": "2",
"Messages": [
{
"@odata.type": "#Message.v1_0_8.Message",
"Message": "Image '/var/tmp/bundles/nvfw_DGX_0005_250415.1.1_dbg-signed.fwpkg' is being transferred to 'HostBMC_0'.",
"MessageArgs": [
"/var/tmp/bundles/nvfw_DGX_0005_250415.1.1_dbg-signed.fwpkg",
"HostBMC_0"
],
"MessageId": "Update.1.0.TransferringToComponent",
"Resolution": "None.",
"Severity": "OK"
},
{
"@odata.type": "#Message.v1_0_8.Message",
"Message": "Task /redfish/v1/UpdateService/upload is running normally.",
"MessageArgs": [
"/redfish/v1/UpdateService/upload"
],
"MessageId": "Task.1.0.Running",
"Resolution": "None",
"Severity": "OK"
}
],
"Name": "Update Service Task",
"PercentComplete": 0,
"StartTime": "2025-04-25T00:07:01+00:00",
"TaskState": "Running",
"TaskStatus": "OK"
}
Update is still running.
...
{
"@odata.type": "#Message.v1_0_8.Message",
"Message": "Device 'CPLDMID_0' successfully updated with image '0.2.1.4'.",
"MessageArgs": [
"CPLDMID_0",
"0.2.1.4"
],
"MessageId": "Update.1.0.UpdateSuccessful",
"Resolution": "None.",
"Severity": "OK"
},
{
"@odata.type": "#Message.v1_0_8.Message",
"Message": "Task /redfish/v1/UpdateService/upload has completed.",
"MessageArgs": [
"/redfish/v1/UpdateService/upload"
],
"MessageId": "Task.1.0.Completed",
"Resolution": "None",
"Severity": "OK"
}
],
"Name": "Update Service Task",
"PercentComplete": 100,
"StartTime": "2025-04-25T00:07:01+00:00",
"TaskState": "Completed",
"TaskStatus": "OK"
}
Update is successful.
After the update, you must perform an AC cycle on each system for the changes to take effect.