Reducing initramfs size and speed up the generation

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Sat Jul 8 08:44:58 UTC 2023


Hello Benjamin,

some of the Ubuntu supported boards (e.g. LicheeRV) have so little RAM that
a default initrd cannot be decompressed. Some boards may need modules that
are not in initrd by default.

Best regards

Heinrich


Benjamin Drung <bdrung at ubuntu.com> schrieb am Sa., 8. Juli 2023, 02:19:

> Hi all,
>
> a year ago we changed the default compression and level for the
> initramfs to zstd -1. This fixed the very slow creation times on
> development boards (see bug #1958148), but that leads to bigger
> initramfs sizes that triggered other bugs (like bug #1842320).
> Big initramfs sizes can also fill up small sized /boot partitions easily
> (grooming the 850 initramfs-tools bugs revealed several such reports).
>
> Using xz -9 would give very good compression, but it takes very long
> (especially on slow development boards) and a lot of memory (good luck
> on Raspberry Pis with small memory like Pi Zeros).
>
> I propose following approach to address the drawback: Create cpio
> archives (compressed with xz -9) for the kernel modules and firmware
> files when building the kernel/firmware Debian package. Then ship those
> cpio archives in the package (or in a separate binary package). Then the
> CPU load it put on the builders. The cpio archives would contain the
> modules for MODULES=most.
>
> mkinitramfs will then look for those cpio archives and uses those in
> case they are present. Such a initramfs would look like this:
>
> * AMD/Intel microcode cpio archive (on amd64)
> * main cpio archive compressed with zstd -1
> * kernel modules from the Debian package compressed with xz -9
> * firmware files from the Debian package compressed with xz -9
>
> After working on initramfs-tools as part my day job, my fingers were
> itching and I had to create a quick and dirty draft in my free night
> time. You can find the result of the last two hours in [1]. This draft
> has a mkinitramfs-kernel script that creates a cpio archive containing
> the kernel modules and firmware (that needs to be split later on).
>
> The lunar test result on my AMD Ryzen 7 5700G look promising: Building
> 6.2.0-24-generic-modules-most.cpio.xz takes around 90 seconds and is
> 54.9 MiB in size. Creating the initramfs speeds up from around 8.7
> seconds to 3.5 seconds (saves 60 %). The size reduces from 133.1 MiB to
> 80.7 MiB (saves 39.4 %). So the boot needs 52.4 MiB less, but
> /lib/modules need 54.9 MiB for the cpio archive.
>
> The drawback is that building the kernel would take longer, the package
> takes more space on the archive and mirrors, and downloading them could
> take longer on slow connections.
>
> Implementing my proposal would be relative easy for initramfs-tools, but
> would mean some work for the kernel team.
>
> What do you think?
>
> [1]
> https://code.launchpad.net/~bdrung/ubuntu/+source/initramfs-tools/+git/initramfs-tools/+ref/ubuntu/prebuilt
>
> --
> Benjamin Drung
> Debian & Ubuntu Developer
>
> --
> ubuntu-devel mailing list
> ubuntu-devel at lists.ubuntu.com
> Modify settings or unsubscribe at:
> https://lists.ubuntu.com/mailman/listinfo/ubuntu-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ubuntu.com/archives/ubuntu-devel/attachments/20230708/894e2945/attachment.html>


More information about the ubuntu-devel mailing list