2. The PG-Strom Project
自己紹介
Database Lounge Tokyo #2 - An Intelligent Storage?2
▌海外 浩平 (tw: @kkaigai)
▌PostgreSQL開発者 (約10年くらい)
▌元々は Linux kernel 開発者でも。
▌PG-Stromの開発をやっています。
GPU使ってPostgreSQLを早くする拡張モジュール
最近、SSDにも手を出し始める (NEW!!)
最近の興味
3. The PG-Strom Project
PG-Strom “v2.0” 新機能 – SSD-to-GPU Direct SQL
Database Lounge Tokyo #2 - An Intelligent Storage?
▌Challenges
PostgreSQLのストレージ層に対する完全な透過性
shared_buffer、filesystem、page cacheとのconsistencyが必要
▌PG-Strom v2.0に向けて
NVMe-SSDGPU Direct DMAに対応したLinux kernelドライバ
当該機能のPG-Strom側での対応(GpuScan、GpuJoin、GpuPreAggが対象)
I/Oが完了したら、既にSelection、Projection、Join、Aggregation処理が済んでいる
GPU SSD
CPU + RAM
PCI-E
Table
Innertables
ofJOIN
+
③ Make result
set on GPU
① SSDGPU
direct DMA
② Execution of SQL on GPU
(Select, Projection, Join)
④ GPURAM
Data Transfer
New
Data flow
v2.0
traditional
data flow
3
15. The PG-Strom Project
参考) 測定に使用したテーブル定義、クエリ
Database Lounge Tokyo #2 - An Intelligent Storage?
CREATE TABLE t_64g (id int not null,
x float not null,
y float not null,
z float not null,
memo text);
INSERT INTO t_64g (SELECT x, random()*1000, random()*1000,
random()*1000, md5(x::text)
FROM generate_series(1,700000000) x);
postgres=# ¥d+
List of relations
Schema | Name | Type | Owner | Size | Description
--------+------------------+-------+--------+---------+-------------
public | t | table | kaigai | 965 MB |
public | t_64g | table | kaigai | 66 GB |
Query-1) 比較的単純な条件句を含むスキャンクエリ
SELECT * FROM t WHERE x BETWEEN y-2 AND y+2;
Query-2) 比較的複雑な条件句を含むスキャンクエリ
SELECT * FROM t_64g WHERE sqrt((x-200)^2 + (y-300)^2 +
(z-400)^2) < 10;
Query-3) 文字列マッチングを含むスキャンクエリ
SELECT * FROM t WHERE memo LIKE '%abcd%';
15
16. The PG-Strom Project
PCI-E
CPUから見た光景
Database Lounge Tokyo #2 - An Intelligent Storage?
周辺機器
【周辺機器への要求】
SSDのセクタ番号100~199を
読み出して、その中から、
x LIKE ‘%hoge%’
を満たすレコードだけを返し
てほしい。
オイラはPostgreSQLの
データ形式を解釈して
レコードを評価するよ 拙者、セクタ番号
100~199を
読み出すでござる。
b c xa
abchoge
xyhogez
hoge
hogehoge
:
:
:
実行結果
▌SSDとGPUのペアを、PCI-Eバスの先に繋がった一つのストレージシステムと
見なせば、SQL由来のバイナリをGPUで実行、前処理を行う。
あたかもストレージがSQLを理解して動作するかのように見える。
16
キタ━━━━(゚∀゚)━━━━!!!!
17. The PG-Strom Project
【拡散希望】 – ユーザを探しています。
Database Lounge Tokyo #2 - An Intelligent Storage?17
▌試用ユーザ募集中
GPUを活用した高速 In-database Analytics/Computing に興味のある方。
教師なし学習アルゴリズム (非階層/階層型クラスタリング) を実装し、実データによる
評価を行いたい。
評価環境の提供と、アルゴリズムの実装はPG-Stromプロジェクトで実施。
ワークロードと評価用データをご提供いただける方を探しています。
評価環境: CPU: E5-2670v3 x2, RAM: 384GB, GPU: Tesla K20 or GTX1080
CREATE FUNCTION kmeans(matrix, int)
RETURNS vector
AS $$
$$ LANGUAGE ‘plcuda’;
User define CUDA logic
(通常のSQL関数として記述可能)
User defined
CUDA code
PG-Strom’s matrix
support routines
GPU Kernel for
SQL function
‘kmeans()’
実行時ビルド
PG-Strom
Input
buffer
Output
buffer
SQL関数実行結果
matrixのロード
ユーザCUDAロジックの定義:
18. The PG-Strom Project
今後の展望
Database Lounge Tokyo #2 - An Intelligent Storage?
PostgreSQL, being the top runner of heterogeneous era
NVMe-Strom
SSDGPUの
ダイレクトDMA
PG-Strom
SQLワークロードの
“超”並列実行
WHERE句
JOIN
GROUP BY
PROJECTION
設計・開発中(?)
トランザクション
ログの高速書き出し
PL/CUDA
HPC水準の計算能力による
In-database Analytics
18
チョットオマケ
19. The PG-Strom Project
Block Device Driver
一般的なトランザクションログの書き出し
Database Lounge Tokyo #2 - An Intelligent Storage?19
Storage Controller
DMA Buffer
FilesystemPage Cache
PostgreSQLWAL Buffer
File + offset, length Get Block Numbers
write(2)
Submit DMA Requests
Transaction Logs
fsync(2)
20. The PG-Strom Project
Block Device
Driver
アイデア: Zero-copy WAL write with NVMe-SSD
Database Lounge Tokyo #2 - An Intelligent Storage?20
Storage Controller
Filesystem
PostgreSQLWAL Buffer
Get Block Numbers
Submit DMA Requests
Transaction Logs
Enqueue DMA Requests
ioctl(2)
DMA Buffer
KaiGai’s
Kernel
Module
ioctl
handler
WRITE & FLUSH
commands
make it persistent
21. The PG-Strom Project
NVMe-SSDはいいぞ。
Database Lounge Tokyo #2 - An Intelligent Storage?21
pgbench使用。スケールファクタ=1024、クライアント数を1~1000まで増加。3回の中央値。
CPU: E5-2670v3 (22C, 2.3GHz)、RAM: 384GB
SSD: Intel SSD 750 (400GB)
HDD: SAS 300GB (10krpm; RAID5 x8)
22. The PG-Strom Project
更なる性能向上はあり得るか?
Database Lounge Tokyo #2 - An Intelligent Storage?22
トランザクションログ書き出しの有無で 50% の性能差
では、もしトランザクションログ書き出しの性能(レイテンシ)を限りなく 0 に近付ける
事ができたら?
何か面白そうな事ができそうな気がします。:-)