x86服務器BMC基板管理控制器介紹
在x86服務器,BIOS需要與各種硬件和芯片打交道,當然也包括BMC(Baseboard Management Controller)。
BIOS與BMC之間的通信,主要使用的是IPMI。有2個階段,PEI和DXE(包括DXE后面的),用的是不同的IPMI函數(這點需要注意)。
雖然使用的是IPMI,但是會有兩個通道,分別是KCS、BT。一般使用KCS通道。
請記住,BMC是不能主動與BIOS通信的;BIOS會發送IPMI命令給BMC,BMC如果成功接收的話,就會有個返回信息給BIOS,所以“看起來像是BMC可以與BIOS通信”。
如果產生了通信故障如何解決:
(1)確認BIOS是否發送了IPMI命令給BMC,可以查看BMC返回的completion code;
(2)確認BMC是否收到了BIOS發送的IPMI命令;
(3)如果BIOS發送了IPMI命令,但是BMC未接收:可能是BMC的IPMI進程正處於忙碌狀態,所以丟掉了這條IPMI命令(BIOS這邊如果發送失敗,可以嘗試多次發送;另外,可以稍微調高點KCS通道的延時);當然,也有可能是BMC的IPMI進程掛了。
(4)如果涉及到了底層協議的具體實現,一條IPMI命令通常涉及到2個底層實現函數,SendDataToBmcPort()和ReceiveBmcDataFromPort()。接收時,BIOS從KCS的I/O端口讀取數據,讀完后,會檢測KCS寄存器中OBF狀態寄存器,如果BMC沒有寫數據,就會計數減1,延時5ms,然后重試;當BMC一直不寫數據時,計數到0,就認為BMC有故障,返回Device Error;
什么是BMC
在介紹BMC之前需要了解一個概念,即平台管理(platform management)。
平台管理表示的是一系列的監視和控制功能,操作的對象是系統硬件。比如通過監視系統的溫度,電壓,風扇、電源等等,並做相應的調節工作,以保證系統處於健康的狀態。
當然如果系統真的不正常了,也可以通過復位的方式來重新啟動系統。
同時平台管理還負責記錄各種硬件的信息和日志記錄,用於提示用戶和后續問題的定位。
下圖是平台管理涉及到的功能概述:
以上的這些功能可以集成到一個控制器上來實現,這個控制器被稱為基板管理控制器(Baseboard Manager Controller,簡稱BMC)。
需要說明的是,BMC是一個獨立的系統,它不依賴與系統上的其它硬件(比如CPU、內存等),也不依賴與BIOS、OS等(但是BMC可以與BIOS和OS交互,這樣可以起到更好的平台管理作用,OS下有系統管理軟件可以與BMC協同工作以達到更好的管理效果)。
一般我們的電腦不會帶BMC,因為用處不大,一些溫度、電源等的管理,CPU(或者EC,這就是另外一個話題了)來控制就夠了。
但是對於系統要求高的設備,比如服務器,就會用到BMC。
當然因為BMC是一個獨立的系統,對於某些嵌入式設備,可能不需要其它處理器,光一個BMC就能完成工作。
說到底BMC本身也是一個帶外處理器(一般都是ARM處理器)的小系統,單獨用來處理某些工作也完全是可以的。
不過這里既然叫做BMC,那么總的來說重點還是在平台管理,所以本文主要說的是服務器中的BMC。
BMC在系統中的位置大致如下圖所示:
BMC通過不同的接口與系統中的其它組件連接。
LPC、I2C、SMBUS,Serial等,這些都是比較基本的接口,而IPMI,它是與BMC匹配的接口,所有的BMC都需要實現這種接口,這里需要特別的介紹。
IPMI
IPMI的全稱是Intelligent Platform Management Interface,智能平台管理接口。
看了名字也不需要特別介紹它用來干什么的了,關於它的詳細介紹可以參看https://www.intel.com/content/www/us/en/servers/ipmi/ipmi-home.html,這里只做簡單的說明。
IPMI就是對“平台管理”這個概念的具體的規范定義,該規范定義了“平台管理”的軟硬件架構,交互指令,事件格式,數據記錄,能力集等。而BMC是IPMI中的一個核心部分,屬於IPMI硬件架構。下圖灰色部分就是IPMI涉及的范圍:
可以看到BMC在硬件的最底層,而上層白色部分是系統中的管理軟件。
由於本文是介紹BMC的,所以這里只介紹BMC相關的IPMI硬件模塊。
IPMI硬件模塊
IPMI規定了很多的東西,BMC是其中最重要的一個部分,此外還有一些”衛星“控制器通過IPMB與BMC相連,這些”衛星“控制器一般控制特定的設備。
IPMB全稱Intelligent Platform Management Bus,是一種基於I2C的串行總線,它用於BMC與”衛星“控制器的通信,其上傳遞的是IPMI命令。
對於相對簡單的系統來說,BMC已經能夠滿足要求,但是當系統比較復雜,由多個子系統構成時,那么通過IPMB和“衛星”控制器,就能夠更好地管理復雜系統。
下面的圖描述了與IPMI有關的各個硬件模塊:
下面簡單的介紹各個部分。
MOTHERBOARD
首先是圖中的左下角部分,名稱寫着Mother Board。
通常,在服務器中,這一部分是主角,它包含了CPU,PCH等主要的部件。
這里我們可以看到它連接除了數個組件:網卡,串口和IPMI總線,其實還有一個部分在圖中最上面中間的PCI總線。
網卡:服務器需要用到網卡,這個本身沒有什么好介紹的,重點其實在於BMC到網卡的連接,后續會介紹。
串口:串口用於輸出服務器的調試信息,但是這里值得注意的是其中的Serial Port Sharing,它使得服務器的串口輸出可以直接輸出,也可以輸出到BMC。至於為什么要輸出到BMC,這里其實需要注意的是一種常用的場景。服務器位於機房,而工作人員通常不會直接在機房操作,而是通過網絡(這也是為什么BMC會連接網卡的原因)進行操作,這個時候過需要獲取服務器的串口信息,就不方便直接去機房,這個時候通過BMC來獲取服務器串口信息就是一個好主意。
IPMI總線:這是BMC與服務器通信並進行控制的主體,當然少不了。
PCI總線:這個部分的作用跟串口很像。服務器除了輸出串口信息,當然還需要輸出圖形界面之類的東西。從服務器端來看,它通過PCI連接的就是一個顯卡,通過它來輸出顯示。
IPMB
再來到圖中的右上角,其中描述的是通過IPMB連接的設備。
這些設備跟BMC類似,也是用來進行管理芯片。
它們是對BMC的補充,從而擴展BMC的功能。
Non-volatile Storage
我們知道BMC其實是一個獨立的芯片,那么它肯定也需要運行系統。
通過BMC里面運行的是一個類Unix系統,而該系統就存放再Non-volatile Storage中,通常就是SPI Flash里面。
跟一般的存儲介質沒有本質的區別。
除了系統本身之后,還包含一系列BMC會存放的信息。
比如從服務器上面獲取到的串口信息;系統本身的報警信息;FRU信息等。
Sensors & Control Circuitry
這一部分雖然圖中只占很小的一部分,但卻是BMC最基本的功能:獲取信息和控制環境。
BMC會通過I2C/PECI等總線去獲取設備的溫度,然后根據預先設定的策略去調整溫度。
調整的方式兩種,一種就是調整風扇,屬於主動降溫;另一種是調整供電,比如CPU的P狀態,或者關閉多余的硬盤等,屬於被動降溫。
FRU
FRU的全稱是Field Replaceable Unit。
從圖中也可以看出,類似內存條,CPU等就屬於FRU,它們在服務器中通常是可以更換的。
BMC會檢測這些設備並保存相關的信息。
當這些設備的在位情況發生變化時,BMC會發生相關的告警。
推薦大家一本書《ipmi-second-gen-interface-spec-v2-rev1-1.pdf》,其實就是IPMI2.0規范,里面詳細講解了IPMI,遇見相關問題可以看看。