Skip to main content

服务器下的PECI接口简介

·185 words·1 min
PECI BIOS BMC
Table of Contents

PECI是用于监测CPU芯片组温度的一线总线(one-wire bus),全称是Platform Environment Control Interface。它最主要的应用是监测CPU温度,最新版本的PECI接口还包括一些其他的功能。

Intel Processor的温控机制
#

在CPU中,通常每个CPU核心都有一个数字温度传感器。在PC平台下,处理器可以通过MSR(Mode specific registers)获得处理器自身的温度、调节风扇转速,从而实现温度控制。在服务器平台下,温度控制通常是由BMC来做的,业务CPU本身没有办法控制服务器里的风扇转速。BMC直接或间接通过PECI总线获取到CPU的核心温度,再根据所读到的温度值来调整风扇的转速。

MSR方式读取CPU温度读取到的是即时温度,PECI方式读取到的是256ms时间窗内的平均温度。MSR方式是需要CPU处理C0状态才能读取。PECI方式在C0~C6均可以使用。

PECI Interface Connection
图表1 PECI接中的连接方式

Intel Pentium M 开始在处理器中引入DTS(数字温度传感器)。温度传感器通常是每个CPU核心一个。

PECI Intel Temperature Control
图表2 Intel温控组件

TM1
#

为了保护CPU不会在过热时被烧坏,从Pentium4开始,处理器中又加入了一个温度监示器Thermal Monitor 1,简称TM1。TM1会监示数字温度传感器的读数,当读数高于阈值Tjmax时,TM1会调节处理器时钟的占空比,以降低功耗,降低温度。这里所谓的调节时钟占空比与传统意义上的时钟占空比不同,这里调节的是时钟信号的开闭时间比例,比如说,它会在某一段时间内,37.5%的时间打开CPU时钟,让CPU工作,另62.5%的时间关闭CPU时钟,让CPU停止工作以降低功耗和温度。

PECI Intel TM1
Figure 1 TM1调整CPU时钟占空比

TM2
#

TM2Pentium M引入的,它提供了另一种降低CPU温度的办法。在CPU某个核心的温度超过Tjmax时,它会尝试降低时钟频率和供电电压来降低功耗和温度。TM1和TM2是两个单独的机制,或以分别启用和禁用。Intel推荐两个机制同时使用。它们的启用和禁用是通过BIOS设置IA32_MISC_ENABLE这个模式寄存器的第3、13位来实现的。BIOS打开这两个机制后,OS和用户程序不可关闭。

温度阈值
#

Tjmax是我们所知的第一个阈值,当CPU上任意一个核心的温度达到这个阈值时,CPU会产生一个PROCHOT#信号(processor hot)。该信号可触发TM1和TM2。处理器时会通过调节时钟占空比、降低时钟频率和供电电压的方式来降低功耗和温度。产生PROCHOT#信号的同时,温度监示器还会产生一个中断给CPU,其中断向量号通过LAPICLVT来设置。模式寄存器IA32_THERM_INTERRUPT有两个位用于高温中断使能(温度超过Tjmax时产生中断)和低温中断使能(温度回到低于Tjmax的范围时产生中断)。

PROCHOT#通过CPU的一个引脚拉出,并且可以连接在外设上,由外设来发生这个信号。比如说一个系统中有另一个设备的温度超过阈值,它可以拉低使能这个信号,从而使CPU也一起降温,从而降低机箱内的温度,制造一个更好的散热环境。

如果TM1和TM2启动后温度没能降低下来,并且继续升高到可能造成CPU物理损坏的温度时,核心会触发THERMTRIP#信号,并且关闭CPU电源。

CPU硬件实现的温度控制机制是用于CPU自我保存的温控机制,当这些机制不足以降温时,CPU会断电,从而造成系统突然掉电,造成数据损失。因而一般要求BMC在要以一定的周期读取CPU核心温度,根据温度调整风扇转速,并且当温度超过Tjmax-10时,让风扇全速转动。

相关MSR
#

IA32_THERM_INTERRUPT
#

IA32_THERM_INTERRUPT寄存的地址为0x19B。BIOS通过IA32_THERM_INTERRUPT模式寄存器使能温度相关的中断,其各字段定义如下:

表格 1 IA32_THERM_INTERRUPT 0x19B

描述
0 High temperature interrupt enable
1 Low temperature interrupt enable
2 PROCHOT# interrupt enable
3 FORCEPR# interrupt enable
4 Critical Temperature interrupt enable
7:5 reserved
14:8 Threshold 1 value
15 Threshold 1 int enable
22:16 Threshold 2 value
23 Threshold 2 int enable
63:24 reserved

在一个实际系统读到的该寄存器的值为:

sudo modprobe msr
sudo rdmsr –p 0 0x19B
3

IA32_TEMPERATURE_TARGET
#

IA32_TEMPERATURE_TARGET模式寄存器的地址为0x1A2。该模式寄存器是只读的。

表格 2 IA32_TEMPERATURE_TARGET模式寄存器

描述
23:16 温度目标,单为是摄氏度,当达到这个温度时触发TM1和TM2,产生PROCHOT#信号。

在一个实际系统读到的该寄存器的值为:

sudo modprobe msr
sudo rdmsr –p 0 0x1A2
0x5B08

0x5B=91摄氏度

嵌入汇编方式读取MSR:

__asm____volatile__(“movl $0x1A2, %%ecx\n\trdmsr\n\t)

PECI接口
#

BMC获取CPU核心温度有两种途径:

  1. 通过PECI总线直接从CPU上获取温度数据
  2. 通过IPMI协议从南桥上的ME上获取CPU核心温度

在第二种情况下,ME需要通过PECI接口从CPU上获取温度。由于PECI的一线总线是intel的私有总线协议,很多BMC厂商并没有办法集成支持PECI接口协议的硬件,因而途径2是获取CPU核心温度的主流途径。

PECI规范
#

PECI是一个私有的协议,不得到Intel授权无从得知协议的细节。PECI规范到现在有三个主要版本:1.1、2.0和3.0。PECI 1.1支持最简单的温度监示,PECI2.0则支持更多的如读取MSR等特性,PECI 3.0进一步支持PCIe总线配置空间的读取。

表格 3 PECI 1.1和2.0比较

版本 1.1 2.0
特性 温度监示 温度监示
Ping() Ping()
GetTemp() GetTemp()
GetDib() GetDib()
访问CPU内存
BIST
Memory throttling相关

下图是PECI 3.0支持的命令列表:

表格 4 PECI 3.0支持的命令列表

PECI 3.0 Supported Command

现代服务器系统中,BMC通常不直接使用PECI接口,而是通过南桥上的ManagementEngine来间接使用PECI接口。Management Engine是南桥上的一个嵌入式微控制器,它可以通过南桥上的PECI主控器访问CPU上的PECI从设备。同时,ME还实现了一些IPMI命令,可以让BMC通过SMLink间接使用这个PECI主控制器。这样的系统架构如下图所示:

South Bridge as PECI Proxy
图表 5 南桥做PECI Proxy

所有的IPMI命令可以参考《IntelIntelligent Power Node Manager 2.0 External Interface Specification》的2.9节: IPMI OEMPECI Proxy Commands。

Related

uEFI BIOS简介
·503 words·3 mins
Hardware UEFI BIOS
How to Build an Efficient and Reliable AI Infrastructure
·817 words·4 mins
AI Infrastructure Storage Data Management
高通着手测试下一代Snapdragon X2 CPU
·83 words·1 min
Snapdragon X2 SC8480XPSC8480XP