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と過ごす1日〜全業務フローにAIを組み込む実践ガイド〜
ham0215
0
82
生成AIによる生産性向上〜テック企業やファインディの活用事例〜
ham0215
1
89
生成AI導入の効果を最大化する データ活用戦略
ham0215
0
470
データ駆動経営の道しるべ:プロダクト開発指標の戦略的活用法
ham0215
2
440
開発組織における意思決定の実例〜開発優先度・組織構成・ツール導入〜
ham0215
0
97
エンジニアリングで組織のアウトカムを最速で最大化する!
ham0215
1
480
アウトカムを最速で最大化できる開発組織にするために
ham0215
1
200
コード品質向上で得られる効果と実践的取り組み
ham0215
2
370
開発者体験を定量的に把握する手法と活用事例
ham0215
2
340
Other Decks in Technology
See All in Technology
猫でもわかるKiro CLI(セキュリティ編)
kentapapa
0
120
私たち準委任PdEは2つのプロダクトに挑戦する ~ソフトウェア、開発支援という”二重”のプロダクトエンジニアリングの実践~ / 20260212 Naoki Takahashi
shift_evolve
PRO
2
210
22nd ACRi Webinar - 1Finity Tamura-san's slide
nao_sumikawa
0
110
StrandsとNeptuneを使ってナレッジグラフを構築する
yakumo
1
130
登壇駆動学習のすすめ — CfPのネタの見つけ方と書くときに意識していること
bicstone
3
130
今こそ学びたいKubernetesネットワーク ~CNIが繋ぐNWとプラットフォームの「フラッと」な対話
logica0419
5
510
1,000 にも届く AWS Organizations 組織のポリシー運用をちゃんとしたい、という話
kazzpapa3
0
180
CDK対応したAWS DevOps Agentを試そう_20260201
masakiokuda
1
430
We Built for Predictability; The Workloads Didn’t Care
stahnma
0
150
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
1.7k
Embedded SREの終わりを設計する 「なんとなく」から計画的な自立支援へ
sansantech
PRO
3
2.6k
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
1.1k
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
160
How to build a perfect <img>
jonoalderson
1
4.9k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
320
We Are The Robots
honzajavorek
0
170
Everyday Curiosity
cassininazir
0
130
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
260
Fireside Chat
paigeccino
41
3.8k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.4k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
110
The Invisible Side of Design
smashingmag
302
51k
Marketing to machines
jonoalderson
1
4.7k
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に期待!!