Message ID | 20200203211644.39847-1-nivedita@alum.mit.edu (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | initramfs: don't double-compress built-in initramfs if the kernel is compressed | expand |
Hi. On Tue, Feb 4, 2020 at 6:16 AM Arvind Sankar <nivedita@alum.mit.edu> wrote: > > If the kernel is going to be compressed anyway, there is no point in > double-compressing the built-in initramfs. Hide the built-in initramfs > compression choice in this case. > > Signed-off-by: Arvind Sankar <nivedita@alum.mit.edu> Double-compression slightly reduces the data size. And, keeping the bare vmlinux small is beneficial, IMHO. > --- > init/Kconfig | 9 +++++++++ > usr/Kconfig | 2 +- > 2 files changed, 10 insertions(+), 1 deletion(-) > > diff --git a/init/Kconfig b/init/Kconfig > index 24b23d843df1..88da0976bbfa 100644 > --- a/init/Kconfig > +++ b/init/Kconfig > @@ -176,6 +176,9 @@ config HAVE_KERNEL_LZ4 > config HAVE_KERNEL_UNCOMPRESSED > bool > > +config KERNEL_COMPRESSED > + bool > + > choice > prompt "Kernel compression mode" > default KERNEL_GZIP > @@ -201,6 +204,7 @@ choice > config KERNEL_GZIP > bool "Gzip" > depends on HAVE_KERNEL_GZIP > + select KERNEL_COMPRESSED > help > The old and tried gzip compression. It provides a good balance > between compression ratio and decompression speed. > @@ -208,6 +212,7 @@ config KERNEL_GZIP > config KERNEL_BZIP2 > bool "Bzip2" > depends on HAVE_KERNEL_BZIP2 > + select KERNEL_COMPRESSED > help > Its compression ratio and speed is intermediate. > Decompression speed is slowest among the choices. The kernel > @@ -218,6 +223,7 @@ config KERNEL_BZIP2 > config KERNEL_LZMA > bool "LZMA" > depends on HAVE_KERNEL_LZMA > + select KERNEL_COMPRESSED > help > This compression algorithm's ratio is best. Decompression speed > is between gzip and bzip2. Compression is slowest. > @@ -226,6 +232,7 @@ config KERNEL_LZMA > config KERNEL_XZ > bool "XZ" > depends on HAVE_KERNEL_XZ > + select KERNEL_COMPRESSED > help > XZ uses the LZMA2 algorithm and instruction set specific > BCJ filters which can improve compression ratio of executable > @@ -241,6 +248,7 @@ config KERNEL_XZ > config KERNEL_LZO > bool "LZO" > depends on HAVE_KERNEL_LZO > + select KERNEL_COMPRESSED > help > Its compression ratio is the poorest among the choices. The kernel > size is about 10% bigger than gzip; however its speed > @@ -249,6 +257,7 @@ config KERNEL_LZO > config KERNEL_LZ4 > bool "LZ4" > depends on HAVE_KERNEL_LZ4 > + select KERNEL_COMPRESSED > help > LZ4 is an LZ77-type compressor with a fixed, byte-oriented encoding. > A preliminary version of LZ4 de/compression tool is available at > diff --git a/usr/Kconfig b/usr/Kconfig > index bdf5bbd40727..f39eeb9ea2e3 100644 > --- a/usr/Kconfig > +++ b/usr/Kconfig > @@ -102,7 +102,7 @@ config RD_LZ4 > > choice > prompt "Built-in initramfs compression mode" > - depends on INITRAMFS_SOURCE != "" > + depends on INITRAMFS_SOURCE != "" && !KERNEL_COMPRESSED > help > This option allows you to decide by which algorithm the builtin > initramfs will be compressed. Several compression algorithms are > -- > 2.24.1 >
On Tue, Feb 04, 2020 at 11:22:19AM +0900, Masahiro Yamada wrote: > Hi. > > On Tue, Feb 4, 2020 at 6:16 AM Arvind Sankar <nivedita@alum.mit.edu> wrote: > > > > If the kernel is going to be compressed anyway, there is no point in > > double-compressing the built-in initramfs. Hide the built-in initramfs > > compression choice in this case. > > > > Signed-off-by: Arvind Sankar <nivedita@alum.mit.edu> > > > Double-compression slightly reduces the data size. > And, keeping the bare vmlinux small is beneficial, IMHO. > Ok. In my setup (kernel is compressed by xz), none for the builtin initramfs is optimal by a measurable amount, but I that will depend on config/initramfs contents/compression methods, so might well not be true in general. Maybe add a note to the help text? none 7030816 arch/x86/boot/bzImage gz 7382144 arch/x86/boot/bzImage bz2 7353696 arch/x86/boot/bzImage lzma 7118176 arch/x86/boot/bzImage xz 7126400 arch/x86/boot/bzImage lzo 7379360 arch/x86/boot/bzImage lz4 7335712 arch/x86/boot/bzImage diff --git a/usr/Kconfig b/usr/Kconfig index a6b68503d177..b68910b225fc 100644 --- a/usr/Kconfig +++ b/usr/Kconfig @@ -125,6 +125,12 @@ choice low on RAM, since it reduces the memory consumption during boot. + Note that if the kernel itself is compressed, the builtin initramfs + will be compressed twice, first by the algorithm selected here, and + then by the kernel compression method chosen. This may increase the + final image size, so you should test whether compressing the builtin + initramfs provides any savings. + Keep in mind that your build system needs to provide the appropriate compression tool to compress the generated initram cpio file for embedding.
diff --git a/init/Kconfig b/init/Kconfig index 24b23d843df1..88da0976bbfa 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -176,6 +176,9 @@ config HAVE_KERNEL_LZ4 config HAVE_KERNEL_UNCOMPRESSED bool +config KERNEL_COMPRESSED + bool + choice prompt "Kernel compression mode" default KERNEL_GZIP @@ -201,6 +204,7 @@ choice config KERNEL_GZIP bool "Gzip" depends on HAVE_KERNEL_GZIP + select KERNEL_COMPRESSED help The old and tried gzip compression. It provides a good balance between compression ratio and decompression speed. @@ -208,6 +212,7 @@ config KERNEL_GZIP config KERNEL_BZIP2 bool "Bzip2" depends on HAVE_KERNEL_BZIP2 + select KERNEL_COMPRESSED help Its compression ratio and speed is intermediate. Decompression speed is slowest among the choices. The kernel @@ -218,6 +223,7 @@ config KERNEL_BZIP2 config KERNEL_LZMA bool "LZMA" depends on HAVE_KERNEL_LZMA + select KERNEL_COMPRESSED help This compression algorithm's ratio is best. Decompression speed is between gzip and bzip2. Compression is slowest. @@ -226,6 +232,7 @@ config KERNEL_LZMA config KERNEL_XZ bool "XZ" depends on HAVE_KERNEL_XZ + select KERNEL_COMPRESSED help XZ uses the LZMA2 algorithm and instruction set specific BCJ filters which can improve compression ratio of executable @@ -241,6 +248,7 @@ config KERNEL_XZ config KERNEL_LZO bool "LZO" depends on HAVE_KERNEL_LZO + select KERNEL_COMPRESSED help Its compression ratio is the poorest among the choices. The kernel size is about 10% bigger than gzip; however its speed @@ -249,6 +257,7 @@ config KERNEL_LZO config KERNEL_LZ4 bool "LZ4" depends on HAVE_KERNEL_LZ4 + select KERNEL_COMPRESSED help LZ4 is an LZ77-type compressor with a fixed, byte-oriented encoding. A preliminary version of LZ4 de/compression tool is available at diff --git a/usr/Kconfig b/usr/Kconfig index bdf5bbd40727..f39eeb9ea2e3 100644 --- a/usr/Kconfig +++ b/usr/Kconfig @@ -102,7 +102,7 @@ config RD_LZ4 choice prompt "Built-in initramfs compression mode" - depends on INITRAMFS_SOURCE != "" + depends on INITRAMFS_SOURCE != "" && !KERNEL_COMPRESSED help This option allows you to decide by which algorithm the builtin initramfs will be compressed. Several compression algorithms are
If the kernel is going to be compressed anyway, there is no point in double-compressing the built-in initramfs. Hide the built-in initramfs compression choice in this case. Signed-off-by: Arvind Sankar <nivedita@alum.mit.edu> --- init/Kconfig | 9 +++++++++ usr/Kconfig | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-)