3. Sensor monitoring

This section describes the sensor monitoring operations using the CLI, GUI, REST, IPMI and Redfish interfaces.

3.1. BMC command line

You can use the ipum-utils command for sensor monitoring. Table 3.1 lists the available commands.

Table 3.1 Sensor monitoring options

Parameter

Description

sensor_list

Display sensors present on the IPU-M2000 with the current sensor value, threshold levels, scale and unit. Threshold levels are defined as CRIT_HIGH, CRIT_LOW, WARN_HIGH and WARN_LOW, which correspond to critical high and low values, and warning high and low values.

An example of the output from the command is shown below:

$ ipum-utils sensor_list
NAME                                VALUE  CRIT_HIGH  WARN_HIGH   CRIT_LOW   WARN_LOW      SCALE       UNIT
fan0_0                              16319      18356      17522       7471       8405          0       RPMS
fan0_1                              15264      16911      16142       5040       5670          0       RPMS
...
fan4_1                              15418      16911      16142       5040       5670          0       RPMS
ps0_input_power                         0 1100000000 1000000000          0          0         -6      Watts
ps0_output_power                        0 1100000000 1000000000          0          0         -6      Watts
ps1_input_power                 292000000 1100000000 1000000000          0          0         -6      Watts
ps1_output_power                288000000 1100000000 1000000000          0          0         -6      Watts
total_power                     288000000 2200000000 2000000000          0          0         -6      Watts
IPU0_BGA_area_bottom                36447      70000      65000       5000      10000         -3   DegreesC
IPU0_CoreV_bottom                   38158      95000      90000       5000      10000         -3   DegreesC
...
ps1_outlet_temp                     48000      75000      55000          0          0         -3   DegreesC
ps_dimm_temp                        36500      90000      85000          0       5000         -3   DegreesC
IPU01_3V3                            3340       3465       3399       3135       3201         -3      Volts
IPU01_VDDDRV                         6704       7140       7004       6460       6596         -3      Volts
...
stby_2v5_volt                        2471       2625       2575       2375       2425         -3      Volts
stby_3v3_volt                        3332       3465       3399       3135       3201         -3      Volts

3.2. GUI

The sensor monitoring operations available in the GUI are described in Table 3.2.

Table 3.2 GUI sensor monitoring operations

Command

Description

Sensors

Display the sensors present in the system with the current value and threshold values. You can filter sensors by severity with the “Filter by severity” button.

Fig. 3.1 shows the IPU-M2000 sensor-monitoring GUI page for this operation.

_images/sensor_monitoring.png

Fig. 3.1 GUI: IPU-M2000 sensor monitoring operations

3.3. REST API

You can perform sensor monitoring through the REST interface either by sending curl queries to the URI or by using the openbmctool.py utility. Table 3.3 describes the commands available.

Table 3.3 Sensor monitoring using REST interface

Command

Description

list

List sensors available in the system. Using the openbmctool.py will print current sensor values together with thresholds for critical high and low, and warning high and low

List all sensors:

$ curl -k https://<bmcip>/xyz/openbmc_project/sensors/list -u <bmcuser>:<bmcpass>
$ python3 openbmctool.py -H <bmcip> -U <bmcuser> -P <bmcpass> sensors list

List sensor groups:

$ curl -k https://<bmcip>/xyz/openbmc_project/sensors/<sensortype>/list -u <bmcuser>:<bmcpass>

Show individual sensors:

$ curl -k https://<bmcip>/xyz/openbmc_project/ sensors/<sensortype>/<sensor_name>/list -u <bmcuser>:<bmcpass>

<sensortype> can be one of “voltage”, “temperature”, “power” or “fan_tach”

enumerate

Display information associated with the sensor

$ curl -k https://<bmcip>/xyz/openbmc_project/sensors/<sensortype>/<sensor_name>/enumerate -u <bmcuser>:<bmcpass>

Example output from the command:

