【问题标题】:Ccache hit rate 0.00 % in GitHub Actions CIGitHub Actions CI 中的 Ccache 命中率 0.00 %
【发布时间】:2020-12-12 08:48:05
【问题描述】:

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 分钟才能完成。

因此,尽管我尝试以与 ubuntu-* 相同的方式设置 macOS 构建,但我无法让 ccache 正常工作,我不知道为什么。

如何使ccache 也可以与macOS 一起使用?

【问题讨论】:

  • 首先记录构建代码时使用的编译器选项。如果 ccache 看到它认为编译器选项意味着构建不能被缓存,它将拒绝缓存构建。
  • 您在密钥上使用 GitHub sha。此 sha 将在您执行的每次提交时更改,因此当您尝试获取包含提交哈希的缓存命中时,它总是会丢失。
  • @EdwardRomero 有真正的答案,我想。请照此张贴。另外,Github,请发布此常见用例的配方。即使是非常简单的事情,例如为 repo 的所有分支共享一个 ccache,也可能适合许多项目并为 GH Actions 节省许多周期。

标签: c++ macos github-actions azerothcore ccache


【解决方案1】:

问题很可能是最大缓存大小太小了。如果构建的结果(主要是目标文件)不适合最大缓存大小,那么下一个构建将没有可用的结果,您只会遇到缓存未命中。

执行的清理在构建之前为 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) 以在缓存中容纳更多结果。

【讨论】:

    猜你喜欢
    • 2021-06-25
    • 2020-09-06
    • 2019-05-18
    • 2019-05-08
    • 2019-12-29
    • 2020-01-08
    • 2021-05-30
    • 2020-07-01
    • 1970-01-01
    相关资源
    最近更新 更多