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
260
データ駆動経営の道しるべ:プロダクト開発指標の戦略的活用法
ham0215
2
360
開発組織における意思決定の実例〜開発優先度・組織構成・ツール導入〜
ham0215
0
74
エンジニアリングで組織のアウトカムを最速で最大化する!
ham0215
1
390
アウトカムを最速で最大化できる開発組織にするために
ham0215
1
110
コード品質向上で得られる効果と実践的取り組み
ham0215
2
310
開発者体験を定量的に把握する手法と活用事例
ham0215
2
280
チームトポロジーの4つのチームタイプ
ham0215
2
72
生成AI活用でエンジニア組織はどう変わったのか?
ham0215
3
220
Other Decks in Technology
See All in Technology
JTCにおける内製×スクラム開発への挑戦〜内製化率95%達成の舞台裏/JTC's challenge of in-house development with Scrum
aeonpeople
0
210
ハードウェアとソフトウェアをつなぐ全てを内製している企業の E2E テストの作り方 / How to create E2E tests for a company that builds everything connecting hardware and software in-house
bitkey
PRO
1
130
大「個人開発サービス」時代に僕たちはどう生きるか
sotarok
20
9.9k
ガチな登山用デバイスからこんにちは
halka
1
240
下手な強制、ダメ!絶対! 「ガードレール」を「檻」にさせない"ガバナンス"の取り方とは?
tsukaman
2
440
La gouvernance territoriale des données grâce à la plateforme Terreze
bluehats
0
170
roppongirb_20250911
igaiga
1
220
ChatGPTとPlantUML/Mermaidによるソフトウェア設計
gowhich501
1
130
Automating Web Accessibility Testing with AI Agents
maminami373
0
1.2k
要件定義・デザインフェーズでもAIを活用して、コミュニケーションの密度を高める
kazukihayase
0
110
LLMを搭載したプロダクトの品質保証の模索と学び
qa
0
1k
CDK CLIで使ってたあの機能、CDK Toolkit Libraryではどうやるの?
smt7174
4
160
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
3.4k
The Pragmatic Product Professional
lauravandoore
36
6.9k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
The Cult of Friendly URLs
andyhume
79
6.6k
The Art of Programming - Codeland 2020
erikaheidi
56
13k
Building Adaptive Systems
keathley
43
2.7k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
520
The Straight Up "How To Draw Better" Workshop
denniskardys
236
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に期待!!