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_type bool on GPUでnumericデータ型を含む演算式を処理するかどうかを制御する。
pg_strom.cpu_fallback bool off GPUプログラムが"CPU再実行"エラーを返したときに、実際にCPUでの再実行を試みるかどうかを制御する。
pg_strom.nvme_strom_enabled bool on SSD-to-GPUダイレクトSQL実行機能を有効化/無効化する。
pg_strom.nvme_strom_threshold int 自動 SSD-to-GPUダイレクトSQL実行機能を発動させるテーブルサイズの閾値を設定する。

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

パラメータ名 初期値 説明
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 の数を指定します。通常、初期値を変更する必要はありません。

列指向キャッシュ関連の設定

パラメータ名 初期値 説明
pg_strom.ccache_base_dir string '/dev/shm' 列指向キャッシュを保持するファイルシステム上のパスを指定します。通常、tmpfsがマウントされている/dev/shmを変更する必要はありません。
pg_strom.ccache_databases string '' 列指向キャッシュの非同期ビルドを行う対象データベースをカンマ区切りで指定します。pgstrom_ccache_prewarm()によるマニュアルでのキャッシュビルドには影響しません。
pg_strom.ccache_num_builders int 2 列指向キャッシュの非同期ビルドを行うワーカープロセス数を指定します。少なくともpg_strom.ccache_databasesで設定するデータベースの数以上にワーカーが必要です。
pg_strom.ccache_log_output bool false 列指向キャッシュの非同期ビルダーがログメッセージを出力するかどうかを制御します。
pg_strom.ccache_total_size int 自動 列指向キャッシュの上限を kB 単位で指定します。区画サイズの75%またはシステムの物理メモリの66%のいずれか小さな方がデフォルト値です。

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デバイスメモリのセグメント数の上限を指定します。通常は初期値を変更する必要はありません。