Skip to content

Use dracut-install in manual_add_modules

Benjamin Drung requested to merge bdrung/initramfs-tools:dracut-install into master

I sprinkled mkinitramfs with date -Ins to see where most time is spent. I ran the [1] test case in a chroot on my laptop. mkinitramfs took 18.3 seconds. The most time consuming parts:

  • 10.13 s (51.4%) auto_add_modules
  • 7.20 s (36.5%) run_scripts_optional /usr/share/initramfs-tools/hooks
  • 1.27 s (6.4%) final { cat; cpio; cpio|compress } > $outfile

The remaining 1.11 seconds are spread over the remaining parts.

Following hooks in /usr/share/initramfs-tools/hooks took the longest:

  • 4.56s (63.3%) framebuffer
  • 0.87s (12.1%) plymouth
  • 0.81s (11.3%) cryptroot
  • 0.23s (3.2%) lvm2
  • 0.18s (2.5%) udev
  • 0.17s (2.4%) mdadm

The remaining 0.38 seconds are spread over the remaining dozen of hooks.

The framebuffer hook just calls copy_modules_dir and manual_add_modules multiple times. auto_add_modules calls copy_modules_dir multiple times and manual_add_modules. copy_modules_dir calls find and then manual_add_modules.

So most time will be spent in manual_add_modules. This function calls modprobe on the modules, copies the modules, and add_firmware on the firmwares from a "modinfo -F firmware" call.

Replacing manual_add_modules by a call to /usr/lib/dracut/dracut-install speeds up the initramfs building significantly. In the chroot on my laptop the mkinitramfs execution reduces from 18.3 seconds to 11.0 (40% reduction).

[1] schroot-wrapper -c mantic -u root --ppa bdrung/ppa -p
linux-image-generic,initramfs-tools,zstd,busybox-initramfs,cryptsetup-initramfs,isc-dhcp-client,kbd,lvm2,mdadm,ntfs-3g,plymouth,plymouth-theme-spinner

LP: #2031185

Merge request reports

Loading