BMC通過PECI接口獲取CPU溫度實現方法

本文轉載於網絡,侵權刪。

PECI是用於監測CPU及芯片組溫度的一線總線(one-wirebus),全稱是Platform Environment Control Interface。它最主要的應用是監測CPU溫度,最新版本的PECI接口還包括一些其他的功能。

1 Intel Processor的溫控機制

在CPU中,通常每個CPU核心都有一個數字溫度傳感器。在PC平臺下,處理器可以通過MSR(Mode specific registers)獲得處理器自身的溫度、調節風扇轉速度,從而實現溫度控制。在服務器平臺下,溫度控制通常是由BMC來做的,業務CPU本身沒有辦法控制機框的風扇轉速度。BMC直接或間接通過PECI總線獲取到CPU核心溫度,再根據所有溫度值調整風扇轉速。

MSR方式讀取CPU溫度讀取到的是即時溫度,PECI方式讀取到的是256ms時間窗內的平均溫度。MSR方式是需要CPU處理C0狀態才能讀取。PECI方式在C0~C6均可以使用。

 

 

圖表1 PECI接中的連接方式

Intel Pentium M 開始在處理器中引入DTS(數字溫度傳感器)。溫度傳感器通常是每個CPU核心一個。

 

圖表2 Intel溫控組件

1.1 TM1

爲了保護CPU不會在過熱時被燒壞,從Pentium4開始,處理器中又加入了一個溫度監示器Thermal Monitor 1,簡稱TM1。TM1會監示數字溫度傳感器的讀數,當讀數高於閾值Tjmax時,TM1會調節處理器時鐘的佔空比,以降低功耗,降低溫度。這裏所謂的調節時鐘佔空比與傳統意義上的時鐘佔空比不同,這裏調節的是時鐘信號的開閉時間比例,比如說,它會在某一段時間內,37.5%的時間打開CPU時鐘,讓CPU工作,另62.5%的時間關閉CPU時鐘,讓CPU停止工作以降低功耗和溫度。

 

Figure 1 TM1調整CPU時鐘佔空比

1.2 TM2

TM2是Pentium M時引入的,它提供了另一種降低CPU溫度的辦法。在CPU某個核心的溫度超過Tjmax時,它會嘗試降低時鐘頻率和供電電壓來降低功耗和溫度。TM1和TM2是兩個單獨的機制,或以分別啓用和禁用。Intel推薦兩個機制同時使用。它們的啓用和禁用是通過BIOS設置IA32_MISC_ENABLE這個模式寄存器的第3、13位來實現的。BIOS打開這兩個機制後,OS和用戶程序不可關閉。

 

1.3 溫度閾值

Tjmax是我們所知的第一個閾值,當CPU上任意一個核心的溫度達到這個閾值時,CPU會產生一個PROCHOT#信號(processor hot)。該信號可觸發TM1和TM2。處理器時會通過調節時鐘佔空比、降低時鐘頻率和供電電壓的方式來降低功耗和溫度。產生PROCHOT#信號的同時,溫度監示器還會產生一箇中斷給CPU,其中斷向量號通過LAPIC和LVT來設置。模式寄存器IA32_THERM_INTERRUPT有兩個位用於高溫中斷使能(溫度超過Tjmax時產生中斷)和低溫中斷使能(溫度回到低於Tjmax的範圍時產生中斷)。

PROCHOT#通過CPU的一個引腳拉出,並且可以連接在外設上,由外設來發生這個信號。比如說一個系統中有另一個設備的溫度超過閾值,它可以拉低使能這個信號,從而使CPU也一起降溫,從而降低機箱內的溫度,製造一個更好的散熱環境。

如果TM1和TM2啓動後溫度沒能降低下來,並且繼續升高到可能造成CPU物理損壞的溫度時,核心會觸發THERMTRIP#信號,並且關閉CPU電源。

CPU硬件實現的溫度控制機制是用於CPU自我保存的溫控機制,當這些機制不足以降溫時,CPU會斷電,從而造成系統突然掉電,造成數據損失。因而一般要求BMC在要以一定的週期讀取CPU核心溫度,根據溫度調整風扇轉速,並且當溫度超過Tjmax-10時,讓風扇全速轉動。

2 相關MSR

2.1  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

 

2.2  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”)

3 PECI接口

BMC獲取CPU核心溫度有兩種途徑:(1)通過PECI總線直接從CPU上獲取溫度數據,(2)通過IPMI協議從南橋上的ME上獲取CPU核心溫度。在途徑(2)的情況下,ME需要通過PECI接口從CPU上獲取溫度。由於PECI的一線總線是intel的私有總線協議,很多BMC廠商並沒有辦法集成支持PECI接口協議的硬件,因而途徑(2)是獲取CPU核心溫度的主流途徑。

3.1 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()

GetTemp()

GetDib()

溫度監示

Ping()

GetTemp()

GetDib()

 

訪問CPU內存

BIST

Memory throttling相關

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

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

 

現代服務器系統中,BMC通常不直接使用PECI接口,而是通過南橋上的ManagementEngine來間接使用PECI接口。Management Engine是南橋上的一個嵌入式微控制器,它可以通過南橋上的PECI主控器訪問CPU上的PECI從設備。同時,ME還實現了一些IPMI命令,可以讓BMC通過SMLink間接使用這個PECI主控制器。這樣的系統架構如下圖所

示:

圖表 5 南橋做PECI Proxy

 

 

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章