[ccache] Optimizing MD4
Andrew Stubbs
andrew_stubbs at mentor.com
Fri Dec 11 16:45:36 UTC 2015
On 11/12/15 16:28, Anders Björklund wrote:
>> Each invocation of ccache then connects to that socket and asks the
>> daemon to do the MD4 scan on its behalf. The daemon checks the mtime on
>> the file and serves the MD4 from its memory cache if nothing has
>> changed. The stat call could probably be optimized away if the cache is
>> very fresh (<1s?)
>
> So basically something similar to the "sloppiness" file_stat_matches ?
> Compare size/mtime/ctime, rather than rehashing the content of a file.
Yes, except that it *has* been checked this session. This is a
significant difference when you try to share a cache between two
machines, or two users, or just simply did some git foolery between builds.
Good point though: for a lone user doing nothing exciting,
CCACHE_SLOPPINESS=file_stat_matches does nearly the same thing with
considerably less effort.
>> You could, in principle, use this communication to limit how many
>> cache-miss compilations are permitted to run in parallel, and therefore
>> run "make -j" for maximum parallelism without fear of melting your memory.
>
> Something like that is what I meant with a new "prefix" wrapper for cpp.
> Similar to the current wrapper for cc, which does that with e.g. distcc.
Yes. You have to be careful with how many executables you have though:
the dynamic linker is slooooow.
>> Unfortunately, I've moved on to other projects and don't have much time
>> to work on this stuff any more.
>
> Thank you for your ideas. Will check the code out too if I get the time.
> It seems that there are some opportunities left for faster manifest/cpp.
If you decide to go with the persistent background task approach, then
there are a few ideas in there to pluck out, but the overall
architecture had other goals, so maybe it's not that great a starting
point. :-(
Good luck.
Andrew
More information about the ccache
mailing list