使用 Incredibuild 的 Build Monitor 优化 Build Cache 性能

Blog
Author:
Incredibuild TeamIncredibuild Team
Published On:
2月 13, 2025
Estimated reading time:
1 minute

目录

为什么 Build Cache 优化很重要

在现代软件开发中,缓慢的构建会浪费时间和资源。这会影响团队的生产力并延迟项目时间表。构建缓存是一种强大的方法,它通过重用先前构建的输出并避免冗余任务执行来加快构建时间。然而,实现最佳缓存性能并不总是那么简单。缓存命中率通过计算所有可缓存构建任务中的缓存使用或命中部分来衡量构建缓存的有效性。高命中率表示缓存成功重用以前执行的任务,从而加快构建速度。另一方面,低命中率可能表明效率低下,例如冗余任务执行。提高缓存命中率可能具有挑战性,但优化这些可以显著加快构建速度并减少资源消耗。

以下视频详细介绍了如何利用 Incredibuild Build Monitor 来优化构建缓存性能的基础知识。本文作为视频的配套资料,旨在为那些喜欢按自己的节奏进行探索的读者提供关键要点和详细信息。我们将通过一个真实案例,为您展示如何有效减少缓存未命中,并提升整体效率。无论您是构建缓存领域的初学者,还是希望改进现有工作流程的资深人士,本指南都将为您提供实用的参考和帮助。

https://www.bilibili.com/video/BV1ph9dYBEpi/?share_source=copy_web&vd_source=39f8313e55c14051dfcc456a40fa9d4e

 

构建加速基础知识和常见挑战

Incredibuild 的核心功能是将大型构建任务分解为更小的、可管理的任务,从缓存中缓存或检索已经运行的任务,并将其余任务分布在多台机器上。构建缓存的工作原理是存储这些以前执行的任务的输出并重复使用它们。这减少了冗余处理,从而节省了时间和计算资源。

缓存命中数与缓存未命中数:

  • 缓存命中数:当从缓存中成功检索任务的输出时。
  • 缓存未命中:当任务由于代码更改或效率低下而需要重新执行时。

有些缓存未命中是正常的,无法避免。例如,由合法代码更改引起的未命中是正常的。但是,效率低下(例如设计不佳的依赖项管理或自动生成的代码问题)可能会导致本可避免的缺失,从而不必要地减慢构建速度。

介绍 Incredibuild Build Monitor

Incredibuild Build Monitor 提供了优化构建缓存性能所需的可观察性。借助其直观的可视化工具,您可以:

  • 使用专用栏识别缓存活动
  • 使用构建图监控资源利用率,以检测潜在的性能瓶颈。
  • 检查详细的任务计数器以识别意外的失误。
  • 利用自动和详细的报告来调查特定的缓存未命中。

这些功能使团队能够深入研究他们的构建并确定需要改进的领域。要了解这在实践中是如何运作的,让我们探索一个真实的例子。

真实示例:使用 Kodi 分析缓存行为

为了说明 Build Monitor 的强大功能,我们将介绍使用开源 Kodi 项目的一系列构建。

首次构建:

Kodi 项目的初始构建期间,缓存是第一次填充。这意味着执行的每个任务都是预期的缓存未命中,因为缓存中尚未存储任何输出。构建大约需要 6 分钟才能完成,当任务添加到缓存中时,活动在构建缓存栏中可见。第一个构建已经通过分发加速,也为在后续运行中通过缓存提高性能奠定了基础。

  • 在初始构建期间,将首次填充缓存。这会导致所有任务在生成和存储其输出时出现缓存未命中。
  • 构建时间:~6 分钟。
  • 观察结果:缓存栏在执行任务并添加到缓存时显示“投资”活动。

后续构建:

