ACPI相关(12)- ACPI对IPMI的支持_intelligent chassis management bus-程序员宅基地

技术标签: ACPI项目  linux  固件分析  

一、IPMI介绍

1、平台管理

平台管理表示的是一系列的监视和控制功能,操作的对象是系统硬件。比如通过监视系统的温度,电压,风扇、电源等等,并做相应的调节工作,以保证系统处于健康的状态。

当系统不正常时,可以选择复位来重启系统。

同时平台管理还负责记录各种硬件的信息和日志记录,用于提示用户和后续问题的定位。

以上的这些功能可以集成到一个控制器上来实现,这个控制器被称为基板管理控制器(Baseboard Manager Controller,简称BMC)。

一般服务器中会用到BMC。

 

注:IPMI,它是与BMC匹配的接口,所有的BMC都需要实现这种接口。

2、IPMI

IPMI的全称是Intelligent Platform Management Interface,智能平台管理接口。

IPMI就是对“平台管理”这个概念的具体的规范定义,该规范定义了“平台管理”的软硬件架构,交互指令,事件格式,数据记录,能力集等。而BMC是IPMI中的一个核心部分,属于IPMI硬件架构。

主要用于服务器各个部件(CPU、内存、硬盘、风扇、机框等)的温度、电压等健康状态进行检测,

同时根据各个温度采集点情况实时调整风扇转速保证服务器不产生过温、而且控制总体功耗又不能过高,如果单板部件出现任何异常则通过SNMP协议、SMTP协议、Redfish协议等多种业界通用规范讲信息及时上报给上层网管,以便运维人员及时处理,保证业务无损。

BMC主要用于采集单个服务器上各种信息,同时提供给上层运维网管软件。主要有两种手段:

第一种BMC会提供各种各样的接口供上层网管查询,如web、命令行等人机接口、SNMP、IPMI、Restful等机机接口;

第二种是主动上报,当检测到有故障产生时,BMC可以通过SNMP trap消息、SMTP 邮件消息、Redfish http json报文等手段上报给上层网管软件的服务端,以便运维人员及时识别处理故障。一般情况下,BMC软件上报的消息中都会明确的指明具体是哪个部件产生了故障、处理建议是怎样的等等。

在IPMB(Intelligent Platform Management Bus)总线上连接着各个管理控制器,分别执行不同功能。IPMB总线上还连接着一些I2C器件,用来作为传感器的接口,让系统管理软件能够通过IPMB来读取传感器的数据。同时,这些传感器的具体配置信息,

告警门限、事件触发是否允许等配置都保存在一组名为SDR(Sensor Data Record)的数据里面。

传感器产生的告警事件则保存在一组叫做SEL(Sensor Event Log)的数据里面。在IPMB总线上,连接着一个ICMB(Intelligent Chassis Management Bus)桥,通过ICMB可以和远程的另一个管理平台通信。此外,在IPMB总线上,还可以外接其他的用户板,用来扩展IPMI管理平台的功能。
管理系统的核心——BMC芯片就相当于计算机中的中央处理器,通过BMC芯片上一对SMBus接口连接网络,用户可通过网络访问实现对远程服务器接管的带外管理(Out-of-band)功能,例如远程接管服务器(Pre-OS),在客户端实现对远程服务器的完全接管;通过RS-232接口连接Modem,

在远程服务器宕机情况下,用户可以通过拨号访问获取SDR、SEL数据,分析诊断故障原因;BMC通过IPMB接口访问模组风扇背板、电源背板等上的SMC,实现对各种背板的温度电压风扇转速等关键参数管理;BMC通过系统接口(多用SMIC:Server Management Interface Chip),实现IPMI消息传输机制,控制LCD显示和实现上层软件与底层F/W通信,实现告警、数据采集。SDR、SEL、FRU(Field Replacement Unit)物理实体可以是做在芯片内的存储体,也可以是外挂的E2PROM。所有IPMI功能通过向BMC发送命令来完成,命令使用IPMI规范中规定的指令,BMC接收并在系统事件日志中记录事件消息,维护描述系统中传感器情况的传感器数据记录。

通过网络监控远程服务器。

