GUCパラメータ

本節ではPG-Stromの提供する設定パラメータについて説明します。

特定機能の有効化/無効化

パラメータ名 初期値 説明
pg_strom.enabled bool on PG-Strom機能全体を一括して有効化/無効化する。
pg_strom.enable_gpuscan bool on GpuScanによるスキャンを有効化/無効化する。
pg_strom.enable_gpuhashjoin bool on HashJoinによるGpuJoinを有効化/無効化する。
pg_strom.enable_gpunestloop bool on NestLoopによるGpuJoinを有効化/無効化する。
pg_strom.enable_gpupreagg bool on GpuPreAggによる集約処理を有効化/無効化する。
pg_strom.enable_partitionwise_gpujoin bool on GpuJoinを各パーティションの要素へプッシュダウンするかどうかを制御する。PostgreSQL v10以降でのみ対応。
pg_strom.enable_partitionwise_gpupreagg bool on GpuPreAggを各パーティションの要素へプッシュダウンするかどうかを制御する。PostgreSQL v10以降でのみ対応。
pg_strom.pullup_outer_scan bool on GpuPreAgg/GpuJoin直下の実行計画が全件スキャンである場合に、上位ノードでスキャン処理も行い、CPU/RAM⇔GPU間のデータ転送を省略するかどうかを制御する。
pg_strom.pullup_outer_join bool on GpuPreAgg直下がGpuJoinである場合に、JOIN処理を上位の実行計画に引き上げ、CPU⇔GPU間のデータ転送を省略するかどうかを制御する。
pg_strom.enable_numeric_aggfuncs bool on numericデータ型を引数に取る集約演算をGPUで処理するかどうかを制御する。
pg_strom.cpu_fallback bool off GPUプログラムが"CPU再実行"エラーを返したときに、実際にCPUでの再実行を試みるかどうかを制御する。

オプティマイザに関する設定

パラメータ名 初期値 説明
pg_strom.chunk_size int 65534kB PG-Stromが1回のGPUカーネル呼び出しで処理するデータブロックの大きさです。かつては変更可能でしたが、ほとんど意味がないため、現在では約64MBに固定されています。
pg_strom.gpu_setup_cost real 4000 GPUデバイスの初期化に要するコストとして使用する値。
pg_strom.gpu_dma_cost real 10 チャンク(64MB)あたりのDMA転送に要するコストとして使用する値。
pg_strom.gpu_operator_cost real 0.00015 GPUの演算式あたりの処理コストとして使用する値。cpu_operator_costよりも大きな値を設定してしまうと、いかなるサイズのテーブルに対してもPG-Stromが選択されることはなくなる。

エグゼキュータに関する設定

パラメータ名 初期値 説明
pg_strom.global_max_async_tasks int 160 PG-StromがGPU実行キューに投入する事ができる非同期タスクのシステム全体での最大値。
pg_strom.local_max_async_tasks int 8 PG-StromがGPU実行キューに投入する事ができる非同期タスクのプロセス毎の最大値。CPUパラレル処理と併用する場合、この上限値は個々のバックグラウンドワーカー毎に適用されます。したがって、バッチジョブ全体ではpg_strom.local_max_async_tasksよりも多くの非同期タスクが実行されることになります。
pg_strom.max_number_of_gpucontext int 自動 GPUデバイスを抽象化した内部データ構造 GpuContext の数を指定します。通常、初期値を変更する必要はありません。

SSD-to-GPUダイレクト関連の設定

パラメータ名 初期値 説明
pg_strom.nvme_strom_enabled bool on SSD-to-GPUダイレクトSQL機能を有効化/無効化する。
pg_strom.nvme_strom_threshold int 自動 SSD-to-GPUダイレクトSQL機能を発動させるテーブルサイズの閾値を設定する。
pg_strom.nvme_distance_map string NULL NVME-SSDに近いGPUを手動で設定します。通常はsysfsから取得したPCIeバストポロジ情報による自動設定で問題ありません。

Arrow_Fdw関連の設定

パラメータ名 初期値 説明
arrow_fdw.enabled bool on 推定コスト値を調整し、Arrow_Fdwの有効/無効を切り替えます。ただし、GpuScanが利用できない場合には、Arrow_FdwによるForeign ScanだけがArrowファイルをスキャンできるという事に留意してください。
arrow_fdw.metadata_cache_size int 32MB Arrowファイルのメタ情報をキャッシュする共有メモリ領域のサイズを指定します。
パラメータの更新には再起動が必要です。
arrow_fdw.metadata_cache_width int 80 メタ情報キャッシュ1個に格納できるカラムの上限を指定します。この値より多くの列を持つArrowファイルの場合は、メタ情報がキャッシュされないため、参照のたびにファイルからメタデータをロードします。
パラメータの更新には再起動が必要です。

gstore_fdw関連の設定

パラメータ名 初期値 説明
pg_strom.gstore_max_relations int 100 gstore_fdwを用いた外部表数の上限です。パラメータの更新には再起動が必要です。

GPUプログラムの生成とビルドに関連する設定

パラメータ名 初期値 説明
pg_strom.program_cache_size int 256MB ビルド済みのGPUプログラムをキャッシュしておくための共有メモリ領域のサイズです。パラメータの更新には再起動が必要です。
pg_strom.num_program_builders int 2 GPUプログラムを非同期ビルドするためのバックグラウンドプロセスの数を指定します。パラメータの更新には再起動が必要です。
pg_strom.debug_jit_compile_options bool off GPUプログラムのJITコンパイル時に、デバッグオプション(行番号とシンボル情報)を含めるかどうかを指定します。GPUコアダンプ等を用いた複雑なバグの解析に有用ですが、性能のデグレードを引き起こすため、通常は使用すべきでありません。

GPUデバイスに関連する設定

パラメータ名 初期値 説明
pg_strom.cuda_visible_devices string '' PostgreSQLの起動時に特定のGPUデバイスだけを認識させてい場合は、カンマ区切りでGPUデバイス番号を記述します。これは環境変数CUDA_VISIBLE_DEVICESを設定するのと同等です。
pg_strom.gpu_memory_segment_size int 512MB PG-StromがGPUメモリをアロケーションする際に、1回のCUDA API呼び出しで獲得するGPUデバイスメモリのサイズを指定します。この値が大きいとAPI呼び出しのオーバーヘッドは減らせますが、デバイスメモリのロスは大きくなります。
pg_strom.max_num_preserved_gpu_memory int 2048 確保済みGPUデバイスメモリのセグメント数の上限を指定します。通常は初期値を変更する必要はありません。