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
240
[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
0
180
チームトポロジーの4つのチームタイプ
ham0215
1
21
生成AI活用でエンジニア組織はどう変わったのか?
ham0215
2
89
メンバーがオーナーシップを発揮しやすいチームづくり
ham0215
2
460
Platform Engineeringのエッセンスを小規模な開発組織に取り入れた事例紹介
ham0215
9
1.7k
開発者の定量・定性データを組み合わせて開発者体験を把握するための取り組み
ham0215
5
2.2k
アジャイルを始めるための基礎を固める
ham0215
1
110
開発者体験を意識した開発チームの生産性向上の取り組み
ham0215
3
980
MySQLのViewを活用した安全なマルチテナントの実現方法
ham0215
2
1.2k
Other Decks in Technology
See All in Technology
eBPF-based Process Lifecycle Monitoring
yukinakanaka
1
140
なぜ「Event Sourcing」を選択したのか〜事実に基づくことの重要性〜/Why did we choose "Event Sourcing"?
bitkey
1
240
きのこカンファレンス_ランチスポンサーセッション
kabaya
1
410
SLI/SLO・ラプソディあるいは組織への適用の旅
nwiizo
1
410
やっぱり余白が大切だった話
kakehashi
PRO
7
2.8k
Kubernetesを手元で学ぼう! 初心者向けローカル環境のススメ
nayaaaa
PRO
2
790
心に火を灯すヒントは自分の中にある/The clue to lighting a fire in your heart is within you.
bitkey
1
120
OCI Oracle Database Services新機能アップデート(2024/12-2025/02)
oracle4engineer
PRO
2
140
Cline を知ると世界が広がった(だが、俺は Claude for Desktop で行く)
nassy20
3
170
実践的なバグバウンティ入門 (2025年版)
scgajge12
4
840
クラウド脆弱性の傾向とShisho Cloudの活用
rvirus0817
0
110
いまから始めるAWS CDK 〜モダンなインフラ構築入門〜/iac-night-cdk-introduction
tomoki10
8
2.2k
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
349
20k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
420
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
The Cost Of JavaScript in 2023
addyosmani
48
7.5k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Being A Developer After 40
akosma
89
590k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
4
470
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.3k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
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に期待!!