被监控服务器需要硬件和操作系统接口驱动的支持,可以无需安装应用软件。

监控客户端需要应用软件如ipmitool工具,可以无需硬件和操作系统接口驱动的支持。

ipmi的远程监控是通过向与BMC相连的网络接口发送udp数据包实现的,udp数据包的定位是通过把ip地址写BMC芯片来实现,而这需要本地的Ipmi系统接口来完成连接。Ipmitool可以通过LAN远程监控系统,同时BMC中保存有一序列用户名和密码,通过LAN进行远端访问需要用户名和密码。

2.1接口说明

KCS:最常用的接口 ,物理层基于LPC协议,实现了 8742 KCS  interface,其中System interface默认就是LPC接口
SMIC (system management interface chip):用在没有内建的KCS/LPC控制器的BMC上,有三个IO Port,可基于ASIC/FPGA实现。
BT接口: 速度和性能最好的接口,需要握手,同样可基于ASIC/FPGA实现3个IO port,可用于定制化的BMC上。

 

3驱动的实现
    内核中IPMI驱动是分层实现的,最底层分别实现了基于Smbus、LPC的自动检测、事物处理、结果读取和清除的操作,并用这些函数初始化了抽象的system interface的对应的函数,从而屏蔽了底层硬件接口的区别。更上层的设备抽象和协议实现都是直接和抽象的system interface直接交互的。具体的说明可以参考内核中的Documentation/IPMI.txt文档,简要的归纳如下:
ipmi_smbus.ko: 实现对 IPMI management controller基于Smbus直接访问的接口驱动;

ipmi_ssif.ko: 在更早的内核版本里对应的名字就是 ipmi_smbus.ko,支持通过Smbus接口发送、接受信息;

ipmi_si.ko: 屏蔽了不同系统接口的驱动,支持KCS/SMIC/BT,除非host 和BMC之间使用Smbus或者其他定制化的接口,否则都需要这一标准驱动;定义了probe BMC的三种方法:ACPI/SMBIOS(DMI)/PCI (class type);

ipmi_msghandler.ko: 内核用它来实现IPMI协议规范 ,它注册了 IPMI驱动;

ipmi_devintf.ko: provides a user land IOCTL interface for the IPMI driver,每一个打开的文件都都对应到一个消息处理句柄。定义了 /dev/ipmi0对应的ioctl/open/release/fasync/poll/llseek的操作,给应用层程序提供了fs接口。其中ioctl的操作类型包括:IPMICTL_SEND_COMMAND,IPMICTL_SEND_COMMAND,IPMICTL_RECEIVE_MSG和 IPMICTL_RECEIVE_MSG_TRUNC。应用程序就是通过打开/dev/ipmi0或者/dev/ipmi0并调用各种IOCTL来实现和BMC的通信的;
ipmi_watchdog.ko:向上层用户提供一个标准的linux 看门狗计时器;

ipmi_poweroff.ko: 支持通过ipmi命令开关机的内核驱动。

二、BMC在ACPI规范中的说明

  1. acpi表及对象

1.1 SPMI

SPMI描述表是一个可选表,它描述了在系统引导时IPMI系统接口的与处理器相关的、转换的固定资源。SPMI表的目的是提供一种机制,该机制可以通过OSPM 很早就在引导过程中。

SPMI描述表可以用来描述固定资源或系统接口的PCI实现的位置。对于PCI上的系统接口,表只能描述启动引导进程时系统接口的位置。操作系统可以重新分配这些资源。因此,基于pci的系统接口是否保留在SPMI地址取决于操作系统。在正常运行时操作期间,软件应该直接在PCI上找到系统接口,并且/或使用OS对PCI的支持,而不是使用SPMI表。

管理控制器设备可以为向BMC发送IPMI消息提供多个系统接口。例如,一个BMC可以同时支持KCS和BT接口。应该为每个接口提供一个惟一的SPMI表。这允许OSPM选择一个它能够通信的接口,从而最大化可移植性。

 

1.2 控制方法

