Re: [PATCH] init: add support for zstd compressed modules
From: Nick Terrell <terrelln@fb.com>
Date: 2021-03-31 17:41:11
Also in:
lkml
On Mar 30, 2021, at 4:50 AM, Oleksandr Natalenko [off-list ref] wrote: On Tue, Mar 30, 2021 at 01:32:35PM +0200, Piotr Gorski wrote:quoted
kmod 28 supports modules compressed in zstd format so let's add this possibility to kernel. Signed-off-by: Piotr Gorski <redacted> --- Makefile | 7 +++++-- init/Kconfig | 9 ++++++--- 2 files changed, 11 insertions(+), 5 deletions(-)diff --git a/Makefile b/Makefile index 5160ff8903c1..82f4f4cc2955 100644 --- a/Makefile +++ b/Makefile@@ -1156,8 +1156,8 @@ endif # INSTALL_MOD_STRIPexport mod_strip_cmd # CONFIG_MODULE_COMPRESS, if defined, will cause module to be compressed -# after they are installed in agreement with CONFIG_MODULE_COMPRESS_GZIP -# or CONFIG_MODULE_COMPRESS_XZ. +# after they are installed in agreement with CONFIG_MODULE_COMPRESS_GZIP, +# CONFIG_MODULE_COMPRESS_XZ, or CONFIG_MODULE_COMPRESS_ZSTD. mod_compress_cmd = true ifdef CONFIG_MODULE_COMPRESS@@ -1167,6 +1167,9 @@ ifdef CONFIG_MODULE_COMPRESS ifdef CONFIG_MODULE_COMPRESS_XZ mod_compress_cmd = $(XZ) --lzma2=dict=2MiB -f endif # CONFIG_MODULE_COMPRESS_XZ + ifdef CONFIG_MODULE_COMPRESS_ZSTD + mod_compress_cmd = $(ZSTD) -T0 --rm -f -q
This will use the default zstd level, level 3. I think it would make more sense to use a high compression level. Level 19 would probably be a good choice. That will choose a window size of up to 8MB, meaning the decompressor needs to allocate that much memory. If that is unacceptable, you could use `zstd -T0 --rm -f -q -19 --zstd=wlog=21`, which will use a window size of up to 2MB, to match the XZ command. Note that if the file is smaller than the window size, it will be shrunk to the smallest power of two at least as large as the file. Best, Nick Terrell
quoted
+ endif # CONFIG_MODULE_COMPRESS_ZSTD endif # CONFIG_MODULE_COMPRESS export mod_compress_cmddiff --git a/init/Kconfig b/init/Kconfig index 8c2cfd88f6ef..86a452bc2747 100644 --- a/init/Kconfig +++ b/init/Kconfig@@ -2250,8 +2250,8 @@ config MODULE_COMPRESSbool "Compress modules on installation" help - Compresses kernel modules when 'make modules_install' is run; gzip or - xz depending on "Compression algorithm" below. + Compresses kernel modules when 'make modules_install' is run; gzip, + xz, or zstd depending on "Compression algorithm" below. module-init-tools MAY support gzip, and kmod MAY support gzip and xz.@@ -2273,7 +2273,7 @@ choiceThis determines which sort of compression will be used during 'make modules_install'. - GZIP (default) and XZ are supported. + GZIP (default), XZ, and ZSTD are supported. config MODULE_COMPRESS_GZIP bool "GZIP"@@ -2281,6 +2281,9 @@ config MODULE_COMPRESS_GZIPconfig MODULE_COMPRESS_XZ bool "XZ" +config MODULE_COMPRESS_ZSTD + bool "ZSTD" + endchoice config MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS -- 2.31.0.97.g1424303384Great! Reviewed-by: Oleksandr Natalenko <redacted> This works perfectly fine in Arch Linux if accompanied by the following mkinitcpio amendment: [1]. I'm also Cc'ing other people from get_maintainers output just to make this submission more visible. Thanks. [1] https://github.com/archlinux/mkinitcpio/pull/43 -- Oleksandr Natalenko (post-factum)