服务器中加速BIOS启动的方法

    对于用于一线的主服务器而言,年均宕机时间是衡量其稳定性的重要指标。所以,系统出现故障后,可以尽快恢复尤为重要。在如今的高端服务器中,CPU有多个,内存容量日益增长,有的多达512G甚至达到数T容量,接入的PCIE板卡也愈来愈多,这极大地增长了BIOS系统自检和设备扫描的时间。此外,因为传统BIOS的设计,冷启动比热启动自己就须要多耗费几倍的时间。例如,本人在一款最新的基于Intel E5双CPU的服务器上的测试代表,冷启动到GRUB须要195秒,而热启动只须要52秒。为何冷启动比热启动须要耗费多得多的时间?有没有哪些措施来加快BIOS启动呢?
编程


    带着这些疑问,结合以前在某国产CPU BIOS上的工做经验,仔细阅读了Intel BIOS Write Guide,有下面的一些思考和发现,但愿可以起到抛砖引玉的做用。缓存


    每颗Intel E5芯片都是多核心,在BIOS启动的过程当中,它会根据CPU ID和约定的机制决定哪颗CPU是Bootsrap Processor (BSP),哪颗CPU是Application Processor(AP)。一般BSP会用来作大部分的系统初设化的工做,包括初设化Cache/TLB/Memory Controler/PCIE Root complex和设备,而AP大部分时间处于等待状态,直到BSP完成主要的任务,发送核间中断来唤醒AP。事实上BSP完成的主要任务,AP也可以协助完成。对每一个核而言,它本身内部的Cache、TLB均可以由本身独立初始化。链接外设上的多个PCIE Root Port和对应的卡,也能够由AP协助完成。这样一来,k个处理器器的Cache/TLB/IIO/PCIE等内部模块的初始化的时间,并发执行后能够缩减到初始化一个处理器内部Cache/TLB/IIO/PCIE的时间。服务器


    此外,在作内存控制器初始化时候,会通过内存布局扫描、控制器参数训练、内存读写自测等步骤。这个阶段,AP一样可以分担BSP控制器的工做,完成内存自检自测的工做,这就可以最大程度地并行地作系统自检和设备扫描初始化。这样一来,假设以前系统初始化须要耗时T,系统有n个处理器,并行化后,初始化的时间可以缩减到T/n。在这个阶段也能够作许多优化:并发


    第1、仅在内存布局和序列号改变的状况下,从新训练控制器参数。内存的某些参数和具体内存型号、主板布线等相关,为了适应这些不一样,第一次启动或者冷启动以后,须要通过训练这些参数才能适配具体的板卡和配置。可是在热启动的时候,若是经过Smbus/i2c检测到内存布局和型号都没有改变,能够直接使用上一次保存的参数,而后接着作后面的内存读写自测。这样就能够节省出内存参数训练的时间。对通常DDR控制器而言,内存参数训练每每占了内存初始化的大部分时间。这就要求在每次训练完DDR控制器的控制参数以后,可以把这些参数保存到非易失性存储介质上,好比flash或者eerom。由于这个时候内存并无初始化好,堆栈没法创建起来,须要经过较复杂的汇编语言来实现读写flash/eerom。固然若是约定好了调用接口,而且有足够多的寄存器可用,这个阶段应该也可使用基于寄存器堆栈的C语言编程实现。ide


    第2、利用多个处理器并发执行内存自检测试。在内存初始化的一个关键步骤就是,须要执行多种模式的内存读写测试,以确保使用的内存参数可以支持多种状况下的内存读写都正确无误。传统的方法是多个测试模式逐一在CPU上运行,判断读写的值是否一致。事实上,这个阶段彻底能够充分利用多核处理器的优势,同一个处理器上的其它核均可以同时分配不一样的模式,而后同时执行。这样既能够验证参数的正确性,同时也是对链接到这个CPU上的DDR控制器的一个压力测试。布局


    第3、利用多个处理器并发执行内存初始化。如今的高端服务器,不论是为了提升性能,仍是为了实现Activate-Active/Active-Pass的High Availablilty,都极可能有不止一个处理器。每一个处理器上有一个或多个内存控制器,都须要初始化。传统的方法是这些工做都交由BSP去作,AP只用等待其完成就好。其实,理论上每一个内存控制器均可以交由多核处理器上的一个核完成,一般能够选用和内存控制器挨着较近的处理器核。这样m个内存控制器初始化的时间能够优化成接近一个内存控制器初始化的时间。性能


    除了上述并行处理的通用方法以外,还能够根据CPU提供的特性来加快BIOS启动。有的CPU重启后,既支持从LPC Flash取指,也支持从SPI Flash取指执行。从LPC总线取指令的速度比从SPI Flash取指令的速度满不少,启动模式从LPC改为SPI就能明显加快BIOS启动。这也就是为何如今大部分处理器都使SPI Flash取指的缘由。有的CPU还支持高级的Cache的操做,可以把最近访问指令或数据的相邻指令或数据缓存到Cache中去,后面的访问都会从Cache去执行,这比从SPI Flash访问数据或者指令会块上几个数量级。最后,若是BIOS启动阶段有不少定向到慢速接口的输出(好比串口),也会明显影响BIOS启动速度,所以尽量去掉没必要要的串口输出,也会提升BIOS启动速度。测试


综上所述,能够经过并行化、利用CPU特性加快BIOS启动,减小系统宕机时间,提升用户体验。优化

相关文章
相关标签/搜索