SPMI描述表提供了一种机制,可以在操作系统中执行ACPI控制方法之前使用。然而,OSPM内部并不支持这个表作为发现和报告系统资源的方法。因此,建议在ACPI名称空间中描述底板上的非pci IPMI系统接口。这使得OSPM可以将IPMI系统接口枚举为一个设备。此外,ACPI名称空间描述在热插拔场景中更加灵活和友好。

请注意,要与ACPI兼容,IPMI系统接口的固定资源仍然必须按照ACPI规范计算。如果设备没有在ACPI名称空间中正式描述,它的资源必须被描述为固定系统资源或附加到其他固定资源系统设备的资源,以确保OSPM不会试图将这些资源分配到其他设备。

为了在ACPI名称空间中正式描述IPMI系统接口,使用命名的设备对象创建IPMI设备。IPMI设备对象可以有以下元素:

控制方法

描述

_ADR

接口在其父总线上的地址的已命名对象

_HID

命名对象,提供接口的即插即用标识符。此值可以是特定于供应商的,但如果没有提供CID对象,则必须设置为IPI0001。

_CID

提供接口兼容的即插即用标识符的已命名对象。如果_HID包含供应商特定的标识符,则该对象是必需的,并包含IPI0001的值。否则,此对象是可选

_STR

指定对象,计算为一个Unicode字符串,操作系统可以使用该字符串向描述设备的最终用户提供信息。

_CRS

返回接口当前资源设置的命名对象。系统处理器管理接口被认为是静态资源;因此,只返回它们定义的资源。地址区域定义依赖于接口类型/子类型。

_STA

返回设备状态的对象:启用、禁用或删除,如ACPI规范中定义的那样。如果不存在此方法,则假定该设备已启用。

_IFT

指定在SPMI表中定义的接口类型的对象

_SRV

指定规范修订的对象

_GPE

为整数或包的已命名对象。如果_GPE计算为整数,则该值是FADT中描述的服务处理器管理接口将触发的GPE块的GPEx_STS寄存器中的SCI中断的位分配。

如果_GPE计算为一个包,则该包包含两个元素。第一个是对GPE块设备的对象引用,该设备包含将由接口触发的GPE寄存器。第二个元素是数值(整数),它指定包中第一个元素引用的GPE块设备的GPEx_STS寄存器中的SCI中断的位分配。(注意:只有在接口支持GPE时才提供该对象。)

 

如果IPMI接口支持中断,则使用_CRS中的中断描述符,如果通过IO (S)APIC支持中断,则使用_GPE对象,如果通过GPE寄存器支持中断,则使用_GPE对象。这个规范不允许中断描述符在_CRS中,而_GPE对象在IPMI设备范围中。如果IPMI接口不支持中断,那么_CRS中的中断描述符和_GPE对象都不会出现。

在一个操作系统域中可能有多个IPMI设备的多节点系统中,强烈建议在ACPI名称空间中描述所有IPMI设备,并为活动的IPMI设备启用_STA 控制方法。

  1. IPMI空间

本节介绍智能平台管理接口(IPMI)地址空间,以及如何使用此地址空间与AML中的BMC(BMC)硬件进行通信。
类似于SMBus,IPMI操作区域是基于命令的,其中IPMI地址空间内的每个偏移都表示IPMI命令和响应对。鉴于这种独特性,IPMI操作区域包括对其字段定义的限制,并要求对所有事务使用特定于IPMI的数据缓冲区。
兼容ACPI的操作系统对IPMI通用地址空间的支持是可选的,并且视是否存在ACPI IPMI设备(即具有“ IPI0001”即插即用ID的设备)而定。如果存在,则OSPM应根据设备下_IFT(IPMI接口类型)控制方法所指定的系统接口类型来加载必要的驱动程序软件,并注册用于访问IPMI操作区域空间的处理程序。
每个IPMI操作区域定义都标识单个IPMI网络功能。仅为需要从AML访问的IPMI网络功能定义了操作区域。与其他区域一样,只能通过Field术语访问IPMI操作区域。
该接口将每个IPMI网络功能建模为具有256字节的线性地址范围。此范围内的每个字节偏移都对应一个命令值(例如,字节偏移0xC1等于命令值0xC1),最多包含256个命令值。这样,IPMI地址空间看起来是线性的,并且可以按照与其他地址空间类型类似的方式进行处理。OperationRegion术语的语法(来自第19.6.99节“ OperationRegion(声明操作区域)”)如下所述。

