我应该在哪里存储 PGO 数据库文件?

Where should I store PGO database files?

我一直在研究在 Visual C++ 2013 中使用 Profile Guided Optimisation。我很高兴使用不同的场景作为手动步骤执行训练集,但想要最终优化的构建和 link 在我们的 CI 构建服务器上工作。

考虑到这一点,我存储 PGO 配置文件数据库的最佳位置在哪里?将它们存储到版本控制中(Git 在我们的例子中)是最方便的地方,但我知道它们是二进制文件,数量级为数十兆字节,甚至可能是数百兆字节,并且这些不一定存储在源代码控制系统中很好。

或者,是否有更好的解决方案或最佳实践将 PGO 集成到我们的自动化构建中?

这里有多种选择,您可以权衡取舍选择其中一种。

  • 您是将 PGO 用于整个代码库,还是用于某些热点或模块?您多久刷新一次数据库。
  • 使用不合适的 PGO 数据库发布某物是个大问题吗?
  • 你的项目有多大,最坏情况下能有多大
  • 在这种最坏的情况下,将 PGO 数据库存储在源代码管理中是否可以接受。

通过您的回答,您可以创建一条通往自己的路线。

如果您不经常刷新 PGO 数据库并且二进制大小不会破坏您的项目,您可以将它们存储在版本控制中。

如果您为每个提交重新生成它们,您可以将它们放在一个单独的存储库中,其中包括作为提交消息的真实代码库提交 ID(在其上创建 PGO 配置文件数据库)

或者如果您不经常生成它们,并且当您 return 返回到特定提交时,可以重新生成您可能不存储它们的数据库,只需放入 CI 构建机器.

或者你可以围绕这个意见再做一个组合:)

我们的解决方案是使用 Git LFS (see also this question).

存储 PGO 文件

这种方法的优点:

  • PGO 数据库与其关联的代码版本一起存在于存储库中
  • 无需配置外部文件存储,开发、构建和测试机器完全无缝地使用数据库
  • 大型二进制文件未存储在正常的 Git 存储库中,因此不会膨胀或使合并变得乏味。

这种方法唯一的轻微并发症是所有机器和软件都必须支持和安装 Git LFS,从开发工作站到 CI 服务器,这对我们没有太大影响。