In case you are unfamiliar with ccache, its a “compiler cache”. Compiling is primarily CPU intensive task. So, ccache caches compiled objects - so next time we compile same code, it reuses these objects thereby significantly speeding-up compilation.
I need to recompile Linux kernel usually several times a day, with different permutations of config settings. This almost forces a ‘make clean’ or ‘make mrproper’ which deletes all compiled objects in build tree and then we have to rebuild everything all over again. This takes enormous amount of time. ccache comes to rescue! I’m surprised why I didn’t use it earlier.
To use ccache to speedup Linux kernel compile, all I had to do was
‘yum install ccache’ on Fedora10
system. This automatically created all needed symlinks and PATH setting.
After this do make O=build bzImage; make O=build modules as usual. First
time you won’t notice any speed gain as ccache is simply building up its
cache. Subsequently doing a rebuild ‘make clean; make’ will be
significantly faster
To monitor ccache stats, do:
ccache -s
sample output:
cache directory /home/ngupta/.ccache
cache hit 521
cache miss 729
called for link 37
preprocessor error 1
not a C/C++ file 895
autoconf compile/link 131
no input file 766
files in cache 1458
cache size 92.7 Mbytes
max cache size 976.6 Mbytes
(Ah! how to stop blogger from messing with formatting!)
If you see cache hits not increasing while you are compiling (and this is not the first compile), this might mean that ccache currently contains useless compiled objects. In such cases, if cache size is already near max cache size, its better to clean-up ccache with:
ccache -c
and reset stats with:
ccache -z
and lastly, you can set limit on disk size used by ccache using:
ccache -M
e.g. ccache -M 1G sets max size to 1 GB – similarly you can use K, M or G suffix to specify size.
Happy compiling!
UPDATE
On Fedora-13 system, the PATH is not automatically set after ‘yum
install ccache’. However, symlinks from ccache to compiler names are
still created. So, you just need to add /usr/lib64/ccache to your PATH
manually.