Support compressed kernel modules in initramfs-tools and kernel
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
initramfs-tools (Ubuntu) |
Fix Released
|
Undecided
|
Unassigned | ||
Focal |
New
|
Undecided
|
Unassigned | ||
Impish |
Won't Fix
|
Undecided
|
Unassigned | ||
Jammy |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
--- initramfs-tools
[Impact]
* Initramfs-tools already supports compressed kernel modules. However, in focal and impish it does so inefficiently. It is always better to have a compressed initramfs of uncommpressed kernel modules, than a compressed initrd of compressed kernel modules. Thus when kernel module compression is turned on, it is prudent for initramfs-tools to pre-uncompress kernel modules when building initramfs.
[Test Plan]
* Compress all kernel modules with xz for a current kernel, check that all of them have .ko.xz extension and no .ko ones available
* Rerun depmod
* Update initramfs with update-initramfs -u
* lsinitramfs contents and check that all kernel modules are present, and are uncompressed (.ko extension)
[Where problems could occur]
* This optimization for compressed kernel modules will make initramfs build time longer (due to decompression) whilst improving bootspeed (overall smaller size of the initrd).
[Other Info]
* Original bug report re kernel feature
--- linux
Symbol: MODULE_
Type : bool
= Impacts to measure and observe =
== Disk space ==
* Inspect linux-modules-* and linux-modules-
$ apt show linux-modules-
Package: linux-modules-
Installed-Size: 81.5 MB
Download-Size: 15.5 MB
Package: linux-modules-
Installed-Size: 215 MB
Download-Size: 41.5 MB
In theory, there should not be a significant change in the Download-size. It is desired that there is a significant reduction in Installed-Size. Modules take up about 300MB and normally one has upto three kernel version installed, resulting in about of 1GB of disk space that one constantly pays for.
== Boot Speed ==
In theory, boot speed may either improve or regress. It depends if disk IO is slower than decompression speed, meaning loading compressed modules is faster.
Also one has to observe the changes in the initrd size. zstd(zstd) compression may result in slight growth, which shouldn't impact boot speed too much.
= Outcomes =
If installed size savings can be achieved without regressing bootspeed we should enable CONFIG_
Changed in linux (Ubuntu): | |
status: | New → Incomplete |
assignee: | nobody → Colin Ian King (colin-king) |
Changed in linux (Ubuntu): | |
importance: | Undecided → Medium |
status: | Incomplete → In Progress |
tags: | added: patch |
Changed in linux (Ubuntu): | |
assignee: | Colin Ian King (colin-king) → nobody |
assignee: | nobody → Dimitri John Ledkov (xnox) |
description: | updated |
description: | updated |
no longer affects: | linux (Ubuntu Impish) |
no longer affects: | linux (Ubuntu Focal) |
summary: |
- Benchmark if we can compress kernel modules + Support compressed kernel modules in initramfs-tools and kernel |
description: | updated |
Needed a bit of tweaking to get this benchmarked. Had to enable zstd in kmod package and also apply a hack to the kernel package building. (See attachment).
So, the installed compressed kernel modules are 27.1 MB compared to the uncompressed 99.1 MB. The compressed extra modules are 103 MB compared to the uncompressed modules at 296 MB.
linux-modules- 5.13.0- 8-generic installed size:
zstd compressed modules: 27.1 MB
normal uncompressed: 99.1 MB
linux-modules- extra-5. 11.0-18- generic installed size:
zstd compressed modules: 103.0 MB
normal uncompressed: 206.0 MB
The downside is that compression for the deb and the initramfs does not do so well. It seems that compressing a lot of uncompressed modules is better than compressing already compressed modules:
linux-modules- 5.13.0- 8-generic deb size:
zstd compressed modules: 19.9 MB
normal uncompressed: 17.5 MB
linux-modules- extra-5. 11.0-18- generic deb size:
zsd compressed modules: 95.08 MB
normal uncompressed: 48.70 MB (I double checked the contents of the deb)
The initramfs size:
zsd compressed modules: 49.77 MB
normal uncompressed: 41.24 MB
For boot times, the kernel + zstd modules for ZSD and uncompressed kernel modules is almost the same, zstd is fractionally faster but this is within the margins of measured error.
*HOWEVER*, the zstd initramfs does not compress already compressed zstd kernel modules well, so the initramfs size is actually larger, so this impacts on the time to load the initramfs, so we end up with slower boots with zstd module compression.
Attached is the data in a libre office spread sheet