$ python3 openbmctool.py -H <bmcip> -U <bmcuser> -P <bmcpass> sensors list
Attempting login...
sensor                    | type         | units     | value   | target
IPU0_BGA_area_bottom      | temperature  | DegreesC  | 37.408  | N/A
IPU0_CoreV_bottom         | temperature  | DegreesC  | 38.024  | N/A
...
stby_1v8_volt             | voltage      | Volts     | 1.802   | N/A
stby_1v15_volt            | voltage      | Volts     | 1.147   | N/A
stby_2v5_volt             | voltage      | Volts     | 2.471   | N/A
stby_3v3_volt             | voltage      | Volts     | 3.328   | N/A
total_power               | power        | Watts     | 288.0   | N/A

3.4. IPMI

Table 3.4 describes the ipmitool sensor-related commands that are available.

Table 3.4 sensor operations using IPMI interface

Command

Description

SDR list

Display sensor data repository (SDR) entry readings and their status

$ ipmitool -I lanplus -C 3 -p 623 -U <bmcuser> -P <bmcpass> -H <bmcip> sdr list

SDR extended list

Display extended sensor information

$ ipmitool -I lanplus -C 3 -p 623 -U <bmcuser> -P <bmcpass> -H <bmcip> sdr elist

Sensor list

Display sensors and thresholds in a wide table format

$ ipmitool -I lanplus -C 3 -p 623 -U <bmcuser> -P <bmcpass> -H <bmcip> sensor list

SDR get

Display information for sensor data records specified by sensor ID

$ ipmitool -I lanplus -C 3 -p 623 -U <bmcuser> -P <bmcpass> -H <bmcip> sdr get <sensor_name>

The sensor name cannot be more than 16 characters long

SDR type

Display all records from the SDR repository of a specific type

$ ipmitool -I lanplus -C 3 -p 623 -U <bmcuser> -P <bmcpass> -H <bmcip> sdr type <sensor_type>

Use the command ipmitool sdr type to get a full list of sensor types

Example output from the command is shown below:

$ ipmitool -I lanplus -C 3 -p 623 -U <bmcuser> -P <bmcpass> -H <bmcip> sdr elist
BootProgress     | 02h | ok  | 34.1 |
cpu0             | 08h | ok  |  3.1 | Presence detected
powersupply0     | 09h | ok  | 10.1 | Presence detected, Failure detected
powersupply1     | 0Ah | ok  | 10.2 | Presence detected
dimm0            | 0Bh | ok  | 32.1 | Presence Detected
dimm1            | 0Ch | ok  | 32.2 | Presence Detected
...
IPU3_I2C48_Inlet | A9h | ok  | 45.37 | 28 degrees C
IPU3_I2C49_Outle | AAh | ok  | 45.38 | 33 degrees C

3.5. Redfish

You can do sensor monitoring through the Redfish interface either by sending curl queries or browsing the URI. Sensors can be found in the Chassis collection available at https://<bmcip>/redfish/v1/Chassis/. The Chassis collection represents a physical view of the IPU-M2000, containing items such as fans, power supplies and sensors.

The sensors are divided into three groups: thermal, power and voltage.

An example of using Redfish to view the thermal sensors associated with the chassis is shown below. The result of browsing the same endpoint is shown in Fig. 3.2.

