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
ちょっといい感じの Ruby プロファイラがほしい (RubyKaigi 2023 follo...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
osyoyu
August 19, 2023
Technology
560
1
Share
ちょっといい感じの Ruby プロファイラがほしい (RubyKaigi 2023 follow up)
osyoyu
August 19, 2023
More Decks by osyoyu
See All by osyoyu
Wi-Fiはどこから来たのか Wi-Fiは何者か Wi-Fiはどこへ行くのか
osyoyu
0
430
もうちょっといいRubyプロファイラを作りたい (2025)
osyoyu
1
840
Profile and benchmark every change - RubyKaigi 2025
osyoyu
0
160
Regional.rb and the Tokyo Metropolis
osyoyu
0
280
都市伝説バスターズ「WebアプリのボトルネックはDBだから言語の性能は関係ない」 - Kaigi on Rails 2024
osyoyu
29
19k
プロファイラ開発者と見る「推測するな、計測せよ」 - YAPC::Hakodate 2024
osyoyu
7
1k
ZigでC拡張を作る 2024 Edition
osyoyu
1
140
Rubyのパフォーマンスプロファイリングの改善 / Enhancing performance profiling for Ruby
osyoyu
2
1.1k
RubyKaigi Decks
osyoyu
0
240
Other Decks in Technology
See All in Technology
新規ゲーム開発におけるAI駆動開発のリアル
202409e2
0
2.5k
価格.comをAI駆動で全面刷新する ー 30年分の技術的負債を返し、次の30年の土台をつくる ー / AI Engineering Summit Tokyo 2026
tkyowa
49
52k
AIにフローを作らせようとして挫折した話
hamatsutaichi
0
190
Databricks における 生成AIガバナンスの実践
taka_aki
1
310
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development with AI-DLC
yoshidashingo
0
140
美味しいスイスチーズを作ろう🧀🐭
taigamikami
1
240
先取りMaven4 ~16年ぶりのメジャーアップデート、その進化とは?~
ogiwarat
0
140
JEP 522 Deep Dive - G1 GC同期コスト削減によるスループット向上を徹底検証&解説
tabatad
1
840
Building applications in the Gemini API family.
line_developers_tw
PRO
0
1.5k
Agentic ERPをどう設計するか ー 受発注エージェントを動かす、現場の知見と設計思想ー
recerqainc
1
1.5k
チームで実践する AI-DLC 思考の軌跡を残すチェックポイント設計
belongadmin
0
2.6k
AI活用を推進するために ファインディが下した、一つの小さな決断
starfish719
0
250
Featured
See All Featured
Statistics for Hackers
jakevdp
799
230k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
350
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
190
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Docker and Python
trallard
47
3.9k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
Color Theory Basics | Prateek | Gurzu
gurzu
0
350
Typedesign – Prime Four
hannesfritz
42
3.1k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
530
Transcript
Daisuke Aritomo (@osyoyu) / RubyKaigi 2023 follow-up ͪΐͬͱ͍͍ײ͡ͷ Ruby ϓϩϑΝΠϥ͕΄͍͠
pp @osyoyu • /^͓͠ΐ[͏ʔ]Ώ/ • ࠷ۙͷඪ: ւۭͷ੍ • ۙگ: ٿͷ70%ΛΞϯϩοΫ͠·ͨ͠
• ۭΛͲ͏߈ུ͢Δ͔ߟ͍͑ͯ·͢ • ඈߦػ͔ɺϋϯάάϥΠμʔతͳͷ͔
Daisuke Aritomo (@osyoyu) / RubyKaigi 2023 follow-up ͪΐͬͱ͍͍ײ͡ͷ Ruby ϓϩϑΝΠϥ͕΄͍͠
l؍͕ͦ͜ɺͯ͢ͷൃݟͷ伴Ͱ͋Δɻz
$IBU(15͕Τδιϯͷͷͱͯ͠հͨ͠ɺ͓ͦΒ࣮͘ࡏ͠ͳ͍֨ݴ l؍͕ͦ͜ɺͯ͢ͷൃݟͷ伴Ͱ͋Δɻz
͓͞Β͍: Ϟνϕʔγϣϯ • ISUCON Ͱ༏উ͢ΔͨΊʹɺRuby ϓϩάϥϜͷϘτϧωοΫΛ ޮతʹ୳͔ͨͬͨ͠ • ॳݟͷʢͱ͍ͯʣWeb ΞϓϦέʔγϣϯΛ͞Εͯ
• ੍ݶ࣌ؒ8࣌ؒͰύϑΥʔϚϯενϡʔχϯά͍ͯͩ͘͠͞ • ͱ͍͏ڝٕ͕͋ͬͯɺRuby Ͱউ͍ͪͨ • ͦͷͨΊʹ Ruby ͷྑ͍ϓϩϑΝΠϥ͕΄͍͠
ͳΜ͔͔ͬͨؾʹͳΔ • Stackprof Ͱ࡞ͬͨ Flamegraph ΛݟΔ • ԣ͕͍ϝιουͷ࣮ΛݟͯΈΔ • ผʹͦΜͳʹͦ͏͡Όͳ͍……
• ͳΔ΄Ͳɺ1ճ͍͚Ͳɺͨ͘͞ΜݺΕͯΔ͚ͩͳͷ͔ʁ • Ͳ͏͢Ε͍͍Μͩʁʁ
ͳΜ͔͔ͬͨؾʹͳΔ • Flamegraph ΛݟΔ • ԣ͕͍ϝιουͷ࣮ΛݟͯΈΔ • ผʹͦΜͳʹͦ͏͡Όͳ͍…… • ͳΔ΄Ͳɺ1ճ͍͚Ͳɺͨ͘͞ΜݺΕͯΔ͚ͩͳͷ͔ʁ
• Ͳ͏͢Ε͍͍Μͩʁʁ ԿΘ͔ͬͯͳ͍ʂʂʂʂʂ
Ͳ͏͢Εྑ͘ͳΔ͔ • ϓϩϑΝΠϧࣗମ • Process/Thread ୯ҐͰऩूͯ͠ɺͦΕͧΕͷࣄͿΓΛݟ͍ͨ • CPU ΛͬͯΔ࣌ؒɺI/O ʹͬͯΔ࣌ؒΛਖ਼֬ʹѲ͍ͨ͠
• ϏδϡΞϥΠβ • ↑ ʹରԠ͍ͨ͠ • ελοΫʹݶΒͣɺҙͷΠϕϯτΛه͍ͨ͠ • HTTP ϦΫΤετͳͲ
ϓϩϑΝΠϧࣗମ • Process/Thread ୯ҐͰऩूͯ͠ɺͦΕͧΕͷࣄͿΓΛݟ͍ͨ • طଘͷ API (rb_pro fi le_frames())
GVL Λ͍࣋ͬͯΔ Thread ͷ ͜ͱ͚ͩڭ͑ͯ͘ΕΔ • ҙͷ Thread ͷใΛऔΕΔ৽ API ΛೖΕ͍ͨ (ruby/ruby#7784) • CPU ΛͬͯΔ࣌ؒɺI/O ʹͬͯΔ࣌ؒΛਖ਼֬ʹѲ͍ͨ͠ • Ruby 3.2 Ͱೖͬͨ hook (RUBY_INTERNAL_THREAD_EVENT_*) ͰͱΕΔ Ruby ʹඞཁͳػೳΛ͍ͯ͘͠
ϏδϡΞϥΠβ ڊਓͷݞʹ૬Γ͠Α͏ • ύϑΥʔϚϯεΛؤுͬͯΔਓ͕ͨͪྑ͍ͷΛ࡞͍ͬͯΔͣ • ؤுͬͯΔਓͨͪ = Firefox, Chrome ͷਓͨͪ
• ͜ΕΛ͍͍ײ͡ʹ׆༻Ͱ͖ͳ͍͔
Chrome ui.prefetto.dev
Firefox profiler.firefox.com
͍͢͝ • ϒϥβͰى͖͍ͯΔ͜ͱΛͯ͢ՄࢹԽͰ͖ΔҙࢥΛײ͡Δ • ͔͍͍ͬ͜ʂ • ศརͦ͏ʂ • ͷͰɺޓͳܗࣜͷϓϩϑΝΠϧΛ Ruby
Ͱग़ྗͰ͖ΔΑ͏ʹͨ͠
ϓϩϑΝΠϥΛࢼ࡞ͯ͠Έ͍ͯ·͢ https://github.com/osyoyu/pf2 • ඪʮใΛͰ͖Δ͚ͩूͰ͖ΔϓϩϑΝΠϥʯ • ϓϩϑΝΠϦϯά෦ rb_pro fi le_frames() API
Λͪΐͬͱ֦ு • (rb_thread_pro fi le_frames() (ruby/ruby#7784) ͕ͳ͍طଘͷ Ruby Ͱಈ͖·ͤΜ…… ͳͷͰϦϦʔεͯ͠·ͤΜ……) • ϏδϡΞϥΠβʹ Firefox Pro fi ler Λ࠾༻
ϓϩϑΝΠϥΛࢼ࡞ͯ͠Έ͍ͯ·͢ https://github.com/osyoyu/pf2 • ϓϩϑΝΠϦϯά෦ͷΞΠσΞ͕৽ͳΘ͚Ͱͳ͍ • rb_pro fi le_frames() API Λ֦ு͍ͯ͠Δ
• ϏδϡΞϥΠβʹ Firefox Pro fi ler Λ࠾༻
ྫ: Ϛϯσϧϒϩू߹Λฒྻܭࢉ • ڻҟతฒྻԽՄೳ (embarrassingly parallell) Β͍͠ • σʔλͷड͚͠ͱ͔͠ͳ͍͍ͯ͘ •
ΞϜμʔϧઌੜت • ͔͠͠ݱ࣮ • 1 thread 148.04 seconds 16 threads 147.94 seconds
ྫ: Ϛϯσϧϒϩू߹Λฒྻܭࢉ • ͦ͝·Έ͍ͨͳόʔ͕͍ͭͯΔ෦͕ Thread ͕ GVL Λ͍࣋ͬͯͯ ࣮ࡍʹܭࢉΛͰ͖͍ͯΔ෦
ྫ: Ϛϯσϧϒϩू߹Λฒྻܭࢉ ֓؍ɻࡶͳฒྻ࣮ͰɺͲͷΈͪҰ෦ͷεϨουʹܭࢉ͕ภΔ͜ͱ͕Θ͔Δ
Future work • ϦϦʔε • GitHub ʹҰԠஔ͍ͯΔ͚Ͳɺruby master ͰϏϧυͰ͖·ͤΜ •
rb_thread_pro fi le_frames() (ruby/ruby#7784) Λ Ϛʔδ·Ͱ͍͔ͬͯͳ͍ͱ͍͚ͳ͍ • ศརͳػೳͷՃ • ҙͷλΠϛϯάͰϚʔΧʔΛଧͯΔػೳ • ϒϥβͷ User Timings API (performance.mark) తͳΠϝʔδ • ͍͍ػೳืूத • Stackprof Ҏ֎ʹ༗ྗͳϓϩϑΝΠϥطʹ͍͔ͭ͋͘ΔͷͰɺ ৽͍͠ͷͱͯ͠ग़͖͔͢ߟ͍͑ͯΔ……