Kodi 项目的后续构建过程中,之前填充的缓存开始发挥作用。由于没有引入新的代码更改,Incredibuild 利用缓存的输出来跳过冗余任务执行。这导致构建时间和所需计算时间显著减少,缩短到大约 2.5 分钟。缓存栏突出显示了高缓存命中率,突出了利用缓存数据获得的效率。此版本强调了优化构建缓存的价值,展示了它如何改变重复构建的性能。

  • 无需更改任何代码,下一个构建即可利用填充的缓存,从而显著缩短构建时间。
  • 构建时间:~2.5 分钟。
  • 观察结果:缓存栏现在反映了高缓存命中率,展示了充分利用缓存的好处。

使用代码更改进行构建:

Kodi 项目中引入代码更改时,构建过程需要重新执行很大一部分任务,从而导致构建时间延长,约为 4 分钟。Build Monitor 通过显示较低的缓存命中率来突出显示这些更改,并识别受影响的特定任务。例如,预编译标头 (PCH) 的修改会导致缓存未命中,需要重新编译。此步骤演示了 Build Monitor 的可观测性工具如何提供有关缓存未命中发生原因的详细见解,从而帮助开发人员有效地解决效率低下的问题。

  • 引入代码更改时,由于新的缓存未命中,构建持续时间会增加(~4 分钟)。
  • 观察结果:Build Monitor 突出显示受影响的任务,并提供有关这些缺失原因的见解,例如头文件的更改,从而导致预编译头文件 (PCH) 的重新编译。

深入探讨:调查缓存未命中并解决问题

缓存未命中并不总是可以避免的,但识别和解决效率低下的问题可以显著提高性能。下面是一个涉及自动生成代码的常见场景。

问题:如果自动生成的代码模式(即时间戳)不断变化,则可能会导致一致的高速缓存未命中,因为每次构建都会将文件视为新文件。

解决方案:

  1. 使用 Build Monitor 的详细报告来识别受自动生成的代码影响的任务。
  2. 检查有问题的文件。例如,在一个案例中,自动生成的文件中的时间戳正在更新,从而触发了不必要的重新执行。
  3. 修改代码以提高缓存兼容性。通过避免更改代码,或将其包含在最小范围内,我们可以获得命中。Build Cache 还可以忽略代码中的前导注释。当确保此类更改模式仅限于前导注释时,Build cache 可以将这些转换为缓存命中。
  4. 使用后续版本验证更改,确保问题得到解决。

结果: 通过解决根本原因,开发人员可以实现受影响任务的完整缓存命中,从而显著缩短构建时间。

Build Cache 优化的一般策略

虽然 Kodi 示例强调了特定的技术,但 Incredibuild Build Monitor 具有足够的通用性,可以解决各种缓存效率低下的问题。以下是一些一般提示:

  1. 分析模式:使用 Build Monitor 的报告来识别反复出现的遗漏并调查其原因。
  2. 启用完整报告模式:要获得更深入的见解,请从自动报告切换到完整报告以捕获所有任务的详细信息。
  3. 查看构建设置:配置错误的设置可能会导致本可避免的低效率。
  4. 优化依赖项:确保以最大程度地减少不必要任务执行的方式处理频繁更改的依赖项。

为什么把资源投入到 Build Cache 优化?

优化构建缓存性能是一项长期投资,可在以下方面获得回报:

  • 节省时间:更快的构建使开发人员能够专注于创新。
  • 资源效率:减少计算需求降低成本和环境影响。
  • 团队生产力:改进的构建意味着对工作流程的干扰更少。

Incredibuild Build Monitor 提供了使此优化过程简单有效的工具。

构建缓存优化对于高效的开发工作流程至关重要,而 Incredibuild Build Monitor 简化了识别和解决缓存效率低下的问题。通过利用其强大的可观察性功能,团队可以实现更快的构建、更好的资源利用率和更顺畅的开发周期。

准备好优化您的构建了吗?观看下面嵌入的视频,了解详细演练,并探索 Incredibuild 如何改变您的开发流程。

了解有关 Incredibuild Build Monitor 的更多信息。