Improving performance (简体中文)/Boot process (简体中文)
本文将为读者提供数种加速系统启动的方法。通过学习实践这些方法,读者不仅能改善系统性能,还能学习系统启动脚本的知识。
启动过程分析
使用 systemd-analyze
systemd提供了一个名为 systemd-analyze
的工具, 可用于显示有关启动过程的计时细节, 包括一个svg图, 显示等待其依赖项的单元. 您可以看到哪些单元文件导致启动过程减慢, 然后可以相应地优化系统.
要查看启动时在内核/用户空间中消耗的时间, 只需使用:
$ systemd-analyze
按照耗费时间顺序, 输出启动每个单元耗费的时间:
$ systemd-analyze blame
在开机过程的一些时刻, 需要特定的单元成功启动了才能继续. 查看在启动链中哪些单元处于这些关键点, 可以:
$ systemd-analyze critical-chain
还可以生成类似于 bootchart 的开机过程图表:
$ systemd-analyze plot > plot.svg
更多细节请参考 systemd-analyze(1).
使用 systemd-bootchart
自2012年10月17日,bootchart 工具已经合并进 systemd 中,使用方法和原来的 bootchart 大同小异,添加下列内容到内核参数即可:
initcall_debug printk.time=y init=/usr/lib/systemd/systemd-bootchart
更多信息请查看 manpage
使用 bootchart2
您还可以使用 Bootchart 来可视化引导序列. 由于没有办法在内核参数设置两个 init, 所以不能使用源里的 bootchart. 不过, AUR 软件包 bootchart2AUR 提供了一个 systemd 服务. 在安装完 bootchart2 后启用服务即可:
# systemctl enable bootchart2.service
详情参阅 bootchart2 文档。
自己编译内核
编译自定义内核可以减少启动时间和内存使用. 尽管随着64位体系结构的标准化和Linux内核的模块化特性, 这些好处可能没有预期的那么大
有关更多信息, 请参见:Kernel (简体中文)#编译
Initramfs
类似于 #自己编译内核, initramfs也可以精简. 一个简单的方法是包含 mkinitcpio autodetect
钩子. 详情请参见 Minimal initramfs.
提前启动服务
systemd 的一个核心特性就是 D-Bus 以及 socket 激活. 这会导致服务在首次访问时启动, 这通常是一件好事. 但是, 如果你知道某个服务 (比如 upower) 总是在引导过程中启动, 那么尽可能早地启动它可能会缩短总体的引导时间. 可以通过以下方式实现 (如果这个服务有 service 文件, 多数情况下都是):
# systemctl enable upower
这会使 systemd 尽快启动 UPower, 而不会导致 socket 或 D-Bus 激活的竞争.
Staggered spin-up
有些硬件使用staggered spin-up,操作系统一个一个访问硬盘,以减少耗电。这会降低启动速度,大部分用户都不需要开启。检查是否开启:
# dmesg | grep SSS
如果没有查到,表示未启动。如果有显示,可以将libahci.ignore_sss=1
加入 kernel line 进行禁用。
避免重复挂载
mkinitcpio提供了 fsck
钩子,将启动加载配置中的 root 从 ro
修改为 rw
并删除 /etc/fstab
中的 root 挂载,可以避免重复挂载。挂载参数可以通过rootflags=[mount options...]
设置。
删除 /etc/fstab
中的 API 文件系统,systemd 会自动挂载它们。下面命令可以获得这些 API 文件系统的列表:
$ pacman -Ql systemd | grep '\.mount$'
/home
等其他文件系统可以通过自定义挂载单元进行挂载。
精简输出信息
修改启动加载器内核参数中的 verbose
为 quiet
即可。对于某些用户,特别是 SSD 用户,TTY 的龟速实际上成为了性能瓶颈,精简输出信息实际上有利于提高性能。
参阅
- e4rat
- udev
- Daemon
- mkinitcpio
- Improving performance
- Systemd - An alternative init process
- Bootchart - A tool to assist in profiling the boot process
- Kexec A tool to reboot very quickly without waiting for the whole BIOS boot process to finish.