服务器中加速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。在这个阶段也可以做许多优化:


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


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


    第三、利用多个处理器并发执行内存初始化。现在的高端服务器,不管是为了提高性能,还是为了实现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启动,减少系统宕机时间,提高用户体验。


















本文转自存储之厨51CTO博客,原文链接: http://blog.51cto.com/xiamachao/1691096  ,如需转载请自行联系原作者

相关文章
|
2月前
|
弹性计算 安全 Linux
新手一键开服!阿里云3分钟成功幻兽帕鲁联机服务器流程方法
新手一键开服!阿里云3分钟成功幻兽帕鲁联机服务器流程方法,如何自建幻兽帕鲁服务器?基于阿里云服务器搭建幻兽帕鲁palworld服务器教程来了,一看就懂系列。本文是利用OOS中幻兽帕鲁扩展程序来一键部署幻兽帕鲁服务器,阿里云百科分享官方基于阿里云服务器快速创建幻兽帕鲁服务器教程:
|
3月前
|
弹性计算 Ubuntu Linux
【免费教程】阿里云服务器自建Palworld幻兽帕鲁32人联机服务器方法
今天来教大家怎么搭建自己的幻兽帕鲁游戏服务器,首先需要有一台性价比高的服务器。下面来看看怎么搭建幻兽帕鲁服务器吧。
171 0
|
1月前
|
缓存 监控 安全
有哪些搭建代理服务器的好方法?--代理IP小课堂
今天我们就来说一说,要如何搭建代理服务器,以此来帮助你快速入门代理服务器的搭建和使用。
|
1月前
|
弹性计算 Ubuntu Windows
阿里云自建《幻兽帕鲁Palworld》多人游戏专属服务器,搭建方法分享
对于《幻兽帕鲁》的忠实粉丝来说,与好友一同在游戏中探险、生存无疑增加了更多的乐趣。而为了实现这一愿望,搭建一个专属的多人游戏服务器就显得尤为重要。今天,我将为大家带来一篇极简教程,教您如何在三次点击内,轻松搭建《幻兽帕鲁》的专属服务器。
|
1月前
|
弹性计算 Ubuntu Linux
幻兽帕鲁Palworld服务器搭建教程,2024年阿里云部署帕鲁服务器保姆级方法
对于热爱《幻兽帕鲁》的玩家们来说,能够拥有属于自己的游戏服务器,无疑是提升了游戏的自由度和乐趣。那么,怎样才能部署幻兽帕鲁服务器呢?接下来,就让我们一起走进这个简单易懂、保姆级的教程吧!
120 0
|
1月前
|
弹性计算 Ubuntu Linux
2024年Palworld/幻兽帕鲁联机服务器搭建方法分享,详细步骤
想要和好友一起畅游幻兽帕鲁的世界吗?别再为联机而烦恼,因为搭建自己的服务器其实并不难!今天,就为大家带来一篇超详细的幻兽帕鲁服务器搭建教程,保证让你轻松上手!
20 0
|
2月前
|
弹性计算 安全 关系型数据库
带你读《从基础到应用云上安全航行指南》——来上课!一文掌握守住ECS网络安全的最佳方法(1)
带你读《从基础到应用云上安全航行指南》——来上课!一文掌握守住ECS网络安全的最佳方法(1)
156 0
|
2月前
|
弹性计算 运维 安全
带你读《从基础到应用云上安全航行指南》——来上课!一文掌握守住ECS网络安全的最佳方法(2)
带你读《从基础到应用云上安全航行指南》——来上课!一文掌握守住ECS网络安全的最佳方法(2)
37 2
|
2月前
|
云安全 弹性计算 监控
带你读《从基础到应用云上安全航行指南》——来上课!一文掌握守住ECS网络安全的最佳方法(3)
带你读《从基础到应用云上安全航行指南》——来上课!一文掌握守住ECS网络安全的最佳方法(3)
46 0
|
2月前
|
弹性计算 数据安全/隐私保护
2024年雾锁王国(Enshrouded)服务器怎么部署 阿里云上雾锁王国服务器部署方法
2024年雾锁王国(Enshrouded)服务器怎么部署 阿里云上雾锁王国服务器部署方法。雾锁王国(Enshrouded)作为一款热门多人在线游戏,为了给玩家提供稳定、流畅的联机体验,阿里云提供了高效便捷的快速部署解决方案,本文将为大家分享阿里云一键部署雾锁王国联机服务器详细教程。