プロファイルガイド最適化
プロファイルガイド最適化 (PGO) は、プログラムが実行時のプロファイルに基づいて最適化されるコンパイラ最適化手法です。
テストによると、PGOはClickHouseのパフォーマンス向上に寄与します。テストでは、ClickBenchテストスイートでQPSが最大15%向上することを確認しています。詳細な結果はこちらで確認できます。パフォーマンスの利点は、通常のワークロードによって異なります - より良い結果が得られることもあれば、逆もあります。
ClickHouseにおけるPGOに関するより多くの情報は、該当するGitHubのイシューで読むことができます。
PGOを使用してClickHouseをビルドする方法
PGOには2つの主要な種類があります:インスツルメンテーションとサンプリング(AutoFDOとも呼ばれます)。このガイドでは、ClickHouseのインスツルメンテーションPGOについて説明します。
- インスツルメンテーションモードでClickHouseをビルドします。Clangでは、
CXXFLAGS
に-fprofile-generate
オプションを渡すことで実行できます。 - サンプルワークロードでインスツルメンテーションを施したClickHouseを実行します。ここでは、通常のワークロードを使用する必要があります。1つのアプローチは、ClickBenchをサンプルワークロードとして使用することです。インスツルメンテーションモードのClickHouseは遅く動作する可能性があるため、その準備をしておき、パフォーマンスが重要な環境でインスツルメンテーションされたClickHouseを実行しないでください。
- 前のステップで収集したプロファイルを使用して、
-fprofile-use
コンパイラフラグでClickHouseを再コンパイルします。
PGOを適用する方法についてのより詳細なガイドは、Clangのドキュメンテーションにあります。
本番環境から直接サンプルワークロードを収集する予定の場合は、サンプリングPGOを使用することをお勧めします。