进行 Linux 内核与固件开发的时候,往往需要多次的重启,会浪费大把的时间。

在所有我拥有或使用过的电脑中,启动最快的那台是 20 世纪 80 年代的电脑。在你把手从电源键移到键盘上的时候,BASIC 解释器已经在等待你输入命令了。对于现代的电脑,启动时间从笔记本电脑的 15 秒到小型家庭服务器的数分钟不等。为什么它们的启动时间有差别?

那台直接启动到 BASIC 命令行提示符的 20 世纪 80 年代微电脑,有着一颗非常简单的 CPU,它在通电的时候就立即开始从一个内存地址中获取和执行指令。因为这些系统的 BASIC 在 ROM 里面,基本不需要载入的时间——你很快就进到 BASIC 命令提示符中了。同时代更加复杂的系统,比如 IBM PC 或 Macintosh,需要一段可观的时间来启动(大约 30 秒),尽管这主要是因为需要从软盘上读取操作系统的缘故。在可以加载操作系统之前,只有很小一部分时间是花费在固件上的。

现代服务器往往在从磁盘上读取操作系统之前,在固件上花费了数分钟而不是数秒。这主要是因为现代系统日益增加的复杂性。CPU 不再能够只是运行起来就开始全速执行指令,我们已经习惯于 CPU 频率变化、节省能源的待机状态以及 CPU 多核。实际上,在现代 CPU 内部有数量惊人的更简单的处理器,它们协助主 CPU 核心启动并提供运行时服务,比如在过热的时候压制频率。在绝大多数 CPU 架构中,在你的 CPU 内的这些核心上运行的代码都以不透明的二进制 blob 形式提供。

在 OpenPOWER 系统上,所有运行在 CPU 内部每个核心的指令都是开源的。在有 OpenBMC(比如 IBM 的 AC922 系统和 Raptor 的 TALOS II 以及 Blackbird 系统)的机器上,这还延伸到了运行在 基板管理控制器(Baseboard Management Controller)上的代码。这就意味着我们可以一探究竟,到底为什么从接入电源线到显示出熟悉的登录界面花了这么长时间。

如果你是内核相关团队的一员,你可能启动过许多内核。如果你是固件相关团队的一员,你可能要启动许多不同的固件映像,接着是一个操作系统,来确保你的固件仍能工作。如果我们可以减少硬件的启动时间,这些团队可以更有生产力,并且终端用户在搭建系统或重启安装固件或系统更新的时候会对此表示感激。

过去的几年,Linux 发行版的启动时间已经做了很多改善。现代的初始化系统在处理并行和按需任务上做得很好。在一个现代系统上,一旦内核开始执行,它可以在短短数秒内进入登录提示符界面。这里短短的数秒不是优化启动时间的下手之处,我们要到更早的地方:在我们到达操作系统之前。

在 OpenPOWER 系统上,固件通过启动一个存储在固件闪存芯片上的 Linux 内核来加载操作系统,它运行一个叫做 Petitboot 的用户态程序去寻找用户想要启动的系统所在磁盘,并通过 kexec 启动它。有了这些优化,启动 Petitboot 环境只占了启动时间的百分之几,所以我们还得从其他地方寻找优化项。

在 Petitboot 环境启动前,有一个先导固件,叫做 Skiboot,在它之前有个 Hostboot。在 Hostboot 之前是 Self-Boot Engine,一个晶圆切片(die)上的单独核心,它启动单个 CPU 核心并执行来自 Level 3 缓存的指令。这些组件是我们可以在减少启动时间上取得进展的主要部分,因为它们花费了启动的绝大部分时间。或许这些组件中的一部分没有进行足够的优化或尽可能做到并行?

另一个研究路径是重启时间而不是启动时间。在重启的时候,我们真的需要对所有硬件重新初始化吗?

正如任何现代系统那样,改善启动(或重启)时间的方案已经变成了更多的并行执行、解决遗留问题、(可以认为)作弊的结合体。


