Build Cache - 监控和诊断效率
此功能仅在 Incredibuild 的 Enterprise and Business Plans 中可用,且当前的可用性有限。欲了解更多详情,请联系您的客户代表。
监测 Build Cache 的有效性
使用 Build Cache 所节省的时间的细节将包含在你所有构建的输出中。这可以在 Build Monitor 的 Summary 摘要选项卡中看到,也可以在命令行输出中看到。
注意:由于 Incredibuild 为文件添加了元数据,提交和恢复的文件大小可能与原始文件略有不同,也可能彼此不同。
您还可以在 Build Monitor 的 Progress Display 进度展示中查看缓存命中率。
-
要缓存的任务是已执行的任务,并且是要添加到 Build Cache 中以供将来构建的候选任务。
-
缓存命中是从 Build Cache 中检索的任务,而非执行的任务。
进一步检查缓存效率
如果命中率很低,您可以通过增强输出以包含每个任务的信息来调查原因。前往 Agent Settings > Initiator > Build Cache Client Settings 然后更改 Include more details in build output 状态为 开。
请注意,这可能需要时间,并会减慢构建速度。在极端情况下(40,000 个任务),这可能会比预期的构建时间多花 15 分钟。
运行另一次构建,并检查“Build Monitor”中的“Build Cache”选项卡。这包括一个详细的 Build Cache 命中/未命中报告,报告中包含每个任务的详尽信息,包括命中或未命中,如果缓存未命中,它将向您显示未命中的原因。
您的构建过程中的每项任务均会出现在报告中。展开一个任务,即可查看任务的确切信息,以及 Build Cache 如何处理该任务,具体信息将在 Cache 一行中标明:
在以“Cache”开头的一行中,可以看到每个任务的缓存行为。这些数值可以是下列之一:
-
HIT-RESTORED
这个任务已经在缓存中找到了,所以不需要重新执行任务,直接从缓存中提取了任务内容。Original exec time(原始执行时间)这一行显示了任务最初执行时所花费的时间——这是您通过使用 Build Cache 节省的时间。
-
HIT-LICENSE-TEMPORARILY-DEPLETED
这个任务在缓存中找到了,但没有直接从缓存中提取,而是被重新执行了。这是因为 Cache Core 缓存核心许可证已耗尽,需要等待下一次重置时间。这表明您的 Cache Core 许可证无法承受当前的 Build Cache 活动负载。
-
SKIP-UNSUPPORTED-TOOL
任务被执行是因为 Build Cache 不支持相关的工具。
-
SKIP-DISABLED-TOOL
该任务已被执行,因为虽然 Build Cache 支持相关工具,但在配置中已禁用。根据具体情况,可以启用该工具并提高构建的命中率。
-
SKIP-MANAGED-C++
该编译任务已被执行,因为它编译的是托管的 C++ 代码,而 Build Cache 不支持该代码。
-
MISS-DATA-DELETED
任务已执行,因为缓存中的项之前已经被清除。缓存内容会定期自动清除,以删除多余项目。如果缓存更大,就有可能找到并检索到相关项目,从而提高构建命中率。
-
MISS-NEW-SOURCE-FILE
任务已被执行,因为源文件以前从未编译过。注意:预计在空(冷)缓存上首次构建的所有任务都将显示这种缓存行为。
-
MISS-EXISTING-SOURCE-FILE
任务之前已执行过,并存储在缓存中,但是在这次构建中无法使用任何缓存项。
在这种情况下,报告中会包含一个表格,列出相关缓存项(来自以前的构建)以及无法使用的原因:INPUT-FILES(源代码或头文件不匹配)、TOOL-VERSION(编译器或工具链不匹配)、COMMAND-OPTIONS(命令行不匹配)或 ENV-VARS(环境变量不匹配)。