sql+gpu+ssd=∞ (japanese)

27
SQL+GPU+SSD=∞ かぴばら@品川

Upload: kohei-kaigai

Post on 25-Jan-2017

7.274 views

Category:

Software


0 download

TRANSCRIPT

Page 1: SQL+GPU+SSD=∞ (Japanese)

SQL+GPU+SSD=∞

かぴばら@品川

Page 2: SQL+GPU+SSD=∞ (Japanese)

自己紹介

▌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

Page 3: SQL+GPU+SSD=∞ (Japanese)

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

Page 4: SQL+GPU+SSD=∞ (Japanese)

対応ワークロード – 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

Page 5: SQL+GPU+SSD=∞ (Japanese)

次のターゲットは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を高速化しようというのか?

Page 6: SQL+GPU+SSD=∞ (Japanese)

お断り。

今からご紹介する話は、

現在のところ実装アイデアです。

......これから頑張って作りますよ。

PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞ 6

Page 7: SQL+GPU+SSD=∞ (Japanese)

大雑把な x86 ハードウェアの構成

PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞ 7

GPU SSD

CPU + RAM CPU + RAM

PCI-E

SAS

この辺で悩む事が多い

Page 8: SQL+GPU+SSD=∞ (Japanese)

説明のため図を単純化します

PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞ 8

GPU SSD

CPU + RAM

PCI-E

同じストレージという事で。

Page 9: SQL+GPU+SSD=∞ (Japanese)

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

Page 10: SQL+GPU+SSD=∞ (Japanese)

解析系クエリ実行時のデータフロー

① ストレージ CPU/RAMへデータをロード

PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞ 10

GPU SSD

CPU + RAM

PCI-E

Table

Page 11: SQL+GPU+SSD=∞ (Japanese)

解析系クエリ実行時のデータフロー

① ストレージ CPU/RAMへデータをロード

② 条件句で行をフィルタリング(Select)

PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞ 11

GPU SSD

CPU + RAM

PCI-E

Table

Page 12: SQL+GPU+SSD=∞ (Japanese)

解析系クエリ実行時のデータフロー

① ストレージ CPU/RAMへデータをロード

② 条件句で行をフィルタリング(Select)

③ 参照されない列を除去(Projection)

PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞ 12

GPU SSD

CPU + RAM

PCI-E

Table

Page 13: SQL+GPU+SSD=∞ (Japanese)

CPUの仕事

解析系クエリ実行時のデータフロー

① ストレージ CPU/RAMへデータをロード

② 条件句で行をフィルタリング(Select)

③ 参照されない列を除去(Projection)

④ 他のテーブルと結合(Join)

PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞ 13

GPU SSD

CPU + RAM

PCI-E

Table

+

Page 14: SQL+GPU+SSD=∞ (Japanese)

SSD-to-GPU Direct

PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞ 14

CPU/RAMを介さずに SSDGPU間でデータ転送

同じ事が標準規格の NVMeでも可能!

Page 15: SQL+GPU+SSD=∞ (Japanese)

解析系クエリ実行時のデータフロー (1/3) – 基本パターン

PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞ 15

GPU SSD

CPU + RAM

PCI-E

Table

SSD-to-GPU Direct

Page 16: SQL+GPU+SSD=∞ (Japanese)

解析系クエリ実行時のデータフロー (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

Page 17: SQL+GPU+SSD=∞ (Japanese)

解析系クエリ実行時のデータフロー (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

検索条件にマッチ しない行を削除

Page 18: SQL+GPU+SSD=∞ (Japanese)

解析系クエリ実行時のデータフロー (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へ転送

検索条件にマッチ しない行を削除

Page 19: SQL+GPU+SSD=∞ (Japanese)

解析系クエリ実行時のデータフロー (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

Page 20: SQL+GPU+SSD=∞ (Japanese)

解析系クエリ実行時のデータフロー (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

検索条件にマッチ しない行を削除

Page 21: SQL+GPU+SSD=∞ (Japanese)

解析系クエリ実行時のデータフロー (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へ転送

検索条件にマッチ しない行を削除

検索条件にマッチ しない行を削除

さらに 参照されない列も削除

Page 22: SQL+GPU+SSD=∞ (Japanese)

解析系クエリ実行時のデータフロー (3/3) – 鬼アレンジ版

PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞ 22

GPU SSD

CPU + RAM

PCI-E

Table

SQ

Lから自動生成した

G

PU命令セット

JOIN対象のテーブル

Page 23: SQL+GPU+SSD=∞ (Japanese)

解析系クエリ実行時のデータフロー (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対象のテーブル

Page 24: SQL+GPU+SSD=∞ (Japanese)

解析系クエリ実行時のデータフロー (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対象のテーブル

Page 25: SQL+GPU+SSD=∞ (Japanese)

解析系クエリ実行時のデータフロー (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結果を生成

Page 26: SQL+GPU+SSD=∞ (Japanese)

必要な要素技術

▌NVMeドライバへの NVIDIA GPUDirect 機能の追加

Linux kernel driverとnvidia driverの間でやり取りが必要…。

▌shared_bufferの利用率統計情報採取

テーブルの大半が既にオンメモリなら意味はないので。

▌shared_bufferのアクセスモード追加

SSDGPU Direct転送が終わるまでは誰も書き込んじゃダメ。

PG-Stromプロジェクトへの参加者

熱烈歓迎大募集中

PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞ 26

Page 27: SQL+GPU+SSD=∞ (Japanese)

乞うご期待。