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