This document describes how to configure cooling policies on OpenUBMC to complete the cooling configuration of the entire system.
Overall Cooling Design Principles
Relationship of Cooling Objects
CoolingAreais used to associate temperature points (RequirementIdx), participating fans (FanIdxGroup), and cooling policies (PolicyIdxGroup).CoolingAreaandCoolingRequirementmust have a one-to-one correspondence.CoolingAreacan only be configured in the product self-description (PSR), distinguishing between single and dual power supplies.CoolingRequirementis generally configured following the self-description record (SR) of the board that it resides on.
Design Constraints
- The
RequirementIdproperty inCoolingRequirementmust be globally unique. Target cooling policy ID. The ID must be globally unique. Currently, the ID supports 16 valid bits, where the first 8 bits are the base ID and the last 8 bits are the slot ID. For a unique component,RequirementIdcan be an unsigned 8-bit integer (it cannot be configured to synchronize with properties of other components). - For the
InitLevelInStartupproperty of theCoolingConfigclass, the minimum value is 0, the maximum value is 100, and the default value is 100. - The
FanBoardNumproperty of theCoolingConfigclass is the number of fan boards with fan speed adjustment. This property needs to be configured for a multi-fan board model. If it is not configured, the default value 1 is used. - A
CoolingPolicyobject represents an ambient temperature curve. Each temperature point may be associated with zero or moreCoolingPolicyobjects. The maximum calculated speed is applied. To delete aCoolingPolicy, you need to deletePolicyIdxfromPolicyIdxGroupof the correspondingCoolingArea. - The temperature range of the linear cooling policy is closed on the left and open on the right.
- The value of
ActualCondValequals that ofExpCondVal. IfPCIeCardName,HDDBackPlaneName, andFanTypeare configured, the policy takes effect only when every condition is met. That is, one of the NICs inPCIeCardName(if configured) is inserted, one of the drive backplanes inHDDBackPlaneName(if configured) is loaded, and the fan types of the environment contains one of the types inFanType(if configured). - In the fan ID list
FanIdxGroupassociated with the cooling areaCoolingArea, the fan IDs must be configured in ascending order.
MDS Class and Property Configuration
CoolingConfig Class Configuration
CoolingConfig is used to carry the global configurations of the cooling module, including the fan speed range and the initial speed during BMC startup.
CoolingConfig Properties
| Property | Type | Value Range | Description |
|---|---|---|---|
| SmartCoolingState | String | "Enabled" "Disabled" | Whether smart cooling is enabled. The value can be Enabled or Disabled. |
| SmartCoolingMode | String | "EnergySaving" "LowNoise" "HighPerformance" "Custom" "LiquidCooling" | Smart cooling mode. The default value is EnergySaving. |
| LevelPercentRange | Array of unsigned 8-bit integers | Array of unsigned 8-bit integers | Allowed range for manually setting the speed levels (percentage). |
| InitLevelInStartup | Unsigned 8-bit integer | [0,100] | Initial speed percentage (issued during the BMC reset process before PID takeover). The value ranges from 0 to 100, defaulting to 100. |
| FanBoardNum | Unsigned 8-bit integer | [0,255] | Number of fan boards with fan speed adjustment. (This property needs to be configured for a multi-fan board model. The default value is 1.) |
| MinimalLevel | Unsigned 8-bit integer | [0, 100] | Minimum fan speed percentage allowed for the current server. If the fan speed is less than the minimum allowed speed, the minimum allowed speed is used. The default value is 0. |
| MaxLimitLevel | Unsigned 8-bit integer | [0, 100] | Maximum fan speed percentage allowed for the current server. If the fan speed is greater than the maximum allowed speed, the maximum allowed speed is used. The default value is 100. |
CoolingRequirement Class Configuration
A temperature point corresponds to a CoolingRequirement object, which is used to associate the hardware temperature with target cooling policy configuration.
CoolingRequirement Properties
| Property | Type | Value Range | Description |
|---|---|---|---|
| RequirementId | Unsigned 64-bit integer | Unsigned 64-bit integer | Target cooling policy ID. The ID must be globally unique. Currently, the ID supports 16 valid bits, where the first 8 bits are the base ID and the last 8 bits are the slot ID. For a unique component, this property can be an unsigned 8-bit integer (it cannot be configured to synchronize with properties of other components). |
| TemperatureType | Unsigned 32-bit integer | Unsigned 32-bit integer | Temperature point type (see the following table for target cooling type definitions). The default value is 4294967295. The mapping between the values and the target cooling types is as follows: 1 Cpu 2 Outlet 3 Disk 4 Memory 5 PCH 6 VRD 7 VDDQ 8 NPUHb 9 NPUAiCore 10 NPUBoard 11 Inlet 12 SoCBoardOutlet 13 SoCBoardInlet 4294967295 InvalidType |
| MonitoringStatus | Unsigned 8-bit integer | Unsigned 8-bit integer | Temperature point status, which is used for abnormal cooling. The value can be 0 (normal) or 1 (abnormal). |
| MonitoringValue | Double | Double | Temperature point value, which is associated with hardware. (Note: This property cannot be associated with the Reading value of the sensor.) |
| FailedValue | Unsigned 64-bit integer | Unsigned 64-bit integer | When the temperature point is abnormal, if this property is configured, abnormal cooling is triggered and the fan speed percentage is set to FailedValue. If this property is not configured, abnormal cooling will not be triggered. |
| BackupRequirementIdx | Unsigned 64-bit integer | Unsigned 64-bit integer | Index of the backup temperature point. |
| TargetTemperatureCelsius | Unsigned 8-bit integer | Unsigned 8-bit integer | Current cooling target value. The default value is the target value for the EnergySaving mode. |
| SmartCoolingTargetTemperature | Array of signed 16-bit integers | Array of signed 16-bit integers | Stores target temperature values for EnergySaving, HighPerformance, and LowNoise modes in order. Configure this property only when you need to distinguish them. |
| MaxAllowedTemperatureCelsius | Unsigned 8-bit integer | Unsigned 8-bit integer | Temperature that triggers full fan speed. |
| CustomSupported | Boolean | true/false | Whether custom cooling curves are supported. The value can be true or false. |
| CustomTargetTemperatureCelsius | Unsigned 8-bit integer | Unsigned 8-bit integer | Custom target temperature value used as the target for cooling in Custom mode. |
| TargetTemperatureRangeCelsius | Array of unsigned 8-bit integers | Array of unsigned 8-bit integers | Allowed range for the custom target temperature. |
| Enabled | String | true/false | Effective condition for the custom temperature point. The value can be true or false. |
| SensorName | String | String | Name of the sensor associated with the target cooling policy. |
CoolingPolicy Class Configuration
CoolingPolicy is a linear cooling policy object. A CoolingPolicy object represents an ambient temperature curve. Each temperature point may be associated with zero or more CoolingPolicy objects. The maximum calculated speed is issued. To delete CoolingPolicy, remove the corresponding PolicyIdx from PolicyIdxGroup of the associated CoolingArea.
CoolingPolicy Properties
| Property | Type | Value Range | Description |
|---|---|---|---|
| PolicyIdx | Unsigned 64-bit integer | Unsigned 64-bit integer | Linear cooling policy ID, which must be globally unique. |
| PolicyType | Unsigned 32-bit integer | 1 InletCustom 2 DiskCustom 4294967295 InvalidType | Ambient temperature cooling type, only configurable for custom curves. |
| ExpCondVal | String | "EnergySaving" "LowNoise" "HighPerformance" "Custom" "LiquidCooling" | Expected condition. CoolingPolicy takes effect only when the actual condition matches the expected condition. |
| ActualCondVal | String | "EnergySaving" "LowNoise" "HighPerformance" "Custom" "LiquidCooling" | Actual condition. |
| Hysteresis | Unsigned 8-bit integer | Unsigned 8-bit integer | Hysteresis. When the temperature is less than or equal to the full fan speed value (MaxAllowedTemperatureCelsius) minus the hysteresis, full fan speed mode is exited. |
| TemperatureRangeLow | Array of signed 16-bit integers | Array of signed 16-bit integers | Left values of the temperature intervals for the linear cooling policy. |
| TemperatureRangeHigh | Array of signed 16-bit integers | Array of signed 16-bit integers | Right values of the temperature intervals for the linear cooling policy. |
| SpeedRangeLow | Array of signed 16-bit integers | Array of signed 16-bit integers | Left values of the speed intervals for the linear cooling policy. |
| SpeedRangeHigh | Array of signed 16-bit integers | Array of signed 16-bit integers | Right values of the speed intervals for the linear cooling policy. |
| FanSpeedRangePercents | Array of unsigned 8-bit integers | Array of unsigned 8-bit integers | Allowed range of fan speeds for custom cooling curves. |
| PCIeCardName | Array of strings | Array of strings | List of associated PCIe card names. The PCIe condition is met if any card in this list is inserted. |
| HDDBackPlaneName | Array of strings | Array of strings | List of drive backplane names. The backplane condition is met if any backplane is loaded. |
| FanType | Array of strings | Array of strings | List of fan types. The fan condition is met if any fan type in this list exists. |
CoolingArea Class Configuration
CoolingArea is used to associate CoolingRequirement, CoolingPolicy, and CoolingFan objects. This configuration describes which fans participate in the cooling of a temperature point and which ambient cooling curves are associated with that point.
NOTE
If a new CoolingRequirement is added, a corresponding CoolingArea object must also be added. If CoolingArea does not participate in cooling,PolicyIdxGroup and LiquidCoolingDeviceGroup can be left empty by default.
Benefits of this configuration include:
- It explicitly occupies a component location.
- When target speeds are issued, the system checks whether
CoolingAreaexists. IfCoolingAreadoes not exist, an error is reported. For example, for a temperature point, the service code cannot determine whether it is not configured or not issued.CoolingAreamust be configured in the PSR.
CoolingArea Properties
| Property | Type | Value Range | Description |
|---|---|---|---|
| AreaId | Unsigned 8-bit integer | Unsigned 8-bit integer | Cooling area ID, which must be globally unique. |
| RequirementIdx | Unsigned 64-bit integer | Unsigned 64-bit integer | ID of the target cooling policy associated with the cooling area. The value is the same as that of RequirementId in unsigned 8-bit integer or base ID in unsigned 16-bit integer. |
| PolicyIdxGroup | Array of unsigned 64-bit integers | Array of unsigned 64-bit integers | Indexes of ambient cooling policies associated with the cooling area. |
| FanIdxGroup | Array of unsigned 8-bit integers | Array of unsigned 8-bit integers | Collection of fan IDs (CoolingFan.FanId) associated with the cooling area, representing fans participating in cooling of the area. |
| Priority | Unsigned 8-bit integer | Unsigned 8-bit integer | Priority of the cooling area object. The default value is 1. A smaller value indicates a higher priority. For duplicate AreaId objects, cooling is performed based on the one with the highest priority. |
| LiquidCoolingDeviceGroup | Array of unsigned 8-bit integers | Array of unsigned 8-bit integers | List of liquid cooling device IDs associated with the cooling area. |
AbnormalFan Class Configuration
AbnormalFan represents an abnormal cooling fan object.
AbnormalFan Properties
| Property | Type | Value Range | Description |
|---|---|---|---|
| Id | Unsigned 32-bit integer | Unsigned 32-bit integer | Primary key in the abnormal cooling database, which must be globally unique. |
| FanIdx | Unsigned 32-bit integer | Unsigned 32-bit integer | Index of the associated CoolingFan, which is the ID of the fan that triggers abnormal cooling. |
| Status | String | "AbnormalRotation" "NotInPosition" | Fan abnormal status. AbnormalRotation indicates abnormal speed. NotInPosition indicates a fan not in position. |
| FanGroup | Array of unsigned 32-bit integers | Array of unsigned 32-bit integers | IDs of the fans that participate in abnormal cooling after abnormal cooling is triggered. |
| Priority | Unsigned 8-bit integer | Unsigned 8-bit integer | Object priority. The default value is 1. A smaller value indicates a higher priority. |
Cooling Configuration Examples
Target Cooling: Outlet Target Cooling Configuration
SmartCooling Mode | Target Value | Corresponding Fan No. | Full Speed Threshold | High-Temperature Alarm Threshold | Temperature Specification | Cooling Hysteresis | Alarm Hysteresis | Abnormal Cooling upon Sensor Failure | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| EnergySaving (default) | 50 | Fan | 60 | 75 | / | / | 2 | 80% | |||||||
| HighPerformance | 47 | ||||||||||||||
| LowNoise | 53 |
"CoolingRequirement_1_7": {
"RequirementId": 7,
"TemperatureType": 2, // The target cooling temperature type is the outlet.
"MonitoringStatus": "<=/Scanner_Lm75_Outlet.Status",// Synchronizes the status from Scanner_Lm75_Outlet.
"MonitoringValue": "<=/Scanner_Lm75_Outlet.Value",// Synchronizes the value from Scanner_Lm75_Outlet.
"FailedValue": 80,// The fan speed becomes 80% when the temperature status is abnormal.
"TargetTemperatureCelsius": 45,// The target temperature is 45°C.
"MaxAllowedTemperatureCelsius": 60,// Full speed is triggered when the temperature is greater than or equal to 60°C.
"TargetTemperatureRangeCelsius": [// The target temperature can range from 45°C to 60°C.
45,
60
],
"SmartCoolingTargetTemperature": [// Target temperatures for EnergySaving, HighPerformance, and LowNoise modes are 50, 47, and 53 respectively.
50,
47,
53
],
"CustomSupported": true,// Custom cooling curves are supported.
"CustomTargetTemperatureCelsius": 52,// The custom target temperature for cooling is 52°C.
"SensorName": "#/ThresholdSensor_OutletTemp.SensorName"
},
"CoolingArea_1_7": {
"AreaId": 7,
"RequirementIdx": 7,// The associated temperature point is the RequirementId of 7.
"PolicyIdxGroup": [],
"FanIdxGroup": [// The fan IDs associated the cooling area 7 are 1, 2, 3, and 4.
1,
2,
3,
4
]
}Ambient Cooling: Inlet Target Cooling Configuration (CoolingRequirement_1_8 as the Backup for CoolingRequirement_1_6)
The following table lists the mapping between ambient temperature (Ta) intervals and fan speeds.
| Ta Range | Ta<=20 | Ta=21 | Ta=22 | Ta=22 | Ta=23 | Ta=24 | Ta=25 | Ta=26 | Ta=27 | Ta=28 | Ta=29 | Ta=30 | Ta=31 | Ta=32 | Ta=33 | Ta=34 | Ta=35 | Ta=36 | Ta=37 | Ta=38 | Ta=39 | Ta=40 | Ta=41 | Ta=42 | Ta=43 | Ta=44 | Ta>=45 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Fan Speed | 30% | 30% | 30% | 30% | 30% | 30% | 34% | 38% | 42% | 46% | 50% | 55% | 60% | 65% | 70% | 75% | 80% | 85% | 90% | 95% | 100% | 100% | 100% | 100% | 100% | 100% | 100% |
| Fan Speed | 40% | 40% | 40% | 40% | 40% | 42% | 45% | 50% | 55% | 60% | 65% | 70% | 75% | 80% | 85% | 90% | 95% | 100% | 100% | 100% | 100% | 100% | 100% | 100% | 100% | 100% | 100% |
In this example, cooling area CoolingArea_1_6 (with AreaId of 6) is associated with temperature point CoolingRequirement_1_6 and cooling policies CoolingPolicy_1_6 and CoolingPolicy_1_7. These policies contain ambient cooling curves. Fans 1 to 4 participate in cooling of CoolingArea_1_6.
"CoolingConfig_1": {
"SmartCoolingState": "Enabled",// Enables smart cooling.
"SmartCoolingMode": "EnergySaving",// The smart cooling mode is energy saving.
"LevelPercentRange": [// The allowed range for manual speed level setting is 10% to 100%.
10,
100
],
"InitLevelInStartup": 100,// The initial speed is 100%.
"DiskRowTemperatureAvailable": false
},"CoolingRequirement_1_6": {
"RequirementId": 6,
"TemperatureType": 11,// The temperature type is the outlet.
"MonitoringStatus": "<=/Scanner_Lm75_Inlet.Status",
"MonitoringValue": "<=/Scanner_Lm75_Inlet.Value",
"FailedValue": 80,
"BackupRequirementIdx": 8,// The backup temperature ID is 8.
"SensorName": "#/ThresholdSensor_InletTemp.SensorName"// Name of the sensor associated with the temperature point
},
"CoolingArea_1_6": {
"AreaId": 6,
"RequirementIdx": 6,// The ID of the temperature point (CoolingRequirement) associated with the cooling area is 6.
"PolicyIdxGroup": [6, 7],// The IDs of the cooling policies associated with the cooling area are 6 and 7.
"FanIdxGroup": [// The IDs of fans associated with the cooling area are 1, 2, 3, and 4.
1,
2,
3,
4
]
}"CoolingPolicy_1_6": {
"PolicyIdx": 6,
"ExpCondVal": "EnergySaving",// The expected condition for the cooling policy to take effect is the energy saving mode.
"ActualCondVal": "<=/CoolingConfig_1.SmartCoolingMode",// Actual mode
"Hysteresis": 1,// The hysteresis is 1.
"TemperatureRangeLow": [// Left values of the temperature intervals for the linear cooling policy
-127, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45
],
"TemperatureRangeHigh": [// Right values of the temperature intervals for the linear cooling policy
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 127
],
"SpeedRangeLow": [// Left values of the speed intervals for the linear cooling policy
30, 30, 30, 30, 30, 30, 30, 34, 38, 42, 46, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 100, 100, 100, 100, 100
],
"SpeedRangeHigh": [// Right values of the speed intervals for the linear cooling policy
30, 30, 30, 30, 30, 30, 30, 34, 38, 42, 46, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 100, 100, 100, 100, 100
]
}"CoolingPolicy_1_7": {
"PolicyIdx": 7,
"ExpCondVal": "HighPerformance",// The expected condition for the cooling policy to take effect is the high performance mode.
"ActualCondVal": "<=/CoolingConfig_1.SmartCoolingMode",// Actual mode
"Hysteresis": 1,
"TemperatureRangeLow": [// Left values of the temperature intervals for the linear cooling policy
-127, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45
],
"TemperatureRangeHigh": [// Right values of the temperature intervals for the linear cooling policy
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 127
],
"SpeedRangeLow": [// Left values of the speed intervals for the linear cooling policy
40, 40, 40, 40, 40, 40, 42, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 100, 100, 100, 100, 100, 100, 100, 100
],
"SpeedRangeHigh": [// Right values of the speed intervals for the linear cooling policy
40, 40, 40, 40, 40, 40, 42, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 100, 100, 100, 100, 100, 100, 100, 100
]
}In the preceding configuration, the i-th value in TemperatureRangeLow, TemperatureRangeHigh, SpeedRangeLow, and SpeedRangeHigh can be understood as: when the temperature is greater than or equal to TemperatureRangeLow[i] and less than TemperatureRangeHigh[i], the fan speed percentage is between SpeedRangeLow[i] and SpeedRangeHigh[i]. For example: For the temperature interval [-127, 20), the fan speed range is [30, 30]. For the temperature interval [20, 21), the fan speed range is [30, 30].
Abnormal Cooling
Scenarios that trigger abnormal cooling include temperature point acquisition failure and fan abnormality. For temperature point failure, see Target Cooling: when CoolingRequirement_1_7.MonitoringStatus becomes 0, the fan speed will not be lower than FailedValue.
// (1) Abnormal cooling is triggered when the speed of fan 1 is abnormal. The speed of fans 1 and 2 will be no less than 80% (the default value of SpeedPercentage is 80).
"AbnormalFan_1": {
"Id": 1,
"FanIdx": 1,// The ID of the associated abnormal fan is 1.
"Status": "AbnormalRotation",// Abnormal cooling is triggered when the speed of fan 1 is abnormal.
"FanGroup": [1, 2]// Fans 1 and 2 participate in abnormal cooling. Their speeds are increased to 80%.
}// (2) Abnormal cooling is triggered when fan 1 is not in position. The speed of fans 1 and 2 will be not less than 100%.
"AbnormalFan_2": {
"Id": 2,
"FanIdx": 1,// The ID of the associated abnormal fan is 1.
"Status": "NotInPosition",// Abnormal cooling is triggered when fan 1 is not in position.
"FanGroup": [1, 2]// Fans 1 and 2 participate in abnormal cooling. Their speeds are increased to 100%.
"SpeedPercentage": 100// When abnormal cooling is triggered, the speeds of fans 1 and 2 associated with FanGroup are increased to 100%.
}Backup Temperature Point Cooling
In this example, temperature point 8 (backup) is configured as the backup for temperature point 6 (primary). If primary point 6 fails to be acquired, the temperature value from backup point 8 is used for cooling.
Back temperature point CoolingRequirement_1_8 has RequirementId of 8. Set BackupRequirementIdx of primary temperature point CoolingRequirement_1_6 to 8 and IsBackupRequirement of CoolingRequirement_1_8 to true.
"CoolingRequirement_1_8": {// Backup temperature point
"RequirementId": 8,
"MonitoringStatus": "<=/Scanner_FanBrdTemp.Status",
"MonitoringValue": "<=/Scanner_FanBrdTemp.Value",
"IsBackupRequirement": true,
"SensorName": "#/ThresholdSensor_FanBoardTemp.SensorName"
},
"CoolingArea_1_8": {
"AreaId": 8,
"RequirementIdx": 8,// The cooling area is associated with temperature point 8.
"PolicyIdxGroup": [],
"FanIdxGroup":[]
}"CoolingRequirement_1_6": {// Primary temperature point
"RequirementId": 6,
"TemperatureType": 11,// The temperature type is the inlet.
"MonitoringStatus": "<=/Scanner_Lm75_Inlet.Status",
"MonitoringValue": "<=/Scanner_Lm75_Inlet.Value",
"FailedValue": 80,// When the temperature point fails to be acquired, abnormal cooling is triggered and the fan speed is increased to 80%.
"BackupRequirementIdx": 8,// Temperature point 8 is set as the backup for temperature point 6.
"SensorName": "#/ThresholdSensor_InletTemp.SensorName"
},
"CoolingArea_1_6": {
"AreaId": 6,
"RequirementIdx": 6,// The cooling area is associated with temperature point 6.
"PolicyIdxGroup": [],
"FanIdxGroup": [// The IDs of fans participate in cooling in this area are 1, 2, 3, and 4.
1,
2,
3,
4
]
}Fan speed difference between fan groups:
// In the following configuration, the maximum speed difference between FanGroup_1, FanGroup_2, and FanGroup_3 does not exceed 20%. The fan speed issued to the PSU is the maximum value from FanGroup_1, FanGroup_2, and FanGroup_3 plus 5%.
"BasicCoolingConfig": {
"FanGroupSpeedDiffThresholdPercent": 20, // Percentage of the speed difference threshold. The speed difference is not calculated by default.
"PsuFanSpeedCalibration": 5 // PSU fan speed calibration. The fan speed is not issued to the PSU by default.
},
"FanGroup_1": {
"Id": 1,
"FanSlots": [1, 2, 3, 4, 5]// Fans 1 to 5 are associated with fan group 1.
}
"FanGroup_2": {
"Id": 2,
"FanSlots": [6, 7, 8, 9, 10]// Fans 6 to 10 are associated with fan group 2.
}
"FanGroup_3": {
"Id": 3,
"FanSlots": [11, 12, 13, 14, 15]// Fans 11 to 15 are associated with fan group 3.
}Cooling for Devices with Optical Modules
When the temperature of the optical module is normal, CoolingRequirement_1_55 and CoolingRequirement_1_56 take effect. When the temperature of the optical module is abnormal, because CoolingRequirement_1_56 does not contain FailedValue, abnormal cooling is not triggered. In this case, CoolingRequirement_1_155 takes effect.
"CoolingRequirement_1_55": {
The "RequirementId": "${Slot} |> expr((55 << 8) | $1)",// RequirementId is offset based on the slot number.
"Description": "XXX device temperature cooling",
"MonitoringStatus": "<=/Retimer_XX_Obj_0.TemperatureCelsius |> expr($1 >= 255 ? 1 : 0)",
"MonitoringValue": "<=/Retimer_XX_Obj_0.TemperatureCelsius",
"FailedValue": 80,// When the temperature is abnormal, abnormal cooling is triggered to increase the fan speed to 80%.
"TargetTemperatureCelsius": 90,
"MaxAllowedTemperatureCelsius": 100,
"TargetTemperatureRangeCelsius": [],
"ThresholdValue": [],
"AlarmSpeed": [],
"SmartCoolingTargetTemperature": [],
"CustomSupported": false,
"CustomTargetTemperatureCelsius": 255,
"Enabled": "<=/CoolingRequirement_1_56.MonitoringStatus |> expr($1 == 0 ? true : false)",
"SensorName": "#/ThresholdSensor_XX.SensorName"
},
"CoolingRequirement_1_155": {
"RequirementId": "${Slot} |> expr((155 << 8) | $1)",
"Description": "XXX device temperature (abnormal optical module) cooling",
"MonitoringStatus": "<=/Retimer_XX_Obj_0.TemperatureCelsius |> expr($1 >= 255 ? 1 : 0)",
"MonitoringValue": "<=/Retimer_XX_Obj_0.TemperatureCelsius",
"TargetTemperatureCelsius": 80,
"MaxAllowedTemperatureCelsius": 100,
"TargetTemperatureRangeCelsius": [],
"ThresholdValue": [],
"AlarmSpeed": [],
"SmartCoolingTargetTemperature": [],
"CustomSupported": false,
"CustomTargetTemperatureCelsius": 255,
"Enabled": "<=/CoolingRequirement_1_56.MonitoringStatus |> expr($1 ~= 0 ? true : false)",
"SensorName": "#/ThresholdSensor_XX.SensorName"
},
"CoolingRequirement_1_56": {// FailedValue is not configured. When the temperature is abnormal, abnormal cooling is not triggered.
"RequirementId": "${Slot} |> expr((56 << 8) | $1)",
"Description": "XXX device optical module temperature cooling",
"MonitoringStatus": "<=/OpticalModule_1.TemperatureCelsius |> expr(($1 == 16384) ? 0 : ($1 >= 255 ? 1 : 0))",
"MonitoringValue": "<=/OpticalModule_1.TemperatureCelsius",
"TargetTemperatureCelsius": 62,
"MaxAllowedTemperatureCelsius": 68,
"TargetTemperatureRangeCelsius": [],
"ThresholdValue": [],
"AlarmSpeed": [],
"SmartCoolingTargetTemperature": [],
"CustomSupported": false,
"CustomTargetTemperatureCelsius": 255
}Multi-NIC/Multi-Drive Cooling Configuration
When there are multiple objects, the RequirementId needs to be offset based on the slot number.
"CoolingRequirement_1_61": {
"RequirementId": "${Slot} |> expr((61 << 8) | $1)",// RequirementId needs to be offset based on the slot number.
"MonitoringStatus": "<=/Scanner_XX.Value |> expr($1 >= 255 ? 1 : 0)",
"MonitoringValue": "<=/Scanner_XX.Value",
"FailedValue": 80,
"TargetTemperatureCelsius": 44,
"MaxAllowedTemperatureCelsius": 58,
"TargetTemperatureRangeCelsius": [],
"ThresholdValue": [],
"AlarmSpeed": [],
"Enabled": "<=/Drive_1.TemperatureCelsius;<=/Drive_2.TemperatureCelsius |> expr($1 + $2 >= 510 ? 1 : 0)",
"SensorName": "#/ThresholdSensor_XX.SensorName"
},
"CoolingArea_1_61": {
"AreaId": 61,
"RequirementIdx": 61,
"PolicyIdxGroup": [],
"FanIdxGroup": [
1,
2,
3,
4
]
}Standby Cooling Configuration
For standby cooling, set ActiveInStandby to true.
"CoolingRequirement_1_2": {
"RequirementId": 2,
"Description": "xxx",
"MonitoringStatus": "<=/DPUCard_1.Inlet1TemperatureCelsius |> expr(($1 == 32767) ? 1 : 0)",
"MonitoringValue": "<=/DPUCard_1.Inlet1TemperatureCelsius |> expr(($1 == 0 || $1 > 200) ? 40 : ($1 & 255))",
"FailedValue": 80,
"TargetTemperatureCelsius": 55,
"MaxAllowedTemperatureCelsius": 65,
"ActiveInStandby": true,// Set true to support standby cooling.
"SensorName": "#/ThresholdSensor_XX.SensorName"
},
"CoolingArea_1_2": {
"AreaId": 2,
"RequirementIdx": 2,
"PolicyIdxGroup": [],
"FanIdxGroup": [
1,
2,
3,
4
]
}Configuration for Liquid-Cooled Models with Only Pump Ambient Curves
"CoolingRequirement_Pump_80": {
"RequirementId": 80,
"MonitoringStatus": "<=/Scanner_Lm75_Inlet.Status",
"MonitoringValue": "<=/Scanner_Lm75_Inlet.Value",
"TargetTemperatureCelsius": 80, // A very large value that the inlet temperature cannot reach, making the calculated fan speed minimal.
"MaxAllowedTemperatureCelsius": 100, // The full speed is triggered when the temperature reaches 100°C.
"FailedValue": 100,
"CoolingMedium": "Liquid"// The cooling medium is liquid.
},
"CoolingArea_Pump_1_80": {
"AreaId": 80,
"RequirementIdx": 80,
"PolicyIdxGroup": [80],
"LiquidCoolingDeviceGroup": [// The IDs of pumps associated with the cooling area are 1 and 2.
1,
2
]
},
"CoolingPolicy_Pump_1_80": {
"PolicyIdx": 80,
"CoolingMedium": "Liquid",// The cooling medium is liquid.
"TemperatureRangeLow": [-127, 30],
"TemperatureRangeHigh": [30, 127],
"SpeedRangeLow": [50, 100],
"SpeedRangeHigh": [50, 100]
}