public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH] Compress kernel modules on installation
@ 2008-12-26 20:23 Roland
  2008-12-26 21:09 ` Jan Engelhardt
  2008-12-26 22:02 ` david
  0 siblings, 2 replies; 38+ messages in thread
From: Roland @ 2008-12-26 20:23 UTC (permalink / raw)
  To: linux-kernel; +Cc: Jan Engelhardt, Sam Ravnborg

what about some "make modules_install_compressed" instead ?

as i have run out of diskspace quite often when installing test kernels, i 
think we really need a feature like this.

i`d also favour the makefile approach.
why another kconfig option?

jan`s patch looks clean and simple, but i think it`s a little bit 
intrusive...

regards
roland

ps:
i`d use gzip without "-9" as this gives very little space savings. it mostly 
burns cpu and slows things down too much.
( see 
http://www.linuxjournal.com/files/linuxjournal.com/linuxjournal/articles/080/8051/8051f1.png )


On Friday 2008-12-26 20:48, Sam Ravnborg wrote:
> > > >
> > > > This patch allows kernel modules to be compressed when 'make
> > > > modules_install' is run after being copied to
> > > > the /lib/module/<version>/<...> directory which is useful if you 
> > > > have
> > > > module-init-tools installed with --enable-zlib. This patch adds an
> > > > option (MODULE_COMPRESS) to the kernel configuration file 
> > > > (specifically
> > > > init/Kconfig) so that the kernel modules will compressed if
> > > > MODULE_COMPRESS is set.
> >
> > I recently started compressing my kernel modules and that saved me
> > at least 70 MB of disk space on mostlyallmodconfig.
> > (And no, the argument of disks being cheap is not so true with
> > CF or SSD.)
> > Distro is lazy and wants to wait for upstream to have it,
> > so is there any chance of getting this proposal in?
>
> Steve said he wanted to try to make the solution more
> scalable so I am awaiting a new patch.

Hm, all I needed was this patch. It might fire up some people,
but it's got all the scalability I could think of..


commit b4a3e1c610c99d4e8b543b97fd722076c6f7c5dd
Author: Jan Engelhardt <jengelh@medozas.de>
Date:   Wed Dec 10 20:39:21 2008 +0100

build: install modules compressed
---
 scripts/Makefile.modinst |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/scripts/Makefile.modinst b/scripts/Makefile.modinst
index efa5d94..c3421a1 100644
--- a/scripts/Makefile.modinst
+++ b/scripts/Makefile.modinst
@@ -17,7 +17,7 @@ __modinst: $(modules)
  @:

 quiet_cmd_modules_install = INSTALL $@
-      cmd_modules_install = mkdir -p $(2); cp $@ $(2) ; $(mod_strip_cmd) \
$(2)/$(notdir $@) +      cmd_modules_install = mkdir -p $(2); cp $@ $(2) ; \
$(mod_strip_cmd) $(2)/$(notdir $@); gzip -9f $(2)/$(notdir $@)
 # Modules built outside the kernel source tree go into extra by default
 INSTALL_MOD_DIR ?= extra
--






^ permalink raw reply related	[flat|nested] 38+ messages in thread
* Re: [PATCH] Compress kernel modules on installation
@ 2008-12-26 23:49 Roland
  0 siblings, 0 replies; 38+ messages in thread
From: Roland @ 2008-12-26 23:49 UTC (permalink / raw)
  To: davidsen; +Cc: linux-kernel, Jan Engelhardt

> >>> what about some "make modules_install_compressed" instead ?
> >>>
> >>> as i have run out of diskspace quite often when installing test
> >>> kernels, i
> >>> think we really need a feature like this.
> >>>
> >>> i`d also favour the makefile approach.
> >>> why another kconfig option?
> >>>
> >>> jan`s patch looks clean and simple, but i think it`s a little bit
> >>> intrusive...
> >>
> >> Why so? module-ini
> >
> > with "intrusive" i meant, that all modules are now compressed by default
> > and there is no switch to build them uncompressed.
> > so you change a long established default which may not be welcomed by
> > everyone and give no option for conservative people.
> >
> How many people use the option to install an uncompressed kernel?


i don`t know, probable few to none on pc/server hardware, but things may 
look different in embedded sector...


btw, here is some real-world data on compression and block-alignment:


kernel 2.6.27.8

                               (du -sk)      (du -sk --apparent-size)
uncompressed          72140         66554
gzip                          29988         25447
gzip -9                      29892         25374

roland


^ permalink raw reply	[flat|nested] 38+ messages in thread
* [PATCH] Compress kernel modules on installation.
@ 2008-02-25 21:42 Steve Brokenshire
  2008-02-25 22:17 ` Oleg Verych
                   ` (2 more replies)
  0 siblings, 3 replies; 38+ messages in thread
From: Steve Brokenshire @ 2008-02-25 21:42 UTC (permalink / raw)
  To: linux-kernel, linux-kbuild

Hi,

(I've sent this to the linux-kbuild and linux-kernel lists as this
patch modifies the Makefile.modinst file. I also don't subscribe to the 
linux-kbuild and linux-kernel mailing lists so can I have any replies
CC'ed to me please)

This patch allows kernel modules to be compressed when 'make
modules_install' is run after being copied to
the /lib/module/<version>/<...> directory which is useful if you have
module-init-tools installed with --enable-zlib. This patch adds an
option (MODULE_COMPRESS) to the kernel configuration file (specifically
init/Kconfig) so that the kernel modules will compressed if
MODULE_COMPRESS is set.

When MODULE_COMPRESS is set the output of 'make modules_install' will
go as the following:

INSTALL  drivers/fs/xfs/xfs.ko
COMPRESS drivers/fs/xfs/xfs.ko
INSTALL  drivers/fs/fat/fat.ko
COMPRESS drivers/fs/fat/fat.ko
...

I've tested my patch on kernel versions 2.6.24.2, 2.6.24-git12, 2.6.23.14 and
2.6.19 and they compile, install and compress into the respective
module directories without any errors.

I've also tested this with the uvcvideo (linux-uvc) kernel module (from
the SVN branch and with kernel versions 2.6.24.2, 2.6.24-git12, 2.6.23.14 and
2.6.19) as that uses Kbuild properly when installing the module and
after installing the uvcvideo the module is then compressed.
Unfortunately, I couldn't find any other kernel modules which used the
Kbuild system for installing their kernel modules. :(

I've included include/config/auto.conf in Makefile.modinst so that it
can check if MODULE_COMPRESS is set when installing the kernel modules.

Unfortunately when I ran mkinitrd (CentOS version) to create the initrd
image to go with the kernel, I get errors saying that certain kernel
modules don't exist despite the fact they do actually exist. When I
pass --allow-missing to mkinitrd, it seems to go fine but when booting
up with the system with the new initrd image I get error messages
saying that the modules don't exist.

A workaround is to compile the modules, don't have MODULE_COMPRESS set 
in .config, install the modules, run mkinitrd and copy it to /boot, set 
MODULE_COMPRESS in .config and then install the modules again but
compressed.

That's about it really. The only showstopper I feel is mkinitrd not
working properly with the compressed kernel modules.

Thanks,
Steve

---

Signed-off-by: Steve Brokenshire <sbrokenshire@xestia.co.uk>

diff -u -r -up a/init/Kconfig b/init/Kconfig
--- a/init/Kconfig	2008-02-02 16:34:29.000000000 +0000
+++ b/init/Kconfig	2008-02-03 09:55:52.000000000 +0000
@@ -725,6 +725,30 @@ config MODULE_FORCE_UNLOAD
 	  rmmod).  This is mainly for kernel developers and desperate users.
 	  If unsure, say N.
 
+config MODULE_COMPRESS
+	bool "Compress kernel modules on installation"
+	depends on MODULES
+	help
+	  This option compresses the kernel modules when 'make
+	  modules_install' is run.
+
+	  The modules will be compressed into the gzip (GNU zip) format
+	  and will use less space than an uncompressed kernel module would.
+
+	  When a kernel module is installed from outside of the main kernel
+	  source and uses the Kbuild system for installing modules then that
+	  kernel module will also be compressed when it is installed.
+
+	  When running mkinitrd you will find that an error message
+	  appears saying that it cannot find a certain kernel module.
+	  As a workaround, unset CONFIG_MODULE_COMPRESS, build the modules
+	  and install them, run mkinitrd and create the initrd image, place
+	  the initrd image in the correct place for booting, set
+	  CONFIG_MODULE_COMPRESS and then install the modules again.
+
+	  This options requires the module-init-tools package to be 
+	  configured with --enable-zlib.
+
 config MODVERSIONS
 	bool "Module versioning support"
 	depends on MODULES
diff -u -r -up a/scripts/Makefile.modinst b/scripts/Makefile.modinst
--- a/scripts/Makefile.modinst	2008-02-02 16:34:33.000000000 +0000
+++ b/scripts/Makefile.modinst	2008-02-02 17:21:46.000000000 +0000
@@ -5,6 +5,7 @@
 PHONY := __modinst
 __modinst:
 
+include include/config/auto.conf
 include scripts/Kbuild.include
 
 #
@@ -16,8 +17,15 @@ PHONY += $(modules)
 __modinst: $(modules)
 	@:
 
-quiet_cmd_modules_install = INSTALL $@
-      cmd_modules_install = mkdir -p $(2); cp $@ $(2) ; $(mod_strip_cmd) $(2)/$(notdir $@)
+quiet_cmd_modules_install = INSTALL  $@
+      cmd_modules_install = mkdir -p $(2); \
+				cp $@ $(2) ; \
+				$(mod_strip_cmd) $(2)/$(notdir $@)
+
+quiet_cmd_modules_compress = COMPRESS $@
+      cmd_modules_compress = gzip --best -c $(2)/`basename $@` \
+				 > $(2)/`basename $@`.gz; \
+				rm $(2)/`basename $@`
 
 # Modules built outside the kernel source tree go into extra by default
 INSTALL_MOD_DIR ?= extra
@@ -27,7 +35,8 @@ modinst_dir = $(if $(KBUILD_EXTMOD),$(ex
 
 $(modules):
 	$(call cmd,modules_install,$(MODLIB)/$(modinst_dir))
-
+	$(if $(CONFIG_MODULE_COMPRESS), \
+		$(call cmd,modules_compress,$(MODLIB)/$(modinst_dir)))
 
 # Declare the contents of the .PHONY variable as phony.  We keep that
 # information in a variable se we can use it in if_changed and friends.

^ permalink raw reply	[flat|nested] 38+ messages in thread

end of thread, other threads:[~2009-01-26 21:39 UTC | newest]

Thread overview: 38+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-12-26 20:23 [PATCH] Compress kernel modules on installation Roland
2008-12-26 21:09 ` Jan Engelhardt
2008-12-26 23:10   ` Roland
2008-12-26 23:28     ` Bill Davidsen
2008-12-26 22:02 ` david
2008-12-26 21:15   ` Jan Engelhardt
2008-12-26 22:28     ` david
2008-12-26 23:23       ` Jan Engelhardt
2008-12-27  0:58         ` david
2009-01-01  8:27   ` Willy Tarreau
  -- strict thread matches above, loose matches on Subject: below --
2008-12-26 23:49 Roland
2008-02-25 21:42 Steve Brokenshire
2008-02-25 22:17 ` Oleg Verych
2008-02-25 22:19   ` Willy Tarreau
2008-02-25 22:32     ` Oleg Verych
2008-02-25 23:21       ` Willy Tarreau
2008-02-25 22:21 ` Willy Tarreau
2008-02-26  9:14   ` Adrian Bunk
2008-02-26 10:22     ` Willy Tarreau
2008-02-26 12:30       ` Adrian Bunk
2008-02-26 13:04         ` Willy Tarreau
2008-02-26 11:28 ` Sam Ravnborg
2008-04-01 19:42   ` Steve Brokenshire
2008-12-26 19:30   ` Jan Engelhardt
2008-12-26 19:48     ` Sam Ravnborg
2008-12-26 19:50       ` Jan Engelhardt
2008-12-26 22:57         ` Sam Ravnborg
2008-12-26 23:12           ` Jan Engelhardt
2009-01-18 21:04         ` Sam Ravnborg
2009-01-18 21:09           ` Arjan van de Ven
2009-01-18 21:15             ` Michael Tokarev
2009-01-18 21:18               ` Jan Engelhardt
2009-01-18 21:25                 ` Michael Tokarev
2009-01-19 20:21           ` Jan Engelhardt
2009-01-20  3:30       ` Steve Brokenshire
2009-01-25 16:51         ` Steve Brokenshire
2009-01-25 18:02           ` Jan Engelhardt
2009-01-26 21:39             ` Steve Brokenshire

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox