首页 > 系统相关 >Centos8系统启动时间优化

Centos8系统启动时间优化

时间:2024-05-16 17:42:16浏览次数:21  
标签:阶段 系统启动 启动 initrd 内核 加载 优化 Centos8

目录

前言

因需要,对Centos8操作系统的启动时间进行优化。

初始化系统

Centos8使用了systemd作为系统和服务管理器。systemd是现代Linux发行版中普遍采用的初始化系统,它负责在启动时初始化系统环境并管理系统服务。我们在分析操作系统的启动过程时可以使用systemdsystemctl相关的命令。

启动阶段

首先查看操作系统启动过程中各阶段的耗时信息:

systemd-analyze

显示

Startup finished in 4.401s (firmware) + 10.322s (loader) + 1.121s (kernel) + 5.921s (initrd) + 36.591s (userspace) = 58.357s

我们可以看到系统启动分为了五个阶段:

  • firmware(固件):这个阶段包括BIOS或UEFI启动之前的时间。这是硬件自检和准备启动操作系统之前的时间。
  • loader(加载器):这是引导加载器的时间,例如GRUB。这个阶段是从BIOS传递到引导加载器,再从引导加载器开始加载操作系统。
  • kernel(内核):这代表Linux内核的加载和初始化时间。内核配置和硬件驱动加载都发生在这个阶段。
  • initrd(初始RAM磁盘):这是初始内存文件系统的加载和执行时间。它通常包含一些必要的驱动和系统文件,用来帮助内核挂载真实的根文件系统。
  • userspace(用户空间):这是启动所有用户空间服务的时间。这个阶段的时间取决于你的系统上有哪些服务和程序被配置为启动。

下面来按阶段分析可能的优化手段

firmware(固件)

优化固件启动时间通常比较麻烦,因为设计到硬件级别的操作:调整BIOS或UEFI的设置等。以下是一些可以尝试的方法:

  • 禁用不必要的启动选项:在BIOS/UEFI设置中,你可以禁用一些不常用的设备启动选项,比如网络启动(PXE Boot)或其他外部设备。这样可以减少固件搜索和初始化设备的时间。
  • 快速启动:许多现代BIOS/UEFI提供了“快速启动”(Fast Boot)或“快速启动”(Quick Boot)选项。启用这些选项可以让固件跳过某些自检程序(POST),从而缩短启动时间。
  • 更新固件:硬件制造商有时会发布更新以改善性能和减少启动时间。
  • 启动顺序:调整启动顺序,首选从主硬盘启动,而不是像usb这样的外部设备。这样可以减少固件在尝试从未使用设备启动时花费的时间。
  • 优化安全设置:安全启动(Secure Boot)和其他安全检查可能会增加启动时间。如果不需要这些额外的安全措施,可以考虑禁用它们。

对于我的设备,在firmware阶段可做的优化选择很少而且收益不高,因此我在此阶段没有做相关的优化。

loader(加载器)

优化loader阶段的启动时间主要涉及配置和优化引导加载程序。以下是一些可以减少loader阶段启动时间的方法:

  • 优化GRUB:编辑GRUB配置文件(/etc/default/grub),减少启动菜单的等待时间(默认为5秒)。例如,将GRUB_TIMEOUT设置为更短的时间(如1秒),甚至设置为0以直接跳过菜单。修改完毕后使用grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg使更改生效

对于我的设备,每天都要进行上电自启动,而且上电后是无人操作的,所以可以在此阶段优化启动时间。我设置的等待时间为1秒,相较于默认的5秒,缩短了4秒。

kernel(内核)

优化Linux系统中kernel阶段的启动时间主要涉及减少内核加载和初始化所需时间。这可以通过精简内核、优化内核配置和调整启动参数等来实现:

  • 编译定制内核:如果默认的内核包含很多不需要的驱动和模块,可以考虑自己编译一个精简版的内核。只包括必要的驱动和模块可以显著减少内核的启动时间。
  • 使用内核启动参数:通过修改GRUB中的内核启动参数来优化启动过程。例如,添加quiet参数可以减少启动时的日志输出,profile=2可以在系统启动后重新生成读取文件的优化列表,从而加速后续的启动。
  • 禁用不必要的内核功能:通过内核配置,禁用不需要的功能如调试功能、不使用的文件系统类型、不必要的硬件支持等。
  • 内核启动剖析:使用内核启动剖析工具,如printk时间戳和initcall_debug内核参数,来监控和识别内核启动过程中的延迟瓶颈。

对于我的设备,在kernel阶段优化的收益不高,因此我在此阶段没有做相关的优化。

initrd(初始RAM磁盘)

优化Linux系统中的initrd(初始内存盘)阶段的启动时间可以通过减少initrd的大小、精简其内容,以及优化其加载过程来实现:

  • 精简initrd内容:initrd包含了系统启动所需的最小集合的驱动和文件系统工具。如果initrd中包含了不必要的驱动或模块,可以在构建initrd时移这些模块。
  • 压缩initrd:initrd通常使用压缩来减少其在磁盘上的大小,从而提高加载速度。适当选择如gzip、xz或lz4等压缩算法,可以提高启动速度。

