Author: Jagpal Singh Gill paligill@gmail.com
Created: July 26, 2024
Liquid cooling is becoming a promising alternative to traditional air flow cooling for high performance computing in data center environments. However, this technique presents its own set of challenges, as liquids can be harmful to electronic components. Therefore, it is crucial for any system that uses liquid cooling to have a mechanism for detecting and reporting leaks so that remediation actions can be taken. Currently, there is no service available in openBMC to handle this task.
In this document, a leak is considered to be an entity with digital (present or not-present) value. Currently, openBMC has a framework for sensors, but it is primarily designed for numerical readings rather than detectors with digital values. The phosphor-gpio-monitor is too generic in its design and does not meet most of the requirements.
The DBus Interface for leak detection will consist of following -
Interface Name | New/Existing | Purpose/Updates |
---|---|---|
xyz.openbmc_project.State.Leak.DetectorGroup | New | Implements Leak Detector Group |
xyz.openbmc_project.State.Leak.Detector | New | Implements Leak Detector |
Refer to patch for related D-Bus changes.
This design involves implementing following Redfish schemas and associated properties in BMCWeb.
Redfish Schema | Properties |
---|---|
ThermalSubsystem | LeakDetection |
LeakDetection | Name, Status, LeakDetectors, LeakDetectorGroups |
LeakDetectorGroup: GroupName, Detectors, Detectors@odata.count, Status | |
LeakDetector | Name, DetectorState, Status |
NOTE: The ThermalSubsystem is required because it contains the LeakDetection endpoint.
--- config: layout: fixed --- flowchart LR A["EntityManager"] -- Detector Configuration (via D-Bus) --> B["Leak Detection Manager"] B -- Creates --> C["Leak Detector Group"] & F["Leak Detectors"] C -- Creates Interface --> E["xyz.openbmc_project.State.Leak.DetectorGroup at /xyz/openbmc_project/state/leak/detectorgroup/<GroupX>"] F -- Creates Interface --> G["xyz.openbmc_project.State.Leak.Detector at /xyz/openbmc_project/state/leak/detector/<DetectorY>"] C -. contains .- F F@{ shape: procs}
For information on the configuration schema for leak detectors, please refer.
An example of entity manager configuration for leak detector is as under -
"Exposes": [ ... { "Type": "GPIOLeakDetector", "Name": "ManifoldFrontDetector", "SubType": "LeakSensingCable", "PinName": "DETECTOR1_GPIO", "Polarity": "ActiveLow", "Level": "Critical" } ... ]
The LeakDetection Manager is responsible for processing input configuration objects from the Entity Manager via DBus. Based on related interface signals, it creates or deletes the corresponding detector and detector group D-Bus interfaces. Additionally, it monitors detector GPIO events and triggers systemd targets based on the leak level if a leak is detected. It also raises or resolves the appropriate leak-related alerts. This fulfills requirements# 1 and 3.
A leak detection definition is proposed for events through Redfish based on event logging design.
The entity manager configuration specifies the severity level for a leak detector. When the corresponding detector detects a leak, the LeakDetection Manager generates an event message with the appropriate severity level as defined in the configuration. This fulfills requirement# 2.
The current design of the phosphor-gpio-monitor is too generic and does not meet most of the requirements, particularly Requirement #2 and #4. Any changes to the phosphor-gpio-monitor to add these requirements would result in a monolithic daemon that would need to be extended for every other such feature. Currently, the phosphor-gpio-monitor performs generic tasks in a simple manner and does so effectively, so it's better suited for that.
The design may cause a minor reduction in system performance due to the need for processing leak detector GPIO events, but the impact is negligible.
All the functional testing of the reference implementation will be performed using GTest.
Integration testing for generating Redfish events will be conducted using the GPIO sim tool to simulate leak detection GPIOs, which can be triggered as needed.