OperationRegion (

RegionName, // NameString

RegionSpace, // RegionSpaceKeyword

Offset, // TermArg=>Integer

Length // TermArg=>Integer

)
•RegionName指定此IPMI网络功能的名称(例如,“ POWR”)。
•RegionSpace必须设置为IPMI(操作区域类型值为0x07)。
•偏移量是一个字长的值,它指定目标设备的网络功能和初始命令值偏移量。网络功能地址存储在高字节中,命令值偏移量存储在低字节中。例如,值0x3000将用于网络功能为0x06,初始命令值偏移为零(0)的设备。
•对于初始命令值偏移为零(0)的区域,长度设置为0x100(256),代表可能的命令值的最大数目。这两个值的差用于具有非零偏移的区域。例如,偏移值为0x3010的区域将具有相应的长度0xF0(0x100减去0x10)。
例如,BMC将在网络功能0x30处支持功率计量功能,并通过IPMI命令在网络功能0x06处查询BMC设备信息。
以下ASL代码显示了OperationRegion术语的使用,以描述这些IPMI功能:

Device (IPMI)

{

Name(_HID, "IPI0001") //IPMI device

Name(_IFT, 0x1) //KCS system interface type

OperationRegion(DEVC, IPMI, 0x0600, 0x100) //Device info network function

OperationRegion(POWR, IPMI, 0x3000, 0x100) //Power network function

}

请注意,此示例中的这些操作区域是在“拥有” IPMI设备的直接上下文中定义的。 这样可以确保根据_IFT对象返回的值使用正确的操作区域处理程序。 每个定义对应一个单独的网络功能,并且碰巧使用的初始命令值偏移为零(0)。

三、IPMITOOL工具

安装OpenIPMI ipmitool:yum install -y OpenIPMI ipmitool

  1. ipmitool shell --- 进入命令shell
  2. sensor list --- 命令可以获取传感器中的各种监测值和该值的监测阈值,包括(CPU温度,电压,风扇转速,电源调制模块温度,电源电压等信息)
  3. sensor get

sensor get “7A1000_temperatu”可以获取ID为7A1000_temperatu监测值,7A1000_temperatu是sensor的ID,服务器不同,ID表示也不同。

  1. sensor thresh <id> <threshold> <setting>设置ID值等于id的监测项的各种限制值。

例:sensor thresh  HDD1 unr/ucr/unc XXX

unr = upper non-recoverable 传感器的紧急上门限

ucr = upper critical 上临界

   unc = upper non-critical 非上临界

同样存在最低限制值。

  1. chassis status查看底盘状态,其中包括了底盘电源信息,底盘工作状态等
  2. chassis  policy list 查看支持的底盘电源相关策略。
  3. chassis power on/off/reset启动/关闭/重启底盘,用此命令可以远程开机
  4. mc reset 使BMC重新硬启动
  5. mc info 查看BMC硬件信息
  6. mc getenables 列出BMC所有允许的选项
  7. mc setenables <option>=[on|off],设置bmc相应的允许/禁止选项。
  8. event 1 发送一个温度过高的消息到System Event Log中,可以发送的Event有:
         (1) Temperature: Upper Critical: Going High
         (2) Voltage Threshold: Lower Critical: Going Low
         (3) Memory: Correctable ECC Error Detected

event命令可以用测试配置的IPMI中的snmp功能是否成功。

  1. sel save 文件名 显示日志SEL(Sensor Event Log)到文件。
  2. sel list 列出日志
  3. lan print 1 打印现在channel 1的信息 。
  4. lan set 1 ipaddr 10.10.113.95设置channel 1 的地址为10.10.113.95
  5. lan set 1 snmp public设置channel 1 上snmp的community为public。
  6. lan set 1 access on设置channel 1允许访问。
  7. pef info打印Platform Event Filtering (pef)信息
  8. pef status查看Platform Event Filtering (pef)状态
  9. pef policy查看Platform Event Filtering (pef)策略设置
  10. sdr list fru 读取fru信息并显示。

