LZMA for Live Images
Summary
Enabling LZMA for compression to allow us ship more software on our live images.
Owner
- Name: Bruno Wolff III
- Email: <bruno@wolff.to>
Current status
- Targeted release: Fedora 15
- Last updated: 2010-07-27
- Percentage of completion: 80%
Detailed Description
LZMA compression typically provides better compression than gzip while still providing relatively fast uncompression. Once squashfs file systems are supported by the kernel we can use them for building live images. A test with the games spin resulted in a 8.7% reduction (from 4242538496 bytes to 3873439744 bytes) in size of the resulting live image.
Benefit to Fedora
By allowing more packages to be put on a Live Image, we can make a few of our space constrained images better. For other images, having them be smaller will make them faster to download.
Scope
- kernel
- Lougher needs to do a new set of patches since the ones for 2.6.34 were only partially accepted.
- The patches have not been submitted to Linus in the 2.6.36 merge window, so we need to wait until at least 2.6.37 making a slip to F15 unavoidable. Given the current state no changes to packages need to be made as part of the fallback plan. (Barring currently unknown bugs being discovered.)
- Statements from Lougher:
- It looks like some patches were being worked on, but weren't ready for 2.6.35 (or 2.6.36) as there was no pull request for them.
- Fallback plan for the kernel is to do nothing.
- Lougher needs to do a new set of patches since the ones for 2.6.34 were only partially accepted.
- livecd-creator
- livecd-creator has been updated to allow specifying compression type as of 032.
- Changes to livecd-creator:
- Added a --compression-type= parameter that takes a string that will normally be passed to mksquashfs.
- Added a default compression type. This will initially be 'gzip', but will be changed to 'lzma', once we believe that is a better default for most people. (After there aren't regressions and performance is known to be acceptable in most cases.)
- Added a default compression type for mksquashfs, so that if the compression type requested (or defaulted) matches this type, no compression option is specified for mksquashfs. This will allow the use of older versions of squashfs-tools as long as the mksquashfs default ('gzip') compression type is used.
- Documented the 'gzip', 'lzma' and 'lzo' types. Warn that 'lzma' needs future kernel support for mounting and live images and that lzo requires 2.6.36+.
- The simple fallback plan for livecd-creator is to document that only 'gzip' compression is available currently. If the default was changed to 'lzma', change it back to 'gzip'. The more intrusive fallback is to revert all of the compression type changes. (The default wasn't changed for F14, so nothing needs to be done until F15.)
- lzo support
- lzo support is available in the kernel as of 2.6.36 and is in squashfs-tools final which is now in F14.
- lzo isn't going to help for space constraints on live images.
How To Test
- We need to make sure live images work.
- We need to make sure live images are smaller using LZMA compression.
- We need to make sure performance is acceptable.
- Using a live image needs to not be noticeably slower (hopefully it will be faster with typcial hardware) with LZMA than with gzip compression.
- Making a compressed file system using LZMA can be somewhat slower than with gzip, because commonly time isn't as critical when making the image (compared to using it).
- We need to test unsquashing squashed images work using unsquashfs (both LZMA and gzip).
- Specific test cases: (Note in early testing, the default will be gzip rather than lzma.)
- Squashfs 4.1
- No --compression-type
- Should build using lzma and image should work.
- --compression-type=gzip
- Should build using gzip and image should work.
- --compression-type=lzma
- Should build using lzma and image should work with a kernel that supports lzma squashfs.
- The image should be smaller than with gzip compression.
- The image should run nearly as fast or faster than with gzip compression on common hardware.
- The time needed to build the image should not be inordinately longer than with gzip on common hardware.
- --compression-type=garbage
- A reasonable error message should be displayed
- Test using a 2.6.33 kernel (with gzip) to make sure the xattr feature doesn't cause a problem for kernels that don't support that in squashfs file systems.
- Test livecd-iso-to-disk on an image using lzma with a system with a 4.0 version of squashfs-tools.
- Test livecd-iso-to-disk on an image using gzip with a system with a 4.0 version of squashfs-tools.
- No --compression-type
- Squashfs 4.0
- No --compression-type
- A reasonable error message should be displayed
- --compression-type=gzip
- Should build using gzip and image should work.
- --compression-type=lzma
- A reasonable error message should be displayed
- --compression-type=garbage
- A reasonable error message should be displayed
- No --compression-type
- man livecd-creator
- Should have the --compression-type option documented with the correct default. (gzip in eary testing, lzma in later testing.)
- livecd-creator --help
- Should have the --compression-type option documented with the correct default. (gzip in eary testing, lzma in later testing.)
- Squashfs 4.1
User Experience
Live images will be smaller or have more included packages.
Dependencies
- kernel (may need to ask for backport)
- livecd-tools
Contingency Plan
- Since the default in the new squashfs is to use gzip compression, we shouldn't have to revert squashfs-tools.
- The livecd-creator changes are being implemented in a way that up until the default is changed, nothing should have to be reverted. If the default gets changed to lzma, then that would need to get reverted if a problem was found.
Documentation
- Most likely livecd-creator would be getting a new option and would need its help updated along with the code changes.
Release Notes
- Mention the squashfs version change, that it supports LZMA compression, point to its documentation and note that it is supported in the kernel as well.
- Mention that livecd-creator uses LZMA by default, how to get gzip compression if desired for use with older kernels or other reasons.
Thanks
I would like to thank Phillip Lougher for his work on squashfs. The key work needed for this feature was done by Phillip upstream.