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
250
[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
生成AI導入の効果を最大化する データ活用戦略
ham0215
0
300
データ駆動経営の道しるべ:プロダクト開発指標の戦略的活用法
ham0215
2
380
開発組織における意思決定の実例〜開発優先度・組織構成・ツール導入〜
ham0215
0
76
エンジニアリングで組織のアウトカムを最速で最大化する!
ham0215
1
410
アウトカムを最速で最大化できる開発組織にするために
ham0215
1
120
コード品質向上で得られる効果と実践的取り組み
ham0215
2
320
開発者体験を定量的に把握する手法と活用事例
ham0215
2
290
チームトポロジーの4つのチームタイプ
ham0215
2
110
生成AI活用でエンジニア組織はどう変わったのか?
ham0215
3
230
Other Decks in Technology
See All in Technology
業務効率化をさらに加速させる、ノーコードツールとStep Functionsのハイブリッド化
smt7174
2
140
ビズリーチ求職者検索におけるPLMとLLMの活用 / Search Engineering MEET UP_2-1
visional_engineering_and_design
1
120
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.2k
技育祭2025【秋】 企業ピッチ/登壇資料(高橋 悟生)
hacobu
PRO
0
100
ガバメントクラウドの概要と自治体事例(名古屋市)
techniczna
2
240
Simplifying Cloud Native app testing across environments with Dapr and Microcks
salaboy
0
150
20251014_Pythonを実務で徹底的に使いこなした話
ippei0923
0
190
『バイトル』CTOが語る! AIネイティブ世代と切り拓くモノづくり組織
dip_tech
PRO
1
120
データ戦略部門 紹介資料
sansan33
PRO
1
3.7k
スタートアップにおけるこれからの「データ整備」
shomaekawa
2
470
やる気のない自分との向き合い方/How to Deal with Your Unmotivated Self
sanogemaru
0
500
GoでもGUIアプリを作りたい!
kworkdev
PRO
0
140
Featured
See All Featured
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.7k
Designing Experiences People Love
moore
142
24k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
20
1.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
53k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Why Our Code Smells
bkeepers
PRO
340
57k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
45
2.5k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.2k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
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に期待!!