Supporting LZ4 as initramfs compressor

Balint Reczey balint.reczey at canonical.com
Mon Mar 19 17:19:54 UTC 2018


On Mon, Mar 19, 2018 at 3:12 PM, Julian Andres Klode
<julian.klode at canonical.com> wrote:
> On Mon, Mar 19, 2018 at 02:59:24PM +0000, Balint Reczey wrote:
>> Hi,
>>
>> Initramfs-tools uses gzip compression by default which served us well
>> for quite some time but LZ4 offers way faster decompression while
>> making a only slightly bigger initramfs files.
>>
>> On my old laptop the initramfs extraction time decreased from ~1.2s to ~0.24s:
>> (with lz4)
>> kernel: [    0.297726] Unpacking initramfs...
>> kernel: [    0.535061] Freeing initrd memory: 77940K
>> kernel: [    0.301637] Unpacking initramfs...
>> kernel: [    0.539109] Freeing initrd memory: 77940K
>> (with gzip)
>> kernel: [    0.273748] Unpacking initramfs...
>> kernel: [    1.490066] Freeing initrd memory: 57140K
>> kernel: [    0.281729] Unpacking initramfs...
>> kernel: [    1.498493] Freeing initrd memory: 57140K
>>
>> The increase in the initrd.img size is ~14%:
>> (lz4)
>> -rw-r--r-- 1 root root 66709065 márc  19 14:24
>> /boot/initrd.img-4.15.0-12-generic
>> (gzip)
>> -rw-r--r-- 1 root root 58510993 márc  19 12:57
>> /boot/initrd.img-4.15.0-12-generic.bak
>>
>> Initramfs creation speed also improved a bit from ~24s to ~21s wall clock time:
>> (lz4)
>> update-initramfs: Generating /boot/initrd.img-4.15.0-12-generic
>> 14.97user 6.31system 0:20.47elapsed 103%CPU (0avgtext+0avgdata
>> 22368maxresident)k
>> update-initramfs: Generating /boot/initrd.img-4.15.0-12-generic
>> 15.18user 6.49system 0:20.48elapsed 105%CPU (0avgtext+0avgdata
>> 22308maxresident)k
>> (gzip)
>> update-initramfs: Generating /boot/initrd.img-4.15.0-12-generic
>> 18.23user 6.77system 0:23.61elapsed 105%CPU (0avgtext+0avgdata
>> 22396maxresident)k
>> update-initramfs: Generating /boot/initrd.img-4.15.0-12-generic
>> 18.38user 6.83system 0:23.82elapsed 105%CPU (0avgtext+0avgdata
>> 22292maxresident)k
>
> For me it was 16 -> 10 I think.
>
>>
>> Base on the results I plan adding LZ4 compression support to
>> initramfs-tools as requested in LP: #1488620 [1] in the next days
>> without setting it as default
>>
>
> +1
>
>> and I propose setting LZ4 as default for 18.10.
>
> We might have zstd support by that time (I hope), it might make sense
> to use that then (better space/time tradeoff), but we'll have to see.

That would also be an option, but I expect zstd to bring little speed
advantage over LZ4 here while LZ4 support could be easily backported
to releases with older kernels.

The proposed patch enabling lz4 uses lz4 -9. I tried lz4's default
compression, -1, but decompression speed difference was barely
noticeable - most likely due to copying being the bottleneck.

In fact I just realized that i copied the results created with lz4 -1,
where the compressed initrd size was 77940K.
The correct results for lz4 -9 are the following, taking the same
~0.24s to decompress:

kernel: [    0.285692] Unpacking initramfs...
kernel: [    0.518806] Freeing initrd memory: 65148K
kernel: [    0.289731] Unpacking initramfs...
kernel: [    0.522823] Freeing initrd memory: 65148K

Cheers,
Balint

-- 
Balint Reczey
Ubuntu & Debian Developer



More information about the ubuntu-devel mailing list