Profile Guided Optimization
Profile-Guided Optimization (PGO) 是一种编译器优化技术,它基于运行时 profile 对程序进行优化。
根据测试,PGO 有助于提高 ClickHouse 的性能。根据测试,我们在 ClickBench 测试套件上看到了高达 15% 的 QPS 提升。更详细的结果请见此处。性能提升取决于您的典型工作负载 - 您可能会获得更好或更差的结果。
有关 ClickHouse 中 PGO 的更多信息,您可以阅读相应的 GitHub issue。
如何使用 PGO 构建 ClickHouse?
PGO 主要有两种类型:Instrumentation 和 Sampling(也称为 AutoFDO)。本指南介绍了 ClickHouse 的 Instrumentation PGO。
- 在 Instrumented 模式下构建 ClickHouse。在 Clang 中,可以通过将
-fprofile-generate
选项传递给CXXFLAGS
来完成。 - 在示例工作负载上运行 instrumented ClickHouse。这里您需要使用您通常的工作负载。一种方法可能是使用 ClickBench 作为示例工作负载。Instrumentation 模式下的 ClickHouse 可能会运行缓慢,因此请为此做好准备,并且不要在对性能要求严苛的环境中运行 instrumented ClickHouse。
- 再次使用
-fprofile-use
编译器标志和从上一步收集的 profile 重新编译 ClickHouse。
有关如何应用 PGO 的更详细指南,请参阅 Clang 文档。
如果您要直接从生产环境收集示例工作负载,我们建议尝试使用 Sampling PGO。