被监控服务器使用ipmitool更改ip,查看ip

root@linux:~# ipmitool lan set 1 ipaddr  172.16.6.222

Setting LAN IP Address to 172.16.6.222

root@linux:~# ipmitool lan print 1

监控客户端Ipmi ip地址也必须和被监控服务端在同一网段

远程获取服务器监控信息时,需要加上远程服务器的地址。使用以下的命令格式:
    ipmitool -H 10.40.40.106 -U root -P 0penBmc -I lan command 
    其中-H表示后面跟的是服务器的地址,-U表示后面跟着用户名,-P表示后面跟着用户密码,command与本地获取信息相同。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_21186033/article/details/117016852

智能推荐

JavaScript学习笔记_curry函数未定义-程序员宅基地

文章浏览阅读343次。五种原始的变量类型1.Undefined--未定义类型 例:var v;2.String -- ' '或" "3.Boolean4.Number5.Null--空类型 例: var v=null;Number中:NaN -- not a number非数本身是一个数字,但是它和任何数字都不相等,代表非数,它和自己都不相等判断是不是NaN不能用=_curry函数未定义

兑换码编码方案实践_优惠券编码规则-程序员宅基地

文章浏览阅读1.2w次,点赞2次,收藏17次。兑换码编码设计当前各个业务系统,只要涉及到产品销售,就离不开大大小小的运营活动需求,其中最普遍的就是兑换码需求,无论是线下活动或者是线上活动,都能起到良好的宣传效果。兑换码:由一系列字符组成,每一个兑换码对应系统中的一组信息,可以是优惠信息(优惠券),也可以是相关奖品信息。在实际的运营活动中,要求兑换码是唯一的,每一个兑换码对应一个优惠信息,而且需求量往往比较大(实际上的需求只有预期_优惠券编码规则

c语言周林答案,C语言程序设计实训教程教学课件作者周林ch04结构化程序设计课件.ppt...-程序员宅基地

文章浏览阅读45次。C语言程序设计实训教程教学课件作者周林ch04结构化程序设计课件.ppt* * 4.1 选择结构程序设计 4.2 循环结构程序设计 4.3 辅助控制语句 第四章 结构化程序设计 4.1 选择结构程序设计 在现实生活中,需要进行判断和选择的情况是很多的: 如果你在家,我去拜访你 如果考试不及格,要补考 如果遇到红灯,要停车等待 第四章 结构化程序设计 在现实生活中,需要进行判断和选择的情况..._在现实生活中遇到过条件判断的问

幻数使用说明_ioctl-number.txt幻数说明-程序员宅基地

文章浏览阅读999次。幻数使用说明 在驱动程序中实现的ioctl函数体内,实际上是有一个switch{case}结构,每一个case对应一个命令码,做出一些相应的操作。怎么实现这些操作,这是每一个程序员自己的事情。 因为设备都是特定的,这里也没法说。关键在于怎样组织命令码,因为在ioctl中命令码是唯一联系用户程序命令和驱动程序支持的途径 。 命令码的组织是有一些讲究的,因为我们一定要做到命令和设备是一一对应的,利_ioctl-number.txt幻数说明

ORB-SLAM3 + VScode:检测到 #include 错误。请更新 includePath。已为此翻译单元禁用波浪曲线_orb-slam3 include <system.h> 报错-程序员宅基地

文章浏览阅读399次。键盘按下“Shift+Ctrl+p” 输入: C++Configurations,选择JSON界面做如下改动:1.首先把 “/usr/include”,放在最前2.查看C++路径,终端输入gcc -v -E -x c++ - /usr/include/c++/5 /usr/include/x86_64-linux-gnu/c++/5 /usr/include/c++/5/backward /usr/lib/gcc/x86_64-linux-gnu/5/include /usr/local/_orb-slam3 include 报错

「Sqlserver」数据分析师有理由爱Sqlserver之十-Sqlserver自动化篇-程序员宅基地

文章浏览阅读129次。本系列的最后一篇,因未有精力写更多的入门教程,上篇已经抛出书单,有兴趣的朋友可阅读好书来成长,此系列主讲有理由爱Sqlserver的论证性文章,希望读者们看完后,可自行做出判断,Sqlserver是否真的合适自己,目的已达成。渴望自动化及使用场景笔者所最能接触到的群体为Excel、PowerBI用户群体,在Excel中,我们知道可以使用VBA、VSTO来给Excel带来自动化操作..._sqlsever 数据分析

随便推点

智慧校园智慧教育大数据平台(教育大脑)项目建设方案PPT_高校智慧大脑-程序员宅基地

文章浏览阅读294次,点赞6次,收藏4次。教育智脑)建立学校的全连接中台,对学校运营过程中的数据进行处理和标准化管理,挖掘数据的价值。能:一、原先孤立的系统聚合到一个统一的平台,实现单点登录,统一身份认证,方便管理;三、数据共享,盘活了教育大数据资源,通过对外提供数。的方式构建教育的通用服务能力平台,支撑教育核心服务能力的沉淀和共享。物联网将学校的各要素(人、机、料、法、环、测)全面互联,数据实时。智慧校园解决方案,赋能教学、管理和服务升级,智慧教育体系,该数据平台具有以下几大功。教育大数据平台底座:教育智脑。教育大数据平台,以中国联通。_高校智慧大脑

编程5大算法总结--概念加实例_算法概念实例-程序员宅基地

文章浏览阅读9.5k次,点赞2次,收藏27次。分治法,动态规划法,贪心算法这三者之间有类似之处,比如都需要将问题划分为一个个子问题,然后通过解决这些子问题来解决最终问题。但其实这三者之间的区别还是蛮大的。贪心是则可看成是链式结构回溯和分支界限为穷举式的搜索,其思想的差异是深度优先和广度优先一:分治算法一、基本概念在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两_算法概念实例

随笔—醒悟篇之考研调剂_考研调剂抑郁-程序员宅基地

文章浏览阅读5.6k次。考研篇emmmmm,这是我随笔篇章的第二更,原本计划是在中秋放假期间写好的,但是放假的时候被安排写一下单例模式,做了俩机试题目,还刷了下PAT的东西,emmmmm,最主要的还是因为我浪的很开心,没空出时间来写写东西。  距离我考研结束已经快两年了,距离今年的考研还有90天左右。  趁着这个机会回忆一下青春,这一篇会写的比较有趣,好玩,纯粹是为了记录一下当年考研中发生的有趣的事。  首先介绍..._考研调剂抑郁

SpringMVC_class org.springframework.web.filter.characterenco-程序员宅基地

文章浏览阅读438次。SpringMVC文章目录SpringMVC1、SpringMVC简介1.1 什么是MVC1.2 什么是SpringMVC1.3 SpringMVC的特点2、HelloWorld2.1 开发环境2.2 创建maven工程a>添加web模块b>打包方式:warc>引入依赖2.3 配置web.xml2.4 创建请求控制器2.5 创建SpringMVC的配置文件2.6 测试Helloworld2.7 总结3、@RequestMapping注解3.1 @RequestMapping注解的功能3._class org.springframework.web.filter.characterencodingfilter is not a jakart

gdb: Don‘t know how to run. Try “help target“._don't know how to run. try "help target".-程序员宅基地

文章浏览阅读4.9k次。gdb 远程调试的一个问题:Don't know how to run. Try "help target".它在抱怨不知道怎么跑,目标是什么. 你需要为它指定target remote 或target extended-remote例如:target extended-remote 192.168.1.136:1234指明target 是某IP的某端口完整示例如下:targ..._don't know how to run. try "help target".

c语言程序设计教程 郭浩志,C语言程序设计教程答案杨路明郭浩志-程序员宅基地

文章浏览阅读85次。习题 11、算法描述主要是用两种基本方法:第一是自然语言描述,第二是使用专用工具进行算法描述2、c 语言程序的结构如下:1、c 语言程序由函数组成,每个程序必须具有一个 main 函数作为程序的主控函数。2、“/*“与“*/“之间的内容构成 c 语言程序的注释部分。3、用预处理命令#include 可以包含有关文件的信息。4、大小写字母在 c 语言中是有区别的。5、除 main 函数和标准库函数以..._c语言语法0x1e