弄清楚为什么 ccache 缺失
在编译 Ceph 时,ccache 可能会出现比预期更多的缺失,如 cache miss 行所示 ccache -s
缓存目录 /home/loic/.ccache 缓存命中(直接) 1 缓存命中(预处理) 0 缓存缺失 1 缓存中的文件 3 缓存大小 392 千字节 最大缓存大小 10.0 千兆字节
从两个不同目录中的克隆编译 Ceph 无法解释缺失,除非设置了 CCACHE_HASHDIR。应该取消设置它:
unset CCACHE_HASHDIR
虽然未将 CCACHE_BASEDIR 设置为源目录可能会导致缓存缺失,但在 Ceph 的情况下,这没有区别(或者区别太小而无法察觉),因为源目录的绝对路径不包含在正在编译的源中。
可以通过设置 CCACHE_LOGFILE 来生成解释 ccache 为什么未命中的详细输出
export CCACHE_LOGFILE=/tmp/cache.debug
可以使用以下脚本获取有关 ccache 在用于 Ceph 主分支的两个克隆中的行为的更多信息
export CCACHE_LOGFILE=/tmp/cache.debug git clone https://github.com/ceph/ceph.git cp -a ceph ceph-other cd ceph/src o=cls/replica_log/cls_replica_log_ops.o ccache -zC rm /tmp/a rm -f $o make $o ( cd ../../ceph-other/src ; rm -f $o ; make $o ) ccache -s
应该显示一个命中和一个缺失。
缓存目录 /home/loic/.ccache 缓存命中(直接) 1 缓存命中(预处理) 0 缓存缺失 1 缓存中的文件 3 缓存大小 568 千字节 最大缓存大小 10.0 千兆字节
如果不是,可以检查 /tmp/cache.debug 中的 ccache 日志。它包含用于预处理这两个文件的 CPP 行。可以再次运行它们并将输出进行比较,以了解两者的区别。