はじめに

本章ではPG-Stromの概要、および開発者コミュニティについて説明します。

PG-Stromとは?

PG-StromはPostgreSQL v15および以降のバージョン向けに設計された拡張モジュールで、チップあたり数千個のコアを持つGPU(Graphic Processor Unit)デバイスを利用する事で、大規模なデータセットに対する集計・解析処理やバッチ処理向けのSQLワークロードを高速化するために設計されています。

PG-Stromの中核となる機能は、SQL命令から自動的にGPUプログラムを生成するコードジェネレータと、SQLワークロードをGPU上で非同期かつ並列に実行する実行エンジンです。現バージョンではSCAN(WHERE句の評価)、JOINおよびGROUP BYのワークロードに対応しており、GPU処理にアドバンテージがある場合にはPostgreSQL標準の実装を置き換える事で、ユーザやアプリケーションからは透過的に動作します。

PG-Stromは2つのストレージオプションを持っています。一つは行形式でデータを保存するPostgreSQLのheapストレージシステムで、これは必ずしも集計・解析系ワークロードに最適ではありませんが、一方で、トランザクション系データベースからデータを移動する事なく集計処理を実行できるというアドバンテージがあります。もう一つは、列形式の構造化データ形式である Apache Arrow ファイルで、行単位のデータ更新には不向きであるものの、効率的に大量データをインポートする事ができ、外部データラッパ(FDW)を通して効率的なデータの検索・集計が可能です。

PG-Stromの特徴的な機能の一つが、NVME/NVME-oFデバイスからCPU/RAMをバイパスしてGPUに直接データを読み出し、GPUでSQL処理を実行する事でデバイスの帯域を最大限に引き出すGPUダイレクトSQL機能です。v3.0では新たにNVIDIA GPUDirect Storageにも対応し、ローカルNVME-SSDだけでなく、NVME-oFを介したSDS(Software Defined Storage)デバイスや、共有ファイルシステムからの読み出しにも対応します。

v3.0では一部のPostGIS関数と、ジオメトリデータのGiSTインデックス探索をGPU側で実行する事が可能になりました。更新の多いテーブルの内容を予めGPUに複製しておくGPUキャッシュ機能と併せて、リアルタイムな位置情報に基づく検索、分析処理が可能となります。

v5.0ではプロセスモデルの更新(マルチプロセス⇒マルチスレッド)や、ネイティブコードから疑似コードへの切り替えなど、根本的なソフトウェア設計の変更が行われました。これにより、全般的な処理速度や安定性の改善が図られました。

ライセンスと著作権

PG-StromはPostgreSQLライセンスに基づいて公開・配布されているオープンソースソフトウェアです。 ライセンスの詳細はLICENSEを参照してください。

コミュニティ

PG-Stromに関する質問や要望、障害報告などは、GitHubのDiscussionページに投稿するようお願いします。

本掲示板は、世界中に公開されたパブリックの掲示板である事に留意してください。つまり、自己責任の下、秘密情報が誤って投稿されないように注意してください。

本掲示板の優先言語は英語です。ただ一方で、歴史的経緯によりPG-Stromユーザの多くの割合が日本人である事は承知しており、Discussion上で日本語を利用した議論が行われることも可能とします。その場合、Subject(件名)に(JP)という接頭句を付ける事を忘れないようにしてください。これは非日本語話者が不要なメッセージを読み飛ばすために有用です。

バグや障害の報告

結果不正やシステムクラッシュ/ロックアップ、その他の疑わしい動作を発見した場合は、PG-Strom Issue Trackerで新しいイシューをオープンしてください。

バグレポートの作成に際しては、下記の点に留意してください。 - 同じ問題を最新版で再現する事ができるかどうか? - PG-Stromの最新版だけでなく、OS、CUDA、PostgreSQLおよび関連ソフトウェアの最新版でテストする事をお勧めします。 - PG-Stromが無効化された状態でも同じ問題を再現できるかどうか? - GUCパラメータ pg_strom.enabled によってPG-Stromの有効/無効を切り替える事ができます。 - 同じ既知問題が既にGitHubのイシュートラッカーに存在するかどうか? - close 状態のイシューを検索するのを忘れないようにしてください。

以下のような情報はバグ報告において有用です。

  • 問題を再現する手順(データおよびクエリ)
  • 問題クエリのEXPLAIN VERBOSE出力
  • 関連するテーブルのデータ構造(psql上で\d+ <table name>を実行して得られる)
  • 出力されたログメッセージ(verbose出力が望ましい)
  • デフォルト値から変更しているGUCオプションの値
  • ハードウェア設定(特にGPUの型番とRAM容量)

あなたの環境で発生した疑わしい動作がバグかどうか定かではない場合、新しいイシューのチケットをオープンする前にDiscussion掲示板へ報告してください。追加的な情報採取の依頼など、開発者は次に取るべきアクションを提案してくれるでしょう。

新機能の提案

何か新機能のアイデアがある場合、PG-Strom Issue Trackerで新しいイシューをオープンし feature タグを付けてください。続いて、他の開発者と議論を行いましょう。

望ましい新機能提案は以下のような要素を含んでいます。

  • あなたはどのような問題を解決/改善したいのか?
  • あなたのワークロード/ユースケースにとってどの程度深刻なのか?
  • どのようにそれを実装するのか?
  • (もしあれば)予想される欠点・トレードオフ

開発者の間でその必要性に関してコンセンサスが得られると、コーディネーターはイシューチケットにacceptedタグを付け、そのチケットはその後の開発作業のトラッキングのために利用されます。それ以外の場合、イシューチケットにはrejectedタグを付けてクローズされます。

一度プロポーザルが却下されたとしても、将来においてまた異なった決定があるかもしれません。周辺状況が変わった場合、新機能の再提案を躊躇する必要はありません。

開発段階では、パッチファイルをイシューチケットに添付するようにしてください。pull-requestは使用しません。

サポートポリシー

PG-Strom development teamはHeteroDB Software Distribution Centerから配布された最新版のみをサポートします。 トラブルが発生した場合、まずその問題は最新版のリリースで再現するかどうかを確かめてください。

また、これはボランティアベースのコミュニティサポートのポリシーである事に留意してください。つまり、サポートはベストエフォートでかつ、SLAの定義もありません。

もし商用のサポートが必要である場合、HeteroDB社(contact@heterodbcom)にコンタクトしてください。