View
7.274
Download
0
Category
Preview:
Citation preview
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
Qu
ery
Res
po
nse
Tim
e [s
ec]
# 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を介さずに SSDGPU間でデータ転送
同じ事が標準規格の 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
SQ
Lから自動生成した
G
PU命令セット
SSD-to-GPU Direct
解析系クエリ実行時のデータフロー (1/3) – 基本パターン
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞ 17
GPU SSD
CPU + RAM
PCI-E
Table
SQ
Lから自動生成した
G
PU命令セット
SSD-to-GPU Direct
検索条件にマッチ しない行を削除
解析系クエリ実行時のデータフロー (1/3) – 基本パターン
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞ 18
GPU SSD
CPU + RAM
PCI-E
Table
SQ
Lから自動生成した
G
PU命令セット
SSD-to-GPU Direct
選択された行のみを CPU+RAMへ転送
検索条件にマッチ しない行を削除
解析系クエリ実行時のデータフロー (2/3) – アレンジ版
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞ 19
GPU SSD
CPU + RAM
PCI-E
Table
SQ
Lから自動生成した
G
PU命令セット
SSD-to-GPU Direct
解析系クエリ実行時のデータフロー (2/3) – アレンジ版
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞ 20
GPU SSD
CPU + RAM
PCI-E
Table
SQ
Lから自動生成した
G
PU命令セット
SSD-to-GPU Direct
検索条件にマッチ しない行を削除
解析系クエリ実行時のデータフロー (2/3) – アレンジ版
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞ 21
GPU SSD
CPU + RAM
PCI-E
Table
SQ
Lから自動生成した
G
PU命令セット
SSD-to-GPU Direct
選択された行・列のみを CPU+RAMへ転送
検索条件にマッチ しない行を削除
検索条件にマッチ しない行を削除
さらに 参照されない列も削除
解析系クエリ実行時のデータフロー (3/3) – 鬼アレンジ版
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞ 22
GPU SSD
CPU + RAM
PCI-E
Table
SQ
Lから自動生成した
G
PU命令セット
JOIN対象のテーブル
解析系クエリ実行時のデータフロー (3/3) – 鬼アレンジ版
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞ 23
GPU SSD
CPU + RAM
PCI-E
Table
SQ
Lから自動生成した
G
PU命令セット
SSD-to-GPU Direct
JOIN対象のテーブル
解析系クエリ実行時のデータフロー (3/3) – 鬼アレンジ版
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞ 24
GPU SSD
CPU + RAM
PCI-E
Table
SQ
Lから自動生成した
G
PU命令セット
SSD-to-GPU Direct
JOIN対象のテーブル
解析系クエリ実行時のデータフロー (3/3) – 鬼アレンジ版
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞ 25
GPU SSD
CPU + RAM
PCI-E
Table
SQ
Lから自動生成した
G
PU命令セット
SSD-to-GPU Direct
ストレージからデータを 読み出した時点で 既にJoin済み
JOIN対象のテーブル
+
GPU側で Join結果を生成
必要な要素技術
▌NVMeドライバへの NVIDIA GPUDirect 機能の追加
Linux kernel driverとnvidia driverの間でやり取りが必要…。
▌shared_bufferの利用率統計情報採取
テーブルの大半が既にオンメモリなら意味はないので。
▌shared_bufferのアクセスモード追加
SSDGPU Direct転送が終わるまでは誰も書き込んじゃダメ。
PG-Stromプロジェクトへの参加者
熱烈歓迎大募集中
PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞ 26
乞うご期待。
Recommended