The Thermal Management Module is the orchestration and autonomous regulation system for physical cooling within tlBMC. Its core responsibility is to continuously monitor platform temperatures, power dissipation, and airflow metrics across distinct physical regions, autonomously computing optimal fan speeds to maintain hermetic hardware health, optimize acoustic/power profiles, and prevent component thermal throttling or structural damage.
When activated via the central configuration switch, the Thermal Management Module assumes complete ownership over the following Redfish API endpoints and platform subsystems:
/redfish/v1/Chassis/{id}/ThermalSubsystem and its associated Fans collection./redfish/v1/Chassis/{id}/PowerSubsystem and its associated PowerSupplies collection./redfish/v1/Managers/{id} (thermal state reporting and override properties)./redfish/v1/Managers/bmc/Actions/Manager.FanMode.Change POST (dynamic acoustic and fan override profiles)./redfish/v1/Managers/bmc/FanMode.Change.ActionInfo./redfish/v1/Chassis/{id}/Sensors PATCH (sensor threshold monitoring and thermal tuning).Simultaneously, enabling this module automatically purges legacy Redfish links to /redfish/v1/Chassis/{id}/Thermal in compliance with modern Redfish DMTF specifications.
The underlying architecture of the Thermal Management Module enforces a strict, robust mathematical decoupling between Zone Management (physical area orchestration) and Thermal Control Loops (independent control strategies and algorithms).
A physical platform is divided into one or more thermal zones managed by dedicated ZoneManager instances (and SupportiveZoneManager instances for auxiliary loops). Each zone orchestrates:
SensorInfo), physical output fan tachometers/PWM controllers (FanInfo), and independent thermal loop controllers (ControllerInfo).AddSetpoint and AddAdditiveSetpoint. The zone computes a single canonical MaximumSetpoint, clamping final targets strictly within configured bounds (setpoint_lower_bound and setpoint_upper_bound).min_threshold_critical and max_threshold_critical). If any sensor becomes stale, returns invalid readings, or crosses critical operating limits, the zone instantly enters failsafe mode (GetFailsafeMode()), forcing PWM outputs to an aggressive emergency cooling level (failsafe_percent) and logging protective overrides via the FailsafeLogger.For detailed documentation, see Zone Management.
Control strategies are encapsulated into autonomous mathematical loops executing at configurable sample frequencies. Each loop translates raw telemetry (temperatures, thermal margins, power dissipation, tachometer feedback) into cooling setpoint directives:
PidThermalLoop): Implements classical Proportional-Integral-Derivative feedback regulation with advanced anti-windup clamping, feed-forward offsets, output slew limiting, and setpoint hysteresis. Supports raw temperature tracking (TEMP_PID), thermal margin tracking (MARGIN_PID), and power tracking (POWER_PID).StepwiseThermalLoop): Binds thermal output steps to discrete input thresholds via StepwiseCriticalPoint definitions. Employs asymmetric positive/negative hysteresis to eliminate threshold jitter, functioning as either a base PWM setpoint generator or a strict RPM ceiling enforcer (is_ceiling).DffThermalLoop): Disturbance Feed-Forward control driven by real-time platform power consumption. Passes sudden workload shifts through low-pass filtering and feed-forward gain schedules (coeff_f1-coeff_f3) relative to a nominal baseline (reference_power), injecting proactive additive setpoints into peer control loops.FanPidController): High-speed, closed-loop tachometer regulation matching actual fan blade RPM against target setpoints using high-frequency proportional-integral tracking.EatThermalLoop): Entering Air Temperature compensation loop calculating multi-hour ambient baseline shifts to dynamically offset room-level environmental changes.FirstOrderAdrcLoopConfig / SecondOrderAdrcLoopConfig): Advanced Active Disturbance Rejection Control utilizing Non-linear Tracking Differentiators (NonlinearTrackingDifferentiatorConfig) and extended state observers (observer_bandwidth_factor) to estimate and cancel external platform thermal perturbations in real time.For detailed algorithm breakdowns, see Control Loops.
Activation of the Thermal Management Module is controlled within the central tlBMC bundle:
| Field | Type | Default | Description |
|---|---|---|---|
enabled | bool | false | Activation toggle under SensorCollectorModule.thermal_control_sub_module. When set to true, initiates autonomous thermal loops, instantiates ZoneManager boundaries, and binds Redfish ThermalSubsystem API routes. |
While physical thermal sensors and PWM/Tach hardware endpoints are discovered via standard Entity Manager JSON configuration blocks, advanced loop parameters, gain coefficients, and zone boundaries are configured via platform-specific textproto bundles.
The primary configuration definitions and control loop structures are exhaustively detailed in the following schemas:
ThermalConfigs, ZoneManagerConfig, SupportiveZoneManagerConfig, and all independent loop structures (PidLoopConfig, StepwiseLoopConfig, DffLoopConfig, EatLoopConfig, FirstOrderAdrcLoopConfig, SecondOrderAdrcLoopConfig).ThermalControlSubmodule).ThermalConfigs)| Parameter | Type | Description |
|---|---|---|
zones | ZoneManagerConfigs | Defines physical thermal zones, operating boundaries, cycle timers, attached sensors, and managed output fans. |
supportive_zones | SupportiveZoneManagerConfigs | Configures supportive zone boundaries for non-actuating auxiliary loops (e.g., ambient EAT tracking). |
pid_controllers | PidControllerConfigs | Instantiates Proportional-Integral-Derivative controllers, binding sensor keys, Kp/Ki/Kd gains, and target setpoints. |
stepwise_controllers | StepwiseControllerConfigs | Configures multi-step thermal curves, hysteresis boundaries, and setpoint/ceiling modes. |
fan_pid_controllers | FanPidControllerConfigs | Configures closed-loop RPM tachometer tracking controllers driving physical fan PWM lines. |
dff_controllers | DffControllerConfigs | Establishes Disturbance Feed-Forward power tracking loops modifying target setpoints of peer controllers. |
eat_controllers | EatControllerConfigs | Instantiates ambient Entering Air Temperature compensation tracking loops. |
failsafe_logger_config | FailsafeLoggerConfig | Configures rate limits (failsafe_log_limit_per_second) for emergency thermal override reporting. |
tuning_enabled | bool | Enables runtime interactive tuning and parameter modification via Redfish/debug interfaces. |
To activate thermal management within a platform build (tlbmc_config_bundle.textproto):
sensor_collector_module { enabled: true thermal_control_sub_module { enabled: true } }
configs/thermal_config.textproto)A production platform configuration defining a zone manager, temperature sensor inputs, fan tachometers, and a standard PID controller:
# proto-file: third_party/milotic/external/cc/tlbmc/configs/thermal_config.proto # proto-message: ThermalConfigs zones { zone_manager_configs { id: 1 setpoint_upper_bound: 16100 setpoint_lower_bound: 2000 minimum_thermal_setpoint: 30 zone_failsafe_percent: 70 ms_per_fan_cycle: 100 ms_per_thermal_cycle: 1000 debug_mode { debug_enabled: true debug_pid_enabled: true } input_sensors { sensor_key: "temperature_PDB_QB0_P12V_T" is_missing_acceptable: false scale: 0 failsafe_percent: 100 max_threshold_critical: 115 min_threshold_critical: 15 } input_sensors { sensor_key: "fantach_PDB_fan0_front_TACH" is_missing_acceptable: false scale: 0 failsafe_percent: 100 max_threshold_critical: 19800 min_threshold_critical: 0 } output_fans { fan_name: "fanpwm_PDB_fan0_PWM" failsafe_percent: 80 max_threshold_critical: 1000 min_threshold_critical: -10 } } } pid_controllers { pid_controller_configs { id: "PDB_Quarter_Brick_0_T" pid_loop_config { sample_time_sec: 1 coeff_proportional: -3.0 coeff_integral: -0.1 coeff_derivative: 0.0 integral_limit_max: 100.0 integral_limit_min: 30.0 output_limit_max: 0.0 output_limit_min: 0.0 } zone_manager_id: 1 setpoint: 95.0 input_process_type: TEMP_PID input_sensors { sensor_key: "temperature_PDB_QB0_P12V_T" max_junction_temperature: 100.0 convert_temperature_to_margin: false } } } failsafe_logger_config { failsafe_log_limit_per_second: 20 } tuning_enabled: true