$ curl -k https://<bmcip>/redfish/v1/Chassis/chassis/Thermal -u <bmcuser>:<bmcpass>
{
 "@odata.context": "/redfish/v1/$metadata#Thermal.Thermal",
 "@odata.id": "/redfish/v1/Chassis/chassis/Thermal",
 "@odata.type": "#Thermal.v1_4_0.Thermal",
 "Fans": [
   {
     "@odata.id": "/redfish/v1/Chassis/chassis/Thermal#/Fans/0",
     "@odata.type": "#Thermal.v1_3_0.Fan",
     "LowerThresholdCritical": 7471,
     "LowerThresholdNonCritical": 8405,
     "MaxReadingRange": 0,
     "MemberId": "fan0_0",
     "MinReadingRange": 0,
     "Name": "fan0 0",
     "Reading": 10890,
     "ReadingUnits": "RPM",
     "Status": {
       "Health": "OK",
       "State": "Enabled"
     },
     "UpperThresholdCritical": 18356,
     "UpperThresholdNonCritical": 17522
   },
   {
     "@odata.id": "/redfish/v1/Chassis/chassis/Thermal#/Fans/1",
     "@odata.type": "#Thermal.v1_3_0.Fan",
     "LowerThresholdCritical": 5040,
     "LowerThresholdNonCritical": 5670,
     "MaxReadingRange": 0,
     "MemberId": "fan0_1",
     "MinReadingRange": 0,
     "Name": "fan0 1",
     "Reading": 7830,
     "ReadingUnits": "RPM",
     "Status": {
       "Health": "OK",
       "State": "Enabled"
     },
     "UpperThresholdCritical": 16911,
     "UpperThresholdNonCritical": 16142
   },
   {
     "@odata.id": "/redfish/v1/Chassis/chassis/Thermal#/Fans/2",
     "@odata.type": "#Thermal.v1_3_0.Fan",
     "LowerThresholdCritical": 7471,
     "LowerThresholdNonCritical": 8405,
     "MaxReadingRange": 0,
     "MemberId": "fan1_0",
     "MinReadingRange": 0,
     "Name": "fan1 0",
     "Reading": 10752,
     "ReadingUnits": "RPM",
     "Status": {
       "Health": "OK",
       "State": "Enabled"
     },
     "UpperThresholdCritical": 18356,
     "UpperThresholdNonCritical": 17522
   },
   {
     "@odata.id": "/redfish/v1/Chassis/chassis/Thermal#/Fans/3",
     "@odata.type": "#Thermal.v1_3_0.Fan",
     "LowerThresholdCritical": 5040,
     "LowerThresholdNonCritical": 5670,
     "MaxReadingRange": 0,
     "MemberId": "fan1_1",
     "MinReadingRange": 0,
     "Name": "fan1 1",
     "Reading": 7730,
     "ReadingUnits": "RPM",
     "Status": {
       "Health": "OK",
       "State": "Enabled"
     },
     "UpperThresholdCritical": 16911,
     "UpperThresholdNonCritical": 16142
   },
   {
     "@odata.id": "/redfish/v1/Chassis/chassis/Thermal#/Fans/4",
     "@odata.type": "#Thermal.v1_3_0.Fan",
     "LowerThresholdCritical": 7471,
     "LowerThresholdNonCritical": 8405,
     "MaxReadingRange": 0,
     "MemberId": "fan2_0",
     "MinReadingRange": 0,
     "Name": "fan2 0",
     "Reading": 10676,
     "ReadingUnits": "RPM",
     "Status": {
       "Health": "OK",
       "State": "Enabled"
     },
     "UpperThresholdCritical": 18356,
     "UpperThresholdNonCritical": 17522
   },
   {
     "@odata.id": "/redfish/v1/Chassis/chassis/Thermal#/Fans/5",
     "@odata.type": "#Thermal.v1_3_0.Fan",
     "LowerThresholdCritical": 5040,
     "LowerThresholdNonCritical": 5670,
     "MaxReadingRange": 0,
     "MemberId": "fan2_1",
     "MinReadingRange": 0,
     "Name": "fan2 1",
     "Reading": 7705,
     "ReadingUnits": "RPM",
     "Status": {
       "Health": "OK",
       "State": "Enabled"
     },
     "UpperThresholdCritical": 16911,
     "UpperThresholdNonCritical": 16142
   },
   {
     "@odata.id": "/redfish/v1/Chassis/chassis/Thermal#/Fans/6",
     "@odata.type": "#Thermal.v1_3_0.Fan",
     "LowerThresholdCritical": 7471,
     "LowerThresholdNonCritical": 8405,
     "MaxReadingRange": 0,
     "MemberId": "fan3_0",
     "MinReadingRange": 0,
     "Name": "fan3 0",
     "Reading": 11066,
     "ReadingUnits": "RPM",
     "Status": {
       "Health": "OK",
       "State": "Enabled"
     },
     "UpperThresholdCritical": 18356,
     "UpperThresholdNonCritical": 17522
   },
   {
     "@odata.id": "/redfish/v1/Chassis/chassis/Thermal#/Fans/7",
     "@odata.type": "#Thermal.v1_3_0.Fan",
     "LowerThresholdCritical": 5040,
     "LowerThresholdNonCritical": 5670,
     "MaxReadingRange": 0,
     "MemberId": "fan3_1",
     "MinReadingRange": 0,
     "Name": "fan3 1",
     "Reading": 7577,
     "ReadingUnits": "RPM",
     "Status": {
       "Health": "OK",
       "State": "Enabled"
     },
     "UpperThresholdCritical": 16911,
     "UpperThresholdNonCritical": 16142
   },
   {
     "@odata.id": "/redfish/v1/Chassis/chassis/Thermal#/Fans/8",
     "@odata.type": "#Thermal.v1_3_0.Fan",
     "LowerThresholdCritical": 7471,
     "LowerThresholdNonCritical": 8405,
     "MaxReadingRange": 0,
     "MemberId": "fan4_0",
     "MinReadingRange": 0,
     "Name": "fan4 0",
     "Reading": 10664,
     "ReadingUnits": "RPM",
     "Status": {
       "Health": "OK",
       "State": "Enabled"
     },
     "UpperThresholdCritical": 18356,
     "UpperThresholdNonCritical": 17522
   },
   {
     "@odata.id": "/redfish/v1/Chassis/chassis/Thermal#/Fans/9",
     "@odata.type": "#Thermal.v1_3_0.Fan",
     "LowerThresholdCritical": 5040,
     "LowerThresholdNonCritical": 5670,
     "MaxReadingRange": 0,
     "MemberId": "fan4_1",
     "MinReadingRange": 0,
     "Name": "fan4 1",
     "Reading": 7668,
     "ReadingUnits": "RPM",
     "Status": {
       "Health": "OK",
       "State": "Enabled"
     },
     "UpperThresholdCritical": 16911,
     "UpperThresholdNonCritical": 16142
   }
 ],
 "Id": "Thermal",
 "Name": "Thermal",
 "Redundancy": [],
 "Temperatures": [
   {
     "@odata.id": "/redfish/v1/Chassis/chassis/Thermal#/Temperatures/0",
     "@odata.type": "#Thermal.v1_3_0.Temperature",
     "LowerThresholdCritical": 0.0,
     "LowerThresholdNonCritical": 5.0,
     "MaxReadingRangeTemp": 0.0,
     "MemberId": "exhaust",
     "MinReadingRangeTemp": 0.0,
     "Name": "exhaust",
     "ReadingCelsius": 33.5,
     "Status": {
       "Health": "Warning",
       "State": "Enabled"
     },
     "UpperThresholdCritical": 37.0,
     "UpperThresholdNonCritical": 32.0
   },
   {
     "@odata.id": "/redfish/v1/Chassis/chassis/Thermal#/Temperatures/1",
     "@odata.type": "#Thermal.v1_3_0.Temperature",
     "LowerThresholdCritical": 0.0,
     "LowerThresholdNonCritical": 5.0,
     "MaxReadingRangeTemp": 0.0,
     "MemberId": "inlet",
     "MinReadingRangeTemp": 0.0,
     "Name": "inlet",
     "ReadingCelsius": 29.0,
     "Status": {
       "Health": "OK",
       "State": "Enabled"
     },
     "UpperThresholdCritical": 35.0,
     "UpperThresholdNonCritical": 30.0
   }
 ]
_images/chassis-thermal.png

Fig. 3.2 Thermal sensor output