[PATCH] kernel.spec: xz compress modules on i686 and x86_64

Josh Boyer jwboyer at fedoraproject.org
Wed May 7 15:51:09 UTC 2014


On Tue, May 06, 2014 at 02:24:23PM -0400, Josh Boyer wrote:
> On Tue, May 06, 2014 at 01:02:24PM -0400, Kyle McMartin wrote:
> > Pretty grody, but it seems to be working... it has to happen after
> > module signing (obviously) and after find-debuginfo.sh runs as well, so
> > tacking it onto the end seems sensible, and then just fixing up the file
> > lists as we go. Provides a nice tidy savings to the disk footprint:
> > 
> > kyle at dreadnought:~% for i in kernel-core-3.15.0-0.rc3.git4.1.fc21.x86_64.rpm \
> > kernel-core-3.15.0-0.rc3.git4.1.fc21.x86_64.rpm.1; do \
> >  rpm -qip $i | grep '^Size'; done
> > Size        : 43011603
> > Size        : 81106737
> 
> Nice!
> 
> > kmod has handed .xz and .gz modules for a long time now, and can cope.
> > 
> > I was thinking we might also %ghost the .ko, and have a %post install
> > script that un-xz the modules in /proc/modules, but none of them are big
> > enough for that to be worthwhile I think (maybe XFS, but I doubt it.)
> 
> Sounds reasonable.
> 
> I'll play around with this a bit tomorrow, but I like the idea.  Out of
> curiosity, do you know if this has noticable impacts on boot times?  I
> wouldn't think it would be drastic.

This really made no noticable difference in boot times on two different
machines I had here.  The difference in the systemd-analyze output for
the initrd timings was in the noise range, as was the overall boot time.

A loop of 1000 modprobe/modprobe -r operations, there was a 5 second
real time difference between compressed and non-compressed.  That
amounts to a 5 millisecond difference per modprobe for that module
(hfs.ko if anyone cares).

The installed RPM sizes are significantly smaller, and the initramfs
file is somewhat smaller as well.  Seems like an overall win to me.

> >      # Also add in the dir entries
> > -    sed -e 's/^lib*/\/lib/' $RPM_BUILD_ROOT/k-d.list > ../kernel${Flavour:+-${Flavour}}-modules.list
> > -    sed -e 's/^lib*/%dir \/lib/' $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Flavour:+-${Flavour}}-core.list
> > -    sed -e 's/^lib*/\/lib/' $RPM_BUILD_ROOT/modules.list >> ../kernel${Flavour:+-${Flavour}}-core.list
> > +    sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/k-d.list > ../kernel${Flavour:+-${Flavour}}-modules.list
> > +    sed -e 's/^lib*/%dir \/lib/' %{?zipsed} $RPM_BUILD_ROOT/module-dirs.list > ../kernel${Flavour:+-${Flavour}}-core.list
> > +    sed -e 's/^lib*/\/lib/' %{?zipsed} $RPM_BUILD_ROOT/modules.list >> ../kernel${Flavour:+-${Flavour}}-core.list
> 
> Hm.  This makes me wonder if the auto-module-Provides thing we're
> working through now will be impacted.  I'll have to go look at what you
> did in RPM to see what it's looking for to create those, and when.

Right.  So the kmod.prov script got moved to redhat-rpm-config.  I'll
look at getting it fixed to strip off the .xz to generate the proper
Provides as Kyle suggested in his other reply.

josh


More information about the kernel mailing list