文章目录
前言
网上关于此协议的内容很少,自己又正好在学习,为了更深入地理解和掌握知识,发现之前忽略的细节或误解,进一步完善自己的技能,所以开始尝试将自己所学撰写为文章
一、PECI基本概念
PECI (Platform Environment Control Interface):平台环境控制接口,是Intel处理器与管理控制器(例如,基板管理控制器,BMC)之间的通信接口。PECI提供了服务,允许管理控制器通过访问各种寄存器来配置、监控和调试平台。它定义了一个专用的命令协议,其中管理控制器作为PECI的发起者(originator),而处理器作为PECI的响应者(responder)。
简而言之,PECI是一种通信机制,使得管理控制器能够与Intel处理器进行交互,以配置、监控和调试系统的硬件环境。
二、PECI总线介绍
PECI总线上的设备分为host和client。host一般为管理控制器,client一般为英特尔CPU。client的地址范围0x30~0x37,host的地址为0x01。
PECI通信,一般由host发出请求,client回复请求,client不会主动发送消息。PECI总线一般情况只有一个host,而client则为一个或者多个。PECI总线为一条单总线,所以PECI消息为一发一收,只有当host发送请求且得到回复后,才能发送下一个peci请求。
三、PECI协议
peci command
PECI有诸多功能:读取温度、功率、寄存器信息以及设置cpu功率等,每种功能都有对应的peci command实现。
Ping()
它用于枚举设备(即,检查系统中有哪些PECI设备)或者确定一个设备是否已被移除、关闭电源等。当向一个设备地址发送Ping()消息时,如果目标地址的设备能够响应,它将返回一个非零的“Write FCS”(Frame Check Sequence,帧校验序列)。
GetDIB()
GetDIB()用于返回reversion number和所支持的domains。reversion number指peci协议版本,版本越高支持的peci command越多,domains指SOC domains(在SOC设计中,Domain的概念经常用于描述不同的功能区域或模块,这些区域或模块在逻辑上或物理上被划分出来,以实现特定的功能或性能目标)
第一行为getdib请求帧,二、三行为gitdeb回复帧
GetTemp()
GetTemp()用于获取“die”的温度(die这里指处理器内部硅片),管理系统可以根据获取到的"die"温度来调节处理器的温度,比如通过风扇的转速。
RdPkgConfig()
RdPkgConfig()命令提供了对处理器内部的封装配置空间(Package Configuration Space, PCS)的读取访问权限。这个空间包含了各种与电源和热管理相关的功能设置和数据。
处理器通常支持的典型PCS读取服务可能包括访问温度数据(如前面提到的“die”温度)、能量状态、运行时间信息、DIMM(Dual Inline Memory Modules,双列直插式内存模块)的温度等。这些信息对于外部的热管理系统和电源管理系统来说是非常重要的,因为它们需要这些数据来做出适当的决策,如调整风扇速度、控制处理器的功耗等。
WrPkgConfig()
WrPkgConfig()命令提供了对处理器内部封装配置空间(Package Configuration Space, PCS)的写入访问权限。这个空间包含了各种与电源和热管理相关的功能和设置。
处理器通常支持的典型PCS写入服务可能包括电源限制(power limiting)、热平均常数编程(thermal averaging constant programming)等。电源限制允许管理员或系统根据需要对处理器的功耗进行限制,以防止过热或满足特定的能效要求。热平均常数编程则与处理器内部热传感器的工作方式有关,可以用于调整处理器如何对温度变化做出反应。
RdIAMSR()
RdIAMSR() PECI命令提供了对处理器中定义的特定于模型的寄存器(Model Specific Registers, MSRs)的读取访问权限。
RdPCIConfig()
RdPCIConfig()能够让用户读取处理器外部的PCI配置空间的信息。
RdPCIConfigLocal()
RdPCIConfigLocal()允许用户读取位于处理器内部的PCI配置空间。
一般内存信息会用RdPCIConfigLocal获取,因为内存并不是通过pcie bridge,而是通过Root Complex连接到CPU,最近几代CPU基本都将北桥集成到处理器内部,所以内存就相当于处理器内部PCI设备*(对于获取内存信息为何使用RdPCIConfigLocal(),我是这样理解的,如果不对还望指正)*。
WrPCIConfigLocal()
WrPCIConfigLocal()命令提供了对位于处理器内部的PCI配置空间的带外写访问
不同处理器支持的PECI command数量不一样,这里并未把peci command完全列出