ccache never "hits" on buildworld or buildkernel

Maxim Khitrov mkhitrov at gmail.com
Sun Aug 12 22:26:30 PDT 2007


On 8/13/07, illoai at gmail.com <illoai at gmail.com> wrote:
> On 12/08/07, Maxim Khitrov <mkhitrov at gmail.com> wrote:
> > Hello,
> >
> > I'm using ccache to build FreeBSD source and ports. Ports work great,
> > I build something once and the second time just about everything is
> > found in the cache. For buildworld and buildkernel, however,
> > everything is a miss. Even when not a single thing changed about the
> > configuration or the actual source files.
> >
> > Below is my make.conf configuration for ccache. Ccache is being used
> > via world-cc and world-c++ binaries for these two operations; I can
> > see the miss counter go up in 'ccache -s'. Why is it unable to
> > properly cache when building the source?
> >
> > Thanks.
> >
> > make.conf:
> >
> > .if (!empty(.CURDIR:M/usr/src*) || !empty(.CURDIR:M/usr/obj*)) && \
> >     !defined(NOCCACHE) && exists(/usr/local/libexec/ccache)
> > CC= /usr/local/libexec/ccache/world-cc
> > CXX=/usr/local/libexec/ccache/world-c++
> > .endif
> >
> > .if !empty(.CURDIR:M/usr/ports*) && !defined(NOCCACHE) \
> >     && exists(/usr/local/libexec/ccache)
> > CC= /usr/local/libexec/ccache/cc
> > CXX=/usr/local/libexec/ccache/c++
> > .endif
> >
> > uname -a:
> >
> > FreeBSD -.-.- 7.0-CURRENT FreeBSD 7.0-CURRENT #0: Sun Aug 12 15:45:05
> > EDT 2007     max at -.-.-:/usr/obj/usr/src/sys/KERNEL  i386
>
> I believe ccache checks the compiler itself before issuing
> a "hit".  Since the buildworld process rebuilds the compiler
> ccache thinks it's a different compiler and issues a "miss".
>
> From man ccache:
>
>  CCACHE_NOHASH_SIZE_MTIME
>               This tells ccache to not hash the real compiler's size and modi-
>               fication time. Normally this is the mechanism to detect compiler
>               upgrades.  There are situations however, where even  though  the
>               compiler's  size or modification time has changed you can safely
>               use the cached objects (e.g. if as part of your build system the
>               compiler  is  built  as  well  and the compiler's source has not
>               changed; or if the compiler has only changes that do not  affect
>               code generation). Use this feature only if you know what you are
>               doing.
>
> I hope this helps?

Ah... good point, I did not consider this. Indeed setting that
environment variable cut the kernel compile time from 30 minutes to 8
with only 2 misses. Now I just have to remember to disable this
whenever the compiler actually does change. Wish there was a way to
have installworld only copy the compiler over if it is actually
different. Oh well, thank you for the tip.

- Max


More information about the freebsd-questions mailing list