Commit a30d8a39 authored by Nick Terrell's avatar Nick Terrell Committed by Ingo Molnar
Browse files

usr: Add support for zstd compressed initramfs



- Add support for a zstd compressed initramfs.

- Add compression for compressing built-in initramfs with zstd.

I have tested this patch by boot testing with buildroot and QEMU.
Specifically, I booted the kernel with both a zstd and gzip compressed
initramfs, both built into the kernel and separate. I ensured that the
correct compression algorithm was used. I tested on arm, aarch64, i386,
and x86_64.

This patch has been tested in production on aarch64 and x86_64 devices.

Additionally, I have performance measurements from internal use in
production. On an aarch64 device we saw 19 second boot time improvement
from switching from lzma to zstd (27 seconds to 8 seconds). On an x86_64
device we saw a 9 second boot time reduction from switching from xz to
zstd.

Signed-off-by: default avatarNick Terrell <terrelln@fb.com>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
Tested-by: default avatarSedat Dilek <sedat.dilek@gmail.com>
Reviewed-by: default avatarKees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/r/20200730190841.2071656-5-nickrterrell@gmail.com
parent 48f7ddf7
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -100,6 +100,15 @@ config RD_LZ4
	  Support loading of a LZ4 encoded initial ramdisk or cpio buffer
	  If unsure, say N.

config RD_ZSTD
	bool "Support initial ramdisk/ramfs compressed using ZSTD"
	default y
	depends on BLK_DEV_INITRD
	select DECOMPRESS_ZSTD
	help
	  Support loading of a ZSTD encoded initial ramdisk or cpio buffer.
	  If unsure, say N.

choice
	prompt "Built-in initramfs compression mode"
	depends on INITRAMFS_SOURCE != ""
@@ -196,6 +205,17 @@ config INITRAMFS_COMPRESSION_LZ4
	  If you choose this, keep in mind that most distros don't provide lz4
	  by default which could cause a build failure.

config INITRAMFS_COMPRESSION_ZSTD
	bool "ZSTD"
	depends on RD_ZSTD
	help
	  ZSTD is a compression algorithm targeting intermediate compression
	  with fast decompression speed. It will compress better than GZIP and
	  decompress around the same speed as LZO, but slower than LZ4.

	  If you choose this, keep in mind that you may need to install the zstd
	  tool to be able to compress the initram.

config INITRAMFS_COMPRESSION_NONE
	bool "None"
	help
+1 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ compress-$(CONFIG_INITRAMFS_COMPRESSION_LZMA) := lzma
compress-$(CONFIG_INITRAMFS_COMPRESSION_XZ)	:= xzmisc
compress-$(CONFIG_INITRAMFS_COMPRESSION_LZO)	:= lzo
compress-$(CONFIG_INITRAMFS_COMPRESSION_LZ4)	:= lz4
compress-$(CONFIG_INITRAMFS_COMPRESSION_ZSTD)	:= zstd

obj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data.o