sensor
更新时间:2024/12/19
在Gitcode上查看源码

sensor 主要用于承接传感器管理

功能简介

传感器主要用于监测如CPU、内存、硬盘、风扇、电源、卡等部件的信息,如部件在位、温度、电压、风扇转速等信息。并相应记录IPMI SEL以及通过传感器健康状态进行表征,以此达到监管部件的运行状态健康状况的目的。

关键特性

门限型传感器

门限传感器 又叫做 连续性传感器,表征传感器的值是连续变化的(对比了解:数学中的连续值/曲线),如:温度,电压,功耗,转速等。通过门限传感器可描述性资源表征传感器的运行状态和健康状况。

关联类:ThresholdSensor

门限型传感器可描述资源

门限传感器可描述资源均使用ThresholdSensorDisplay类来进行表示,该类不需要CSR配置,由sensor 组件进行解析和完成资源协作接口注册。

属性名称属性类型属性说明
Statusstring传感器当前状态:
Enabled:传感器使能
Disabled:传感器禁用
InTest:传感器测试中
Starting:传感器更新中
Healthstring传感器健康状态:
Critical:紧急
Major:严重
Minor:一般
OK:正常
AssertStatusuint16传感器SEL事件状态,如0x0080
bit[0:5]依次对应6种门限事件状态,每个bit的两种读值状态:
1:Assert
0:Deassert
ReadingDisplaystring传感器读值可读描述,精度3位有效数字
UnitDisplaystring传感器单位可读描述
UpperNonrecoverableDisplaystring传感器紧急门限上限可读描述,精度3位有效数字
UpperCriticalDisplaystring传感器严重门限上限可读描述,精度3位有效数字
UpperNoncriticalDisplaystring传感器一般门限上限可读描述,精度3位有效数字
LowerNonrecoverableDisplaystring传感器紧急门限下限可读描述,精度3位有效数字
LowerNoncriticalDisplaystring传感器严重门限下限可读描述,精度3位有效数字
LowerCriticalDisplaystring传感器一般门限下限可读描述,精度3位有效数字
PositiveHysteresisDisplaystring传感器正向迟滞量可读描述,精度3位有效数字
NegativeHysteresisDisplaystring传感器负向迟滞量可读描述,精度3位有效数字

离散型传感器

离散传感器,表征传感器的值是离散的(对比了解:数学中的离散值/曲线),如:运行状态,隔离值等。通过离散型传感器可描述性资源表征传感器的运行状态和健康状况。

关联类:DiscreteSensor

离散型传感器可描述资源

离散型传感器可描述资源均使用DiscreteSensorDisplay类来进行表示,该类不需要CSR配置,由sensor组件进行解析和完成资源协作接口注册。

属性名称属性类型属性说明
Statusstring传感器当前状态:
Enabled:传感器使能
Disabled:传感器禁用
InTest:传感器测试中
Starting:传感器更新中
Healthstring传感器健康状态:
Critical:紧急
Major:严重
Minor:一般
OK:正常
AssertStatusuint16传感器SEL事件状态,16进制的数,如0x8000
bit[0:14]依次对应15种离散事件状态,每个bit的两种读值状态:
1:Assert
0:Deassert

IPMI SEL

连续型传感器触发事件

连续传感器的事件生成条件即:读值与门限值比较后是否满足了产生或恢复事件的条件。会依次比较读值与6个门限值是否满足产生与恢复条件。

检查是否满足事件生成条件流程如下:

离散型传感器触发事件

离散传感器的事件生成条件即关联的离散事件的方向是否发生改变,然后查看是否满足产生与恢复条件。

