OpenBMC的誕生
在Facebook碎赢,可靠性和快速迭代是兩個重要原則起便。這使得我們在構(gòu)建基礎(chǔ)架構(gòu)時砸抛,可以快速查詢特征,并且可以對自己的系統(tǒng)重要項目進行故障定位衅谷。最近锡足,我們發(fā)現(xiàn)底板管理控制器(BMC)一系列相關(guān)的軟件(Software Stack)太封閉了别洪,無法滿足這些需求飘弧,所以我們建立了自己的版本榄笙,我們是開源的邪狞。我們?nèi)绾螌崿F(xiàn)這個開源的軟件解決方案,是對Facebook黑客文化的一個很好的研究 - 這里將介紹背后故事茅撞。
考慮應用場景帆卓,BMC是嵌入在服務器中的專用控制器。它通常以片上系統(tǒng)(SoC)的形式出現(xiàn)米丘,具有自己的CPU剑令,內(nèi)存和存儲以及大量的IO。BMC連接到許多傳感器以讀取環(huán)境條件并通過風扇控制溫度拄查。它還提供了其他系統(tǒng)管理功能吁津,包括遠程電源控制,Serial Over LAN堕扶,服務器主機CPU和內(nèi)存的監(jiān)視及錯誤記錄碍脏。
直到目前,在軟件方面稍算,完整的BMC軟件都是閉源的典尾。BMC軟件通常由硬件制造商在硬件開發(fā)階段開發(fā)。由于BMC軟件的閉源特性糊探,現(xiàn)有硬件所開發(fā)的任何軟件都無法在下一代中重復使用急黎。BMC軟件的開發(fā)周期進度直接影響到新的硬件開發(fā)。當硬件開發(fā)結(jié)束后侧到,BMC軟件開發(fā)也停止了。更進一步的錯誤修復或新功能則必須等待硬件制造商淤击。
當我們開發(fā)Facebook的ToR交換機“Wedge”時匠抗,一開始是按照慣例, 由我們的合作伙伴負責開發(fā)BMC軟件污抬。然而汞贸,在項目的頭幾個月,BMC軟件出現(xiàn)了許多需求印机,給BMC軟件開發(fā)過程帶來了額外的復雜性矢腻,協(xié)調(diào)性和項目延遲。
為了應對這些挑戰(zhàn)射赛,在Facebook舉辦的一個編程馬拉松活動中多柑,有四位工程師努力創(chuàng)建了自己的BMC軟件。在24小時內(nèi)楣责,我們能夠建立一個最小的BMC軟件映像竣灌,其中包括一個SSH服務器聂沙,能夠改變風扇的速度,啟動主機CPU初嘹,閃爍一些LED及汉。雖然這遠遠未達到一個生產(chǎn)的鏡像水準,但是它給了我們一個強大的信心屯烦,我們最終可以為自己的“Wedge”開發(fā)處BMC軟件坷随。
八個月后,我們已經(jīng)將代號為“OpenBMC”的解決方案與Wedge一起投入生產(chǎn)驻龟。今天温眉,我們與開源社區(qū)共享OpenBMC,希望我們能夠基于這個開放的軟件框架進行協(xié)作迅脐,進行下一代系統(tǒng)管理芍殖。
底層的OpenBMC
BMC硬件本身就是一個計算機系統(tǒng)。與現(xiàn)代計算機系統(tǒng)相比谴蔑,BMC的硬件資源非常有限豌骏。在BMC中,CPU速度較慢隐锭,閃存少于32 MB窃躲,存儲空間少于256 MB都是很常見的。正因為如此钦睡,OpenBMC被設(shè)計成一個完整的Linux發(fā)行版蒂窒,可靈活定制以支持不同的BMC SoC或主板。
OpenBMC映像包括引導加載程序(u-boot)荞怒,Linux內(nèi)核洒琢,開源軟件包和特定于板卡的軟件包:
- u-boot和Linux內(nèi)核都包含用于BMC SoC的各種硬件驅(qū)動程序,包括i2c驅(qū)動程序褐桌,USB驅(qū)動程序衰抑,PWM驅(qū)動程序和SPI驅(qū)動程序。
- 開源軟件包包括常用的應用程序荧嵌,例如BusyBox呛踊,i2c-tools,lm-sensors啦撮,OpenSSH和Python谭网。
- 特定于電路板的軟件包包括用于特定電路板的初始化腳本和工具。例如赃春,它包含一個工具來轉(zhuǎn)儲來自EEPROM的告警信息和一個風扇控制器守護進程愉择,以根據(jù)環(huán)境讀數(shù)控制風扇速度。
OpenBMC中的所有軟件包都是使用源碼通過Yocto構(gòu)建的薄辅。通過Yocto要拂,軟件包被組合在一起成為recipes,然后不同的recipes被組合成不同圖層站楚。
在OpenBMC中脱惰,有三組圖層:
- 通用層,包含可用于不同電路板和BMC SoC的軟件包窿春。
- SoC層拉一,包含特定于BMC SoC的軟件包,例如由Aspeed貢獻的用于AST2300/ AST2400 SoC的代碼旧乞,以及來自Facebook的增強功能蔚润。u-boot和kernel都在SoC層中定義。
-
電路板層尺栖,包括不同電路板的軟件包嫡纠。具體來說,例如我們正在發(fā)布的特定于Wedge的硬件配置延赌,初始化腳本和工具除盏。
bmc-source-dir
為特定的電路板構(gòu)建定制的OpenBMC映像需要將公共層,用于電路板中使用的BMC SoC的SoC層以及電路板特定的電路板層相結(jié)合挫以。
我們通過GitHub 發(fā)布了OpenBMC庫者蠕。
下一階段
OpenBMC目前處于早期階段,但我們旨在建立一個強大的OpenBMC生態(tài)系統(tǒng)掐松,所以我們已經(jīng)提前并分享了這個早期的工作代碼踱侣。
我們最近重構(gòu)了代碼以更好地支持不同的SoC和電路板。有一些為“Wedge”開發(fā)的應用程序可以用于其他板子大磺。為此抡句,我們需要在應用程序和硬件之間添加一個硬件抽象。
隨著Wedge發(fā)布于OCP杠愧,應用程序開發(fā)人員可以使用開放硬件作為OpenBMC的開發(fā)平臺待榔。我們可以在OpenBMC的所有不同層面上做出貢獻:
- 系統(tǒng)管理應用程序的創(chuàng)新可以發(fā)布于通用層。例如殴蹄,一個可以改變系統(tǒng)管理方向的新應用程序可能會被貢獻給公用層,從而使所有由OpenBMC驅(qū)動的電路板受益猾担。
- BMC SoC供應商可以通過SoC層發(fā)布自己的SoC支持袭灯,這有助于采用BMC SoC。
- 通過電路板層绑嘹,板卡制造商可以與社區(qū)合作稽荧,不斷完善板卡上運行的BMC軟件。
Wedge是第一個由OpenBMC驅(qū)動的硬件工腋,6-pack將是第二個姨丈。我們很高興與社區(qū)分享OpenBMC并致力于下一代系統(tǒng)管理畅卓。
許多人為這個項目的工作做出了貢獻。Credit should go to: Kevin Lahey, Sai Dasari, Aaron Miller, Adam Simpkins, and Tian Fang.