SlideShare a Scribd company logo
SQL+GPU+SSD=∞
かぴばら@品川
自己紹介
▌Name: かぴばら@品川
▌PostgreSQL歴:9年ほど(2006~)
▌works: セキュリティ周り、FDW周り、諸々...
▌趣味: 別業界のテクノロジを持ってきて
PostgreSQLに組み合わせる事
(混ぜるな危険?)
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞2
Very powerful
computing
capability
Very functional
& well-used
database
PG-Strom:
なるものを作っています。
GPGPU
What’s PG-Strom – ざっくり説明すると
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞3
▌コア機能
① SQLからGPUネイティブバイナリを動的に生成する。
② GPUによる “超”並列処理を非同期に実行する。
▌利点
 SQLクエリを透過的にアクセラレーション可能。
 一般的なH/Wを使って構成可能。安価。
Parser
Planner
Executor
Custom-
Scan/Join
Interface
Query: SELECT * FROM l_tbl JOIN r_tbl on l_tbl.lid = r_tbl.rid;
PG-Strom
CUDA
driver
nvrtc
DMA Data Transfer
CUDA
Source
code
Massive
Parallel
Execution
対応ワークロード – Scan, Join, Aggregation
▌SELECT cat, AVG(x) FROM t0 NATURAL JOIN t1 [, ...] GROUP BY cat;
 t0: 100M rows, t1~t10: 100K rows for each, all the data was preloaded.
▌測定環境:
 PostgreSQL v9.5beta1 + PG-Strom (22-Oct), CUDA 7.0 + RHEL6.6 (x86_64)
 CPU: Xeon E5-2670v3, RAM: 384GB, GPU: NVIDIA TESLA K20c (2496cores)
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞4
0
50
100
150
200
250
300
PgSQL Strom PgSQL Strom PgSQL Strom PgSQL Strom PgSQL Strom PgSQL Strom PgSQL Strom
2 3 4 5 6 7 8
QueryResponseTime[sec]
# of tables involved
Time consumption per component (PostgreSQL v9.5β vs PG-Strom)
Scan Join Aggregate Others
次のターゲットはI/O – TPC/DSワークロードの解析より
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞5
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
Time consumption per workloads (PostgreSQL v9.5beta+PG-Strom)
Scan Join Aggregate Others
では、どうやってGPUでI/Oを高速化しようというのか?
お断り。
今からご紹介する話は、
現在のところ実装アイデアです。
......これから頑張って作りますよ。
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞6
大雑把な x86 ハードウェアの構成
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞7
GPU SSD
CPU + RAM CPU + RAM
PCI-E
SAS
この辺で悩む事が多い 
説明のため図を単純化します
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞8
GPU SSD
CPU + RAM
PCI-E
同じストレージという事で。
NVM EXPRESS SSD
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞9
PCI-Eダイレクト接続タイプのSSD – 低レイテンシと広帯域が特長
Samsung
SSD 950 PRO
Intel SSD 750
HGST
Ultrastar SN100
Intel
SSD DC P3700
解析系クエリ実行時のデータフロー
① ストレージ  CPU/RAMへデータをロード
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞10
GPU SSD
CPU + RAM
PCI-E
Table
解析系クエリ実行時のデータフロー
① ストレージ  CPU/RAMへデータをロード
② 条件句で行をフィルタリング(Select)
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞11
GPU SSD
CPU + RAM
PCI-E
Table
解析系クエリ実行時のデータフロー
① ストレージ  CPU/RAMへデータをロード
② 条件句で行をフィルタリング(Select)
③ 参照されない列を除去(Projection)
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞12
GPU SSD
CPU + RAM
PCI-E
Table
 CPUの仕事
解析系クエリ実行時のデータフロー
① ストレージ  CPU/RAMへデータをロード
② 条件句で行をフィルタリング(Select)
③ 参照されない列を除去(Projection)
④ 他のテーブルと結合(Join)
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞13
GPU SSD
CPU + RAM
PCI-E
Table
+
SSD-to-GPU Direct
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞14
CPU/RAMを介さずに
SSDGPU間でデータ転送
同じ事が標準規格の
NVMeでも可能!
解析系クエリ実行時のデータフロー (1/3) – 基本パターン
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞15
GPU SSD
CPU + RAM
PCI-E
Table
SSD-to-GPU
Direct
解析系クエリ実行時のデータフロー (1/3) – 基本パターン
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞16
GPU SSD
CPU + RAM
PCI-E
Table
SQLから自動生成した
GPU命令セット
SSD-to-GPU
Direct
解析系クエリ実行時のデータフロー (1/3) – 基本パターン
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞17
GPU SSD
CPU + RAM
PCI-E
Table
SQLから自動生成した
GPU命令セット
SSD-to-GPU
Direct
検索条件にマッチ
しない行を削除
解析系クエリ実行時のデータフロー (1/3) – 基本パターン
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞18
GPU SSD
CPU + RAM
PCI-E
Table
SQLから自動生成した
GPU命令セット
SSD-to-GPU
Direct
選択された行のみを
CPU+RAMへ転送
検索条件にマッチ
しない行を削除
解析系クエリ実行時のデータフロー (2/3) – アレンジ版
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞19
GPU SSD
CPU + RAM
PCI-E
Table
SQLから自動生成した
GPU命令セット
SSD-to-GPU
Direct
解析系クエリ実行時のデータフロー (2/3) – アレンジ版
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞20
GPU SSD
CPU + RAM
PCI-E
Table
SQLから自動生成した
GPU命令セット
SSD-to-GPU
Direct
検索条件にマッチ
しない行を削除
解析系クエリ実行時のデータフロー (2/3) – アレンジ版
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞21
GPU SSD
CPU + RAM
PCI-E
Table
SQLから自動生成した
GPU命令セット
SSD-to-GPU
Direct
選択された行・列のみを
CPU+RAMへ転送
検索条件にマッチ
しない行を削除
検索条件にマッチ
しない行を削除
さらに
参照されない列も削除
解析系クエリ実行時のデータフロー (3/3) – 鬼アレンジ版
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞22
GPU SSD
CPU + RAM
PCI-E
Table
SQLから自動生成した
GPU命令セット
JOIN対象のテーブル
解析系クエリ実行時のデータフロー (3/3) – 鬼アレンジ版
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞23
GPU SSD
CPU + RAM
PCI-E
Table
SQLから自動生成した
GPU命令セット
SSD-to-GPU
Direct
JOIN対象のテーブル
解析系クエリ実行時のデータフロー (3/3) – 鬼アレンジ版
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞24
GPU SSD
CPU + RAM
PCI-E
Table
SQLから自動生成した
GPU命令セット
SSD-to-GPU
Direct
JOIN対象のテーブル
解析系クエリ実行時のデータフロー (3/3) – 鬼アレンジ版
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞25
GPU SSD
CPU + RAM
PCI-E
Table
SQLから自動生成した
GPU命令セット
SSD-to-GPU
Direct
ストレージからデータを
読み出した時点で
既にJoin済み
JOIN対象のテーブル
+
GPU側で
Join結果を生成
必要な要素技術
▌NVMeドライバへの NVIDIA GPUDirect 機能の追加
 Linux kernel driverとnvidia driverの間でやり取りが必要…。
▌shared_bufferの利用率統計情報採取
 テーブルの大半が既にオンメモリなら意味はないので。
▌shared_bufferのアクセスモード追加
 SSDGPU Direct転送が終わるまでは誰も書き込んじゃダメ。
PG-Stromプロジェクトへの参加者
熱烈歓迎大募集中
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞26
乞うご期待。

More Related Content

SQL+GPU+SSD=∞ (Japanese)