让linux启动更快的方法

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

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

那台直接启动到 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 缓存的指令。这些组件是咱们能够在减小启动时间上取得进展的主要部分,由于它们花费了启动的绝大部分时间。或许这些组件中的一部分没有进行足够的优化或尽量作到并行?blog

另外一个研究路径是重启时间而不是启动时间。在重启的时候,咱们真的须要对全部硬件从新初始化吗?内存

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

相关文章
相关标签/搜索