BMC全称为Baseboard Management Controller主板管理控制单元 IPMI规范的核心,负责各路传感器的信号采集、处理、储存,以及各 种器件运行状态的监控。BMC向机箱管理模块提供被管理对象的硬件 状态及告警等信息,实现对被管理对象的设备管理功能。
BMC是一个独立的系统,它不依赖与系统上的其它硬件(比如CPU、内存等),也不依赖与BIOS、OS等(但是BMC可以与BIOS和OS交互,这样可以起到更好的平台管理作用,OS下有系统管理软件可以与BMC协同工作以达到更好的管理效果)。总的来说bmc负责一台服务器的整体管理工作。服务器的管理控制表示的是一系列的监视和控制功能,操作的对象是系统硬件比如通过监视系统的温度,电压,风扇、电源等等,并做相应的调节控制工作,以保证系统处于健康的状态,这种调节控制监控工作在服务器系统处于不正常的状态时显得尤为重要。同时还负责记录各种硬件的信息和日志记录,用于提示用户和后续问题的定位。
下边来看一下bmc的硬件基本框图。这个是一个典型的x86 intel 平台的bmc硬件接口图,目前bmc芯片都是放置在主板上,bmc使用上基本都是低速接口,所以主要接口都是在bmc与pch之间,可以看到主要是又USB,LPC,Pcle,以及i2c接口,1,USB接口主要用于USB over lan,使bios可以在post阶段与bmc进行redfish沟通,同时实现kvm功能,以及virtual media功能 2,pcle主要用于实现kvm显示功能3,LPC 总线主要用于bios 的uart 输出,bios 80 port输出,以及带内通信的kcs通道,3,Intel Management Engine英特尔管理引擎 英特尔芯片中一个独立于CPU和操作系统的微处理器。ME里面有用于远程管理的功能,可以通过me 获取pch温度,以及一些电源管理信息,跟bmc链接的通道是smbus。BMC对外的接口主要有i2c,UART,pwm,RGMII,spi等,i2c接口主要用于连接各种传感器,bmc芯片拥有丰富的i2c控制器,一般是在10几个左右,同时还会有eeprom,用于保存整板的fru信息,等一些需要固化的信息,UART用于bmc串口的输出,bios可以通过lpc把uart信息输出到bmc ,bmc经过内部转发,可以输出到物理串口以及sol,pwm用于风扇控制,保障整机温度的正常,bmc拥有自己的专口外接phy可直接使用,也可走ncsi与业务口共享网络,spi用于刷新bmc以及bios的flash。
BMC的软件实现有多种形式,主流的bmc目前以ami的bmc为主,目前大多数服务器都是在ami的code base上进行进一步开发,当然还有其它解决方案比如openbmc,国产bmc例如百敖,Inside,其他服务器厂商自研的bmc,如华为,dell等等,其中开源的只有openbmc,其他的解决方案都是商业化方案,需要购买相应licence,虽然大家的实现手段不同,但是最终都是为了提供更好的手段来对服务器进行监控,控制以及管理。以上是openbmc的软件框图。BMC大致可以分为三个大部分,bmc的image存放在flash中,由uboot引导启动kernel,在linux kernel的基础上利用systemd管理各服务,通过各个服务来实现各种监控管理功能,进程间通过dbus进行管理通信,形成了一个及其现代化,低耦合的一个bmc解决方案。当前openbmc还没有进行商业化应用,openbmc的社区目前还是很活跃的,google,faceboot,ibm,intel,国内浪潮,字节,阿里目前都在积极活跃当中。当然也有很多公司会建立自己的私有库来进行openbmc的使用,但是openbmc的商业化道理还有一些路要走
BMC的基本管理功能:
1,系统电源管理
2,整机散热控制
3,系统传感器监控
4,带外管理
5,系统资产信息收集与监控
6,服务器各种固件升级
7,系统异常情况的监控与日志收集