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

PG-Stromとは?

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

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

また、PG-StromはいくつかのDWH専用システムとは異なり、行形式でデータを保存するPostgreSQLとストレージシステムを共有しています。これは必ずしも集計・解析系ワークロードに最適ではありませんが、一方で、トランザクション系データベースからデータを移動することなく集計処理を実行できるというアドバンテージでもあります。

PG-Strom v2.0ではストレージ読出し能力が強化されました。SSD-to-GPUダイレクトSQL実行や、インメモリ列指向キャッシュはストレージの遅さを補い、クエリを処理するGPUへ高速にデータを供給する事を可能にします。

一方、高度な統計解析や機械学習といった極めて計算集約度の高い問題に対しても、PL/CUDAやgstore_fdwといった機能を使用する事で、データベース管理システム上で計算処理を行い、結果だけをユーザへ返すといった使い方をする事が可能です。

ライセンスと著作権

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

PG-Stromの著作権はPG-Strom Development Teamが有しています。PG-Strom Development Teamは法的な主体ではなく、国籍を問わず、PG-Stromプロジェクトに貢献した個々の開発者や企業の総称です。

コミュニティ

開発者コミュニティのMLがPG-Strom community MLに準備されています。 PG-Stromに関連した質問、要望、障害報告などはこちらにポストしてください。

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

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

バグや障害の報告

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

バグレポートの作成に際しては、下記の点に留意してください。 - 同じ問題を最新版で再現する事ができるかどうか? - 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容量)

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

新機能の提案

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

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

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

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

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

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

サポートポリシー

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

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

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

バージョンポリシー

PG-Stromのバージョン番号は<major>.<minor>という2つの要素から成ります。

マイナーバージョン番号は各リリース毎に増加し、バグ修正と新機能の追加を含みます。

メジャーバージョン番号は以下のような場合に増加します。

  • 対応しているPostgreSQLバージョンのうち、いくつかがサポート対象外となった場合。
  • 対応しているGPUデバイスのうち、いくつかがサポート対象外となった場合。
  • エポックメイキングな新機能が追加となった場合。