DEFLATE_QPL を使用して ClickHouse をビルドする
-
ホストマシンが QPL の要求する前提条件を満たしていることを確認してください
-
cmakeビルド時にはdeflate_qplはデフォルトで有効になっています。誤って設定を変更してしまった場合は、ビルドフラグENABLE_QPL=1になっていることを必ず再確認してください -
一般的な要件については、ClickHouse の一般的なビルド手順を参照してください
DEFLATE_QPL を使ってベンチマークを実行する
ファイル一覧
qpl-cmake 配下の benchmark_sample フォルダには、Python スクリプトを用いてベンチマークを実行するためのサンプルが含まれています。
client_scripts には、代表的なベンチマークを実行するための Python スクリプトが含まれています。例えば:
client_stressing_test.py: 1〜4 台のサーバーインスタンスに対してクエリのストレステストを行う Python スクリプト。queries_ssb.sql: Star Schema Benchmark の全クエリを列挙したファイル。allin1_ssb.sh: ベンチマークのワークフローを自動で一括実行するシェルスクリプト。
database_files には、lz4/deflate/zstd コーデックごとにデータベースファイルが保存されます。
スター・スキーマ向けベンチマークを自動実行する:
処理が完了したら、./output/ フォルダ内のすべての結果を確認してください。
失敗した場合は、以下のセクションに従ってベンチマークを手動で実行してください。
定義
[CLICKHOUSE_EXE] は ClickHouse の実行可能ファイルへのパスを表します。
環境
- CPU: Sapphire Rapid
- OS 要件については System Requirements for QPL を参照してください
- IAA のセットアップについては Accelerator Configuration を参照してください
- Python モジュールをインストールします:
[IAA の自己チェック]
期待される出力は次のとおりです:
何も出力されない場合は、IAA の準備がまだ整っていないことを意味します。IAA のセットアップを再度確認してください。
未加工データを生成する
dbgen を使用し、次のパラメータで 1 億行のデータを生成します:
-s 20
*.tbl のようなファイルは、./benchmark_sample/rawdata_dir/ssb-dbgen 配下に出力されます:
データベースのセットアップ
LZ4 コーデックを使用したデータベースのセットアップ
コンソールに Connected to ClickHouse server というメッセージが表示されていれば、クライアントがサーバーへの接続を正常に確立できたことを意味します。
Star Schema Benchmark で説明されている以下の 3 ステップを完了します。
- ClickHouse にテーブルを作成します
- データを挿入します。ここでは入力データとして
./benchmark_sample/rawdata_dir/ssb-dbgen/*.tblを使用します。 - "star schema" を非正規化した "flat schema" に変換します
IAA Deflate コーデックを使用してデータベースをセットアップします。
上記の lz4 と同様に 3 つの手順を完了します
ZSTD コーデックを使用してデータベースをセットアップします
上記の lz4 と同様に、同じ 3 つの手順を実行してください
[self-check] 各コーデック(lz4/zstd/deflate)について、データベースが正しく作成されていることを確認するために、次のクエリを実行してください:
想定される出力は次のとおりです:
[IAA Deflate コーデックのセルフチェック]
クライアントから初めて挿入やクエリを実行した際に、ClickHouse サーバーのコンソールには次のログが出力されるはずです:
もしこれが一度も出力されず、代わりに次のような別のログが表示される場合:
これは IAA デバイスが使用可能な状態になっていないことを意味します。IAA のセットアップをもう一度確認する必要があります。
単一インスタンスでのベンチマーク
- ベンチマークを開始する前に、C6 を無効化し、CPU周波数ガバナーを
performanceに設定してください
- ソケットをまたぐメモリアクセスによるボトルネックの影響を排除するため、
numactlを使用してサーバーを一方のソケットに、クライアントをもう一方のソケットにバインドします。 - シングルインスタンスとは、1つのサーバーが1つのクライアントに接続されている構成を意味します。
次に、LZ4/Deflate/ZSTD のベンチマークをそれぞれ実行します:
LZ4:
IAA Deflate:
ZSTD:
これで、想定どおり 3 件のログが出力されるはずです。
パフォーマンスメトリクスの確認方法:
QPS を中心に確認します。キーワード QPS_Final を検索し、統計情報を収集してください
マルチインスタンスでのベンチマーク
- メモリボトルネックがスレッド数の増加に与える影響を抑えるため、マルチインスタンス構成でベンチマークを実行することを推奨します。
- マルチインスタンスとは、複数(2 または 4)台のサーバーがそれぞれ個別のクライアントに接続されている構成を指します。
- 1 ソケット内のコアは均等に分割し、各サーバーにそれぞれ割り当てる必要があります。
- マルチインスタンスの場合、各 codec 用に新しいディレクトリを作成し、シングルインスタンスと同様の手順でデータセットを挿入する必要があります。
主な違いは 2 つあります:
- クライアント側では、テーブル作成およびデータ挿入時に、割り当てられたポートで ClickHouse を起動する必要があります。
- サーバー側では、ポートが割り当てられた特定の XML 設定ファイルを指定して ClickHouse を起動する必要があります。マルチインスタンス用のすべてのカスタマイズ済み XML 設定ファイルは、./server_config 配下に用意されています。
ここでは、1 ソケットあたり 60 コアあり、2 インスタンスを起動する例を示します。 最初のインスタンス用のサーバーを起動します LZ4:
ZSTD:
IAA Deflate:
[2つ目のインスタンス用サーバーを起動する]
LZ4:
ZSTD:
IAA Deflate:
第2インスタンス向けテーブルの作成とデータ挿入
テーブルの作成:
データの挿入:
- [TBL_FILE_NAME] は、
./benchmark_sample/rawdata_dir/ssb-dbgen配下にあり、正規表現 *. tbl にマッチするファイルの名前を表します。 --port=9001はサーバーインスタンスに割り当てられたポートを表し、config_lz4_s2.xml/config_zstd_s2.xml/config_deflate_s2.xml でも定義されています。さらに多くのインスタンスを起動する場合は、s3/s4 インスタンスをそれぞれ表す 9002/9003 に置き換える必要があります。指定しない場合、デフォルトのポートは 9000 で、これは最初のインスタンスで使用されています。
2 インスタンスでのベンチマーク
LZ4:
ZSTD:
IAA deflate
ここで、client_stressing_test.py の最後の引数 2 はインスタンス数を表します。インスタンス数を増やす場合は、この値を 3 または 4 に変更してください。このスクリプトは最大 4 インスタンスまでサポートします。
これで、期待どおり 3 件のログが出力されるはずです。
パフォーマンスメトリクスの確認方法:
ここでは QPS に注目します。キーワード QPS_Final を検索し、統計情報を収集してください。
4 インスタンス構成でのベンチマーク環境は、上記の 2 インスタンス構成の場合と同様です。 レビュー用の最終レポートには、2 インスタンス構成のベンチマークデータを採用することを推奨します。
ヒント
新しい ClickHouse サーバーを起動する前には毎回、バックグラウンドで動作している ClickHouse プロセスがないことを必ず確認し、残っている古いプロセスがあれば終了させてください。
./client_scripts/queries_ssb.sql 内のクエリ一覧を公式の Star Schema Benchmark と比較すると、Q1.2 / Q1.3 / Q3.4 の 3 つのクエリが含まれていないことが確認できます。これは、これらのクエリでは CPU 使用率が 10% 未満と非常に低く、性能差を示すことができないためです。