Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

SQL+GPU+SSD=∞ (Japanese)

8,960 views

Published on

PostgreSQL Conference Japan 2015 (2015年11月27日 @品川) でのライトニングトークセッションでのスライド。

Published in: Software
  • Login to see the comments

SQL+GPU+SSD=∞ (Japanese)

  1. 1. SQL+GPU+SSD=∞ かぴばら@品川
  2. 2. 自己紹介 ▌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
  3. 3. 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
  4. 4. 対応ワークロード – 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
  5. 5. 次のターゲットは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を高速化しようというのか?
  6. 6. お断り。 今からご紹介する話は、 現在のところ実装アイデアです。 ......これから頑張って作りますよ。 PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞6
  7. 7. 大雑把な x86 ハードウェアの構成 PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞7 GPU SSD CPU + RAM CPU + RAM PCI-E SAS この辺で悩む事が多い 
  8. 8. 説明のため図を単純化します PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞8 GPU SSD CPU + RAM PCI-E 同じストレージという事で。
  9. 9. 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
  10. 10. 解析系クエリ実行時のデータフロー ① ストレージ  CPU/RAMへデータをロード PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞10 GPU SSD CPU + RAM PCI-E Table
  11. 11. 解析系クエリ実行時のデータフロー ① ストレージ  CPU/RAMへデータをロード ② 条件句で行をフィルタリング(Select) PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞11 GPU SSD CPU + RAM PCI-E Table
  12. 12. 解析系クエリ実行時のデータフロー ① ストレージ  CPU/RAMへデータをロード ② 条件句で行をフィルタリング(Select) ③ 参照されない列を除去(Projection) PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞12 GPU SSD CPU + RAM PCI-E Table
  13. 13.  CPUの仕事 解析系クエリ実行時のデータフロー ① ストレージ  CPU/RAMへデータをロード ② 条件句で行をフィルタリング(Select) ③ 参照されない列を除去(Projection) ④ 他のテーブルと結合(Join) PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞13 GPU SSD CPU + RAM PCI-E Table +
  14. 14. SSD-to-GPU Direct PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞14 CPU/RAMを介さずに SSDGPU間でデータ転送 同じ事が標準規格の NVMeでも可能!
  15. 15. 解析系クエリ実行時のデータフロー (1/3) – 基本パターン PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞15 GPU SSD CPU + RAM PCI-E Table SSD-to-GPU Direct
  16. 16. 解析系クエリ実行時のデータフロー (1/3) – 基本パターン PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞16 GPU SSD CPU + RAM PCI-E Table SQLから自動生成した GPU命令セット SSD-to-GPU Direct
  17. 17. 解析系クエリ実行時のデータフロー (1/3) – 基本パターン PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞17 GPU SSD CPU + RAM PCI-E Table SQLから自動生成した GPU命令セット SSD-to-GPU Direct 検索条件にマッチ しない行を削除
  18. 18. 解析系クエリ実行時のデータフロー (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へ転送 検索条件にマッチ しない行を削除
  19. 19. 解析系クエリ実行時のデータフロー (2/3) – アレンジ版 PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞19 GPU SSD CPU + RAM PCI-E Table SQLから自動生成した GPU命令セット SSD-to-GPU Direct
  20. 20. 解析系クエリ実行時のデータフロー (2/3) – アレンジ版 PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞20 GPU SSD CPU + RAM PCI-E Table SQLから自動生成した GPU命令セット SSD-to-GPU Direct 検索条件にマッチ しない行を削除
  21. 21. 解析系クエリ実行時のデータフロー (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へ転送 検索条件にマッチ しない行を削除 検索条件にマッチ しない行を削除 さらに 参照されない列も削除
  22. 22. 解析系クエリ実行時のデータフロー (3/3) – 鬼アレンジ版 PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞22 GPU SSD CPU + RAM PCI-E Table SQLから自動生成した GPU命令セット JOIN対象のテーブル
  23. 23. 解析系クエリ実行時のデータフロー (3/3) – 鬼アレンジ版 PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞23 GPU SSD CPU + RAM PCI-E Table SQLから自動生成した GPU命令セット SSD-to-GPU Direct JOIN対象のテーブル
  24. 24. 解析系クエリ実行時のデータフロー (3/3) – 鬼アレンジ版 PostgreSQL Conference Japan - LT: SQL+GPU+SSD=∞24 GPU SSD CPU + RAM PCI-E Table SQLから自動生成した GPU命令セット SSD-to-GPU Direct JOIN対象のテーブル
  25. 25. 解析系クエリ実行時のデータフロー (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結果を生成
  26. 26. 必要な要素技術 ▌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
  27. 27. 乞うご期待。

×