Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PG-Stromの性能評価レポート~ Star Schema Benchmark を例に~ /...

sakaik
March 16, 2024

PG-Stromの性能評価レポート~ Star Schema Benchmark を例に~ / pgstrom_ssb_report_2024

2024年3月15日に 東京・大崎で開催した『 「GPUを活用したビッグデータ分析基盤を構築しよう」PG-Strom v5リリース記念』イベントでの 表記発表資料です。

イベントURL:
https://bakusokudb.connpass.com/event/311268/

sakaik

March 16, 2024
Tweet

More Decks by sakaik

Other Decks in Technology

Transcript

  1. PG-Stromの性能評価レポート ~ Star Schema Benchmark を例に~ 2024/03/15 有限会社アートライ 坂井 恵

    「GPUを活用したビッグデータ分析基盤を構築しよう」 PG-Strom v5リリース記念イベント
  2. 自己紹介 • 坂井 恵(さかいけい) • 有限会社アートライ • 日本仮想化技術株式会社「爆速DB Powered by

    PG-Strom 」チームに参画中 「爆速DBイメージキャラクタ-(非公認)」 爆速DBのアイキャッチ欲しいよね 「データベース」で「爆速」なイメー ジで、そうそう「PostgreSQL」のエク ステンションなのでぞうさんも! by Sak-AI
  3. Star Schema Benchmarkのテーブル lineorder --------------------------- lo_orderkey | numeric lo_linenumber |

    integer lo_custkey | numeric lo_partkey | integer lo_suppkey | numeric lo_orderdate | integer lo_orderpriority | character(15) lo_shippriority | character(1) lo_quantity | numeric lo_extendedprice | numeric lo_ordertotalprice | numeric lo_discount | numeric lo_revenue | numeric lo_supplycost | numeric lo_tax | numeric lo_commit_date | character(8) lo_shipmode | character(10) customer --------------------------- c_custkey | numeric c_name | character varying(25) c_address | character varying(25) c_city | character(10) c_nation | character(15) c_region | character(12) c_phone | character(15) c_mktsegment | character(10) date1 --------------------------- d_datekey | integer d_date | character(18) d_dayofweek | character(12) d_month | character(9) d_year | integer d_yearmonthnum | numeric d_yearmonth | character(7) d_daynuminweek | numeric d_daynuminmonth | numeric d_daynuminyear | numeric d_monthnuminyear | numeric d_weeknuminyear | numeric d_sellingseason | character(12) d_lastdayinweekfl | character(1) d_lastdayinmonthfl | character(1) d_holidayfl | character(1) d_weekdayfl | character(1) part --------------------------- p_partkey | integer p_name | character varying(22) p_mfgr | character(6) p_category | character(7) p_brand1 | character(9) p_color | character varying(11) p_type | character varying(25) p_size | numeric p_container | character(10) supplier --------------------------- s_suppkey | numeric s_name | character(25) s_address | character varying(25) s_city | character(10) s_nation | character(15) s_region | character(12) s_phone | character(15)
  4. (参考)ssbデータ生成時の与パラメタと件数の対応 TABLE s10 s20 s50 s100 s200 s400 customer 300,000

    600,000 1,500,000 3,000,000 6,000,000 12,000,000 date1 2,556 2,556 2,556 2,556 2,556 2,556 part 800,000 1,000,000 1,200,000 1,400,000 1,600,000 1,800,000 supplier 100,000 200,000 500,000 1,000,000 2,000,000 4,000,000 lineorder 59,986,052 119,994,608 300,005,811 600,037,902 1,200,018,434 2,400,012,063 データ件数 lineorder生成時間 約30分 約65分 lineorderサイズ(¥d+) 175GB 350GB
  5. (参考)ssbデータ生成時の与パラメタと件数の対応 TABLE s10 s20 s50 s100 s200 s400 customer 300,000

    600,000 1,500,000 3,000,000 6,000,000 12,000,000 date1 2,556 2,556 2,556 2,556 2,556 2,556 part 800,000 1,000,000 1,200,000 1,400,000 1,600,000 1,800,000 supplier 100,000 200,000 500,000 1,000,000 2,000,000 4,000,000 lineorder 59,986,052 119,994,608 300,005,811 600,037,902 1,200,018,434 2,400,012,063 データ件数
  6. Star Schema Benchmark 概要まとめ • lineorderテーブルを中心とする 5つのテーブル • Q1_1 から

    Q4_3 までの13個のクエリ • データ生成時のパラメタで件数を調整できるが、 今回は、lineorderが24億件のデータセットで実施
  7. 今回の Star Schema Benchmark実施条件 • CPU: AMD EPYC 7443 24-Core

    Processor (24 cores/48 Processsors) • OS : Red Hat Enterprise Linux release 8.8 (Ootpa) • Memory : 131,330,728 kB • GPU : NVIDIA A100 80GB PCIe (6,912 Cuda cores) • CUDA Version : 12.3 • PostgreSQL Version : 16.1
  8. Star Schema Benchmark実施結果 (s=400) PG-Strom async=18 0 10 20 30

    40 50 60 70 80 90 Q1_1 Q1_2 Q1_3 Q2_1 Q2_2 Q2_3 Q3_1 Q3_2 Q3_3 Q3_4 Q4_1 Q4_2 Q4_3 (sec) ssbm処理時間 s=400 CPU(青) vs GPU(橙) (async=18) x3.30 x3.29 x3.28 x3.15 x2.54 x2.89 x2.31 x3.25 x3.26 x3.22 x4.62 x3.49 x3.71
  9. Star Schema Benchmark • 前のページの結果はPG-Stromのpg_strom.max_async_task パラ メタの値を "18" に設定して実施したもの(これが最適値だった) •

    pg_strom.max_async_task パラメタ値により速度は変化(環境に依存) • 例として pg_strom.max_async_task = 12 で実施した結果を次 ページに示す
  10. Star Schema Benchmark実施結果 (s=400) 0 10 20 30 40 50

    60 70 80 90 Q1_1 Q1_2 Q1_3 Q2_1 Q2_2 Q2_3 Q3_1 Q3_2 Q3_3 Q3_4 Q4_1 Q4_2 Q4_3 (sec) ssbm s=400 CPU avg. GPU avg. x2.39 x2.40 x2.40 x2.18 x1.93 x2.15 x2.15 x2.26 x2.38 x2.38 x3.27 x2.86 x2.89 PG-Strom async=12
  11. Star Schema Benchmark実施結果 (s=400) PG-Strom async=18 0 10 20 30

    40 50 60 70 80 90 Q1_1 Q1_2 Q1_3 Q2_1 Q2_2 Q2_3 Q3_1 Q3_2 Q3_3 Q3_4 Q4_1 Q4_2 Q4_3 (sec) ssbm s=400 CPU vs GPU(async=18) x3.30 x3.29 x3.28 x3.15 x2.54 x2.89 x2.31 x3.25 x3.26 x3.22 x4.62 x3.49 x3.71 再掲
  12. (参考) s10~s400 results (処理時間) (unit. ms) 0 1,000 2,000 3,000

    4,000 ssbm on Shachi s=10 CPU avg. GPU avg. 0 2,000 4,000 6,000 8,000 10,000 12,000 ssbm on Shachi s=50 CPU avg. GPU avg. 0 1,000 2,000 3,000 4,000 5,000 ssbm on Shachi s=20 CPU avg. GPU avg. 0 10,000 20,000 30,000 40,000 50,000 ssbm on Shachi s=200 CPU avg. GPU avg. 0 5,000 10,000 15,000 20,000 ssbm on Shachi s=100 CPU avg. GPU avg. 0 20,000 40,000 60,000 80,000 100,000 ssbm on Shachi s=400 CPU avg. GPU avg.
  13. 件数増大に伴うCPU/GPU処理時間変化 → ssb計測に於いて、PG-Strom(GPU)では、件数の増大に伴う処理 時間がリニアとなる 0 10 20 30 40 50

    60 70 0 50 100 150 200 250 300 350 400 450 データサイズごとの処理時間比(CPU) Q1_1 Q1_2 Q1_3 Q2_1 Q2_2 Q2_3 Q3_1 Q3_2 Q3_3 Q3_4 Q4_1 Q4_2 Q4_3 0 5 10 15 20 25 30 35 40 45 0 50 100 150 200 250 300 350 400 450 データサイズごとの処理時間比(GPU) Q1_1 Q1_2 Q1_3 Q2_1 Q2_2 Q2_3 Q3_1 Q3_2 Q3_3 Q3_4 Q4_1 Q4_2 Q4_3 s=10での実施結果を 1.0 とした場合の処理時間の比率 (横軸:sパラメタ値) (sec) (sec)
  14. (付録)PG-Stromパッケージを使用したssb実施方法 • PG-Stromのソースコードを取得 • https://github.com/heterodb/pg-strom • pg-strom/test/ssbm に移動し、データ生成ツールを make •

    → dbgen-ssbm ツールの実行ファイルが生成される • PostgreSQL上に ssb DBとテーブル群を作成 • $ createdb -Upostgres ssb --tablespace=XXXX • $ psql -Upostgres ssb -f ./ssbm-ddl.sql • データを生成 • ベンチマーク実行 • $ ./run-ssbm.sh ssb またはユーザ名を指定する場合は、 • $ ./run-ssbm.sh "-Upostgres ssb" • 結果ログ確認 • ~/ssbm-logs/ に出力されたログを確認する • explain の結果とクエリ実施結果が出力されます time echo "¥¥copy customer FROM PROGRAM './dbgen-ssbm -Tc -X -s 100' DELIMITER '|';" | psql -Upostgres ssb time echo "¥¥copy date1 FROM PROGRAM './dbgen-ssbm -Td -X -s 100' DELIMITER '|';" | psql -Upostgres ssb time echo "¥¥copy part FROM PROGRAM './dbgen-ssbm -Tp -X -s 100' DELIMITER '|';" | psql -Upostgres ssb time echo "¥¥copy supplier FROM PROGRAM './dbgen-ssbm -Ts -X -s 100' DELIMITER '|';" | psql -Upostgres ssb time echo "¥¥copy lineorder FROM PROGRAM './dbgen-ssbm -Tl -X -s 100' DELIMITER '|';" | psql -Upostgres ssb ログファイル例: log_strom_*_20240315a.txt log_pgsql_*_20240315a.txt log_strom_*_20240315b.txt log_pgsql_*_20240315b.txt log_strom_*_20240315c.txt log_pgsql_*_20240315c.txt