监听方式数据组成
组合监听Property:`event_dir
独立监听本对象属性:EventDir、EventData1、EventData2、EventData3
--------
事件翻转Conversion属性低4位为翻转位,翻转该事件的方向
Conversion & 0x0F == 1assert => deassertdeassert => assert

检查是否满足事件生成条件流程如下:

对外接口

资源协作接口

  • Sensors

    • Path: /bmc/kepler/Chassis/:ChassisId/Sensors

    • Interface: bmc.kepler.Chassis.Sensors

      方法描述
      GetThresholdSensorList获取连续传感器列表
      GetDiscreteSensorList获取离散传感器列表
      GetSensorList获取所有传感器列表
      MockSensor模拟传感器
      SetSensorStatus设置传感器使能
      ExportSel导出传感器事件
      GetSel获取传感器事件

获取连续传感器列表 GetThresholdSensorList

输入:

输出:

  • ThresholdSensorList: 连续传感器列表

列表中的基本信息如下:

  • SensorNumber: 传感器编号
  • SensorName: 传感器名称
  • SensorIdentifier:传感器标识
  • SensorUnit: 传感器单位,具体的描述单位,比如RPM
  • SensorStatus: 传感器状态
  • SensorReading: 传感器读数,经过单位转换之后
  • LowerThresholdFatal: 传感器紧急事件下限
  • LowerThresholdCritical: 传感器严重事件下限
  • LowerThresholdNonCritical: 传感器一般事件下限
  • UpperThresholdNonCritical: 传感器紧急事件上限
  • UpperThresholdCritical: 传感器严重事件上限
  • UpperThresholdFatal: 传感器一般事件上限
  • PosHysteresis: 传感器正向迟滞量
  • NegHysteresis: 传感器负向迟滞量
  • SensorType: 传感器类型
  • Status: 传感器使能状态
  • Health: 传感器健康状态
  • SystemId: 传感器归属host的编号

获取离散传感器列表 GetDiscreteSensorList

输入:

输出:

  • DiscreteSensorList: 离散传感器列表

列表中的基本信息如下:

  • SensorNumber: 传感器编号
  • SensorName: 传感器名称
  • SensorIdentifier:传感器标识
  • SensorStatus: 传感器状态
  • SystemId: 传感器归属host的编号

获取所有传感器列表 GetSensorList

输入:

输出:

  • SensorList: 传感器列表

列表中的基本信息如下:

  • SensorNumber: 传感器编号
  • SensorName: 传感器名称
  • SensorUnit: 传感器单位,具体的描述单位,比如RPM
  • SensorStatus: 传感器状态
  • SensorReading: 传感器读数,经过单位转换之后
  • LowerFatal: 传感器紧急事件下限
  • LowerCritical: 传感器严重事件下限
  • LowerNonCritical: 传感器一般事件下限
  • UpperNonCritical: 传感器紧急事件上限
  • UpperCritical: 传感器严重事件上限
  • UpperFatal: 传感器一般事件上限
  • PosHysteresis: 传感器正向迟滞量
  • NegHysteresis: 传感器负向迟滞量
  • SensorType: 传感器类型
  • BaseUnit: 单位(数字描述)
  • ReadingType: 读值类型
  • SystemId: 传感器归属host的编号

模拟传感器 MockSensor

输入:

  • Enabled:使能模拟:1 = 开启模拟; 0 = 关闭模拟
  • SensorName:传感器名称
  • Value:传感器读数,stop 表示停止模拟

输出:

设置传感器使能 SetSensorStatus

输入:

  • SensorName:传感器名称
  • Status:使能状态:enabled; disabled

输出:

导出传感器事件 ExportSel

输入:

  • Path:导出sel的路径

输出:

  • TaskId: 任务标识

获取传感器事件 GetSel

输入:

  • StartId:查询事件的起始编号,大于等于1。超过总条数会返回空表
  • Count:查询事件的数量,大于等于0。超过总条数会返回所有事件

输出:

  • Total: 获取传感器事件的总条数
  • SelList: 传感器事件列表

列表中的基本信息如下:

  • RecordId: 传感器事件编号
  • Timestamp: 传感器事件时间戳
  • Level: 传感器事件等级
  • SensorName: 传感器名称
  • SensorType: 传感器类型
  • Status: 传感器事件状态
  • Description: 传感器事件描述

IPMI接口

  • 具体参数参考本组件配置文件ipmi.json
方法描述
SetSensorEventReceiver设置传感器事件接收器
GetSensorEventReceiver获取传感器事件接收器
ReportSensorEvent传感器事件消息
GetPEFCapabilities获取PEF能力
SetPEFPostponeTimer设置PEF延迟定时器
SetPEFParameters设置PEF参数
GetPEFParameters获取PEF参数
SetPEFLastEventId设置PEF最新事件ID
GetPEFLastEventId获取PEF最新事件ID
GetDeviceSDRInfo获取设备SDR信息
GetDeviceSDR获取设备SDR
ReserveDeviceSDR预留设备SDR存储库
GetSensorFactors获取传感器读数计算系数
SetSensorHysteresis设定传感器迟滞
GetSensorHysteresis获取传感器迟滞
SetSensorThreshold设置传感器阈值
GetSensorThreshold获取传感器阈值
SetSensorEventEnable设置传感器事件启用状态
GetSensorEventEnable获取传感器事件启用状态
RearmSensorEvent重新布置传感器事件
GetSensorEventStatus获取传感器事件状态
GetSensorReading获取传感器读数
GetSensorType获取传感器类型
GetSDRRepoInfo获取SDR存储库信息
GetSDRRepoAllocInfo获取SDR存储库分配信息
GetSDRReserveId获取SDR预约ID
GetSDR获取SDR
AddPartialSDR添加部分SDR
ClearSDR清除SDR
GetSDRRepoTime获取SDR存储库时间
EnterSDRRepoUpdate进入SDR存储库更新模式
ExitSDRRepoUpdate退出SDR存储库更新模式
RunSDRInitAgent运行SDR初始化代理
GetSelInfo获取SEL信息
GetSelAllocInfo获取SEL分配信息
GetSelReserveId获取SEL预约ID
GetSelEntry获取SEL条目
AddSelEntry添加SEL条目
ClearSel清除SEL
OEMGetSystemSel查询系统健康事件(BMC内部使用)
OEMGetSystemSel2查询系统健康事件(dft)
SetBMCEnables设置BMC全局启用
GetBMCEnables获取BMC全局启用
GetDeviceLocatorRecordId获取设备定位器记录ID

配置介绍

传感器配置需要一定程度上参照 IPMI标准规范协议官方文档

实体资源配置

传感器实体资源,表征当前的传感器依赖或者所属的硬件的实体描述,该实体的在位状态或者上下电状态会影响当前传感器的值以及状态,还有对应传感器事件IPMI SEL的生成状态。

配置属性

属性名称属性类型属性说明
Iduint8传感器对应的实体标识
具体参照 Table 43-, Entity ID Codes(P550)
Instanceuint8传感器对应的实体实例标识,通常以0x60开始配置
具体参照 Section 39.1 System- and Device-relatice Entity Instance Values(P492)
Slotuint8实体所在的槽位,默认0xFF。如果槽位不是默认,则会根据槽位生成唯一的Instance
Namestring实体的名称
Presenceuint8实体的在位状态,需要关联对应的在位信号来源
若不存在部件动态拔插,则配置为1
PowerStateuint8实体的上下电状态,需要关联对应的上下电信号来源
若与上下电状态无关,则配置为1

配置关键点

  1. Entity Id严格按照IPMI规范中的表格进行配置
  2. Entity Instance保证同一Entity Id下唯一

连续型传感器配置

连续型传感器,表征传感器的值是连续变化的,如:温度,电压,功耗,转速等。

配置属性

以下属性配置原则皆参照 Section 43.1 SDR Type 01h, Full Sensor Record(P521)

属性名称属性类型属性说明
OwnerIduint8传感器的归属Id
BMC - 0x20
OwnerLunuint8传感器的归属Lun
owner为系统软件 - 0x00
EntityIduint8传感器对应实体标识,关联传感器对应的Entity.Id
EntityInstanceuint8传感器对应实体实例,关联传感器对应的Entity.Instance
Initializationuint8传感器初始化选项,门限传感器 - 0x7F
Capabilitiesuint8传感器能力
SensorTypeuint8传感器类型
具体参照 Table 42-, Sensor Type Codes(P505)
ReadingTypeuint8传感器读值类型,门限传感器 - 0x01
具体参照 Table 42-, Event/Reading Type Code Ranges(P503)
SensorNamestring传感器名称
AssertMaskuint16传感器事件产生掩码,决定是否能产生事件
DeassertMaskuint16传感器事件恢复掩码,决定是否能恢复事件
ReadingMaskuint16传感器读值掩码,决定是否能对外显示门限
Unituint8传感器单位
BaseUnituint8传感器基准单位
具体参照 Table 43-, Sensor Unit Type Codes(P554)
ModifierUnituint8传感器单位描述符
具体参照 Table 43-, Sensor Unit Type Codes(P554)
Linearizationuint8传感器线性计算方程
计算表达式参照 Section 36.3 Sensor Reading Conversion Formula
Muint8按需配置,默认配置为1,传感器计算表达式M参数低8bit
MTuint8按需配置,传感器计算表达式M参数高2bit和容差
Buint8按需配置,传感器计算表达式B参数低8bit
BAuint8按需配置,传感器计算表达式B参数高2bit和准确率低6bit
Accuracyuint8按需配置,传感器准确率高6bit和传感器方向
RBExpuint8按需配置,传感器计算表达式R/B参数,R即表达式中的K2,B即表达式中的K1,各4bit
Analoguint8传感器模拟特性标志,通常配置为1
NominalReadinguint8传感器名义读值,当前无实际含义,在数据格式范围内即可
NormalMaximumuint8传感器正常最大读值,当前无实际含义,配0或不配都可
NormalMinimumuint8传感器正常最小读值,配0或不配都可
MaximumReadinguint8传感器实际最大读值,与数据格式有关
若为无符号数,配置为255
若为有符号数,配置为127
MinimumReadinguint8传感器实际最小读值,与数据格式有关
若为无符号数,配置为0
若为有符号数,配置为128
UpperNonrecoverableuint8按需配置,传感器紧急事件上限
UpperCriticaluint8按需配置,传感器严重事件上限
UpperNoncriticaluint8按需配置,传感器一般事件上限
LowerNonrecoverableuint8按需配置,传感器紧急事件下限
LowerCriticaluint8按需配置,传感器严重事件下限
LowerNonCriticaluint8按需配置,传感器一般事件下限
PositiveHysteresisuint8按需配置,传感器上升事件恢复迟滞量
NegativeHysteresisuint8按需配置,传感器下降事件恢复迟滞量
Readinguint8传感器原始读值,引用传感器的数据源(如Scanner)读值同步
ReadingStatusuint8传感器读值状态,引用传感器的数据源(如Scanner)读值状态同步

配置关键点

  1. 传感器类型SensorType严格按照IPMI规范中的表格配置
  2. 三个Mask属性要与配置的门限匹配,若配置了某个门限,Mask相应bit需要置位
  3. 注意当前Reading(也即原始值),数据源的范围不可超过255,若不满足则需要通过表达式进行一定程度的缩放,并通过传感器的表达公式进行还原

离散型传感器配置

离散型传感器,表征传感器的值是离散的,如:上下电状态、在位状态、运行状态等。

配置属性

以下属性配置原则皆参照 Section 43.2 SDR Type 02h, Compact Sensor Record(P521)

属性名称属性类型属性说明
OwnerIduint8传感器的归属Id
BMC - 0x20
OwnerLunuint8传感器的归属Lun
owner为系统软件 - 0x00
EntityIduint8传感器对应实体标识,关联传感器对应的Entity.Id
EntityInstanceuint8传感器对应实体实例,关联传感器对应的Entity.Instance
Initializationuint8传感器初始化选项,离散传感器 - 0x63
Capabilitiesuint8传感器能力
SensorTypeuint8传感器类型
具体参照 Table 42-, Sensor Type Codes(P505)
ReadingTypeuint8传感器读值类型
具体参照 Table 42-, Event/Reading Type Code Ranges(P503)
SensorNamestring传感器名称
AssertMaskuint16传感器事件产生掩码,决定是否能产生事件
DeassertMaskuint16传感器事件恢复掩码,决定是否能恢复事件
DiscreteMaskuint16传感器离散值掩码
Unituint8传感器单位
离散传感器 - 0xC0
BaseUnituint8传感器基准单位
离散传感器 - 0
ModifierUnituint8传感器单位描述符
离散传感器 - 0
DiscreteTypeuint8传感器离散类型,具体类型参照 Table 42-, Sensor Type Codes(P505)
普通离散:0
数字离散:1
RecordSharinguint16传感器记录共享、离散参考方向,配置为1
PositiveHysteresisuint8传感器上升事件恢复迟滞量,离散传感器通常无应用场景,无需配置
NegativeHysteresisuint8传感器下降事件恢复迟滞量,离散传感器通常无应用场景,无需配置
Readinguint16传感器原始值,离散传感器无实际意义,无需配置

配置关键点

  1. 传感器类型SensorType严格按照IPMI规范中的表格配置
  2. 离散传感器的读值类型ReadingType分为两种:02h~0Ch6Fh,需要根据离散事件的配置场景相应配置该属性
  3. 离散传感器的配置与挂载的离散事件相关,注意三个Mask的配置需要与离散事件配置匹配

离散事件配置

离散事件,是针对离散传感器需要承载和触发的事件源,每个离散传感器最多可以监听15个离散事件。

配置属性

属性名称属性类型属性说明
Propertyuint32离散事件监听的属性,应用场景为监听方式是组合监听
共4字节,从高到低分别表示'event_dir, event_data3, event_data2, event_data1',数据含义参照本对象对应属性的解释
ListenTypeuint8离散事件监听方式:
0:组合监听,表征SEL的三个数据和方向均来自于Property属性
1:独立监听,表征SEL的三个数据和方向来自于本对象属性
EventData1uint8应用场景为监听方式是独立监听
离散事件产生的数据1,数据含义参照 29.7 Event Data Field Formats
其中低4bit表示事件的偏移,配置参照 Table 42-, Generic Event/Reading Type CodesTable 42-, Sensor Type CodesOffset
EventData2uint8应用场景为监听方式是独立监听
离散事件产生的数据2,数据含义参照 29.7 Event Data Field Formats
应用需求参照 Table 42-, Generic Event/Reading Type CodesTable 42-, Sensor Type Codes中的描述,若无应用需求,配置为默认值255
EventData3uint8应用场景为监听方式是独立监听
离散事件产生的数据3,数据含义参照 29.7 Event Data Field Formats
应用需求参照 Table 42-, Generic Event/Reading Type CodesTable 42-, Sensor Type Codes中的描述,若无应用需求,配置为默认值255
EventDiruint8离散事件监听的属性,应用场景为监听方式是独立监听
离散事件产生的方向:
0:恢复
非0:产生
Conversionuint8离散事件翻转标识,高4bit用于组合监听时event_data1的掩码,低4bit用来表征是否翻转事件方向:
1:翻转;
非1:不翻转
SensorObjectstring离散事件关联的离散传感器,当IPMI SEL产生或者恢复时体现在当前传感器的健康状态以及SEL上

配置关键点

  1. 监听方式无固定要求,可以根据场景任意选择。若选择组合监听,需要保证Property属性按要求进行配置,保证各个字节的数据皆按照含义正确配置;若选择独立监听,需要保证三个EventData数据及EventDir属性按照含义正确配置。
  2. 离散事件实则是遵循IPMI规范定义的,因此需要严格参照IPMI规范中的描述和定义进行配置