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

[After RubyKaigi]クリスマスを待たずに Rust版YJITの実力を検証

ham
September 27, 2022

[After RubyKaigi]クリスマスを待たずに Rust版YJITの実力を検証

After RubyKaigi 2022〜メドピア、ZOZO、Findyの参加者がLTします〜
の発表資料です。
https://findy.connpass.com/event/260097/

ham

September 27, 2022
Tweet

More Decks by ham

Other Decks in Technology

Transcript

  1. パフォーマンス検証 • プロダクトで使われている処理をピックアップ ◦ Read系のリクエスト ◦ Read+Writeするジョブ • 比較するRubyバージョン ◦

    3.1.2 ◦ 3.2.0preview2 ◦ 3.2.0preview2 + YJIT 本当はRuby3.1系のYJITも試 したかったが手元の検証環境 がM1 Macなのでパス・・・
  2. • 検証環境 ◦ Macbook pro(M1) ◦ Docker Desktop ◦ docker

    hubのRuby公式イメージを一部カスタマイ ズして利用 ▪ RustをインストールしてRubyをbuild パフォーマンス検証
  3. # Rustインストール RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs |

    sh -s -- -y ・・・ # --enable-yjit=devを追加 ./configure \ --enable-yjit=dev \ ・・・ ENV RUBY_YJIT_ENABLE=1 Dockerfile抜粋
  4. • Benchmarkで実行時間を測定 • Stackprofで時間がかかっている処理を特定 ◦ A sampling call-stack profiler for

    Ruby. ◦ https://github.com/tmm1/stackprof ◦ デフォルト設定で実行(sampling mode: wall) パフォーマンス検証
  5. Read系のリクエスト Stackprof Ruby SAMPLES (pct) FRAME 3.1.2 11039 (62.6%) Mysql2::Client#_query

    3.2.0 preview2 11909 (51.7%) Mysql2::Client#_query 3.2.0 preview2 +yjit 10572 (51.6%) Mysql2::Client#_query Mysql2::Client#_queryが重いのは同じ。 重い処理の傾向は同じなので、 3.2は全体的に重くなっている? 🤔 sampling mode: object も試したが傾向の差異は 見られず
  6. Read+Writeするジョブ Stackprof Ruby SAMPLES (pct) FRAME 3.1.2 13367 (74.4%) IO#wait_readable

    3096 (17.2%) Mysql2::Client#_query 3.2.0 preview2 12977 (65.8%) IO#wait_readable 4493 (22.8%) Mysql2::Client#_query 3.2.0 preview2 +yjit 13536 (59.3%) IO#wait_readable 4750 (20.8%) Mysql2::Client#_query こちらも重い処理は同じ傾向だが全体的に重くなっている? 🤔
  7. 結果 3.1.2 >>>> 3.2.0 preview2 +yjit >> 3.2.0 preview2 YJITが有効になっている方が速い

    のでYJITは高速化に寄与している ことがわかる!!
  8. 結果 3.1.2 >>>> 3.2.0 preview2 +yjit >> 3.2.0 preview2 3.1.2より3.2.0

    preview2は遅い。 今回比較した処理では結構差が出た。