问题描述
在our C++ project中,我们成功设置GitHub Actions使用ccache构建源。
它在Linux上运行良好,这要归功于ccache
,在不到5分钟的时间内构建成功。
不幸的是,尝试在macOS上构建时,ccache
似乎不起作用,给出:
cache directory /Users/runner/.ccache
primary config /Users/runner/.ccache/ccache.conf
secondary config (readonly) /usr/local/Cellar/ccache/3.7.11_1/etc/ccache.conf
stats updated Sun Aug 23 11:57:31 2020
cache hit (direct) 0
cache hit (preprocessed) 0
cache miss 7175
cache hit rate 0.00 %
cache file missing 1
cleanups performed 2976
files in cache 165
cache size 422.4 MB
max cache size 500.0 MB
因此,macOS构建大约需要40分钟才能完成。
-
构建示例:https://github.com/azerothcore/azerothcore-wotlk/runs/1018358261
-
在此处定义操作:https://github.com/azerothcore/azerothcore-wotlk/blob/master/.github/workflows/core_build.yml
- 上公开获得。
因此,尽管我尝试以与macOS
相同的方式设置ubuntu-*
的构建,但是我仍无法使ccache正常工作,并且我不知道为什么。
如何使ccache
与macOS
一起工作?
解决方法
问题很可能是最大缓存大小太小了。如果某个构建的结果(主要是目标文件)不符合最大高速缓存大小,那么下一个构建将没有可用的结果,并且只会丢失高速缓存。
执行的清理是在构建之前为2976,而在构建之后为3353,因此执行了377 automatic cleanups。由于最大缓存大小为500 MB,因此每次清除大约删除了500 *(1- 0.8)/ 16 MB = 6.25 MB,因此所有清除一起删除了大约377 * 6.25 MB≈2356 MB的数据。那应该大约是一个构建结果的大小。 (0.8是默认的“ limit_multiple”,而16是指缓存中的子目录数。)
尝试大幅增加缓存大小限制。根据以上计算,好的缓存大小至少应为5 GB。您也可以启用压缩(CCACHE_COMPRESS=1
),以在缓存中容纳更多结果。