dracut 速度优化

118 阅读1分钟

1️⃣ dracut 的并行化能力

  • dracut 本身在 大多数模块操作和 cpio 打包阶段是串行执行的。

  • 但是从 Linux 3.x 以后,dracut 内部会调用 cpio​ 或 gzip/xz​ 等压缩工具。

    • gzip​ 默认单线程,但可以用 pigz​ 替代,支持多核压缩。
    • xz​ 可以用 xz -T0​ 来利用所有 CPU 核心。

所以 dracut 并不是完全单线程,但压缩阶段是性能瓶颈,使用多核压缩能显著加快生成速度。


2️⃣ 多核优化方法

方法 A:使用 pigz 代替 gzip

  1. 安装 pigz​:
sudo dnf install -y pigz    # openEuler/Fedora/RHEL
  1. 生成 initramfs 并使用 pigz:
export COMPRESS=gzip
export COMPRESSPROG=pigz
dracut -f /boot/initramfs-6.6.103+.img 6.6.103+
  • pigz​ 会自动使用所有 CPU 核心并行压缩,速度比单核 gzip​ 快很多。

方法 B:使用 xz 多线程(推荐)

  1. 安装 xz 工具:
sudo dnf install -y xz
  1. 指定 xz 多线程:
export XZ_OPT="-T0 -9"
dracut --xz --hostonly -f /root/initramfs-6.6.103+.img 6.6.103+
  • -T0​ 表示使用系统所有 CPU 核心。

方法 C:临时修改 dracut 默认压缩工具

dracut 默认压缩方式在 /etc/dracut.conf​ 或 /etc/dracut.conf.d/*.conf​ 配置:

compress="xz"       # 可改为 gzip 或 bzip2
compressflags="-T0" # 多核

然后执行:

dracut -f /boot/initramfs-6.6.103+.img 6.6.103+

3️⃣ 总结

特性说明
默认串行压缩,单线程
多核压缩使用pigz​(gzip 多核)或xz -T0
模块处理dracut 模块执行本身还是串行,但压缩阶段可以并行
效果对大内核 (>300MB initramfs) 提升明显