对于这一阶段不太了解,故没有选择针对此阶段进行优化。

userspace(用户空间)

优化Linux系统中的用户空间(userspace)阶段启动时间可以显著改善整体启动体验。用户空间启动阶段是指内核启动之后,系统启动各种服务和应用程序的阶段,可以使用下述方法优化:

  • 分析服务启动时间并禁用非必要的服务:使用systemd-analyze blame查看启动过程中每个服务的耗时,根据具体情况确定哪些服务是非常耗时且非必要的,使用systemctl disable xxxservicenamexxx禁用这些服务以加速启动过程。

  • 延迟启动服务:对于不需要在启动时立即运行的服务,可以配置它们延迟启动或按需启动。

总结

在测试中,我只是将GRUB菜单等待时间从5秒缩减到1秒,并禁用了一些用户空间阶段启动的服务,并未针对firmware、kernel、initrd阶段进行优化。

但是目前可能是因为有某些进程未启动完毕,如果不手动systemctl cancel服务,那么它就会一直被统计到userspace的耗时中。

优化后的结果如下:

Startup finished in 4.386s (firmware) + 6.145s (loader) + 1.119s (kernel) + 3.525s (initrd) + 17min 4.058s (userspace) = 17min 19.235s

多次测试后发现firmware和kernel阶段的耗时很稳定,每次的偏差的不多;loader阶段也很稳定,而且由之前的10秒降为6秒左右,证明优化是起作用的;而initrd阶段的耗时会在3.5-6.5秒之间横跳,目前不知道变化的原因;userspace阶段由于未知服务,对耗时统计影响较大,待后期排查原因。

本笔记后面持续更新。

标签:阶段,系统启动,启动,initrd,内核,加载,优化,Centos8
From: https://www.cnblogs.com/paw5zx/p/18196386

相关文章

  • k8s 调优 参数优化
    这些参数是Kubernetes(K8s)中的一些配置选项,用于控制不同的行为和功能。让我逐个解释它们:--feature-gates=RotateKubeletClientCertificate=true,RotateKubeletServerCertificate=true:这个参数用于启用或禁用一些实验性的功能。在这里,启用了两个功能:RotateKubeletClientCertif......
  • Android系统启动流程
    在Android中系统的启动流程是一个经常会被问到的问题,那么下面我们通过一张图来说明一下 从上面的图片中可以看到它的一个启动流程.1.BootLoader首先,当我们点击电源开关后,引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导程序到RAM,然后执行,这时执行的就是B......
  • 基于GWO灰狼优化的CNN-LSTM-Attention的时间序列回归预测matlab仿真
    1.算法运行效果图预览优化前    优化后     2.算法运行软件版本matlab2022a  3.算法理论概述       时间序列回归预测是数据分析的重要领域,旨在根据历史数据预测未来时刻的数值。近年来,深度学习模型如卷积神经网络(ConvolutionalNeuralN......
  • PPO-KL散度近端策略优化玩cartpole游戏
     其实KL散度在这个游戏里的作用不大,游戏的action比较简单,不像LM里的action是一个很大的向量,可以直接用surr1,最大化surr1,实验测试确实是这样,而且KL的系数不能给太大,否则惩罚力度太大,actionmodel和refmodel产生的action其实分布的差距并不太大 importgymimporttorchimp......
  • SciTech-BigDataAIML-Tensorflow-Optimizer:优化器
    https://keras.io/api/optimizers/OptimizersAvailableoptimizers:SGDRMSpropAdamAdamWAdadeltaAdagradAdamaxAdafactorNadamFtrlLionLossScaleOptimizerUsagewithcompile()&fit()Anoptimizerisoneofthetwoargumentsrequiredforcompilin......
  • FM20S用户手册--Linux系统启动卡制作及系统固化
     ......
  • 如何优化Unity发布iOS编译出来的Framework文件过大问题
    1)如何优化Unity发布iOS编译出来的Framework文件过大问题2)ScriptableBuildPipeline打包ScritptableObject报错3)APK在OPPO上报编译错误4)如何在Sequence中模拟我的蓝图这是第385篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全......
  • next-元数据创建、更新 SEO 优化
    在创建Next.js项目时,根页面会自动生成一个metadata对象,其中包含标题和描述等关键信息。每当页面被访问时,这个metadata对象会被读取并应用到HTML的默认配置中,确保页面的基本信息得以正确展示。在存在单独页面需要采用独特的标题或描述时,这些特定页面的元数据将优先于根元素所设定的......
  • 最近几个SQL优化案例(水一波博客,当段子看)
    某国产数据库原厂高级工程师找我优化SQL,以下是他给的三个案例。......
  • PPO近端策略优化玩cartpole游戏
     这个难度有些大,有两个policy,一个负责更新策略,另一个负责提供数据,实际这两个policy是一个东西,用policy1跑出一组数据给新的policy2训练,然后policy2跑数据给新的policy3训练,,,,直到policy(N-1)跑数据给新的policyN训练,过程感觉和DQN比较像,但是模型是actorcritic架构,on-policy转换成o......