IPMI规范
IPMI(Intelligent Platform Management Interface,智能平台管理接口)是一种用于服务器管理和监控的标准,它提供了一种统一的方式来进行远程管理、故障检测、故障恢复以及其他与服务器硬件相关的管理任务。IPMI 规范是由 Intel、DELL、HP、NEC 和 Supermicro 等多家公司共同制定的,目的是为了简化服务器管理和监控。
IPMI 规范概述
标准化接口:IPMI 提供了一组标准化的接口,使得不同供应商的服务器硬件可以使用相同的管理工具进行监控和管理。
远程管理:IPMI 支持通过网络进行远程管理,即使操作系统未运行也可以进行管理操作。
监控与报警:IPMI 可以监控服务器的健康状况,并在出现问题时发送警报。
硬件控制:IPMI 可以控制服务器硬件,如开关机、重置、风扇控制等。
传感器数据:IPMI 可以收集服务器内部传感器的数据,如温度、电压、风扇转速等。
固件更新:IPMI 支持远程固件更新,包括 BMC(Baseboard Management Controller,基板管理控制器)固件。
IPMI 的组成部分
IPMI 消息:用于在 BMC 和管理软件之间传输数据的消息格式。
IPMI 命令:用于控制和监控服务器硬件的命令集。
IPMI 规范:定义了 IPMI 的架构、接口和命令集。
具体 IPMI规范 的内容查阅和下载请参考官方文档 IPMI规范官方文档。
传感器
openUBMC 中有很多的传感器,并且均满足 IPMI规范。目前 openUBMC 中传感器主要有以下两类:
- 门限传感器
- 离散传感器
开发者进行传感器定制时除了要配置传感器的属性信息,还要配置传感器数据记录,以便长期监控服务器的健康状态。
门限传感器
门限传感器(Threshold Sensor) 又叫做 连续性传感器,表征传感器的值是连续变化的(对比了解:数学中的连续值/曲线),如:温度,电压,功耗,转速等。当监测到的值超出预设的阈值时,门限传感器会发出警报。例如,温度传感器通常是一个门限传感器,它可以设置高温警告和高温临界值。
openUBMC 中门限传感器资源在 D-Bus 上的资源有两部分:
- IPMI规范资源:主要用于描述当前的传感器,在CSR中进行配置
- 可描述性资源:主要用于给北向提供可读的传感器参数,不需要手动配置,该类资源会在sensor组件中自动解析和上树。
门限传感器IPMI规范值
具体可以参考IPMI规范 43.1 SDR Type 01h, Full Sensor Record(P521)。
在 openUBMC 中,符合IPMI规范的门限传感器资源均使用 ThresholdSensor
类来进行表示,由 bmc.kepler.sensor
服务统一管理,挂载在资源协作接口的 bmc.kepler.Systems.ThresholdSensor
接口下,该类的基本属性参见 《传感器定制与开发》。
门限传感器可描述资源
可描述资源 均使用 ThresholdSensorDisplay
类来进行表示,该类不需要手动配置CSR,而是由 sensor 组件进行解析和上树,挂载在资源协作接口的 bmc.kepler.Systems.ThresholdSensorDisplay
接口下。同时该类对外提供的是 只读 能力,对应的基本属性如下表:
属性名称 | 属性类型 | 属性说明 |
---|---|---|
Status | string | 传感器当前状态,取值范围包括Enabled :传感器使能 Disabled :传感器禁用 InTest :传感器测试中 Starting :传感器更新中 |
Health | string | 传感器健康状态,取值范围包括Critical :紧急 Major :严重 Minor :一般 OK :正常 |
AssertStatus | uint16 | 传感器SEL事件状态,16进制数,如0x0080 其中bit[0:5]依次对应6种门限事件状态,分别是: [5]-低不可逆值变高 [4]-低不可逆值变低 [3]-低临界值变高 [2]-低临界值值变低 [1]-低非临界值变高 [0]-低非临界值变低 每个bit的读值状态分别为: 1 :Assert;0 :Deassert |
ReadingDisplay | string | 传感器读值的可读描述,精度为3位有效数字 |
UnitDisplay | string | 传感器单位的可读描述 |
UpperNonrecoverableDisplay | string | 传感器紧急门限上限的可读描述,精度为3位有效数字 |
UpperCriticalDisplay | string | 传感器严重门限上限的可读描述,精度为3位有效数字 |
UpperNoncriticalDisplay | string | 传感器一般门限上限的可读描述,精度为3位有效数字 |
LowerNonrecoverableDisplay | string | 传感器紧急门限下限的可读描述,精度为3位有效数字 |
LowerNoncriticalDisplay | string | 传感器严重门限下限的可读描述,精度为3位有效数字 |
LowerCriticalDisplay | string | 传感器一般门限下限的可读描述,精度为3位有效数字 |
PositiveHysteresisDisplay | string | 传感器正向迟滞量的可读描述,精度为3位有效数字 |
NegativeHysteresisDisplay | string | 传感器负向迟滞量的可读描述,精度为3位有效数字 |
离散传感器
离散传感器(Discrete Sensor),表征传感器的值是离散的(对比了解:数学中的离散值/曲线),如:运行状态,隔离值等。例如,电源状态传感器(开启或关闭)、风扇状态传感器(正常或故障)等。
离散传感器IPMI规范资源
具体可以参考IPMI规范 43.2 SDR Type 02h, Compact Sensor Record(P528)。
在 openUBMC 中,符合IPMI规范的离散传感器资源均使用 DiscreteSensor
类来进行表示,由 bmc.kepler.sensor
服务统一管理,挂载在资源协作接口的 bmc.kepler.Systems.DiscreteSensor
接口下,该类的基本属性参见 《传感器定制与开发》。
离散传感器可描述资源
可描述资源 均使用 DiscreteSensorDisplay
类来进行表示,该类不需要手动配置CSR,而是由 sensor 组件进行解析和上树,挂载在资源协作接口的 bmc.kepler.Systems.DiscreteSensorDisplay
接口下。同时该类对外提供的是 只读 方式,对应的基本属性如下表:
属性名称 | 属性类型 | 属性说明 |
---|---|---|
Status | string | 传感器当前状态:Enabled :传感器使能 Disabled :传感器禁用 InTest :传感器测试中 Starting :传感器更新中 |
Health | string | 传感器健康状态:Critical :紧急 Major :严重 Minor :一般 OK :正常 |
AssertStatus | uint16 | 传感器SEL事件状态,16进制数,如0x8000 bit[0:14]依次对应15种离散事件状态,每个bit的两种读值状态: 1 :Assert 0 :Deassert |
离散事件资源
离散事件,是针对 离散传感器 需要承载和触发的事件源。每个离散传感器可以监听 15 个离散事件,例如XXX。对应的离散事件的状态均在离散传感器状态 AssertStatus
上进行体现。离散事件资源由 sensor 组件管理,挂载在资源协作接口的 bmc.kepler.Systems.DiscreteEvent
接口下。离散事件的基本属性参见 《传感器定制与开发》。
传感器实体资源
传感器实体资源,表征当前的传感器依赖或者所属硬件的实体描述。该实体的 在位状态 或 上下电状态 会影响当前传感器的值以及状态,还有对应传感器事件 IPMI SEL 的生成状态。例如:
若 CPU 下电,则 CPU 核温传感器对应的变化如下:
- CPU 核温传感器读数为
na
- CPU 核温传感器状态为
Disabled
- CPU 核温高温告警 IPMI SEL 会恢复
传感器实体资源由 sensor 组件管理,挂载在资源协作接口的 bmc.kepler.Systems.Entity
接口下。传感器实体资源的基本属性参见 《传感器定制与开发》。
传感器数据记录
本章节参考IPMI规范 43. Sensor Data Record Formats(P520),作为传感器的关联内容选择性拓展学习。
传感器数据记录(Sensor Data Record, SDR),以二进制方式存放传感器数据,主要是静态数据,包含三个组成部分:记录头(Record Header)、记录"键"(Record Key)、记录体(Record Body)。IPMI命令是通过SDR获取传感器信息的。下面将详细介绍SDR的数据格式和IPMI命令如何获取传感器信息。
数据格式
Record Header
所有SDR的 Record Header 格式一致,包含了一条数据记录的基本信息,其字段含义如下表。
字段名称 | 数据大小 | 字段说明 |
---|---|---|
RecordId | 2 bytes | 记录编号,唯一标识一条数据记录 |
SDRVersion | 1 bytes | SDR版本,0x51 |
RecordType | 1 bytes | 记录类型,IPMI共有12种记录类型 full sensor record - 0x01 compact sensor record - 0x02 device-relative entity association record - 0x09 fru device locator - 0x11 management controller device locator - 0x12 ... ... |
RecordLength | 1 bytes | 记录长度 |
Record Key
Record Key 用于唯一标识同一类SDR的一条数据信息,不同类的SDR的标识方式不同。根据传感器类型的不同,Record Key有下列四种构成方式:
full sensor record / compact sensor record
字段名称 | 数据大小 | 字段说明 |
---|---|---|
OwnerId | 1 bytes | 传感器的归属Id |
OwnerLun | 1 bytes | 传感器的归属Lun |
Number | 1 bytes | 传感器编号 |
DEA:device-relative entity association record
字段名称 | 数据大小 | 字段说明 |
---|---|---|
EntityId | 1 bytes | 管理设备的实体标识 |
EntityInstance | 1 bytes | 管理设备的实体实例 |
DeviceAddress | 1 bytes | 管理设备的从地址 |
DeviceChannel | 1 bytes | 管理设备的通道 |
Flags | 1 bytes | 管理设备关联的设备标记 |
Entity1Address | 1 bytes | 管理设备关联的第一个设备的地址 |
Entity1Channel | 1 bytes | 管理设备关联的第一个设备的通道 |
Entity1Id | 1 bytes | 管理设备关联的第一个设备的实体标识 |
Entity1Instance | 1 bytes | 管理设备关联的第一个设备的实体实例 |
fru device locator
字段名称 | 数据大小 | 字段说明 |
---|---|---|
AccessAddress | 1 bytes | 管理设备访问地址 |
FruId | 1 bytes | fru编号 |
LogicalDevice | 1 bytes | 标识fru为逻辑设备或是物理设备 |
Channel | 1 bytes | 管理设备的通道 |
MCDL:management controller device locator
字段名称 | 数据大小 | 字段说明 |
---|---|---|
SlaveAddress | 1 bytes | 管理设备的从地址 |
Channel | 1 bytes | 管理设备的通道 |
Record Body
Record Body 是数据记录的主体内容,包含的主要内容如下。
记录类型 | 记录内容 |
---|---|
full sensor record | EntityId、EntityInstance、Initialization、Capabilities、SensorType、ReadingType、AssertMask、DeassertMask、ReadingMask、Unit、BaseUnit、ModifierUnit、Linearization、M、MT、B、BA、Accuracy、RBExp、Analog、NominalReading、NormalMaximum、NormalMinimum、MaximumReading、MinimumReading、UpperNonrecoverable、UpperCritical、UpperNoncritical、LowerNonrecoverable、LowerNoncritical、LowerCritical、PositiveHysteresis、NegativeHysteresis、SensorName |
compact sensor record | EntityId、EntityInstance、Initialization、Capabilities、SensorType、ReadingType、AssertMask、DeassertMask、DiscreteMask、Unit、BaseUnit、ModifierUnit、RecordSharing、PositiveHysteresis、NegativeHysteresis、SensorName |
DEA | Address2、Channel2、Entity2Id、Entity2Instance、Address3、Channel3、Entity3Id、Entity3Instance、Address4、Channel4、Entity4Id、Entity4Instance |
fru device locator | DeviceType、DeviceTypeModifier、FruEntityId、FruEntityInstance |
MCDL | PowerStateInitialization、Capabilities、EntityId、EntityInstance、DeviceName |
IPMI获取传感器信息
IPMI 查询传感器信息的标准命令为:sensor list
,该命令先从 SDR 中获取静态基本信息再获取并处理动态信息,拼接格式化后传出。操作实例可参考 调测方法
IPMI SEL
SEL是System Event Log(系统事件日志)的缩写,它是IPMI的一个重要功能,用于记录系统中的各种硬件事件,如温度过高、电源故障等,并提供查询和清除这些事件的功能。因此,配置传感器时关联IPMI SEL可以在传感器检测到异常或状态变化时,将相关信息发送到IPMI SEL进行记录。这样,管理员就可以通过查看IPMI SEL来了解系统的运行状态和故障情况。
SEL事件触发
连续传感器
触发场景
所谓触发场景,是指触发连续传感器的读值与门限值进行比较的场景,包括:
- 连续传感器对象注册初始化的时候
disable_scanning_local
状态从disabled
更新为enabled
- 监听属性变化:Reading属性及6个门限值属性
- 模拟传感器读值开启与关闭
事件生成条件
简单讲,连续传感器的事件生成条件即读值与门限值比较后是否满足了产生或恢复事件的条件。当符合上述的触发场景时,会依次比较读值与6个门限值是否满足产生与恢复条件,最多会比较12次。检查是否满足事件生成条件流程如下:
离散传感器
触发场景
离散传感器的触发场景包括:
- 离散事件对象注册初始化的时候
- 监听属性变化:Property属性及EventDir属性
- 模拟传感器读值开启与关闭
事件生成条件
简单讲,离散传感器的事件生成条件即关联的离散事件的方向是否转变。当符合上述的触发场景时,会查看是否满足产生与恢复条件。
监听方式 | 数据组成 |
---|---|
组合监听 | Property:event_dir、event_data3、event_data2、event_data1 |
独立监听 | 本对象属性:EventDir、EventData1、EventData2、EventData3 |
---- | ---- |
事件翻转 | Conversion 属性低4位为翻转位 Conversion & 0x0F == 1 :assert => deassert /deassert => assert |
检查是否满足事件生成条件流程如下:
SEL数据存储
SEL数据存储在BMC系统的非易失性存储器中,数据格式的详细定义参见IPMI规范 Section 32 SEL Record Formats (P431)。
IPMI 获取 SEL 事件
IPMI 获取SEL事件的标准命令为:sel list
。命令使用方式与 IPMI获取传感器信息 类似,此处不再赘述。