电脑卡在正在启动windows界面_让 Linux 启动更快相关推荐

  1. win7卡在正在启动windows界面_一键还原怎么用董哥教你win7一键还原怎么用

    使用一个系统的时间长了,多少都户有些毛病,例如系统无法运行,电脑卡顿等等,因此,我们可以在安装完系统并激活后,还有安装完要使用的软件后,进行一个系统备份的工作,等到系统出现故障时,我们就可以一键还原了 ...

  2. win7卡在正在启动windows界面_分享一下WIN7系统下运行红警2的方法

    红警2这个游戏不用多说,是非常经典好玩的一款即时战略游戏,那时我们都用的XP系统,这个游戏在XP下完美运行,不会有任何问题,但是随着系统的升级,我们现在用的多的系统是WIN7系统,许多朋友想重新回味一 ...

  3. 计算机一打开就卡在更新失败,做系统一直在正在启动画面-电脑开机后卡在“正在启动windows”界面,怎么办?...

    电脑做系统一直安装然后又重新启动了,反复循环,开不了机,怎么办? 如果你是win10系统的话,那你就是碰见了这个无限循环的bug,许多人升级系统也和你一样出现这个情况. 方法一:可以进入BIOS将安全 ...

  4. 计算机开机卡在进入桌面的时候,电脑启动时卡在“正在启动WINDOWS”界面如何处理...

    很多朋友都向小编反馈自己经常遇到电脑启动的时候,卡在"正在启动WINDOWS"界面的情况,这该怎么办呢?接下来,就由系统城小编跟大家详细介绍怎么处理这个问题,欢迎大家来阅读学习! ...

  5. w ndows7太卡了,uefi安装win7卡在正在启动windows界面解决方法(新方法)

    win10己经成为全球第一桌面系统,但始终有大量的用户还在停留win7时代,因为大部分觉得win7系统对游戏以及软件兼容性好,最近有很多网友问我uefi安装win7卡在正在启动windows怎么办?出 ...

  6. 缺少nst linux.mbr文件,用EasyBCD2.0在Windows环境下引导Linux启动

    用EasyBCD2.0在Windows环境下引导Linux启动 以在Win7环境下用EasyBCD2.0.2引导Ubuntu启动为例(Ubuntu安装在Win7之前,倘若反了进不去Win7,可以用Wi ...

  7. 电脑卡顿不流畅怎么解决_电脑用久了卡怎么办?学会这四招解决你的电脑卡顿问题...

    很多人在遇到电脑卡顿时总会吐槽:这电脑配置真烂,或者Windows系统垃圾,又或是转向攻击其他事物(品牌.硬件等).其实这些吐槽有的对,有的不对.有些时候确实是电脑的锅,有的时候却是操作系统或软件的问 ...

  8. 电脑卡顿不流畅怎么解决_电脑卡顿是什么原因,电脑卡顿严重解决方法【详解】...

    电脑运行卡对用户来说是件头疼的事情,尤其是对电脑不太了解的小白用户来说更是如此,电脑卡顿是什么原因呢?今天小编就带大家首先简单的了解一下电脑的基本知识. 电脑主要由 处理器,内存,硬盘,显卡,声卡,主 ...

  9. 电脑卡顿不流畅怎么解决_如何解决因电脑内存容量不足引起的卡顿?

    内存是电脑中十分重要的部件之一,不管是操作系统还是软件程序都需要缓存到内存中才能使用,因此内存容量的大小直接影响着程序运行的快慢.有许多电脑用户的电脑使用过程中老觉得卡顿,在windows的任务管理器 ...

最新文章

  1. java 初始化系统参数_系统中参数的初始化 参数在系统中配置
  2. nagios+sendmail配置
  3. python读写excel数据--pandas
  4. 在ListCtrl控件中插入图标
  5. java filter 注解_Spring常用注解及自定义Filter的实现
  6. 利用Python爬虫采集mac电脑皮肤
  7. 路径找不到时该怎么解决
  8. 【前沿】28篇标志性论文见证「自然语言处理NLP」2019-2020年度亮点进展
  9. Atitit 理财之道 attilax著 1. 融资 3 1.1. 融资账户余渠道 3 2. 风控 3 3. 3 4. 投资 3 5. 线上财富与资源 3 5.1. Jd流量 飞猪流量 3 5.
  10. 【图像去噪】基于matlab最佳加权双边滤波图像去噪【含Matlab源码 459期】
  11. 如何在spring框架中解决多数据源的问题[转]
  12. Windows网络编程:阻塞模式下的Socket编程
  13. 基于深度学习的帧内预测技术
  14. 路由器的网络连接模式(桥接模式和路由模式)
  15. 计算机怎么算折扣价格,5折怎么算-商场打折背后的猫腻:满100减50和打5折哪个更划算?...
  16. 在html里怎么给表单加上边框,html如何给table表单加边框
  17. Kubernetes pod的生命周期
  18. Hazelcast介绍
  19. 深度对比Soul、觅伊,两款社交软件区别在哪?
  20. 更安全的ftp服务器Pure-FTP搭建(4)

热门文章

  1. helm安装mysql_helm安装配置
  2. @value 数组_为什么不推荐用for...in遍历数组
  3. 数学系和物理系学生有什么差别?
  4. activeMQ发送与接受消息模板代码
  5. html怎样实现数据列表的下拉效果
  6. 数据结构上机测试2-2:单链表操作B
  7. Win10下VS2015(WDK10)驱动开发环境配置
  8. Unity3d常用插件
  9. 函数调用过程简单分析
  10. Apache Kylin从入门到精通