Showing posts with label Redfish. Show all posts
Showing posts with label Redfish. Show all posts

Sunday, August 9, 2026

Working with GPUs - Part9 - Power shelves in OCP ORV3 High Power Rack

The ORV3 HPR Power Shelf is a standardized, ultra-high-density power distribution system designed under the Open Compute Project (OCP) framework. Essentially, it acts as a centralized power hub for a server rack. Instead of every individual server having its own power supply unit (PSU) throwing off heat and hogging space, the power shelf sits in the rack, takes high-voltage AC utility power and converts it into a single, massive pool of 48V DC power. This power is then delivered to the entire rack via a heavy-duty vertical copper backplane (busbar).


AI and LLM workloads are notoriously bursty; a GPU cluster can spike from an idle state to maximum power draw in microseconds. The ORV3 HPR power shelf features high pulse-load capabilities (often supporting up to 150% load capacity for transient windows) and active current sharing. This smooths out dynamic loading and prevents voltage sags without tripping upstream data center breakers. Equipped with an integrated Power Management Controller (PMC), these shelves expose real-time metrics, black-box fault logging, and granular thermal monitoring via standard APIs like DMTF Redfish over Gigabit Ethernet. This allows infrastructure teams to optimize power provisioning, balance loads accurately, and proactively manage hot spots in the data center.

Power shelf is a group c, third party component present in Nvidia GB200/300 NVL72 rack. 

  • Currently Nvidia supports Delta and LiteOn power shelves. 
  • They are 33KW EIA 1 RU (6 x 5.5KW PSUs) units with additional bulk capacitors and 60A whip support. 
  • Nvidia GB300 NVL72 MGX rack has single bus bar in the middle, and total 6 power shelves located at top and bottom of the rack. 
  • The rack power consumption is approximately 120kW, and the 6 power shelves will provide N+2 redundancy.

Power Shelf firmware

  • PMC firmware is based on Open BMC.
  • The firmware directly governs how power is managed, balanced, and protected across the entire rack.
  • It controls the internal switching frequencies, power factor correction (PFC), and voltage regulation loops of the individual PSUs.
  • It ensures that if you have six PSUs in a shelf, they all pull their weight equally. If one PSU lags, the firmware recalibrates the others in microseconds to prevent overloading a single unit.
  • It dictates how the shelf handles massive, sudden spikes in power when GPUs transition from idle to 100% utilization.
  • It hosts the communication protocols (like Modbus, PMBus, or Redfish over Ethernet) used by the Power Management Controller (PMC) to talk to your rack-level orchestrators.

Accessing Power shelf

  • Power Shelf has a PMC (Power Management Controller) - connected via ethernet port.
  • This PMC usually gets connected to OOB network.
  • You can access it via web UI, SSH, or Redfish.
  • Also supports SNMP.

Updating Power shelf platform firmware

  • We need to update two things:
    • PMC firmware
    • PSU firmware
  • This can be done using nvfwupd utility.
  • Notes:
    • LiteOn PSUs may only be updated one at a time. To select the PSU to update, a special JSON file containing the “LiteOnPowerDeviceId” value is required.
    • Delta PSUs update simultaneously and no special JSON file is required.
    • After the update completes, PowerShelf components automatically activate the new firmware.
    • Starting with NVFWUPD 2.1.0, OnReset activation is supported for Delta and LiteOn PowerShelf platforms. By default, all updates use immediate activation.
    • OnReset activation applies only to PMC firmware updates on Delta and LiteOn PowerShelf platforms. PSU firmware updates always use immediate activation.

Operational reality and firmware update

  • You don't need to patch power shelf firmware monthly. Usually, a biannual or annual cadence or aligning updates with major hardware maintenance windows is standard.
  • When expanding clusters or adding new generations of compute nodes to existing racks, updating the power shelf firmware ensures the power delivery system is fully compatible with the power sequencing behaviors of the newer servers.
  • Modern ORV3 shelves support hitless/lossless firmware updates. This means you can flash the firmware on the Power Management Controller (PMC) or individual PSUs sequentially while the rack remains fully powered and live, eliminating the need to take your compute offline just to update the power system.

References

Friday, December 20, 2019

Working with iDRAC9 Redfish API using PowerShell - Part 4


In this article, I will explain how to use iDRAC Redfish API to Power On and Graceful Shutdown a server using PowerShell. This is applicable to all Dell EMC servers having iDRAC. It can be a general-purpose PowerEdge rack server, Ready Node, Appliance, etc. I've tested on iDRAC9.

Note: In a production environment please make sure to follow proper shutdown or reboot procedure (if any) before performing any system reset actions on the server.

[CmdletBinding()]
param(
    [Parameter(Mandatory)]
    [String]$idrac_ip,

    [Parameter(Mandatory)]
    [ValidateSet('On''GracefulShutdown')]
    [String]$ResetType
)

#To fix the connection issues to iDRAC REST API
add-type @"
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    public class TrustAllCertsPolicy : ICertificatePolicy {
    public bool CheckValidationResult(
        ServicePoint srvPoint, X509Certificate certificate,
        WebRequest request, int certificateProblem) {
        return true;
        }
    }
"@

