OpenBMC的诞生
在Facebook,可靠性和快速迭代是两个重要原则。这使得我们在构建基础架构时,可以快速查询特征,并且可以对自己的系统重要项目进行故障定位。最近,我们发现底板管理控制器(BMC)一系列相关的软件(Software Stack)太封闭了,无法满足这些需求,所以我们建立了自己的版本,我们是开源的。我们如何实现这个开源的软件解决方案,是对Facebook黑客文化的一个很好的研究 - 这里将介绍背后故事。
考虑应用场景,BMC是嵌入在服务器中的专用控制器。它通常以片上系统(SoC)的形式出现,具有自己的CPU,内存和存储以及大量的IO。BMC连接到许多传感器以读取环境条件并通过风扇控制温度。它还提供了其他系统管理功能,包括远程电源控制,Serial Over LAN,服务器主机CPU和内存的监视及错误记录。
直到目前,在软件方面,完整的BMC软件都是闭源的。BMC软件通常由硬件制造商在硬件开发阶段开发。由于BMC软件的闭源特性,现有硬件所开发的任何软件都无法在下一代中重复使用。BMC软件的开发周期进度直接影响到新的硬件开发。当硬件开发结束后,BMC软件开发也停止了。更进一步的错误修复或新功能则必须等待硬件制造商。
当我们开发Facebook的ToR交换机“Wedge”时,一开始是按照惯例, 由我们的合作伙伴负责开发BMC软件。然而,在项目的头几个月,BMC软件出现了许多需求,给BMC软件开发过程带来了额外的复杂性,协调性和项目延迟。
为了应对这些挑战,在Facebook举办的一个编程马拉松活动中,有四位工程师努力创建了自己的BMC软件。在24小时内,我们能够建立一个最小的BMC软件映像,其中包括一个SSH服务器,能够改变风扇的速度,启动主机CPU,闪烁一些LED。虽然这远远未达到一个生产的镜像水准,但是它给了我们一个强大的信心,我们最终可以为自己的“Wedge”开发处BMC软件。
八个月后,我们已经将代号为“OpenBMC”的解决方案与Wedge一起投入生产。今天,我们与开源社区共享OpenBMC,希望我们能够基于这个开放的软件框架进行协作,进行下一代系统管理。
底层的OpenBMC
BMC硬件本身就是一个计算机系统。与现代计算机系统相比,BMC的硬件资源非常有限。在BMC中,CPU速度较慢,闪存少于32 MB,存储空间少于256 MB都是很常见的。正因为如此,OpenBMC被设计成一个完整的Linux发行版,可灵活定制以支持不同的BMC SoC或主板。
OpenBMC映像包括引导加载程序(u-boot),Linux内核,开源软件包和特定于板卡的软件包:
- u-boot和Linux内核都包含用于BMC SoC的各种硬件驱动程序,包括i2c驱动程序,USB驱动程序,PWM驱动程序和SPI驱动程序。
- 开源软件包包括常用的应用程序,例如BusyBox,i2c-tools,lm-sensors,OpenSSH和Python。
- 特定于电路板的软件包包括用于特定电路板的初始化脚本和工具。例如,它包含一个工具来转储来自EEPROM的告警信息和一个风扇控制器守护进程,以根据环境读数控制风扇速度。
OpenBMC中的所有软件包都是使用源码通过Yocto构建的。通过Yocto,软件包被组合在一起成为recipes,然后不同的recipes被组合成不同图层。
在OpenBMC中,有三组图层:
- 通用层,包含可用于不同电路板和BMC SoC的软件包。
- SoC层,包含特定于BMC SoC的软件包,例如由Aspeed贡献的用于AST2300/ AST2400 SoC的代码,以及来自Facebook的增强功能。u-boot和kernel都在SoC层中定义。
-
电路板层,包括不同电路板的软件包。具体来说,例如我们正在发布的特定于Wedge的硬件配置,初始化脚本和工具。
为特定的电路板构建定制的OpenBMC映像需要将公共层,用于电路板中使用的BMC SoC的SoC层以及电路板特定的电路板层相结合。
我们通过GitHub 发布了OpenBMC库。
下一阶段
OpenBMC目前处于早期阶段,但我们旨在建立一个强大的OpenBMC生态系统,所以我们已经提前并分享了这个早期的工作代码。
我们最近重构了代码以更好地支持不同的SoC和电路板。有一些为“Wedge”开发的应用程序可以用于其他板子。为此,我们需要在应用程序和硬件之间添加一个硬件抽象。
随着Wedge发布于OCP,应用程序开发人员可以使用开放硬件作为OpenBMC的开发平台。我们可以在OpenBMC的所有不同层面上做出贡献:
- 系统管理应用程序的创新可以发布于通用层。例如,一个可以改变系统管理方向的新应用程序可能会被贡献给公用层,从而使所有由OpenBMC驱动的电路板受益。
- BMC SoC供应商可以通过SoC层发布自己的SoC支持,这有助于采用BMC SoC。
- 通过电路板层,板卡制造商可以与社区合作,不断完善板卡上运行的BMC软件。
Wedge是第一个由OpenBMC驱动的硬件,6-pack将是第二个。我们很高兴与社区分享OpenBMC并致力于下一代系统管理。
许多人为这个项目的工作做出了贡献。Credit should go to: Kevin Lahey, Sai Dasari, Aaron Miller, Adam Simpkins, and Tian Fang.