Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
[After RubyKaigi]クリスマスを待たずに Rust版YJITの実力を検証
Search
ham
September 27, 2022
Technology
0
180
[After RubyKaigi]クリスマスを待たずに Rust版YJITの実力を検証
After RubyKaigi 2022〜メドピア、ZOZO、Findyの参加者がLTします〜
の発表資料です。
https://findy.connpass.com/event/260097/
ham
September 27, 2022
Tweet
Share
More Decks by ham
See All by ham
開発パフォーマンスを最大化するための開発体制
ham0215
7
1.3k
今こそ思い出すGraphQLの特徴
ham0215
0
70
DevOpsメトリクスとアウトカムの接続にトライ!開発プロセスを通して計測できるメトリクスの活用方法
ham0215
2
280
CIは5分以内!素早い開発サイクルを支えるCI
ham0215
0
2.7k
現場主導で取り組む継続的な技術的負債の解消
ham0215
4
4.1k
可視化からはじめる開発生産性向上への道のり
ham0215
0
330
GraphQL データ取得高速化
ham0215
0
270
キーボードのすゝめ.pdf
ham0215
0
110
イージーからシンプルへ 〜プロダクトの成長に合わせたアーキテクチャの変更〜
ham0215
0
3.4k
Other Decks in Technology
See All in Technology
テストコードを書きながらCompose Multiplatformを乗りこなす
subroh0508
0
140
PHP 9 に備えよ - 動的プロパティ、どうすればいぃ?
taisukearase
0
210
データ基盤を支える技術
chanyou0311
5
2.9k
RailsConf 2024 Keynote "Startups on Rails in 2024"
irinanazarova
0
770
AI JIMY - 登壇(インストール編)
hanacchi
0
150
多言語化対応における TypeScript の型定義を通して開発のしやすさについて考えた / TSKaigi TypeScript Multilingualization
nabeliwo
2
380
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
9
37k
シンプルなHITL機械学習と様々なタスクにおけるHITL機械学習
naohachi89
0
310
Deno で作る快適な “as Code” プラットフォーム – TSKaigi 2024
pizzacat83
4
310
AWS Observability 関連最新アップデート
o11yfes2023
0
100
RubyKaigi 2024 - Make Your Own Regex Engine!
makenowjust
0
120
拓展QA日常工作的邊界
line_developers_tw
PRO
0
550
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
126
32k
Optimizing for Happiness
mojombo
370
69k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
123
39k
Happy Clients
brianwarren
92
6.4k
Practical Orchestrator
shlominoach
183
9.8k
Automating Front-end Workflow
addyosmani
1357
200k
BBQ
matthewcrist
80
8.8k
What the flash - Photography Introduction
edds
64
11k
GraphQLとの向き合い方2022年版
quramy
33
13k
Designing for humans not robots
tammielis
247
25k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
8
3.5k
Designing for Performance
lara
601
67k
Transcript
None
クリスマスを待たずに Rust版YJITの実力を検証 ファインディ 浜田直人
自己紹介 【略歴】 SIerとして様々なプロジェクトを経験したのち、1つの事業に 専念するためにWeb系の事業会社へ。 その後、スタートアップでプロダクトの立ち上げを経験して、 2022年5月にファインディに参画。 現在は、Findy Teamsのフロント&バックエンド開発を担当。 浜田 直人
ファインディ株式会社 @hamchance0215
RubyKaigi初参加でした! 久しぶりのオフラインイベント、夜な夜な飲めてRuby漬けの3日 間でとても楽しかったです! RubyKaigi 2022、お疲れ様でした!! 右上の写真は @kiwatchi1991 さんの写真をお借りました。ありがとうございます https://twitter.com/kiwatchi1991/status/1568256669284724736?s=46&t=kypvW77-pwwv2IphSpm3FA
RubyKaigi 2022、お疲れ様でした!! 様々なセッションがありましたが YJIT 掘り下げてみようと思います。
YJITの復習 • Ruby2.6で追加されたMJITと別にShopifyが開発。 • Ruby3.1で追加されたがx86でしか動かなかった。 ◦ Ruby3.2でARMでも動作するようになった! ◦ Ruby3.2でRustでリビルド!
YJITの復習 • Ruby2.6で追加されたMJITと別にShopifyが開発。 • Ruby3.1で追加されたがx86でしか動かなかった。 ◦ Ruby3.2でARMでも動作するようになった! ◦ Ruby3.2でRustでリビルド! RubyKaigi中(9/9)にリリースされた
Ruby 3.2.0 preview2で触ることができる!!
パフォーマンス検証 • プロダクトで使われている処理をピックアップ ◦ Read系のリクエスト ◦ Read+Writeするジョブ • 比較するRubyバージョン ◦
3.1.2 ◦ 3.2.0preview2 ◦ 3.2.0preview2 + YJIT 本当はRuby3.1系のYJITも試 したかったが手元の検証環境 がM1 Macなのでパス・・・
• 検証環境 ◦ Macbook pro(M1) ◦ Docker Desktop ◦ docker
hubのRuby公式イメージを一部カスタマイ ズして利用 ▪ RustをインストールしてRubyをbuild パフォーマンス検証
RubyKaigiのセッションで予習済み! https://speakerdeck.com/hsbt/why-is-building-the-ruby-environment-hard Why is building the Ruby environment hard? この他にも環境構築
でハマりやすいポイ ントが紹介されてい たので要チェックで す!
# 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抜粋
• Benchmarkで実行時間を測定 • Stackprofで時間がかかっている処理を特定 ◦ A sampling call-stack profiler for
Ruby. ◦ https://github.com/tmm1/stackprof ◦ デフォルト設定で実行(sampling mode: wall) パフォーマンス検証
Read系のリクエスト Benchmarkで100回測定した平均値 Ruby 実行時間(秒) 3.1.2 0.06445552 3.2.0 preview2 0.11893397 3.2.0
preview2 +yjit 0.10481816 3.1.2 >>>> 3.2.0 +yjit > 3.2.0
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 も試したが傾向の差異は 見られず
Read+Writeするジョブ Benchmarkで100回測定した平均値 Ruby 実行時間(秒) 3.1.2 2.0178659 3.2.0 preview2 2.7322675 3.2.0
preview2 +yjit 2.4381335 3.1.2 >>>> 3.2.0 +yjit >> 3.2.0
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 こちらも重い処理は同じ傾向だが全体的に重くなっている? 🤔
結果 3.1.2 >>>> 3.2.0 preview2 +yjit >> 3.2.0 preview2
結果 3.1.2 >>>> 3.2.0 preview2 +yjit >> 3.2.0 preview2 YJITが有効になっている方が速い
のでYJITは高速化に寄与している ことがわかる!!
結果 3.1.2 >>>> 3.2.0 preview2 +yjit >> 3.2.0 preview2 3.1.2より3.2.0
preview2は遅い。 今回比較した処理では結構差が出た。
結果 • Ruby3.2でYJIT有無で比較するとYJITを有効にした方 が速い。 ◦ YJITによって高速化されている!! • Ruby3.1と比較するとRuby3.2は遅い。 ◦ まだpreview版なので今後に期待!!
結果 • Ruby3.2でYJIT有無で比較するとYJITを有効にした方 が速い。 ◦ YJITによって高速化されている!! • Ruby3.1と比較するとRuby3.2は遅い。 クリスマスにリリースされるであろう Ruby3.2.0に期待!!