Softpedia Pick image 0.6.2 GPL (GNU General Public License)    
5.0/5 3
Compressed in-memory swap device for Linux






Compcache is a tool that creates RAM based block device (named ramzswap) which acts as swap disk. Pages swapped to this disk are compressed and stored in memory itself.

Compressing pages and keeping them in RAM virtually increases its capacity. This allows more applications to fit in given amount of memory.

The usual argument I get is - memory is so cheap so why bother with compression? So I list here some of the use cases. Rest depends on your imagination.

 * Netbooks: Market is now getting flooded with these "lighweight laptops". These are memory constrained but have CPU enough to drive on compressed memory (e.g. Cloudbook features 1.2 GHz processor!).

 * Virtualization: With compcache at hypervisor level, we can compress any part of guest memory transparently - this is true for any type of Guest OS (Linux, Windows etc.). This should allow running more number of VMs for given amount of total host memory.

 * Embedded Devices: Memory is scarce and adding more memory increases device cost. Also, flash storage suffers from wear-leveling issues, so its useful if we can avoid using them as swap device.

make'   - This will compile all modules against your kernel
make doc  - This will compile rzscontrol manual page: sub-projects/rzscontrol/man/rzscontrol.1
- Apply the patch found in compcache/patches/ directory and just compile the kernel as usual. Currently, the patch is against 2.6.33 but it should apply to slightly older kernels too. This will enable 'swap free notify' feature which allows kernel to send callback to ramzswap as soon as a swap slot becomes free. So, we can immediately free memory allocated for this page, eliminating any stale data in (compressed) memory.
 - Uncomment '#define CONFIG_SWAP_FREE_NOTIFY' in compcache/compat.h before compiling compcache against this patched kernel. Otherwise, this swap notify callback will not be used.

Following binaries are created:
- ramzswap.ko (kernel driver)
- sub-projects/rzscontrol/rzscontrol (userspace tool)

Following shows a typical sequence of steps for using ramzswap.

1) Load Modules:
     # load dependency modules
     modprobe lzo_compress
     modprobe lzo_decompress

     # example1: load ramzswap module
     insmod ramzswap.ko num_devices=4

This creates 4 devices (/dev/ramzswap{0,1,2,3}) which are left uninitialized.

     # example2: load ramzswap module and initialize the first device
     insmod ramzswap.ko num_devices=4 disksize_kb=20480

This initializes first device (/dev/ramzswap0) with disksize of 20MB. Other 3 devices (/dev/ramzswap{1,2,3}) are left uninitialized.

2) Initialize:
Use rzscontrol utility to configure and initialize individual ramzswap devices. Example:
        rzscontrol /dev/ramzswap0 --init # uses default value of disksize_kb

*See rzscontrol manpage for more details and examples*

3) Activate:
swapon /dev/ramzswap2 # or any other initialized ramzswap device

4) Stats:
rzscontrol /dev/ramzswap2 --stats

5) Deactivate:
swapoff /dev/ramzswap2

6) Reset:
     rzscontrol /dev/ramzswap2 --reset

7) Unload Modules:
     rmmod ramzswap
     rmmod lzo_compress
     rmmod lzo_decompress

Common Problems:
- If you get lots of compiler errors, make sure you have the package for kernel source installed. For e.g., on Fedora its 'kernel-devel' package.
Last updated on January 29th, 2010
Compcache - screenshot #1

0 User reviews so far.