[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 -bor [System.Net.SecurityProtocolType]::Tls11

#Get iDRAC creds
$Credentials = Get-Credential -Message "Enter iDRAC Creds"

$JsonBody = @{"ResetType" = $ResetType} | ConvertTo-Json
$u1 = "https://$($idrac_ip)/redfish/v1/Systems/System.Embedded.1/Actions/ComputerSystem.Reset"

Invoke-RestMethod -Uri $u1 -Credential $Credentials -Method Post -UseBasicParsing -ContentType 'application/json' -Body $JsonBody -Headers @{"Accept"="application/json"} -Verbose


Hope it was useful. Cheers!

Related posts



References


iDRAC9 Redfish API guide

Tuesday, December 3, 2019

Working with iDRAC9 Redfish API using PowerShell - Part 3

In this article, I will explain how to access the iDRAC Redfish API using session-based authentication.


[CmdletBinding()]
param(
    [Parameter(Mandatory)]
    [String]$idrac_ip
)

#To fix the connection issues to iDRAC REST API
add-type @"
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    public class TrustAllCertsPolicy : ICertificatePolicy {
    public bool CheckValidationResult(
        ServicePoint srvPoint, X509Certificate certificate,
        WebRequest request, int certificateProblem) {
        return true;
        }
    }
"@

[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 -bor [System.Net.SecurityProtocolType]::Tls11

#Get iDRAC creds
$Credentials = Get-Credential -Message "Enter iDRAC Creds"

$creds_json = '{"UserName": "$($Credentials.UserName)", "Password": "$($Credentials.GetNetworkCredential().Password)"}'
$creds_json = $ExecutionContext.InvokeCommand.ExpandString($creds_json)

#Using Invoke-WebRequest
try {
    $result1 = Invoke-WebRequest -Uri "https://$($idrac_ip)/redfish/v1/Sessions " -Method POST -ContentType 'application/json' -Headers @{"Accept"="application/json"} -Body $creds_json -Verbose
}
catch {
    Write-Error -Message "Failed to invoke the API! Incorrect creds!"
    $PSCmdlet.ThrowTerminatingError($PSItem)
}

$auth_head = @{
"X-Auth-Token" = $result1.Headers.'X-Auth-Token'
"accept" = "application/json" }

#URI to get basic system info
$u1 = "https://$($idrac_ip)/redfish/v1/Systems/System.Embedded.1"

#Using Invoke-RestMethod
try {
    $output = Invoke-RestMethod -Uri $u1 -Method Get -Headers $auth_head -ContentType 'application/json' -Verbose
}
catch {
    Write-Error -Message "Failed to invoke the API! Incorrect creds!"
    $PSCmdlet.ThrowTerminatingError($PSItem)
}

Write-Output "`nBasic System Info:" $output



Hope it was useful. Cheers!

Related posts

Working with iDRAC9 Redfish API using PowerShell - Part 1

Working with iDRAC9 Redfish API using PowerShell - Part 2


References

iDRAC9 Redfish API guide

Saturday, September 15, 2018

Working with iDRAC9 Redfish API using PowerShell - Part 2

In this article I will explain briefly about the JSON response from iDRAC and how you can navigate through the Redfish API tree structure to get all the required information. Now, lets have a look at the URIs. 

Query the computer system collection:
$result1 = Invoke-RestMethod -Uri "https://$($idrac_ip)/redfish/v1/Systems" -Credential $Credentials -Method Get -UseBasicParsing -ContentType 'application/json'

Response: 

You can see one member with URI /redfish/v1/Systems/System.Embedded.1

Below is a sample screen shot of JSON output when you try to query the above listed member system. 


You can get some of the basic information straight away from the above JSON response. And these are organized in hierarchy where you can drill down to each object and get the required details. Below diagram shows basic iDRAC Redfish API tree structure.


Example: You can get details/ health status of  storage controller as shown below.

Query:
$result2 = Invoke-RestMethod -Uri "https://$($idrac_ip)/redfish/v1/Systems/System.Embedded.1/Storage /Controllers/NonRAID.Integrated.1-1" -Credential $Credentials -Method Get -UseBasicParsing -ContentType 'application/json'

Sunday, August 26, 2018

Working with iDRAC9 Redfish API using PowerShell - Part 1

Redfish is a industry standard protocol and specification defined by Distributed Management Task Force (DMTF) for performing systems/ IT infrastructure management actions using RESTful methodology. It is a next generation systems management interface standard which is simple, secure, scalable. Redfish uses JSON data format and transports payload over HTTPS. Initial releases of Redfish focused primarily on systems management and was targeted to be a replacement for IPMI over LAN protocol. Now the capabilities have been extended over the past few years providing a rich set of features and support for network, memory, storage devices etc. Over time the scope of Redfish is being expanded to fit more use cases as the forum is working with several partner organizations. Promoters of this standard include several companies like Broadcom, Cisco, Dell, HP, VMware, Intel, Microsoft etc.

Now, lets have a look at how to connect to iDRAC Redfish API using PowerShell. Redfish provides two authentication methods. Basic authentication and Session-based authentication. Here I will explain basic authentication using username and password for each Redfish API request to iDRAC.

#To fix the connection issues to iDRAC REST API
add-type @"
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    public class TrustAllCertsPolicy : ICertificatePolicy {
    public bool CheckValidationResult(
        ServicePoint srvPoint, X509Certificate certificate,
        WebRequest request, int certificateProblem) {
        return true;
        }
    }
"@

[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 -bor [System.Net.SecurityProtocolType]::Tls11

#Get iDRAC creds
$Credentials = Get-Credential -Message "Enter iDRAC Creds"

#URI to get basic system info
$u1 = "https://192.168.10.11/redfish/v1/Systems/System.Embedded.1"

#Using Invoke-RestMethod
$result1 = Invoke-RestMethod -Uri $u1 -Credential $Credentials -Method Get -UseBasicParsing -ContentType 'application/json' -Headers @{"Accept"="application/json"}

Output:


Hope it was useful. Cheers!

References:
iDRAC9 Redfish API reference guide
github.com/dell/iDRAC-Redfish-Scripting